Mikrousługi w implementacji Dockera


9

Piszemy nasze pierwsze usługi mikro przy użyciu kontenerów Docker korzystających z fargate Amazon. Mamy wiele wątpliwości co do poziomu wdrożenia przy użyciu Spring Boot

W projekcie będziemy mieć wiele mikrousług, czy dobrą praktyką jest pisanie wszystkich mikrousług w jednym kontenerze, czy też muszę utworzyć osobny kontener Docker dla oddzielnych mikrousług. W opłacalny sposób korzystamy z pojedynczego pojemnika, ale czy to sprawia problemy w strukturze naszego projektu w przyszłości?

Planujemy wdrożyć aplikację w AWS fargate, a nasza aplikacja będzie miała dużą możliwość rozszerzenia w przyszłości i oczekuje około 100 do 150 różnych mikrousług. Czy w takim przypadku opłacalne jest przesyłanie wszystkich tych mikrousług w różnych pojemnikach?


Wszystko zależy od twojej struktury. Musisz udostępnić znacznie więcej szczegółów, aby inni mogli ci pomóc
Nico Haase,

6
Prawie zawsze bardziej sensowne jest wdrożenie jednej usługi na kontener, ponieważ daje to możliwość niezależnego skalowania usług i zastępowania poszczególnych usług ulepszonymi wersjami lub alternatywnymi implementacjami.
larsks

Kompromis jest pomiędzy tobą a grupowaniem usług i prowadzeniem ich indywidualnie. Wykonaj cięcie domeny dla bieżącej aplikacji, pogrupuj usługi według domen, ponieważ mogą one współużytkować ten sam magazyn danych. Pomoże to w lepszym zarządzaniu zgrupowanymi usługami.
Srini M

Odpowiedzi:


21

Najważniejszą rzeczą do zapamiętania w przypadku mikrousług jest to, że nie dotyczą one głównie rozwiązywania problemów technicznych, ale problemów organizacyjnych. Kiedy więc patrzymy na to, czy organizacja powinna używać mikrousług i jak te usługi są wdrażane, musimy sprawdzić, czy organizacja ma problemy, które rozwiązuje styl mikrousług.

Odpowiedź na pytanie dotyczące architektury będzie zatem zależeć głównie od wielkości zespołu technologicznego, struktury organizacyjnej, wieku Twojego produktu, bieżących praktyk wdrażania i tego, jak mogą się one zmienić w perspektywie średnioterminowej.

Na przykład, jeśli Twoja organizacja:

  • ma mniej niż 25 pracowników technicznych,
  • zorganizowane w 1 lub 2 zespoły,
  • z których każdy działa na dowolnej części produktu,
  • który ma mniej niż 12 miesięcy,
  • i jest wdrażany od razu regularnie (np. codziennie, co tydzień, co miesiąc),
  • i org nie ma zamiaru szybko rosnąć,

wtedy prawie na pewno chcesz na razie zapomnieć o mikrousługach. W takiej sytuacji zespół wciąż jest nowy w nauce domeny, więc prawdopodobnie nie wiedzą wszystkiego, co powinni wiedzieć, aby naprawdę zrozumieć, jaki byłby świetny sposób na podzielenie systemu na architekturę rozproszoną. Oznacza to, że jeśli podzielą go teraz, prawdopodobnie będą chcieli później zmienić granice, a to stanie się bardzo kosztowne, gdy masz już system rozproszony, a jednocześnie jest o wiele prostszy w monolicie. Co więcej, tylko niewielki zespół, który może pracować nad (i wspierać) dowolną częścią systemu, nie ma powodu, aby inwestować w budowę platformy, w której poszczególne zespoły mogłyby wdrażać i utrzymywać poszczególne usługi. Organizacja na tym etapie zwykle będzie znacznie bardziej zainteresowana wyszukiwaniem klientów i szybkim iterowaniem produktu, być może nawet jego obracaniem, w przeciwieństwie do tworzenia autonomii zespołów i budowania skalowalnej, odpornej architektury. Monolityczna architektura ma w tym momencie sens, ale:dobrze zaprojektowany monolit, z wyraźnymi granicami komponentów wymuszonymi przez interfejsy API i enkapsulowanym dostępem do danych, co ułatwia późniejsze przeniesienie usług do oddzielnych procesów.

Spójrzmy trochę dalej i rozważmy organizację, która jest ...

  • ponad 50 pracowników technicznych,
  • zorganizowane w 7 zespołów,
  • z których każdy działa tylko w określonych obszarach produktu,
  • który ma 3 lata,
  • i ma zespoły, które chcą wdrożyć swoją pracę niezależnie od tego, co robią inne zespoły.

Taka organizacja zdecydowanie powinna budować architekturę rozproszoną. Jeśli tego nie zrobią, a zamiast tego wszystkie te zespoły będą pracowały w monolicie, napotkają wszelkiego rodzaju problemy organizacyjne, przy czym zespoły muszą koordynować swoją pracę, zwalniają wydawanie, gdy jeden zespół kończy kontrolę jakości swojej nowej funkcji, łatka wdraża się jako duży problem dla personelu i klientów. Co więcej, dzięki dojrzałemu produktowi organizacja powinna wiedzieć wystarczająco dużo o tej dziedzinie, aby móc rozsądnie podzielić zarówno domenę, jak i zespoły (w tej kolejności; patrz prawo Conwaya) na rozsądne, autonomiczne jednostki, które mogą robić postępy, minimalizując jednocześnie koordynację.

Wygląda na to, że już wybrałeś mikrousługi. W zależności od tego, gdzie siedzisz na powyższych skalach, być może chcesz ponownie podjąć tę decyzję.

Jeśli chcesz nadal tworzyć mikrousługi, ale wdrażać je wszystkie w jednym kontenerze, wiedz, że nie ma w tym nic złegojeśli pasuje to do sposobu, w jaki obecnie działa Twoja organizacja. Czy w przyszłości spowoduje to problemy w strukturze projektu? Cóż, jeśli odniesiesz sukces, a Twoja organizacja się rozwinie, prawdopodobnie nadejdzie czas, w którym to wdrożenie z pojedynczym kontenerem nie będzie już najlepiej pasować, w szczególności, gdy zespoły zaczną posiadać usługi i będą chciały wdrożyć tylko swoją usługę bez wdrażania całej aplikacji . Ale ta autonomia będzie kosztować dodatkową pracę i złożoność i może nie przynieść żadnych korzyści w tym momencie. To, że w przyszłości nie będzie to właściwe podejście dla twojego systemu, nie oznacza, że ​​nie jest to właściwe podejście na dziś. Sztuką jest pilnować go i wiedzieć, kiedy dokonać dodatkowej inwestycji.


1
Jest to świetne Wyjaśnienie i jesteśmy w stanie określić, gdzie musimy korzystać z dokerów i mikrousług na podstawie struktury projektu i zespołu. Dziękuję Ci.
anoop

2

Nie ma problemu, jeśli używasz pojedynczego kontenera do mikrousług, ale głównym celem mikrousług jest osobne utrzymanie każdej usługi oddzielnie, każda usługa powinna być luźno powiązana, a każda usługa powinna mieć osobną bazę danych (jeśli chcesz osiągnąć bazę danych dla architektury usług). Spróbuj więc osiągnąć ten cel, uruchom swoje usługi w osobnym kontenerze i zorganizuj te usługi za pomocą dokera roju lub Kubernetes. Wiem, że koszty mają znaczenie, ale jeśli zrobisz to we właściwy sposób, wtedy zobaczysz siłę architektury mikrousług.


Czy korzystny pod względem kosztów jest fakt, że używamy różnych kontenerów dokerów dla różnych usług mikro. Ponieważ w projekcie spodziewamy się około 100 do 150
mikrousług

Nie, nie jest to opłacalne pod względem kosztów, ale uruchomienie każdej usługi osobno będzie technicznie korzystne.
Slim Coder
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.