Aggregator, Chain и Branch паттерны для микросервисов
![Aggregator, Chain и Branch паттерны для микросервисов](https://joprblob.azureedge.net/site/news/d2b13e17-51d5-4ee6-a730-440a8581abf0/d064cefb-3a97-4131-a897-f77256ea046f.png)
В этой статье разберем 3 паттерна для коммуникации с микросервисами: Aggregator, chain и Branch. И в каких случаях их нужно использовать
Aggregator Pattern
![aggregator pattern](https://joprblob.azureedge.net/site/news/d2b13e17-51d5-4ee6-a730-440a8581abf0/0696b1c3-810c-47d9-ba2a-0d45af818ff7.png)
На диаграмме выше показано как он работает. Существует один агрегатор, который собирает весь запрос из внешнего источника, передает его соответствующему микросервису и возвращает результат. Aggregator node здесь может выполнять любые необходимые манипуляции с данными, такие как добавление timestamp в заголовок запроса или добавление имени запрашивающего для целей регистрации и тд.
Chain Pattern
![chain pattern](https://joprblob.azureedge.net/site/news/d2b13e17-51d5-4ee6-a730-440a8581abf0/0421d9a7-f0f7-4b6d-9f6d-0bb3f88982d9.png)
Chained шаблон имеет единую точку входа - сервис А, и другие сервисы зависят от сервиса А, и будут вызваны по цепочке.
Chain pattern не является бест решением для реализации коммуникации между микросервисами, поскольку он делает микросервисы зависимыми друг от друга.
Недостатки шаблона Chain
Недостаток этого шаблона заключается в том, что он работает медленно, так как запросы проходят через несколько сервисов.
Преимущества шаблона Chain
с другой стороны, положительная сторона этого шаблона заключается в том, что он безопасен благодаря одной точке входа. Микросервис, требующий высшей степени безопасности, можно оставить в конце цепочки, и таким образом можно ограничить к нему доступ.
Branch pattern
![branch pattern](https://joprblob.azureedge.net/site/news/d2b13e17-51d5-4ee6-a730-440a8581abf0/03dc0339-409e-4d3a-9b8b-fb5e7b4af104.png)
Branch pattern - это гибрид паттерна агрегатор и паттерна chain. В приведенном выше примере мы видим что сервис А служит агрегатором, и бранчуется на две ветки. Одна ветка содержит один автономный сервис B, а вторая ветвь содержит цепочку из сервисов (Сервис C и D). Этот паттерн будет полезен, когда большое монолитное приложение нужно раздробить на приложение с микросервисной архитектурой.