Hej, zacząłem pracować w nowej firmie gdzie używa się mikroserwisów. Dużego doświadczenia w Springu nie mam, sam napisałem kilka rest api jako monolity. Znacie jakieś dobre kursy/tutoriale gdzie są one wyjaśnione zgodnie z aktualnymi trendami ? I czego używa się do komunikacji między nimi ? Też muszę wystawić dla każdego mikroserwisu jakieś api restowe i właśnie tak się nimi komunikować ? Co jeśli info idzie przez 4-5 mikroserwisów ? Przecież to za długo będzie szło. I co jeśli chce skorzystać z jakiś użytecznych klas, które są częścią jakiegoś mikroserwisu ? Muszę kopiować kod czy jak to wszystko powinno wyglądać ?
hmm,
Przecież to za długo będzie szło
mikroserwisy nie są lekarstwem na mniejsze latency, zapytaj się @katelx co to REST - to pewnie powie że taka chińska bajka ;D
Znacie jakieś dobre kursy/tutoriale gdzie są one wyjaśnione zgodnie z aktualnymi trendami
Trend to właśnie REST :) bo to proste - a ostatnią rzeczą jakiej chcesz to podczas budowania takiego systemu (mając jeszcze choroby wieku dziecięcego) to debugowanie jakichś super wydajnych protokół, ave REST !
Też muszę wystawić dla każdego mikroserwisu jakieś api restowe i właśnie tak się nimi komunikować ?
dokładnie :) Dodatkowo, wystawiając API, wystawiasz kontakt, popularne są takie ładne rzeczy jak
https://raml.org/
https://swagger.io/swagger-ui/
Co jeśli info idzie przez 4-5 mikroserwisów ?
Dochodzisz do wniosku że jednak bardzo lubisz monolity ;D Generalnie jedynym z największych problemów z jakim dzisiaj się spotykam jest monitorowanie takich requestów które przechodzą przez ileś tam serwisów i tutaj polecam zapoznać się z https://github.com/openzipkin/zipkin (jeżeli chcesz się takimi mikroserwisami pobawić, a jak masz taki pet-projekt to już wgl sobie go wepnij !)
? Muszę kopiować kod czy jak to wszystko powinno wyglądać ?
Wspólny kod mamy w naszym własnym JARze - mamy kilka bibliotek "tematycznych", np: rest clienta, support dla oautha i inne takie i każdy serwis sobie z tego korzysta - to bardzo wygodne. Oczywiście podbijanie wersji trochę kosztuje, ale idzie przeżyć :D
P.S
oczywiście narzut protokołu jest problemem i na jakimś etapie się rezygnuje z REST'a - Twitter ma REST'a tylko na wejściu a potem lata to na Netty (finatra) i już nie RESTem.
Tylko, po drodze jest jeszcze sporo do rozwiązania żeby martwić się o wydajność ^^
P.S.2
Znacie jakieś dobre kursy/tutoriale gdzie są one wyjaśnione zgodnie z aktualnymi trendami ?
Podaj jakieś konkretne problemy albo tematy będzie łatwiej coś wrzucić.
Dzieki za odp. Pisze prosto z silki takze przepraszam za braknogonow. Chodzilo mi glownie o wydajna komunikacje miedzy nimi i potrzebne narzedzia
Sam Newman napisał spoko książkę o mikroserwisach, chociaż on to tak raczej bardziej abstrakcyjnie. Zależy jakich opóźnień oczekujesz, ale IMHO osobny klient HTTP na każdy z serwisów, z których korzystasz + circut breaker i monitorowanie tegoż. A jeżeli jakieś request przelatuje przez 5 serwisów to może zła architektura?
I co jeśli chce skorzystać z jakiś użytecznych klas, które są częścią jakiegoś mikroserwisu ? Muszę kopiować kod czy jak to wszystko powinno wyglądać ?
Jeżeli to są tylko klasy, których możesz użyć wszędzie i nie kopiujes sobie klas domenowych to kopiuj. Jeżeli skopiujesz coś więcej niż raz to warto by było się zastanowić czy nie skorzystać z jakiegoś sposobu współdzielenia kodu - np biblioteki
'A little copy is better than little dependency'
A jeżeli jakieś request przelatuje przez 5 serwisów to może zła architektura?
Brak korelacji.
Tego typu pytania zawsze skłaniają mnie do jednego kontrpytania: a w ile osób robicie te mikroserwisy?
Api gateway
Czy cos takiego potrafi agregowac wyniki z roznych microservices? A raczej pozwala mi na implementacje czesgos takiego?
Szukalem takiego fature w kilku implementacjach i chyba w wielu czegos takiego nie ma.
Jak w takim razie rozwiazac cos takiego gdy UI wymaga dostarczenia zagregowanych rezultatow?
A moze jesli jest potrzebne cos takiego to wina blędnych bounded contexts?
Btw REST jest fajny, ale moze warto pomyslec nad grpc.
Komunikacja miedzybackendowa w mikroserwisach po REST potrafi zabolec. Warto tez rozwazyc jakis messaging.
ZeroMQ. Jak z tym handlować kiedy połączenie... umarło? A samo jeromq nas o tym w zaden sposob nie informuje ani nie idzie specjalnie tego jakos sprawdzic tylko... przestaje dzialac?