6 причин, по которым вам нужно использовать Event Sourcing в микросервисах
Микросервисы играют жизненно важную роль при переходе от монолитных приложений. Они помогают улучшить масштабируемость, управляемость, гибкость и скорость доставки приложений.
Однако при использовании микросервисов возникают некоторые проблемы, например обработка состояния. Нам, разработчикам, необходимо знать, как преодолеть эти проблемы, чтобы получить максимальную отдачу от микросервисов.
Использование источника событий — отличное решение для большинства этих проблем. Итак, в этой статье я расскажу, почему мы должны использовать источник событий с микросервисами и преимущества его использования.
Что такое источник событий
Event Sourcing — это альтернативный способ сохранения данных. По сравнению с другими методами сохранения состояния, такими как сохраняемость, ориентированная на состояние, источник событий сохраняет все мутации состояния в виде отдельной записи, называемой событием.
Например, когда покупатель кладет товары в корзину на платформе онлайн-покупок, система поиска событий сохраняет все изменения состояния в корзине в виде списка событий, изменяющих состояние. Всякий раз, когда состояние сущности изменяется, к списку событий добавляется новое событие.
1. Плавный переход от дизайна, ориентированного на предметную область
Когда дело доходит до этапа разработки проекта, разработчики и дизайнеры анализируют предметную область и проводят штурм событий/моделирование событий. Цель здесь состоит в том, чтобы идентифицировать проект с точки зрения чистого дизайна.
Тем не менее, часть разговора очень ориентирована на события. Таким образом, результатом усилий являются микросервисы, которые создадут разработчики. Поэтому команды и события попадают в эти разные микросервисы.
Источники событий находятся в стадии реализации. Во-первых, код и поток данных системы реализованы с использованием источников событий, поскольку дизайн был выполнен с учетом событий.
2. Уменьшение связи
Предположим сценарий, в котором два микросервиса слабо связаны. Если в одном микросервисе происходит изменение дизайна, реализации или поведения, это не приведет к другим изменениям.
Однако, когда дело доходит до микросервисов, связь может возникнуть. Например, если в микрослужбу внесено изменение, это приведет к тому, что все остальные микрослужбы будут прямо или косвенно сотрудничать с первой.
3. Оптимизирует узкое место производительности чтения и записи
Представьте себе типичную систему с множеством операций, которые, вероятно, создавались годами и управляются единой базой данных. Однако базу данных можно оптимизировать для чтения и записи при выполнении операций CRUD.
Но это всегда компромисс. Если вы оптимизируете для чтения, это происходит за счет записи. Если вы оптимизируете для записи, это приведет к дорогостоящему чтению. Таким образом, происходят очевидные и значительные компромиссы.
Однако источник событий решает проблему. Когда дело доходит до источников событий, используется отдельная сохраняемость. То есть у нас есть хранилище событий, которое вставляет события. Все операции CRUD становятся просто хранилищем и событиями. Все эти события объединяются в это текущее состояние операции, которое необходимо выполнить разработчикам.
Реальным преимуществом хранилища событий здесь являются расходы пользователя, а узкое место операций чтения-записи уменьшится.
4. Поднимите барьер параллелизма
Существует большая вероятность получить всплеск трафика в крупных корпоративных приложениях. Такие сценарии могут повлиять на базу данных приложения, и их решение может быть болезненным.
Да, эти вопросы можно решить, потратив три-четыре недели. Но вы все равно можете столкнуться с ситуацией, когда база данных просто доведена до предела.
Это еще одна причина, по которой поиск источников событий становится все более популярным подходом. Источники событий решают эту проблему, записывая и вставляя записи пика в журнал событий и не позволяя стороне чтения ждать.
5. Упростите и усложните обмен сообщениями
Семантику обмена сообщениями в микросервисах можно разделить на три категории.
- В большинстве случаев — случаи, когда сообщение может не быть доставлено, и вы потеряете сообщения при определенных обстоятельствах. Если подумать о микросервисе, который мы создаем, это неприемлемая функция.
- По крайней мере один раз – эту категорию проще всего внедрить. В этом случае сообщение может быть доставлено хотя бы один раз. С другой стороны, определенное сообщение может быть доставлено более двух раз.
- Ровно один раз. Достаточно мифический метод, который трудно реализовать, но все же выполнимый с точки зрения потребителя.
В некоторых случаях сообщения не доставляются с первого раза. Таким образом, решение будет реализовывать логику повторных попыток.
Когда разработчики реализуют логику повторных попыток, они должны начать думать о таких случаях, как службы-производители, пытающиеся опубликовать данные. Он должен быть в состоянии находиться в том режиме, когда некоторые сообщения не были доставлены.
Кроме того, такие дела, как обслуживание, падают. И когда эта служба возвращается, может ли она продолжить с того места, где остановилась, и продолжить повторную попытку отправки этих сообщений? Такие ситуации создают большие сложности для производителя.
Кроме того, представьте себе сценарий, в котором служба сначала выполняет транзакцию базы данных, а затем вызывает Kafka. Поскольку это две отдельные транзакции, сначала будет выполнена транзакция базы данных. Однако сообщение в Кафке не пройдет. Так что это утечка в трубе, и потребители потенциально уязвимы. Когда служба отключается в течение этого периода воздействия, сообщения будут потеряны.
При использовании источника событий разработчикам не нужно беспокоиться о неудачных сообщениях. Так что здесь сообщения не передаются потребителям Kafka. Потребители Kafka вытягивают, и реализовать этот шаблон вытягивания проще.
6. Устранение связанности сервисов
Представьте ситуацию, когда у нас есть служба поддержки клиентов, помогающая нескольким другим службам. Если обслуживание клиентов упадет, дополнительные услуги также упадут.
При использовании источника событий подход заключается в том, что клиент публикует, а другие службы потребляют. В таком случае, если служба поддержки клиентов уходит, нет никакого вреда, пока она не вернется.
Заключение
Архитектура микросервисов — одна из наиболее часто используемых архитектур в серверной разработке. Тем не менее, очень важно знать, как использовать его максимально оптимизированным и беспроблемным образом.
В этой статье я объяснил 06 причин, по которым вам следует использовать источник событий с микросервисом, чтобы избежать распространенных ошибок.
Я надеюсь, что эта статья поможет вам разрабатывать микросервисы гораздо более оптимизированным способом. Спасибо за чтение.
Бит: почувствуйте мощь компонентно-ориентированной разработки
Скажи привет Bit. Это инструмент №1 для разработки приложений на основе компонентов.
С помощью Bit вы можете создать любую часть своего приложения в виде «компонента», который можно компоновать и использовать повторно. Вы и ваша команда можете совместно использовать набор компонентов для более быстрой и последовательной совместной разработки большего количества приложений.
- Создавайте и компонуйте «строительные блоки приложения»: элементы пользовательского интерфейса, полные функции, страницы, приложения, бессерверные или микросервисы. С любым стеком JS.
- С легкостью делитесь и повторно используйте компоненты в команде.
- Быстро обновляйте компоненты в разных проектах.
- Делайте сложные вещи простыми: Монорепо, дизайн-системы и микрофронтенды.
Попробуйте Bit бесплатно и с открытым исходным кодом→