Komunikacja dwóch mikroserwisów z Symfony Messengerem

https://gildia-developerow.pl/komunikacja-dwoch-mikroserwisow-z-symfony-messengerem/ ()

W poprzednim wpisie zajmowaliśmy się tematem przetwarzania asynchronicznego wiadomości za pomocą komponentu Symfony Messenger. Czy wiecie, że Messenger służy również do komunikacji dwóch serwisów ze sobą? Nie? No to zaraz się dowiecie ( ͡º ͜ʖ͡º)

Tagi: #programowanie, #naukaprogramowania i #programista15k w #programowanie, #symfony, #architektura, #mikroserwisy
CppPolska - Komunikacja dwóch mikroserwisów z Symfony Messengerem

https://gildia-dev...

źródło: neom-s0A8sa9oasY-unsplash-scaled

Pobierz
Czytam długo o stateful vs stateless microservices i dalej nie czaję tematu i mam wrażenie, że każdy w google pisze co innego.

Jak mam koszyk w sklepie internetowym i dodaje produkty to mikroserwis, gdzie mamy endpoint /cart/addItem POST i zapisujemy w bazie koszyk jest stateless czy stateful? Bo teoretycznie w tym poscie wysyłamy id koszyka, które już wcześniej otrzymaliśmy z endpointa (więc kolejne requesty polegają na poprzednich) oraz produkty, a z drugiej
Piszę sobie taki projekt do zarządzania kinem i zastanawiam się jak ugryźć rezerwacje miejsc jeśli chodzi o moduły. Wymyśliłem na razie coś takiego, że moduł do rezerwacji pyta moduł katalogu (filmy, seanse, miejsca) o szczegóły miejsca (w kontekście rezerwacji interesuje mnie tylko czy miejsce jest dostępne i czas do seansu), po udanej rezerwacji publikuje event, że miejsce zostało zarezerwowane i moduł katalogu musi obsłużyć ten event i zmienić status miejsca na zajęte.
@Nofenak Wygląda na to że model który aktualnie posiadasz jest nieoptymalny. Moduł od rezerwacji powinien być źródłem wiedzy na temat rezerwacji konkretnego miejsca na konkretne wydarzenie. Pobieranie informacji o wolnych miejscach oraz zmiana ich statusu powinny korzystać z tego modułu. Miejsce na sali jest wtedy agregatem, który należy do bounded contextu rezerwacji i który pilnuje spójności danych wokół konkretnej rezerwacji. Wtedy ten agregat posiada referencję do wydarzenia z modułu katalogu. Katalog może
W jaki sposób dzielić aplikację na moduły (modularny monolit) lub mikroserwisy w optymalny sposób? Wiem, że jest to związane z bounded contextem czy domeną jak zwał, tak zwał, ale szukam konkretnych wskazówek i przykładów. Takie 2 głównie problemy jakie widzę, to raz, żeby nie skończyć z rozproszonymi monolitem czyli sytuacją kiedy każdy moduł/mikroserwis ściśle zależy od całej reszty i muszą być wdrażane jednocześnie, a 2 żeby też nie zrobić za dużych modułów/mikroserwisów,
Nie ma złotej rady, czy idealnego granicy, dzieł tak i tak to bedzie dobrze. Bylem na szkoleniu DNA na kilku warsztatach z Sobótka, przeczytałem książkę która bardzo polecam
Learning Domain-Driven Design ta z małpką
Pracuje z kodem który jest bardzo poprawnie napisany (przyszedłem jak już był taki) jako modularny monolit.
Szkolenia i książka dużo mi daly, ale nie oznacza to że bez problemu teraz destyluje agregaty idealnie.
Siema mirki programiści! ( ͡° ͜ʖ ͡°)

Chciałbym się trochę podszkolić w pewnej rzeczy - aby zacząć robić bardziej modułowe aplikacje, a nie monolity. Zacząłbym od backendu. Czytałem trochę o architekturze mikroserwisów - wydaje się to ciekawę. Mógłbym np rozdzielić hipotetyczną aplikację dajmy na to - na 4 mniejsze serwisy: autoryzacja userów, produkty, zamówienia, płatności. I kilka pytań:

1) Jak wygląda sprawa autoryzacji? Np do mikroserwisu wysyłam żadanie
Go Micro jako baza do apki opartej o mirkoserwisy (tfu...mikroseriwsy)

Brakuje dobrego tutka na start, dlatego jeżeli ktoś chciałby coś fajnego napisać, chętnie postaram się przeprowadzić przez start i będzie dobra baza na szybki wpis ;)

Sam z tym działam aktualnie. Platforma zapowiada się naprawdę ciekawie.

https://micro.dev

Kto używa: https://micro.dev/users

#go #goland #mikroserwisy #programowanie

Jak coś, to Discord: https://discord.flameit.io
#programowanie #mikroserwisy

Czy i gdzie powinny być walidowane dane pomiędzy mikroserwisami?

Uczę się pisząc apkę (MERN i takie tam), z założenia architektura oparta o mikroserwisy. Pytanie moje brzmi - tak ogólnie czy i gdzie powinny być walidowane dane przesyłane w wiadomościach pomiędzy mikroserwisami?

W moim przypadku jeden mikroserwis A to UI, gdzie użytkownik wprowadza dane, i powiedzmy na razie jeden mikroserwis B który odpowiada za jakąś część logiki biznesowej ze swoją bazą
@Wegrzynski: Dane powinny być zawsze weryfikowane.
Poza tym nie zawsze jesteś w stanie dokonać pełnej walidacji bez np. sięgania do bazy (np. sprawdzając unikalność wartości) więc lepiej zrobić walidację w serwisie B i zwracać błędy do A, który potem wyśle je do klienta.
Więc zrób walidację wstępną w A (poprawność wartości, długość, brak pustych itp.).
A w B zrób pełną walidację.
@Wegrzynski: w sumie ten twój mikroserwis to architektura restowa, i powinieneś sprawdzać na 3 poziomach. Frontend (UX friendly jest instant feedback, że email nie jest w formacie, data jest zła itp). Dalej na poziomie API (kontroler/serwis, gdzie tam framework każe) i zwrócić co jeszcze nie pasuje backendowi, jeśli nie pasuje. No i trzeci poziom to baza, bo nie chcesz (bardzo nie chcesz) mieć złych danych w bazie.
#programowanie #mikroserwisy
Ogólnie mirki mam pytanie. Tyle się mówi, że mikroserwis powinien być niezależny itp itd. To ja się zastanawiam jak mój mikroserwis, który dajmy na to pobiera dane z zewnetrznych api i zapisuje je do bazy ma być niezależny? Jeśli używam do tego bazy relacyjnej to w przypadku kiedy w odpowiedzi z api coś się zmieni i bedzie to wymagało zmian w bazie danych to te zmiany bede musiał również zaadaptować
#programowanie #mikroserwisy #java
Czy jak w projekcie używacie mikroserwisów to czy każdy z nich ma osobną bazę danych? Słyszałem, że tak to powinno wyglądać, ale nie bardzo potrafię sobie wyobrazić w jaki sposób ma to działa jak mikroserwisy są w jakimś tam stopniu ze sobą powiązane. Na przykład:

1. Jeden serwis odpowiedzialny za płatności, a druga za zamówienia. Ale w zamówieniach mam relacje do płatności, więc w zamówieniach będę miał tabele ORDER
@Patres:
1. Tak, można użyć jakiegoś globalnego identyfikatora.
2. Tak, ale nie będą mieć takich samych danych, bo działają w innym kontekście. Przykładowo tabela 'Teacher' w serwisie do generowania planu lekcji będzie miała identyfikator i jakieś godziny dostępności, a w drugiej tabeli będzie ten sam identyfikator i jego dane personalne, kontaktowe itp.

Jak mikroserwisy współdzielą te same źródło danych, to masz do czynienia zwykle z big-ball-of-mud i ktoś źle wydzielił granice
@Patres: ten współdzielony identyfikator nie może być oparty o sekwencyjnosc, najczęściej się jakiegoś uuid uzywa. Zapisując dane w jednym serwisie musisz mieć gwarancję, że zostaną też zapisane dane w innym serwisie. Można to zrobić bez klucza - poszukaj hasła eventual consistency.
(dłuższy wpis) 4 filary aplikacji mikroserwisowych z perspektywy Kubernetes

1) Komunikacja

W monolitycznych aplikacjach działających w pojedynczym procesie komponenty wywołują się nawzajem za pomocą metod na poziomie języka programowania lub wywołań funkcji.

Mogą być one silnie powiązane, jeśli tworzysz obiekty z kodem (na przykład new Class()) lub mogą być wywoływane w sposób rozłączony, jeśli używasz wstrzykiwania zależności, odwołując się do abstrakcji (np. IMyInterface), a nie konkretnych wystąpień obiektów. Tak czy inaczej, obiekty
dnaprawa - (dłuższy wpis) 4 filary aplikacji mikroserwisowych z perspektywy Kubernete...

źródło: comment_1642668940YoJnXpBI6gQZnplMepMOfx.jpg

Pobierz
@alex-fortune: Możesz bez problemu wysyłać requesty http i dalej iść z kodem - no fizycznie owszem, możesz, ale w praktyce tak się nie robi przy mikroserwisach. Jeśli wysyłasz HTTP request to czekasz na odpowiedź, bo chcesz mieć rezultat. Ale wtedy czy mikroserwisy mają sens? :)
Mireczki szukam szukam i nie mogę znaleźć.
Mam aplikację spring bootową z cachem hazelcast (Embedded Cache per instancja które gadają ze sobą bez żadnego near cache) i potrzebuję uzyskać metrykę miss ratio (jak czegoś nie znalazło w cache).
Aktualnie mam jedynie hit.
Opcję StatisticsEnabled na true przy tym cache mam ustawioną, mimo to ciągle w metrykach jest tylko hit a brak miss.

#programowanie #naukaprogramowania #spring #programista15k #java #mikroserwisy #hazelcast #metryki
@zibizz1: i oczywiście zgadzam się ze stwierdzeniem, że na start to modularny monolit, który łatwiej ewoluuje przy poznawaniu domeny, nie przysparza problemów mikroserwisowych zwłaszcza w fazie PoC/MVP a pozwala już dzielić składowe systemu, które potem można przerobić na mikroserwisy, jeśli zajdzie taka potrzeba. Start od mikroserwisów to masturbacja architektoniczna
Programisty 15k, sprawa jest.
W ciagu 2 dni mam techniczne interview. Widze ze rekruter troche owijal w bawelne z wymaganiami ale kiedy podal linka do firmy zobaczylem ze wymagaja AWS.
Wiec musze ogarnac temat w 1 max 2 wieczory ( ͡° ͜ʖ ͡°) Niby wina rekrutera, ale juz dluzszmy moment zbieralem sie do zmiany pracy a i chec do nauki AWS'a tez jest. Biore to na klate

O
Mirki potrzebuję porady dot. JWT tokenów.

Mam 3 serwisy:
A) Serwis autoryzacyjny - IdentityServer
B) Serwis 1
C) Serwis 2 - Nowy serwis

Serwisy te mają osobne fronty, osobne backendy, osobne bazy i co kluczowe mają osobne role i uprawnienia. Chcemy teraz w konkretnych aplikacjach sprawdzać do czego użytkownik ma dostęp a do czego nie na podstawie ról i uprawnień które siedzą w bazach konkretnych serwisów.

Dotychczas gdy był tylko serwis autoryzacyjny
Hej mirki! Będę tworzył przykładowy system złożony z mikroserwisów na użytek pracy dyplomowej - pokażę na nim najważniejsze patterny. Chcę to napisać w Pythonie i mam małe pytanko: jak istotna jest asynchroniczność frameworku, zakładając, że mikrousługi i tak będą się komunikować między sobą przez kolejki? Widzę, że jest sporo książek pokazujących tworzenie takich apek w synchronicznym Flasku, a nie widziałem, żeby ktoś wykorzystywał np. asynchroniczne FastAPI, które też wydaje się być bardzo
Cześć mirki!
Piszę pracę inżynierską o mikroserwisach. W pracy chcę opisać różnice między architekturą monolityczną i mikrousługami, wady i zalety obu architektur, sposoby dekompozycji dziedziny na mikroserwisy, popularne wzorce (głównie chodzi o sposoby autoryzacji/autentykacji, database per service, event sourcing, Saga, CQRS), a następnie pokazać realizację tych wzorców na przykładzie prostej aplikacji backendowej, wdrożonej w środowisku lokalnym z wykorzystaniem Docker Compose. Nie będę opisywał wzorców związanych z wdrożeniami na Kubernetesie, health checkami, service
@Kostikov: Zgadzam się z tym że "mikro" serwisy powinny być większe, najlepiej wyjść od dobrze napisanego modularnego monolitu a mikroserwisy dodać poprostu jako warstwę architektury, wtedy dekompozycja jest zdecydowanie bardziej naturalna. Ciężko mi mówić z perspektywy pythona ale każdy programista c# wiedząc że ma rozbić reset hasła, rejstrowanie i logowanie na 3 oddzielne projekty złapał by się za głowę tymczasem jak robimy mikroserwisy to nie widzimy w tym problemu. Co do
W jaki sposób debuggujecie swoje mikroserwisy lokalnie?
Zakładając, że cała apka składa się z wielu mikrousług i chcecie mieć debugger dołączony do każdej z nich w tym samym momencie?

Lub czy stosujecie jakieś konkretne rozwiązania do wybierania konkretnej mikrousługi, deployowania do k8s reszty stacku a tą jedną uruchamiacie lokalnie z debuggerem?

Czy może deployucie wszystko i tylko dołączacie zdalnie debugger do wybranej, konkretnej mikrousługi?

Jakie IDE stosujecie i jakie konkretne rozwiązania?

Visual