Прежде чем объяснять режим XA в Seate, давайте сначала разберемся, что такое спецификация XA. Спецификация XA — это стандарт распределенной обработки транзакций (DTP), определенный организацией X/Open. Спецификация XA описывает интерфейс между глобальной TM и локальной RM. Спецификация XA была предложена в начале 1990-х годов. В настоящее время почти все основные базы данных поддерживают спецификацию XA.
XA спецификацияиспользоватьдвухфазная фиксация(2PC,Two-Phase Commit), чтобы гарантировать, что все ресурсы одновременно фиксируют или откатывают любую конкретную транзакцию.
Это не сетевой протокол, но он определяет Менеджер транзакций Менеджер), приложение (Приложение Program) и Менеджер ресурсов Manager) интерактивный между CAPI(Common Application Programming Interface) Стандарты интерфейса
Роль модели распределенной обработки транзакций
DTP(Distributed Transaction Processing)Модель определяет следующие роли:
AP: Прикладная программа, которую можно понимать как программу, использующую распределенные транзакции DTP.
РМ: Менеджер ресурсов, под которым можно понимать участника транзакции. Вообще говоря, да относится к экземпляру базы данных. База данных управляется через менеджер ресурсов. Менеджер ресурсов управляет транзакцией. филиала
ТМ: менеджер транзакций,Отвечает за координацию и управление делами,Менеджер транзакций контролирует глобальные транзакции,Жизненный цикл практики управления,и координировать свои действия с различными РМ. Глобальная транзакция да относится к распределенной среде обработки транзакций.,Необходимость работы с несколькими базами данных для выполнения работы,Эта работа представляет собой глобальную транзакцию.
Модель DTP определяет интерфейс связи между TMиRM, называемый XA. Под ним просто понимается протокол интерфейса 2PC, предоставляемый базой данных. 2PC, реализованный на основе протокола XA базы данных, также называется решением XA.
двухфазная фиксация
разделен на два этапа этап подготовки и этап подачи,Процесс управления распределенными транзакциями выглядит следующим образом.
этап подготовки:APиTMвзаимодействие,открыть Глобальные распределенные транзакции,и отправить запрос каждому RM,Выполнить логику изменения данных,В это время каждыйRMПойду вTMОтправьте заявку на регистрацию транзакция филиала,После выполнения бизнес-логики сообщается статус подготовки к отправке (транзакция не отправляется после выполнения),После этого точка доступа ответит на основе ответа RM. этап подачи оставить отзыв
этап подачи:если всеRMВсе ответить“да”,указывает, что они готовы к отправке,Затем на этом этапе точка доступа отправит запрос на отправку в TM.,В противном случае распределенная транзакция фиксируется;,Точка доступа отправит запрос на прерывание в ТМ.,Откат распределенной транзакции
Объяснение случая:
Приложение (AP) содержит два источника данных: базу данных товаров и базу данных балансов.
Редактировать
Приложение (AP) уведомляет балансовую библиотеку (RM) и товарную библиотеку (RM) через TM,создать заказ и уменьшить баланс,RM на данный момент не совершил транзакцию,В это время ресурсы продукта и баланса заблокированы.
Если TM получает ответ на выполнение, в случае сбоя одной стороны он отправит транзакции отката другим RM соответственно. После завершения отката блокировка ресурса снимается.
Если TM получает ответ на выполнение и все прошло успешно, он инициирует транзакцию фиксации для всех RM. После завершения фиксации блокировка ресурса снимается.
Модели Seata XA
Основное введение
Мы все знаем, что вSeataЕсть три основные роли в:Менеджер транзакций Manager)、Менеджер ресурсов Manager) и Координатор транзакций Coordinator)。
TC (Transaction Coordinator) -Координатор сделок:Поддерживать общую ситуациюитранзакция Статус филиала координирует глобальную фиксацию и откат транзакции.
TM (Transaction Manager) -Менеджер по сделкам:Определите объем глобальных транзакций、Начать глобальную транзакцию、Подтвердите и откатите глобальную транзакцию.
RM (Resource Manager) -Менеджер ресурсов:управлятьтранзакция Ресурсы обрабатываются филиалом, обратитесь к TC для регистрации транзакции филиалаи Отчеттранзакция филиал утверждает и управляет транзакцией филиала зафиксировать или откатить.
Однако определения трех ролей в Seata отличаются от определений ролей в стандарте протокола XA:
Менеджер транзакций Manager)должно соответствоватьXAв соглашенииПрикладная программа
В Seata исходная модель XA была просто инкапсулирована и трансформирована.,чтобы соответствовать вашей собственной модели транзакции,Основная конструкция представлена на рисунке:
Первый этап работы РМ:
① Регистрация операций филиала в TC
② Выполните бизнес-деятельность филиала, но не подавайте его.
③ Сообщить TC о статусе выполнения.
Работа второго этапа ТК:
TC обнаруживает каждую транзакцию статус выполнения филиала
а. Если все прошло успешно, уведомите всех менеджеров по отправке транзакций.
б. В случае сбоя уведомите всех менеджеров по управлению данными о необходимости отката транзакции.
Второй этап работы РМ:
Получите инструкции TC для фиксации или отката транзакции.
Конкретное использование
Измените файл application.yml (каждый микросервис, участвующий в транзакции) и включите режим XA:
Язык кода:javascript
копировать
seata:
data-source-proxy-mode: XA
Добавьте аннотацию @GlobalTransactional к методу входа, который инициирует глобальную транзакцию:
Язык кода:javascript
копировать
@GlobalTransactional
@Transactional(rollbackFor = Exception.class)
public void saveOrder(OrderSaveParam orderSaveParam) {
// Проверка параметров и другие необходимые операции
// ...
// Изменить инвентарь
reduceGoodsCount(goodsCountMap);
// Вычесть остаток
reduceMoney(id,money);
// Транзакция отката исключения
int i = 1 / 0;
}
краткое содержание
производительность:Низкий
модель:CP,сильная консистенция
Сложность:Простой,Реализовано на основе встроенных возможностей базы данных,Таблицу менять не нужно.
Сценарии применения:финансовая индустрия,Объем параллелизма невелик,Но проекты, в которых данные имеют значение
преимущество:
Высокая согласованность транзакций соответствует принципу ACID.
Поддерживаются широко используемые базы данных, простая реализация и отсутствие вмешательства в код.
недостаток:
Поскольку на первом этапе необходимо заблокировать ресурсы базы данных и дождаться завершения второго этапа, прежде чем освободить их, производительность низкая.
Зависит от реляционной базы данных для реализации транзакций
Тема (протокол блокировки): XA подготовить назад,транзакция филиала выходит на стадию блокировки и получает XA commit или XA rollback Надо заблокировать и подождать раньше. Например, если нет надежного координатора, данные трех библиотек abc определяются для отправки на втором этапе. В это время инструкция, полученная ab, передается. После отправки инструкции библиотека c зависает. после получения инструкции и не отправляет транзакцию xa, если координатору не удается реализовать повторную попытку второго этапа, незафиксированная транзакция xa продолжится. Удержание блокировки создает тупиковую ситуацию
Разница в производительности: Потеря производительности в основном происходит по двум причинам: с одной стороны,процесс координации транзакции,Увеличьте RT одной транзакции на основе конфликтов блокировок.,Уменьшите пропускную способность. На самом деле, основная причина вызвана блокировкой и блокировкой данных на да,Потому что первый этап ха – это не подчинение,Если все подать в один этап,,Благодаря одноэтапной подаче от Atmodel,лучше, чемxa по производительности,Потому что он заблокирован на стороне TC и освобождается централизованно.,Нет необходимости в нескольких библиотеках для локального снятия блокировки.
Я участвую в третьем этапе специального тренировочного лагеря Tencent Technology Creation 2023 с эссе, получившими приз, и сформирую команду, которая разделит приз!