post-thumb

Шаблоны проектирования

Шаблон разбиение на МС

  • по бизнес возможностям
  • по проблемным областям

Шаблоны взаимодействия

Приложение, основанное на микросервисной архитектуре, является распределенной системой. Важную роль в этой архитектуре играет межпроцессное взаимодействие (interprocess communication, IPC). Придется принять ряд архитектурных решений о том, как сервисы будут взаимодействовать друг с другом и с внешним миром.

Ответить на вопросы?

  • Стиль взаимодействия. Какой механизм IPC следует использовать?
  • Обнаружение. Каким образом клиент сервиса узнает его IP-адрес, чтобы, например, выполнить НТТР-запрос?
  • Надежность. Как обеспечить надежное взаимодействие между сервисами с учетом того, что некоторые из них могут быть недоступны?
  • Транзакционный обмен сообщениями. Как следует интегрировать отправку сообщений и публикацию событий с транзакциями баз данных, которые обновляют бизнес-информацию?
  • Внешний API. Каким образом клиенты вашего приложения взаимодействуют c сервисами?

Шаблоны согласованности данных для реализации управления транзакциями

Для обеспечения слабой связанности каждый сервис должен иметь собственную базу данных. Но, такой подход чреват некоторыми существенными проблемами, как следствие традиционная методика с использованием распределенных транзакций (2PC) не подходит для современных приложений. Вместо этого согласованность данных следует обеспечивать с помощью шаблона «Повествование».

image

Возможно использовать шаблон объединения API, который обращается к API одного или нескольких сервисов и агрегирует результаты. В некоторых ситуациях приходится прибегать к командным запросам с разделением ответственности (command query responsibility segregation, CQRS), которые хранят одну или несколько копий данных и позволяют легко к ним обращаться.

Шаблоны развертывания сервисов

Приложение, основанное на микросервисах, намного сложнее. У вас могут быть десятки и сотни сервисов, написанных на различных языках с использованием разных фреймворков. И придется управлять намного большим количеством элементов.

image

Для проектирования наблюдаемых сервисов

  • API проверки работоспособности. Создайте конечную точку, которая возвращает данные о состоянии сервиса.
  • Агрегация журналов. Записывайте поведение сервисов и сохраняйте эти записи на центральном сервере с поддержкой поиска и оповещений.
  • Распределенная трассировка. Назначайте каждому внешнему запросу уникальный идентификатор и отслеживайте его перемещение между сервисами.
  • Отслеживание исключений. Отправляйте отчеты об исключениях соответствующему сервису, который их дедуплицирует, оповещает разработчиков и отслеживает разрешение каждой исключительной ситуации.
  • Показатели приложения. Собирайте количественные и оценочные показатели и делайте их доступными для соответствующего сервиса.
  • Ведение журнала аудита. Записывайте в журнал действия пользователей.

Шаблоны автоматического тестирования сервисов

  • Тестирование контрактов с расчетом на потребителя — проверка того, что сервис отвечает ожиданиям клиентов.
  • Тестирование контрактов на стороне потребителя — проверка того, что клиент может взаимодействовать с сервисом.
  • Тестирование компонентов сервиса — тестирование сервиса в изоляции.

Шаблоны безопасности

Шаблон «Токен доступа» В микросервисной архитектуре аутентификацию пользователей обычно выполняет API-шлюз, который затем должен передать учетную информацию, например идентификатор и роли, вызываемому сервису. Часто для этого применяют токены доступа, такие как JWT (JSON Web token). API-шлюз передает токен сервисам, которые могут его проверить и извлечь из него информацию о пользователе.

Процесс разработки и доставки ПО

Если вы хотите создавать приложения с микросервисной архитектурой, крайне важно внедрить гибкие методики разработки и развертывания, такие как Scrum или Kanban. В дополнение к этому следует практиковать непрерывные доставку и развертывание, которые являются частью DevOps.

image

comments
comments powered by Disqus