День шестьсот тридцать девятый. #BestPractices #IDEALS
Принципы Разработки Микросервисов: IDEALS вместо SOLID. 4/7
E – Ориентированность на события (Event-Driven)
Архитектура микросервисов предназначена для создания серверных сервисов, которые обычно активируются используя один из следующих вызовов:
1. HTTP-вызов (к REST сервису)
2. RPC-вызов, такой как gRPC или GraphQL
3. Асинхронное сообщение, которое проходит через очередь в диспетчере сообщений.
Первые два обычно являются синхронными, и HTTP-вызовы наиболее распространены. Часто сервисам необходимо вызывать другие сервисы, и во многих случаях это взаимодействие является синхронным. Если вместо этого мы создадим (или адаптируем) участвующие сервисы на подключение и получение сообщений из очереди, мы создадим архитектуру на основе событий.
Важным преимуществом такой архитектуры является улучшенная масштабируемость и пропускная способность. Это связано с тем, что отправители сообщений не блокируются в ожидании ответа, и одно и то же сообщение/событие могут использоваться параллельно несколькими получателями в режиме публикации-подписки.
Микросервис, управляемый событиями
Буква E в IDEALS советует нам стараться моделировать микросервисы, управляемые событиями, потому что они с большей вероятностью будут соответствовать требованиям масштабируемости и производительности современных программных решений. Такой дизайн также способствует слабой связанности, поскольку отправители и получатели сообщений - микросервисы - независимы и не знают друг о друге. Надёжность также повышается, потому что конструкция может справляться с временными отключениями микросервисов, которые позже могут обработать помещённые в очередь сообщения.
Но микросервисы, управляемые событиями, также известные как реактивные микросервисы, могут создавать проблемы. Обработка активируется асинхронно и происходит параллельно, возможно, требуя точек синхронизации и корреляции сообщений. Дизайн должен учитывать ошибки и потерянные сообщения: часто необходимы корректирующие события и механизмы отмены изменений данных. Кроме того, должен быть продуман пользовательский опыт в транзакциях, обращённых к пользователю, чтобы держать конечного пользователя в курсе о прогрессе или неудаче транзакции.
Продолжение следует…
Источник: https://www.infoq.com/articles/microservices-design-ideals/
Post #777
1.15K