Углубленное изучение Seata (1): что такое Seata

Java
Углубленное изучение Seata (1): что такое Seata

Микросервисы и распределенные транзакции

Распределенные транзакции - это проблемы, возникающие при разделении службы.Что касается того, почему выполняется разделение службы и что такое микросервисы, вы можете обратиться к следующемуздесьМы знаем, что для распределенных сценариев это должно следоватьтеория CAP, поэтому для транзакций в этом случае вызов транзакций между несколькими службами стал головной болью, а Seata — это фреймворк для решения транзакций в распределенной среде.

История Сеата

Seata — это высокопроизводительная и простая в использовании платформа распределенных транзакций, разработанная Alibaba для микросервисной архитектуры. Seata разработана компанией TXC (Taobao Transaction Constructor, Ali начала решать внутреннюю структуру распределенных транзакций в 2014 году) — «GTX (Global Transaction Service, Ali выпустила TXC для облачных сервисов в 2016 году и сменила название на GTX) — «Fescar ( Али Ю. В 2019 году исходный код GTS будет открыт и переименован в Fescar)-»Seata(Простая расширяемая архитектура автономных транзакций, Али объединил Ant Financial Framework DTX с Fescar и переименовал его в Seata) В настоящее время Seata уже является горячим проектом на github.В начале года он был открыт с исходным кодом, а теперь выпущен до версии 0.8.0.Он имеет 11 000 звезд и быстро обновляется и итерируется. Считается, что будущее за универсальным решением для распределенных транзакций.

Сеата Архитектура

Текущие режимы транзакций Seata включают AT, TCC и Saga. По умолчанию используется режим AT. AT по сути является реализацией протокола 2pc. Различия между тремя режимами будут подробно описаны позже. Здесь мы кратко расскажем, как Seata решает распределенные транзакции.

Предположим, у нас сейчас есть бизнес по покупке товаров.Для фоновой системы есть четыре службы: Бизнес (запись бизнеса), Хранение (служба инвентаризации), Заказ (служба заказа), Учетная запись (служба пользователя), пользователи покупают товары через Бизнес порядок, система будет проходить через следующие процессы:

下单
Как показано на рисунке, Business вызывает другие службы через инфраструктуру rpc (dubbo, feign....). Seata объединяет транзакции, созданные всей цепочкой вызовов выше, для создания глобальной транзакции:
image
Как показано на рисунке, глобальная транзакция состоит из различных транзакций ветвей, а транзакции ветвей представляют локальную транзакцию службы.

Для каждой службы представлены две роли:

全局事务
Как показано на рисунке, для каждой службы есть две роли (TM, RM).В процессе глобальной транзакции они будут связываться с TC, чтобы помочь в завершении всей транзакции. Роль каждой роли может быть кратко представил:TC: Координатор транзакций, координатор транзакций: отслеживает состояние каждой глобальной транзакции и отвечает за фиксацию и откат глобальных транзакций.TM: Менеджер транзакций, менеджер транзакций: в ТСинициировать, зафиксировать, откатЗапрос на глобальную транзакцию.RM: Диспетчер ресурсов, диспетчер ресурсов: сервис TCЗапустить, отправить, сообщитьЗапросы транзакций ветвления и локальные откаты транзакций обслуживания, фиксации.
image

Процесс обработки Seata глобальной транзакции выглядит следующим образом:

  1. ТМ запрашивает у ТС инициацию глобальной транзакции, и ТС возвращает XID, представляющий глобальную транзакцию.
  2. XID распространяется в rpc на каждую службу в цепочке вызовов.
  3. После того, как каждый RM получает XID, он инициирует транзакцию ветвления к TC, а TC возвращает XID, представляющий транзакцию ветвления.
  4. RM завершает бизнес местного филиала, представляет местные филиалы и сообщает TC.
  5. После обработки цепочки вызовов глобальной транзакции TM инициирует отправку или откат глобальной транзакции в TC в зависимости от наличия исключения.

откат:

  1. Предположим, локальная транзакция RM завершилась неудачно. Сам RM управляет локальным откатом транзакций и отчитывается перед TC.
  2. TM обнаруживает сбой транзакции ветви и инициирует глобальный откат транзакции к TC.
  3. TC отправляет сообщение каждому RM, уведомляя их всех о необходимости отката.
  4. TC отправляет результат глобального отката транзакции в TM. Глобальная транзакция завершается.
    image

Суммировать

  1. Сообщество активно, и всего за несколько месяцев количество звезд достигло W. В настоящее время версия 0.8 обновлена, и версию 1.0 можно использовать в онлайн-среде.
  2. Гибкий, для сита, использование очень простое, особенно для режима АТ, распределенные транзакции можно реализовать практически добавлением аннотации.
  3. Высокая производительность, хотя одним из самых больших критических замечаний по использованию протокола 2pc является проблема с производительностью: несколько библиотек блокируются одновременно, что приводит к резкому падению производительности. На этой основе у Seata есть большое улучшение, особенно для режима tcc. В настоящее время режим AT будет только
  4. В настоящее время TC не поддерживает развертывание кластера, после выхода из строя TC распределенные транзакции всей системы не могут быть обработаны.