Ostatnio dużo czytałem o mikro-usługach i oto niektóre wnioski, które do tej pory wyciągnąłem (proszę, popraw mnie, jeśli się mylę w dowolnym momencie).
- Architektura mikrousług dobrze współgra z projektowaniem opartym na domenie. Zwykle jedno państwo członkowskie reprezentuje jeden ograniczony kontekst.
- Jeśli mikrousługa A wymaga funkcji znajdującej się w mikrousługie B , prawdopodobnie mój model jest nieprawidłowy, a A i B powinny w rzeczywistości być jedną mikrousługą / BC.
- Synchroniczna komunikacja między mikrousługami (bezpośrednie żądania HTTP) jest zła, ponieważ nie spełnia celu mikro-usług i wprowadza sprzężenie między komponentami.
- Pożądana jest asynchroniczna komunikacja między usługami. Usługi powinny publikować zdarzenia w kolejkach komunikatów, aby inne usługi mogły subskrybować i przetwarzać swoją część zdarzenia lub wykorzystywać je do replikacji części danych potrzebnych do ich kontekstu. W ten sposób usługi mogą przetwarzać żądania, nawet gdy inne usługi są wyłączone, co nie byłoby w przypadku komunikacji synchronicznej.
- Jeśli mikro-usługa A publikuje zdarzenie, mikro-usługa B subskrybuje to zdarzenie i generuje nowe zdarzenie jako wynik, mikrousługa A nie powinna być tym przetwarzającym nowo utworzone zdarzenie, ponieważ byłaby to zależność cykliczna. W takim przypadku powinniśmy wprowadzić trzecią mikrousługę lub połączyć A i B w mikrousługę AB .
- Mikro-usługa jest w rzeczywistości terminem wprowadzającym w błąd. Powinniśmy dążyć do małych kontekstów, ale nie musi tak być. Termin nie powinien być „mikrousługą”, ale „ wystarczająco duży, aby wykonać pracę ”.
- Mikro-usługi pozwalają nam wprowadzać nowe funkcjonalności z większą łatwością i bez obawy, że zepsujemy cały system. Można tego dokonać, wprowadzając nową usługę lub refaktoryzując jedną z istniejących.
- Każda mikrousługa powinna mieć własne miejsce do przechowywania danych. Replikacja / duplikacja danych jest pożądanym zachowaniem w tej architekturze.
Poza potwierdzeniem mojego zrozumienia tej architektury, moja inna część pytania dotyczy głównie odkrywania usług. Jeśli usługi komunikują się asynchronicznie i korzystają z centralnej kolejki zdarzeń, takiej jak amazon SQS, czy to oznacza, że wykrywanie usług nie ma miejsca w takiej architekturze?
Usługi nie powinny mieć żadnej wiedzy o innych usługach w systemie. Są świadomi tylko swojego kontekstu i wydarzeń, które powinni publikować lub subskrybować?