Common, Utils w mikroserwisowym świecie

1

@dargenn Definicji @Riddle nie da się spełniać w poważnym projekcie który przynosi pieniądze i żadna firma na świecie tego w ten sposób nie realizuje.
Udowdniłem to na podstawie Netflixa. Ale to samo łatwo wykazać na podstawie wielu innych firm jak stripe itd.

Pomijając już ten debilizm o tym, że jak masz testy integracyjne to przestaje być to mikroserwis. To po prostu takie podejście się nie skaluje. Bo nie możesz zrównoleglić wytwarzania mikroserwisów w projekcie jako, że łamie to definicje @Riddle o stabilności kontraktu.

Poza tym podoba mi się podejście jak coś nie jest mikroserwisem to jest monolitem xD. A tak na prawdę monolit też ma jasno określona definicje.

0
Schadoow napisał(a):

@dargenn Definicji @Riddle nie da się spełniać w poważnym projekcie który przynosi pieniądze i żadna firma na świecie tego w ten sposób nie realizuje.
Udowdniłem to na podstawie Netflixa. Ale to samo łatwo wykazać na podstawie wielu innych firm jak stripe itd.

Tylko że to co pokazałeś, to to że to co było nazwane "testy integracyjne" sprawdzały zgodność mikroserwisu z interfejsem. Nie uruchamiały dwóch mikroserwisów razem. Chyba że czegoś nie zauważyłem, to mi pokaż.

Schadoow napisał(a):

Pomijając już ten debilizm o tym, że jak masz testy integracyjne to przestaje być to mikroserwis. To po prostu takie podejście się nie skaluje. Bo nie możesz zrównoleglić wytwarzania mikroserwisów w projekcie jako, że łamie to definicje @Riddle o stabilności kontraktu.

No wręcz przeciwnie, bo właśnie cały zamysł mikroserwisów jest taki żeby się skalowało, żeby np 20 zespołów mogło niezależnie od siebie i równolegle wytwarzać 20 mikroserwisów, tak żeby nie wpływały na siebie. Czyli ja nie muszę wiedzieć co się dzieje w innym serwisie B, muszę tylko pamiętać żeby miał interfejs kompatybilnie wstecz.

Przy czym ja nie powiedziałem że interfejs się nie może zmienić - może. Tylko w sposób kompatybilnie wstecz, tak żeby nie nałożyć zależności na inny serwis.

Pomijając już ten debilizm o tym, że jak masz testy integracyjne to przestaje być to mikroserwis. nie wiem do dokładnie Ty masz na myśli mówiąc "testy integracyjne", ale powiem jeszcze raz co ja miałem na myśli - jeśli zmiana w innym serwisie sprawi że w moim coś się zepsuło (i przez to nie mogę go wdrożyć, albo muszę wprowadzić poprawkę), to to nie jest mikroserwis. Tyczy się to testów również.

Schadoow napisał(a):

Poza tym podoba mi się podejście jak coś nie jest mikroserwisem to jest monolitem xD. A tak na prawdę monolit też ma jasno określona definicje.

No okej, faktycznie może zbyt pochopnie użyłem słowa "monolit". Miałem na myśli to, że nie wystarczy rozbić aplikacji na różne procesy żeby mieć mikroserwis. Mikroserwis musi spełnić pewne kryteria - najważniejszym z nich jest to że musi być niezależnie deployowalny.

0

No to pare postów temu zadałem ci pytanie. A co jak ustalicie interfejs ale firma zapomni złożyć zamówienia u dostawcy ? Dowiadujecie się na produkcji dopiero, że drugiego serwisu do którego masz bić tam nie ma ? To jest mój prawdziwy przykład z życia.

0
Schadoow napisał(a):

No musisz dostarczyć feature XYZ, żeby go dostarczyć musisz wytworzyć 3 nowe mikroserwisy i zmodyfikować 2 inne. I teraz osoba odpowiedzialna za zamówienie tych 3 nowych mikroserwisów u tych firm zapomina zamówić jednego.
Może feature to złe słowo. Możliwość systemu do realizacji procesu X.

Jeśli faktycznie to są mikroserwisy, i chcesz wprowadzić zmiany w 5ciu z nich żeby umożliwić jakiś proces, to jeśli one nadal mają być mikroserwisami, to zmiany we wszystkich 5ciu mikroserwisach muszą być wprowadzone niezależnie od siebie. Czyli najpierw robimy deploy pierwszego skończonego, np #3, potem drugiego np. #1, potem powiedzmy mija dzień, dwa, tydzień i skończony jest #3, i też deploy, i potem powiedzmy #5 - i deploy. I potem za kolejny dzień, dwa, trzy, tydzień, miesiąc ostatni zespół kończy robić swoją część i robi deploy #4.

Oznacza to, że jeśli masz mikroserwisy, to nie możesz wymusić jednoczesnego release'u jakiegoś MS, one są releaseowane niezależnie od siebie. Oznacza to że część potrzebnych feature'ów na proces jest release'owana przed innymi.

Gdybyś chciał w jakiś sposób wymusić jednoczesny release, to znaczy ze nie możesz zreleaseować jednego z nich dopóki drugi nie będzie skończony, a to znaczy że nie masz niezależnego deploymentu, a to znaczy że nie masz MS.

0

No spoko opisałeś dokładnie tak jak to sie dzieje ale nie rozwiązuje to problemu, że jak ktoś zapomnie zamówić #3 to dowiesz się tego dopiero na produkcji.
Więć będziesz miał zdeployowany niepełny proces biznesowy. Przez bardzo długi czas.

0
Schadoow napisał(a):

No spoko opisałeś dokładnie tak jak to sie dzieje ale nie rozwiązuje to problemu, że jak ktoś zapomnie zamówić #3 to dowiesz się tego dopiero na produkcji.
Więć będziesz miał zdeployowany niepełny proces biznesowy.

Każdy jeden feature dodawany w mikroserwisach taki jest (jeśli dotyka więcej niż 1ego). To jest bezpośrednia konsekwencja niezależnego deploymentu. I to nie jest nic złego.

Co Ci przeszkadza że 4y z 5ciu mikroserwisów mają wprowadzoną zmianę i są na produkcji?

Jedyny powód czemu miałoby Ci to przeszkadzać, to jeśli coś nie działa tak jak powinno bo między serwisami są jakieś zależności (i np brak jednego, sprawia że w innych coś nie działa). Tylko że wtedy znowu nie mamy mikroserwisów, bo nie są niezależnie deployowalne.

0

Zastanawiam sie czy naprawdę tego nie widzisz.

Wyobrażasz sobie sytuację w której zostaje wprowadzony moduł płatności ale serwis do generowania i wysyłki faktur wejdzie dopiero za pół roku ? Bo ktoś "zapomniał". Przecież to by zwinęło firmę.

0
Schadoow napisał(a):

Wyobrażasz sobie sytuację w której zostaje wprowadzony moduł płatności ale serwis do generowania i wysyłki faktur wejdzie dopiero za pół roku ? Bo ktoś "zapomniał". Przecież to by zwinęło firmę.

Mylisz interfejs programistyczny z wymaganiami biznesowymi.

Niezależny deployment w mikroserwisach mówi o technicznej możliwości wdrożenia dwóch mikroserwisów niezależnie od siebie. Nie mówi nic o tym czy klienci/userzy/osoby decyzyjne faktycznie będą chciały wdrożyć te zmiany w takiej czy innej kolejności.

Z punktu widzenia programistycznego - jeśli coś jest mikroserwisem - musi być możliwość wprowadzenia systemu płatności najpierw, a dopiero za pół roku wystawiania faktury i wysyłki. Mało tego - z punktu widzenia mikroserwisów powinno się dać móc najpierw dodać "wyloguj" zanim będzie "zaloguj". Ale czy to znaczy że osoba podejmująca decyzje o featureach musi wdrożyć te dwie zmiany w takiej czy innej kolejności? Nie.

(Już nie mówiąc o tym, że możesz robić rożne tricki, tak żeby deploy nie był ryzykowny - np. wprowadzić system płatności, ale nie udostępnić żadnych towarów które da się kupić - wtedy nikt nie dokona płatności, i nie ma problemu).

A poza tym - jeśli faktycznie istnieje takie wymaganie biznesowe - "Ma się dać wykonać płatność, tylko wtedy kiedy da się wysłać paczkę i wystawić fakturę", to to powinno zostać wzięte pod uwagę przy budowaniu systemu płatności, żeby jakoś to ohandlować - jak nie pozwolić dokonać płatności bez wysyłki paczki, i to należy ohandlować w ramach serwisu płatności; jeśli jest faktycznie takie wymaganie. Albo powinno zostać wbudowane jakieś zabezpieczenie, typu najpierw jest próba dodania paczki, potem płatność, potem accept nadania paczki. Ewentualnie powinna być zakodzona opcja zwrotu kasy, jak nie uda się paczki wysłać. Wszystko to są różne mechanizmy dające nam niezależny deploymnet.

Podsumowanie

W skrócie, jeśli chcesz mieć mikroserwis - to każdy z tych mikroserwisów ma się dać móc wdrożyć niezależnie od innych.

  • jeśli chcesz odpalić testy na innych - nie masz niezależnego deploymentu (bo deployment zależy od tego czy testy przejdą z innym mikroserwisem)
  • jeśli chcesz zrobić release kilku ms na raz - nie masz niezależnego deploymentu (bo deployment zależy od czasu skończenia innych mikroserwisów)
  • jeśli twój ms nie działa poprawnie z innym mikroserwisem, więć musisz wprowadzić poprawke - nie masz niezależnego deplomentu (bo deploy innego zepsół coś w Twoim).

a jak nie masz niezależnego deploymentu, to nie masz mikroserwisów (tylko coś innego).

0

Czyli tak:

  • mamy serwisy zombi które generują koszty
  • mamy serwisy które pchają w ciul alertów, że nie mogą dobić się do jakiegoś serwisu
  • mamy ogromne opóźnienia bo zamiast walidować zwinnie tematy biznesowe (i chociażby czy o niczym nie zapomnieliśmy) to dowiadujemy sie dopiero przy pierwszym pełnym uruchomieniu procesu na produkcji
  • i najważniejsze pierwsza walidacja systemu jest na produkcji.

Widzisz, że zrobiłeś z tego waterfalla ?

Ja osobiście jakbym miał rozdzielać zadania i tworzyć wymagania pod taki system to bym sie mega bał wdrażać coś nowego.

0
Schadoow napisał(a):
  • mamy serwisy zombi które generują koszty

Nikt Ci nie każde mieć serwisów zombie - nie chcesz, to je wyłącasz. A ponieważ to jest mikroserwis, to żaden inny serwis od niego nie zależy, więc możesz bez problemu go położyc.

Schadoow napisał(a):
  • mamy serwisy które pchają w ciul alertów, że nie mogą dobić się do jakiegoś serwisu

Nic w architekturze MS nie mówi o żadnych alertach. Jeśli sobie je dodałeś (Albo ktoś inny je dodał), to możesz albo je wyłączyć, albo zignorować, albo napisać swoje MS tak żeby nie rzucały tych alertów jak się nie mogą gdzieś dobić.

Cokolwiek co Ci przeszkadza w alertach - sam sobie to dodałeś, bo nic w MS nie mówi że alerty mają być gdziekolwiek.

Schadoow napisał(a):
  • mamy ogromne opóźnienia bo zamiast walidować zwinnie tematy biznesowe (i chociażby czy o niczym nie zapomnieliśmy) to dowiadujemy sie dopiero przy pierwszym pełnym uruchomieniu procesu na produkcji
Schadoow napisał(a):
  • i najważniejsze pierwsza walidacja systemu jest na produkcji.
Schadoow napisał(a):

Widzisz, że zrobiłeś z tego waterfalla ?

To pozwól że podsumuję:

  • Ja mówię, że żeby coś było mikroserwisem, to musi być niezależnie deployowalne, więc zmiany należy wprowadzić niezależnie od siebie, jak tylko będą gotowe (co znaczy że część zmian może wejść dzisiaj, część później, a część za miesiąc). Więc znaczy to, że faktycznie ten "cały proces" o którym mówisz można go doświadczyć dopiero jak ostatni element będzie skończony - no jakby siłą rzeczy, ale część procesu można już sprawdzać od razu jak tylko się pojawi, czyli np po kilku dniach, bez czekania na ostatni element układanki.
  • Ty mówisz, że można to wdrożyć dopiero jak wszystkie będą gotowe i będzie można je przetestować razem, dobrze rozumiem? Czyli rozumiem że jak ostatni element będzie gotowy dopiero za miesiąc, to za miesiąc go wdrażamy, tak?

I mówisz że to podejście które opisałem z mikroserwisami jest waterfallem i nie agile?

Schadoow napisał(a):

Ja osobiście jakbym miał rozdzielać zadania i tworzyć wymagania pod taki system to bym sie mega bał wdrażać coś nowego.

Czy się bać czy nie - ja bym się nie bał, dlatego że każdy z tych mikroserwisów jest zbudowany tak, żeby był niezależy od innych. Więc zmiana w jednym, nie zepsuje niczego w innym. Co do wymagań biznesowych - mikroserwisy powinny być dopasowane do bounded contextu, więc większość z nich siedzi w ramach pojedynczego mikroserwisu. Rzadko się zdarza sytuacja że wymagania biznesowe rozpościerają się na kilka mikroserwisów, a na pewno nie na aż 5; dlatego napisałem w poście wyżej że to jest raczej hardcore'owy przypadek.

Przy czym myślę że ostatecznie mówimy o różnych rzeczach. Ja mówię o architekturze mikroserwisów, która ma pewną konkretną definicję - np to że mikroserwisy muszą być niezależnie deployowalne - i mówię jakie to ma konsekwencje (np to że nie można ich przetestować razem).

Ty mówisz, jak rozumiem, o czymś innym - mówisz o swoim projekcie, albo o swoich wyobrażeniach czym mikroserwis może być. Może masz wyobrażenie jak niektóre serwisy mogłyby wyglądać, i nie gra Ci to z tym o czym ja mówię.

Może myślisz o serwisach, które mają zależności (więc głupotą jest ich nie testować razem). Może myślisz o serwisach które nie pasują do bounded context (więc ciężko jest wprowadzić zmiany tylko w jednym z nich), możę myślisz o serwisie który ma niestabilne interfejsy (więc ciężko jest wprowadzić zmianę niezależnie od innych). Tylko że jeśli myślisz o takich projektach - to to nie są mikroserwisy.

A ten argument, że waterfall i agile - nadal do mnie nie trafia. Przecież z mikroserwisami możemy zebrać feedback jak to tylko możliwe. Jak tylko pierwszy z mikroserwisów jest skończony, to trafia na produkcję - wszyscy którzy tworzą pozostałe mikroserwisy to widzą. Od razu mają feedback. Potem drugi mikroserwis jest skończony, i też trafia na produkcję - i od momentu kiedy jest to gotowe, to jest deployowane. Więc feedback jest najszybciej jak się da.

Pisałeś że to co ja proponuję to jest waterfall, a tymczasem nie widzę czemu to miałby być waterfall, bo nie widzę żeby cokolwiek co ja proponuję powodowało jakiś zastój - upubliczniamy gotowe rozwiązania jak tylko są gotowe, tak szybko jak to możliwe. Owszem - "finalny" proces, o którym mówisz będzie dostepny dopiero jak ostatni element będzie skończony; ale przecież dokładnie to samo byś miał bezmikroserwisów - też widziałbyś finalny proces dopiero jak ostatni element będzie skończony.

0
yarel napisał(a):

Build, release i deploy to są różne rzeczy. Tak, tak samo jako jabłko, słoik z podsmażonym jabłkiem i szarlotka. Nie każde jabłko nadaje się do podsmażenia (choć to pewnie kwestia indywidualna ;-) )
Podobnie, nie każdy słoik z jabłkiem nadaje się do produkcyjnego użycia (np. nie sprawdziliśmy szczelności słoika; ponownie kwestia indywidualna). Szarlotka ze sfermentowanym jabłkiem pewnie znajdzie swoich amatorów. Podobnie jak sfermentowane ryby, czy piwo z mewy.

Czym różni się budowanie obrazu dockera od budowy dowolnego innego artefaktu, że należy określać to budowanie innym słowem?

Jeśli zreleasowałem nową wersję serwisu, to znaczy, że wrzuciłem go na produkcję, czyli zdeployowałem. To są synonimy, myślę, że nie tylko dla mnie.

Ile kosztuje wypuszczenie komponentu, który wywali produkcję? $$$, reputacji, czasu, zdrowia. Skoro można zmniejszyć ryzyko takich kosztów, przez użycie automatów, to dlaczego tego nie robić?
W imię nazewnictwa?

Nie pisałem nic o tym, żeby wypuszczać na produkcję nieprzetestowany system. Testowanie jest dla mnie tak oczywiste, że w ogóle nie poruszam tego tematu.

Pytanie dotyczyło czemu tworzyć zależności powodujące, że jakiś serwis wymusza równoczesny deployment innych serwisów? Bo jakoś nie umiem znaleźć sensu dla takiej straty czasu i prądu, no chyba, że połączenia między serwisami nie są w żaden sposób wersjonowane. Ale to by przecież nie przeszło w firmie, która ma mikroserwisy, CI/CD i w ogóle jakąkolwiek kulturę inżynierską.

Nie twierdzę, że istnieje jedyna słuszna dla wszystkich strategia, a jedynie oceniam jako nonsens nazywanie czegoś mikroserwisem, bądź nie (w zależności od przyjętej strategii dostarczania zmian na produkcję). Rozumiem też podejście typu "nic mnie nie obchodzi, żyję w swoim silosie i jest mi z tym dobrze".

Jesteś świadomy tego, że ja i @Riddle to dwie różne osoby, i ja po prostu zadałem konkretne pytania odnośnie konkretnych tez, które tutaj postawiłeś? Całość mojego posta była kompletnie niezwiązana z jakimkolwiek testowaniem czy kłóceniem się o to czym są, a czym nie są mikroserwisy.

0

Pisałeś że to co ja proponuję to jest waterfall, a tymczasem nie widzę czemu to miałby być waterfall

Bo jako klient dopiero widzę finalny proces na produkcji a w przypadku stagingu i integracji rozwiązań częściowych których nie można wdrożyć na produkcje mógłbym widzieć też rozwiązania częściowe i jeżeli stwierdze, że popełniłem błąd przy specyfikacji to mogę wstrzymać proces redukując koszty.

I nie, nie piszę o swoim projekcie. Tylko traktuje wartość biznesowa na pierwszym miejscu. I biorę pod uwagę czynnik ludzki. Twój przypadek działa tylko i wyłącznie jeśli w całym procesie ludzie są nieomylni. W każdym innym przypadku generuje koszta. A złe decyzje generują największe a w twoim przypadku walidacja tych rzeczy jest przesunięta w czasie. Czyli w przypadku popełnienia błędu przez biznes idzie w pizdu worek siana :v.

0
Schadoow napisał(a):

Pisałeś że to co ja proponuję to jest waterfall, a tymczasem nie widzę czemu to miałby być waterfall

Bo jako klient dopiero widzę finalny proces na produkcji a w przypadku stagingu i integracji rozwiązań częściowych których nie można wdrożyć na produkcje mógłbym widzieć też rozwiązania częściowe i jeżeli stwierdze, że popełniłem błąd przy specyfikacji to mogę wstrzymać proces redukując koszty.

No i to samo możesz zrobić z mikroserwisami. Po wdrożeniu drugiego możesz stwierdzić że chcesz wstrzymać koszty, rollbackujesz dwa już wdrożone z proda i nie tworzysz kolejnych.

Schadoow napisał(a):

I nie, nie piszę o swoim projekcie. Tylko traktuje wartość biznesowa na pierwszym miejscu. I biorę pod uwagę czynnik ludzki. Twój przypadek działa tylko i wyłącznie jeśli w całym procesie ludzie są nieomylni. W każdym innym przypadku generuje koszta.

Nope. Nic takiego nie jest wymagane. Ludzie normalnie popełniają błędy, i to jest normalne.

Poza tym - ja nigdzie nie powiedziałem że podejście z mikroserwisami jest dobre. Moim zdaniem jest średnie i go nie polecam (działa tylko dla bardzo dużych projektów). Prezentuję tylko co byłoby wymagane gdyby ktoś chciał je wdrożyć.

Schadoow napisał(a):

A złe decyzje generują największe a w twoim przypadku walidacja tych rzeczy jest przesunięta w czasie. Czyli w przypadku popełnienia błędu przez biznes idzie w pizdu worek siana :v.

Zechesz mi wyjaśnić w jaki sposób konkretnie? Bo wziąłeś ten pomysł nie powiem skąd.

W Twoim przypadku: praca jest zaczęta, trwa, ludzie ją rozwijają, w pewnym momencie kończona jest cała, wrzucana jest na stage i potem na proda.

W podejściu o którym ja mówię jedyna różnica jest taka, że to co jest już skończone trafia na proda (od razu jak jest gotowe, a nie wtedy kiedy wszystko jest gotowe). Czyli tak na prawdę jedyna różnica polega na tym, że niektóre elementy są wdrożone wcześniej.

Jak to miałoby generować dodatkowe koszta konkretnie?

Podsumowanie

Jeśli miałbym jakoś zanalizować Twoją postawę, to to wygląda tak, że masz jakieś (najpewniej mylne) przekonanie czym mikroserwisy są, i próbujesz go bronić. Ale nie bierzesz pod uwagę że mikroserwisy mają pewną konkretną definicję, która nie specjalnie jest otwarta na debatę. I takim kryterium jest to że: mikroserwis musi być deployowalny niezależnie od innych, czy Ci się to podoba czy nie.

  • chcesz mieć niezależne deploye? super, pisz tak aplikacje, i możesz mówić że masz MS
  • nie podoba Ci się idea niezależych deploy'ów? też super, nikt Ci nie każe - rób projekt jak chcesz. Ale nie masz wtedy MS, tylko coś innego.
  • uważasz że MS jest słabe i nie działa? masz takie prawo, nie będę się kłócił że to jest dobre - sam uważam że takie podejście jest bardzo trudne, bardzo kosztowe, i opłaca się tylko w dużych projektach
  • twierdzisz że można mieć mikroserwis bez niezależnych deployów? no to jeśli tak, to niestety się mylisz.
0

W Twoim przypadku: praca jest zaczęta, trwa, ludzie ją rozwijają, w pewnym momencie kończona jest cała, wrzucana jest na stage i potem na proda.

No nie.

W moim casie widzę zmiany na stagu codziennie/ co sprint a w twoim na koniec kontraktu.

0
Schadoow napisał(a):

W moim casie widzę zmiany na stagu codziennie/ co sprint a w twoim na koniec kontraktu.

To co w takim razie przeszkadza żeby widzieć zmiany codziennie na produkcji/na stagingu w przypadku MS?

Stary powiem jeszcze razy : mój cały postulat jaki mówię to: DEPLOYE MAJĄ BYĆ NIEZALEŻNE OD SIEBIE, i nic więcej. W jaki sposób to że aplikacje mają niski coupling ma Ci przeszkadzać w czymkolwiek?

0

Nie ty nie mówisz, że maja być nie zależne od siebie. Tylko mówisz, że jeżeli istnieje jakiś test integracyjny na kroku deploymentu to nie są to MS.

0
Schadoow napisał(a):

Nie ty nie mówisz, że maja być nie zależne od siebie. Tylko mówisz, że jeżeli istnieje jakiś test integracyjny na pre-stagu to nie są to MS.

Nom. I czemu to miałoby znaczyć że nie można ich codziennie wrzucać na staging? Można.

Możesz sobie wrzucać MS na jakie tylko środowisko, jak często chcesz.

0

To nie była odpowiedz na deploy na proda.

Wyobrażasz sobie wdrożyć na produkcje proces przyznawania kredytu który jest niepełny tzn zawsze zwraca "przyznaj" ?

0
Schadoow napisał(a):

Wyobrażasz sobie wdrożyć proces przyznawania kredytu który jest niepełny tzn zawsze zwraca "przyznaj" ?

Znowu mieszasz interfejs programistyczny z wymaganiami biznesowymi.

Więc powiem Ci drugi raz - po pierwsze, jeśli na prawdę miałbyś MS, to one powinny być dopasowane do bounded context, czyli idealnie powinien być jeden ms który podejmuje decyzje czy dać kredyt czy nie - nie potrzebujesz wrzucać dwóch (jeśli potrzebujesz, to najpewniej serwisy są źle zrobione odpoczątku - w 90% przypadków).

A po drugie - nawet jeśli masz faktycznie konkretny dobry powód, żeby zrobić to w dwóch - to TAK, jaknajbardziej ma być programistyczna możliwość wdrożenia procesu który na każdy kredyt zawsze daje "przyznaj". Z progromistycznego! To czy biznes będzie chciał wdrożyć taką zmianę, to jest inna bajka.

Schadoow napisał(a):

Nie ty nie mówisz, że maja być nie zależne od siebie. Tylko mówisz, że jeżeli istnieje jakiś test integracyjny na kroku deploymentu to nie są to MS.

Dobrze - masz ten test integracyjny na stagingu. Wrzucasz swój serwis A testujesz go samego. Testy przechodzą. Testujesz go teraz razem z serwisem B. Testy failują - co robisz? Rollbackujesz albo poprawiasz? Bo jeśli rollbackujesz - to znaczy dum, dum, dum że Twój serwis zależy od innego, a skoro tak to nie jest niezależnie deployowalny, a skoro tak to to nie jest MS. Nie wiem do końca jaka to jest architektura, ale na pewno nie mikroserwisy. To wtedy jest coś innego.

Ale czy to źle? No nie jest to nic złego, różne są architektury. Po prostu to nie jest Ms.

Wiem że jest straszny hype na słowo "mikroserwis", i nagle wszyscy programiści stwierdzili że albo muszą robić mikroserwisy, albo nie są poważnymi programistami - ale to jest bullshit. Najlepszy programista dobiera rozwiązanie odpowiednie dla programu który robi, i 95% przypadków projektów nie wymaga mikroserwisów - dodawanie ich dlatego że jest hype jest nieodpowiedzialne.

0

Rollbackujesz albo poprawiasz?

Ale czemu zakładasz, że problem jest w serwisie A ?

Testuje go razem z B. Widzę, że B działą niezgodnie z założeniami biznesowymi. Wstrzymuje wdrożenie serwisu A, zgłaszam błąd w zespole odpowiedzialnym za serwis B.
I albo czekam na poprawę w serwisie B albo szukam workarounda aby nie uzywać elementów z serwisu B które powodują błąd.

I teraz za B podstaw np storage i wyjdzie ci, że bum bumb bum według twojej definicji nie istnieje MS.

0
Schadoow napisał(a):

Rollbackujesz albo poprawiasz?

Ale czemu zakładasz, że problem jest w serwisie A ?

Testuje go razem z B. Widzę, że B działą niezgodnie z założeniami biznesowymi. Wstrzymuje wdrożenie serwisu A, zgłaszam błąd w zespole odpowiedzialnym za serwis B.
I albo czekam na poprawę w serwisie B albo szukam workarounda aby nie uzywać elementów z serwisu B które powodują błąd.

No wszystko super, bardzo fajny proces, popularny, prosty, dobry do większości projektów.

Ale to nie są mikroserwisy! To jest inny rodzaj architektury.

Schadoow napisał(a):

I teraz za B podstaw np storage i wyjdzie ci, że bum bumb bum według twojej definicji nie istnieje MS.

Tzn.? Jak podstaw storage? Że niby np. sam postgres miałby być mikroserwisem? Czemu? 😐 MS mają być dopasowane do bounded context, czyli mikroserwis powinien pasować do jakiegoś rejonu domeny biznesowej (i zazwyczaj każdy MS ma osobny storage, jeśli masz na myśli takie coś jak postgres albo s3, chyba że masz na myśli coś innego pod słowem "storage", to wyjaśnij. Bardzo nieprecyzyjnie się wyrażasz, że nie wiem o co Ci chodzi w ogóle).

0

Że niby np. sam postgres miałby być mikroserwisem? Czemu? :|

A czemu nie ? Czym się różni taki posgtres od serwisu do odczytu danych napisanych przez ciebie?
Czy jak napiszę serwis który na podstawie zapytania wyciąga mi dane z pliku binarnego (ale wydajniej) to będzie serwis ale jak juz wrzuce ten plik do postgresa i bede pytał po sql to juz nie jest ?

Sam postgres może wystawiać REST API do modyfikacji może mieć autoryzacje i authentykacje ba można nawet mieć graphql api generowane automatycznie. Ale nie chodziło mi o postgresa to ty wspomniałeś o nim.

A już s3 IMO jest pełnoprawnym serwisem.

Ba czym się różni odpytanie postgresa o dane użytkownika od odpytania CRM'a Jezeli ofc miescisz si w bounded-contekście. Nie chce poruszać tego drugiego tematu.

0

@Schadoow Co Ty ode mnie chcesz? Do czego prowadzi ta rozmowa?

Ja Ci tylko mówię: żeby móc powiedzieć że masz mikroserwisy - musisz mieć niezależy deployment.

0

Ja od ciebie nic, bije cie ktoś jak nie odpiszesz ?

A ja, że niezależny deployment nie oznacza braku zależnych testów bo testami jednego serwisu nie zapewnisz poprawności biznesowej produktu.

0

A już s3 IMO jest pełnoprawnym serwisem.

Pisząc testy do serwisu, którzy używa s3, używasz prawdziwej s3, czy jakichś mocków/replayów?

0
Schadoow napisał(a):

A ja, że niezależny deployment nie oznacza braku zależnych testów bo testami jednego serwisu nie zapewnisz poprawności biznesowej produktu.

Testami jednego nie.

Ale testami wszystkich oddzielnie, i dopasowaniem do interfejsu już tak (jeśli interfejsy są kompatybilne wstecz, i ich deploye nie są zależne od siebie).

Wyobraź sobie że piszę chcę wyciągnąć drugą linijkę z pliku, i znaleźć w niej słowo. Piszę więc taką komendę w bashu:

cat file.txt | head -n 2 | tail -n 1 | grep foo

Czy muszę testować programy cat, head, tail i grep razem żeby się upewnić że mój proces działa? Czy może wystarczy że przetestuję cat osobno, head osobno, tail osobno i grep osobo, i sprawdzę czy ich interfejsy pasują do wyjść standardowych? Są różne sposoby. Jeśli przetestujesz je razem, to masz jedną architekturę - jeśli osobno to masz inną. Podobnie jest z MS. Jeśli testujesz serwisy razem np na stage'u, to masz jakąś architekturę - ale to nie są mikroserwisy.

Więc w zupełności da się zapewnić poprawność produktu.

PS: Przy czym to jest gorszy przykład, bo te programy są general-purpose, a mikroserwisy są z reguły dedykowane pod jeden konkretny cel, więc będą jescze bardziej cohesive, więc da się to zrobić jeszcze lepiej.

0

Ale co ci po tym że osobno cat, head, tail i grep działa poprawnie skoro biznes chciał otrzymać bar a ty dostarczyłeś foo.

jeszcze raz tu nie chodzi o pomyłki z cyklu coś nie działa poprawnie z punktu programisty. Tylko produkt jest błędny z punktu widzenia biznesowego. I ten błąd mógł wkraść sie na wielu aspektach.

Poza tym nie przetestowałes |.
Nie przetestowales czy ma uprawnienia do pliku file.txt
Nie przetestowałes czy zwrotka jest w oczekiwanym czasie.
Nie przetesowałes jak to zachowa się pod obciążeniem. I co pierwsze padnie i na co trzeba uważać.
W oparciu o jakie metryki skalować.
Itd.

A i chyba najważniejszy problem jak zapewnisz brak problemu "broken pipe". Tu przykład gdzie yes | head odpalone w terminalu dziala poprawnie a w skrypice wywala bład https://www.fosslinux.com/113819/dealing-with-the-dreaded-broken-pipe-error-in-linux.htm

0
Schadoow napisał(a):

Ale co ci po tym że osobno cat, head, tail i grep działa poprawnie skoro biznes chciał otrzymać bar a ty dostarczyłeś foo.

jeszcze raz tu nie chodzi o pomyłki z cyklu coś nie działa poprawnie z punktu programisty. Tylko produkt jest błędny z punktu widzenia biznesowego. I ten błąd mógł wkraść sie na wielu aspektach.

No to teraz jestem absolutnie przekonany żę nie masz pojęcia czym są mikroserwisy.

Z mojej strony EOT.

1 użytkowników online, w tym zalogowanych: 0, gości: 1