2013-04-30 21 views
13

Zaczynam badać architektury zorientowane na usługi i zastanawiam się, jak najlepiej uporządkować komunikację między procesami. Wydaje się, że bezpośrednie połączenia HTTP między usługami i/lub magistralą pubsub to dwa wspólne podejścia. W jakich sytuacjach jest się bardziej korzystnym od drugiego? Widzę, jak pubsub doprowadziłby do większej liczby oddzielonych od siebie usług, ale mam także wrażenie, że śledzenie ścieżki wiadomości przez system staje się o wiele trudniejsze.Wiadomości w architekturze mikroserwisu

Co to są niektóre zasoby, aby dowiedzieć się więcej na ten temat? Jestem szczególnie ciekawy tego w kontekście bardzo małych, "ręcznie zwijanych" usług (tj. Ruby/Sinatra, Node/Express, Redis pubsub, itp.) W przeciwieństwie do jakichkolwiek zalecanych stosów SOA/apartamentów. .. choć jestem pewien, że obowiązują te same zasady.

Dzięki!

Odpowiedz

15

Dam ci moje dwa centy.

but I also get the impression that it becomes much harder to track a message's path though the system.

Masz rację, że architektur SOA PubSub AKA (SOA 2.0) zapewniając dużą oddzielenia, ale również zapłacić cenę, bo to jest dokładnie to, co się dzieje, chociaż narzędzia, takie jak Splunk może pomóc los.

seems that direct HTTP calls between services and/or a pubsub bus are two common approaches

Właściwie jeśli spojrzeć na najczęściej używanych .net ram SOA wydarzenie (NServiceBus, mułów i MassTransit) nie korzystają z połączeń HTTP, ale tak można wdrożyć architekturę microservices i używają jako http protokół komunikacyjny.

Rozumiem, że chcesz zacząć stosować niektóre z najlepszych koncepcji architektury korporacyjnej, ale chciałbym powiedzieć, że lepiej zacząć od prostszych, ale mocniejszych fundamentów. Nie ma sensu skakać do soi eventu, nie wiedząc, czy naprawdę tego potrzebujesz. Jeśli zaczynałem nowy system i chciałem się upewnić, że właściwie dostosowałem zasady DDD i SOA, zacznę od identyfikacji usług dla mojej domeny. Powiedzmy, że masz 3 usługi, możesz zacząć od deklarowania zamówień publicznych dla każdej z tych usług, nie potrzebujesz niczego specjalnego, możesz zacząć od WCF/ASP.NET Web API z synchronizacyjnym interfejsem API REST. Następnie upewnisz się, że każda usługa otrzyma swoją własną bazę danych, ponieważ dążysz do niskiego sprzężenia, a następnie możesz ponownie utworzyć warstwę API (tę widoczną dla świata zewnętrznego) za pomocą interfejsu API WCF/ASP.NET Web, ponieważ twoje mikrousługi nie powinny być wystawione bezpośrednio na świat zewnętrzny. W tym momencie będziesz miał architekturę SOA, ale prostą w designie, architekturę, ale ponieważ masz dobrze zdefiniowane kontrakty, możesz rozszerzyć swoje usługi przez dodanie do nich funkcji asynchronicznych i na początek, dodając kolejkę wiadomości do każdej z usług. Wiesz, nie musisz rozpoczynać od złożonego systemu, zacznij od czegoś podstawowego, dobrze zdefiniowanego, co pozwala na skalowanie, jeśli musisz.

Opisany przeze mnie system może zostać rozszerzony tak, aby łatwo obsługiwał zdarzenia, jeśli chcesz, a fakt, że w tym momencie byłyby już zsynchronizowane komunikaty, nie powstrzymałby Cię przed dodaniem komunikatów asyn do systemu.

Ale to tylko moje dwa centy.

Powiązane problemy