Рубрики
Uncategorized

Лучшие практики для архитектуры микросервиса

Давайте погрузимся в плюсы и минусы этой популярной архитектуры, некоторые из ключевых выборов дизайна он влечет за собой, и общие антиблокировки. Теги с архитектурой, начинающими, WebDev, Devops.

Если вы являетесь предприятием архитектора, вы, вероятно, слышали и работали с архитектурой микросервисов. И хотя вы, возможно, использовали отдых в качестве сервисного коммуникационного уровня в прошлом, все больше и больше проектов перемещаются в архитектуру, управляемую событиями. Давайте погрузимся в плюсы и минусы этой популярной архитектуры, некоторые из ключевых выборов дизайна он влечет за собой, и общие антиблокировки.

Что такое архитектура Micreervice, управляемая событиями?

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

Вот простой пример: когда завод помещается на сайт электронной коммерции, изготавливается один «размещенный заказ», а затем потребляется несколькими микросимами:

1) Служба заказа, которая может написать запись заказа в базу данных 2) Службу клиентов, которая может создать запись клиента, и 3) платежную службу, которая может обработать платеж.

События могут быть опубликованы различными способами. Например, они могут быть опубликованы в очередь, которая гарантирует доставку мероприятия соответствующим потребителям, или они могут быть опубликованы на «PUB/Sub» модельный поток, который публикует событие и позволяет получить доступ ко всем заинтересованным сторонам. В любом случае производитель публикует событие, и потребитель получает это событие, реагирующее соответственно. Обратите внимание, что в некоторых случаях эти два актера также можно назвать издателем (производителем) и абонентами (потребителем).

Зачем использовать архитектуру, управляемую событиями

Управляемая событиями архитектура предлагает несколько преимуществ в течение отдыха, которые включают в себя:

  • Асинхронные — архитектуры на основе событий асинхронные без блокировки. Это позволяет ресурсам свободно перемещаться к следующей задаче, когда их единица работы завершена, не беспокоясь о том, что произошло раньше, или будет следующим. Они также позволяют оставаться в очереди или буферизации событий, которые предотвращают бы потребителю давление на производители или блокировать их.

  • Свободные муфты — услуги не нужны (и не должны иметь) знания или зависимости от других услуг. При использовании событий службы работают независимо, без знания других услуг, включая их информацию о внедрении и транспортной протоколе. Услуги по модели событий могут быть обновлены, проверены и развернуты независимо и легче.

  • Легко масштабирование — поскольку службы отсоединяются в рамках архитектуры, управляемой событиями, и в качестве службы обычно выполняют только одну задачу, отслеживая узкие места к определенному обслуживанию и масштабированием этой службы (и только этот сервис) становится легкой.

  • Поддержка восстановления — архитектура, управляемая событиями с очередью, может восстановить потерянную работу с помощью «воспроизведения» событий из прошлого. Это может быть ценно, чтобы предотвратить потери данных, когда потребитель должен быть восстановлен.

Конечно, архитектуры, ориентированные на событиями, а также недостатки. Они легко более инженера, отделяя проблемы, которые могут быть проще, когда тесно связаны; может потребовать значимых аварийных инвестиций; И часто приводит к дополнительной сложности в инфраструктуре, обслуживании договоров или схем, систем сборки по полиглоту и графикам зависимости.

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

Даже при этих недостатках архитектура, управляемая событием, обычно является лучшим выбором для систем микросервисных систем предприятия. Масштабируемые плюсы, свободно связанные, Dev-Ops дружелюбный дизайн — перевешивайте минусы.

Когда использовать отдых

Однако есть, когда интерфейс отдыха/веб-интерфейса все еще могут быть предпочтительными:

  • Вам нужен синхронный интерфейс запроса/ответа
  • Вам нужна удобная поддержка для сильных транзакций
  • Ваш API доступен для общественности
  • Ваш проект небольшой (отдых намного проще настроить и развернуть)

Ваш самый важный выбор дизайна — структура обмена сообщениями

После того, как вы определились с архитектурой, управляемой событиями, пришло время выбрать свою структуру мероприятий. То, как ваши события производятся и потребляются, является ключевым фактором в вашей системе. Существуют десятки проверенных рамки и выбора и выбора правильного человека, требуется время и исследование.

Ваш базовый выбор сводится к обработке сообщений или обработки потока.

Обработка сообщений

В традиционной обработке сообщений компонент создает сообщение, затем отправляет его на определенный (и, как правило, одиночный) пункт назначения. Принимающий компонент, который сидит холостой и ожидания, получает сообщение и действует соответственно. Как правило, когда приходит сообщение, приемный компонент выполняет один процесс. Затем сообщение удалено.

Типичным примером архитектуры обработки сообщений является очередь сообщений. Хотя большинство более новых проектов используют обработку потока (как описано ниже), архитектуры, использующие очереди сообщения (или события), все еще популярны. Очереди сообщений обычно используют «магазин и вперед» систему брокеров, где мероприятия путешествуют из брокера в брокер, пока они не достигнут соответствующего потребителя. Activemq. и Rabbitmq являются двумя популярными примерами структуры очереди сообщений. Обе эти проекты имеют годы доказанного использования и установленные общины.

Переработка потока

С другой стороны, в поток обработки компоненты выделяют события, когда они достигают определенного состояния. Другие заинтересованные компоненты слушают эти события на потоке событий и соответствующим образом реагируют. События не предназначены для определенного получателя, а скорее доступны для всех заинтересованных компонентов.

При обработке потока компоненты могут одновременно реагировать на несколько событий и применять сложные операции на нескольких потоках и событиях. Некоторые потоки включают на себя постоянство, когда события остаются на потоке до тех пор, пока необходимы.

С обработкой потока система может воспроизвести историю событий, приходится в Интернете после того, как событие произошло и до сих пор реагирует на него и даже выполнять вычисления скользящих окон. Например, он может рассчитать среднее использование ЦП в минуту из потока событий вторых.

Одним из самых популярных рамок обработки потоков является Apache Kafka Отказ Кафка — это зрелый и стабильный раствор, используемый многими проектами. Его можно считать процедурно-промышленно-прочностным потоком обработки раствора. KAFKA имеет большую пользовательскую базу, полезное сообщество и разработанный набор инструментов.

Другие варианты

Существуют и другие рамки, которые предлагают комбинацию потока и обработки сообщений или их собственного уникального решения. Например, Пульсар , более новое предложение от Apache, является системой паба/подпункта с открытым исходным кодом, которая поддерживает как потоки, так и очереди событий, все с чрезвычайно высокой производительностью. Pulsar — это отличающееся функциями — он предлагает многоцендую и гео-репликацию и соответственно комплекс. Говорят, что кафка направлена на высокую пропускную способность, а пульсар направлен на низкую задержку.

NATS является альтернативной системой паба/подпункта с «синтетической» очередной. NATS предназначен для отправки небольших частых сообщений. Он предлагает как высокую производительность, так и низкую задержку. Тем не менее, NAT считает некоторый уровень потери данных, чтобы быть приемлемым, приостанавливая приоритеты к выступлению на гарантии доставки.

Другие соображения дизайна

После того, как вы выбрали свою структуру мероприятия, вот несколько других проблем для рассмотрения:

  • Поиск событий

    Трудно реализовать сочетание свободно связанных услуг, различных хранилище данных и атомных транзакций. Один шаблон, который может помочь, это Событие Sourcing Отказ В событии источника, обновления и удаления никогда не выполняются непосредственно на данные; Скорее, государственные изменения сущности сохраняются как ряд событий.

  • CQRS.

    Вышеуказанное источничество событий вводит еще одну проблему: поскольку государство должно быть построено из серии событий, запросы могут быть медленными и сложными. Сегрегация на запрос на команду ( CQRS ) — это конструктивное решение, которое требует отдельных моделей для вставки операций и операций чтения.

  • Обнаружение информации о событии

    Одним из величайших проблем в архитектуре, управляемой событиями, является каталогизация услуг и событий. Где вы находите описания и подробности событий? Какова причина для мероприятия? Какая команда создала мероприятие? Они активно работают над этим?

  • Работа с изменением

    Будет ли изменяться схемы события? Как вы меняете схему событий, не нарушая другие услуги? Как вы отвечаете на эти вопросы, становится критическим, поскольку ваш номер услуг и событий растет. Быть хорошим потребителем событий означает кодирование для схем, которые меняются. Быть хорошим производителем событий означает, что будет осведомлен о том, как ваша схема меняет влияние на другие сервисы и создание хорошо разработанных событий, которые ясно документированы.

  • На помещении против размещения развертывания

    Независимо от вашей структуры мероприятия, вам также нужно будет решить между развертыванием рамок самостоятельно в помещении (брокеры сообщений не тривиальны для эксплуатации, особенно с высокой доступностью), или использование размещенного обслуживания, такого как Apache Kafka на Heroku Отказ

Антиблокировки

Как и в случае с большинством архитектур, архитектура, управляемая событиями, поставляется с собственным набором анти-моделей. Вот несколько, чтобы осмотреть.

  • Слишком много хорошего

    Будьте осторожны, вы не слишком взволнованы созданием событий. Создание слишком многих событий создаст ненужную сложность между услугами, повышает когнитивную нагрузку для разработчиков, сделать развертывание и тестирование более сложным и вызвать заторы для потребителей событий. Не каждый метод должен быть событием.

  • Общие события

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

  • Комплексные графики зависимости

    Следите за услугами, которые зависят друг от друга и создают сложные графики зависимости или петли обратной связи. Каждый сетевой хоп добавляет дополнительную задержку в исходный запрос, особенно сетевой трафик северного/юга, который оставляет тосно.

  • В зависимости от гарантированного порядка, доставки или побочных эффектов

    События асинхронные; Следовательно, в том числе предположения по порядку или дубликаты не только добавляют сложность, но не будут отрицать многие из ключевых преимуществ архитектуры, основанной на событиях. Если ваш потребитель имеет побочные эффекты, такие как добавление значения в базе данных, вы можете быть не в состоянии восстановить по воспроизведению событий.

  • Преждевременная оптимизация

    Большинство продуктов начинаются маленькие и растут со временем. Хотя вы можете мечтать о будущем нужно, чтобы масштабировать в большой сложной организации, если ваша команда небольшая, то дополнительная сложность архитектур, управляемых событиями, может фактически замедлить вас. Вместо этого рассмотрите возможность разработки вашей системы простой архитектурой, но включите необходимое разделение опасений, чтобы вы могли переменить его, поскольку ваши потребности растут.

  • Ожидание, чтобы исправить все

    На менее техническом уровне не ожидайте, что архитектура, основанная на событиях, чтобы исправить все ваши проблемы. Хотя эта архитектура, безусловно, может улучшить многие области технической дисфункции, она не может исправить основные проблемы, такие как отсутствие автоматизированного тестирования, бедная команда связи или устаревшие практики Dev-ops.

Учить больше

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

Если вы хотите узнать больше, ознакомьтесь с этим Справочная архитектура, ориентированная на события Что позволяет развернуть рабочий проект на Heroku одним щелчком мыши. Эта эталонная архитектура создает веб-магазин, продавая вымышленные кофейные продукты.

Клики продукта отслеживаются как события и хранятся в Кафке. Затем они потребляются приборной панели отчетности.

Код — это открытый источник, поэтому вы можете изменить его в соответствии с вашими потребностями и запускать свои собственные эксперименты.

Оригинал: «https://dev.to/heroku/best-practices-for-event-driven-microservice-architecture-2lh7»