В контексте архитектуры микросервисов термин «Сага о микросервисах» относится к шаблону распределенных транзакций, который позволяет поддерживать согласованность данных в нескольких слабосвязанных сервисах внутри системы. Основная цель шаблона Saga — решение проблем, возникающих при управлении транзакциями в системе на основе микросервисов, где отдельные микросервисы несут ответственность за свои данные и имеют собственные базы данных. Термин «Сага» происходит из области систем управления базами данных, где он был впервые введен Гектором Гарсиа-Молиной и Кеннетом Салемом в 1987 году для обозначения последовательности операций, которые выполняются в рамках долгоживущей транзакции.
Популярность микросервисной архитектуры возросла благодаря ее способности повышать гибкость, масштабируемость и отказоустойчивость при разработке программного обеспечения. Однако, как и при любом подходе к архитектуре программного обеспечения, здесь есть компромиссы. Одной из заметных проблем в архитектуре микросервисов является поддержание согласованности данных между сервисами, особенно когда одна бизнес-операция охватывает несколько микросервисов. Эта проблема еще больше усугубляется тем фактом, что каждый микросервис обычно владеет соответствующим хранилищем данных, что приводит к отдельным границам транзакций для каждого сервиса.
Для решения этой проблемы шаблон Microservices Saga предлагает решение, объединяющее серию локальных транзакций, при этом каждая транзакция принадлежит одному микросервису. Эти транзакции координируются посредством сообщений или событий асинхронным образом, заменяя традиционные распределенные транзакции, основанные на протоколах двухфазной фиксации. В шаблоне Saga за каждой локальной транзакцией следует событие, которое запускает следующую локальную транзакцию в последовательности или запускает компенсирующую транзакцию в случае сбоя. Компенсирующие транзакции, по сути, представляют собой операции «отмены», цель которых — отменить изменения, внесенные предыдущими локальными транзакциями, чтобы обеспечить согласованность данных между службами при возникновении проблемы.
Сагу о микросервисах можно реализовать с использованием двух основных шаблонов: хореографии и оркестровки. В хореографии каждый микросервис отвечает за понимание, на какие события ему нужно реагировать и какие действия ему нужно выполнять в ответ. Когда локальная транзакция завершена, микрослужба генерирует событие, а другие микрослужбы прослушивают это событие и действуют соответствующим образом. Основное преимущество этого подхода заключается в том, что он способствует децентрализованному контролю и практически не требует центральной координации.
В шаблоне оркестрации центральный компонент, называемый оркестратором, отвечает за координацию выполнения локальных транзакций в саге микросервисов. Оркестратор получает события от отдельных сервисов и отправляет сервисам команды для выполнения их локальных транзакций. Такой централизованный подход позволяет эффективно обрабатывать исключения и повышает прозрачность всего процесса саги. Однако это может создать потенциальные узкие места и потребовать дополнительных усилий по инфраструктуре и обслуживанию.
В AppMaster, мощной платформе no-code, реализация шаблонов Microservices Saga стала проще благодаря визуальному конструктору бизнес-процессов (BP), который позволяет создавать серверные, мобильные и веб-приложения с полностью интерактивными элементами. Платформа генерирует исходный код, тесты, сценарии миграции и многое другое для каждого проекта, что легко вписывается в архитектуру микросервисов, обеспечивая согласованность данных и эффективное выполнение распределенных транзакций. Более того, подход AppMaster устраняет технический долг за счет регенерации приложений с каждой модификацией, что позволяет даже разработчикам-одиночкам эффективно и результативно создавать комплексные программные решения.
В качестве примера рассмотрим платформу электронной коммерции с отдельными сервисами для инвентаризации, оплаты и доставки. При размещении заказа запускается «Сага о микросервисах», которая включает резервирование запасов в службе инвентаризации, взимание платы с клиента через платежную службу и создание отгрузки через службу доставки. Если какой-либо из этих шагов не удался, выполняются компенсирующие транзакции для отмены всех ранее успешных операций, обеспечивая согласованность данных во всей системе. Реализуя шаблон Microservices Saga, эта платформа электронной коммерции может обеспечить надежное управление транзакциями в рамках своей архитектуры микросервисов, что в конечном итоге способствует устойчивости и оптимизации операций.
В заключение отметим, что «Сага о микросервисах» — это шаблон распределенных транзакций, который решает проблемы поддержания согласованности данных в системах на основе микросервисов. Он позволяет координировать серию локальных транзакций между несколькими службами посредством асинхронного обмена сообщениями или событиями, заменяя традиционные распределенные транзакции и обеспечивая более гибкую, масштабируемую и отказоустойчивую архитектуру программного обеспечения. Внедрение шаблонов Microservices Saga с платформой no-code AppMaster позволяет ускорить и экономически эффективную разработку приложений без бремени технического долга, давая разработчикам возможность создавать комплексные программные решения, соответствующие современным практикам архитектуры программного обеспечения.