Микросервисы и распределенные транзакции
Распределенные транзакции - это проблемы, возникающие при разделении службы.Что касается того, почему выполняется разделение службы и что такое микросервисы, вы можете обратиться к следующемуздесьМы знаем, что для распределенных сценариев это должно следоватьтеория 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 решает распределенные транзакции.
Предположим, у нас сейчас есть бизнес по покупке товаров.Для фоновой системы есть четыре службы: Бизнес (запись бизнеса), Хранение (служба инвентаризации), Заказ (служба заказа), Учетная запись (служба пользователя), пользователи покупают товары через Бизнес порядок, система будет проходить через следующие процессы:
Для каждой службы представлены две роли:
Процесс обработки Seata глобальной транзакции выглядит следующим образом:
- ТМ запрашивает у ТС инициацию глобальной транзакции, и ТС возвращает XID, представляющий глобальную транзакцию.
- XID распространяется в rpc на каждую службу в цепочке вызовов.
- После того, как каждый RM получает XID, он инициирует транзакцию ветвления к TC, а TC возвращает XID, представляющий транзакцию ветвления.
- RM завершает бизнес местного филиала, представляет местные филиалы и сообщает TC.
- После обработки цепочки вызовов глобальной транзакции TM инициирует отправку или откат глобальной транзакции в TC в зависимости от наличия исключения.
откат:
- Предположим, локальная транзакция RM завершилась неудачно. Сам RM управляет локальным откатом транзакций и отчитывается перед TC.
- TM обнаруживает сбой транзакции ветви и инициирует глобальный откат транзакции к TC.
- TC отправляет сообщение каждому RM, уведомляя их всех о необходимости отката.
- TC отправляет результат глобального отката транзакции в TM. Глобальная транзакция завершается.
Суммировать
- Сообщество активно, и всего за несколько месяцев количество звезд достигло W. В настоящее время версия 0.8 обновлена, и версию 1.0 можно использовать в онлайн-среде.
- Гибкий, для сита, использование очень простое, особенно для режима АТ, распределенные транзакции можно реализовать практически добавлением аннотации.
- Высокая производительность, хотя одним из самых больших критических замечаний по использованию протокола 2pc является проблема с производительностью: несколько библиотек блокируются одновременно, что приводит к резкому падению производительности. На этой основе у Seata есть большое улучшение, особенно для режима tcc. В настоящее время режим AT будет только
- В настоящее время TC не поддерживает развертывание кластера, после выхода из строя TC распределенные транзакции всей системы не могут быть обработаны.