В этой статье вы быстро освоите режим XA Seata.
В этой статье вы быстро освоите режим XA Seata.

Основное введение

Прежде чем объяснять режим 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в соглашенииПрикладная программа

Координатор транзакций Coordinator)переписыватьсяXAв соглашенииМенеджер транзакций Manager)

В 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 с эссе, получившими приз, и сформирую команду, которая разделит приз!

boy illustration
Разрешение циклических зависимостей Spring Bean: существует ли неразрешимая циклическая ссылка?
boy illustration
Разница между промежуточным программным обеспечением ASP.NET Core и фильтрами
boy illustration
[Серия Foolish Old Man] Ноябрь 2023 г. Специальная тема Winform Control Элемент управления DataGridView Подробное объяснение
boy illustration
.NET Как загрузить файлы через HttpWebRequest
boy illustration
[Веселый проект Docker] Обновленная версия 2023 года! Создайте эксклюзивный инструмент управления паролями за 10 минут — Vaultwarden
boy illustration
Высокопроизводительная библиотека бревен Golang zap + компонент для резки бревен лесоруба подробное объяснение
boy illustration
Концепция и использование Springboot ConstraintValidator
boy illustration
Новые функции Go 1.23: точная настройка основных библиотек, таких как срезы и синхронизация, значительно улучшающая процесс разработки.
boy illustration
[Весна] Введение и базовое использование AOP в Spring, SpringBoot использует AOP.
boy illustration
Чтобы начать работу с рабочим процессом Flowable, этой статьи достаточно.
boy illustration
Байтовое интервью: как решить проблему с задержкой сообщений MQ?
boy illustration
ASP.NET Core использует функциональные переключатели для управления реализацией доступа по маршрутизации.
boy illustration
[Проблема] Решение Невозможно подключиться к Redis; вложенное исключение — io.lettuce.core.RedisConnectionException.
boy illustration
От теории к практике: проектирование чистой архитектуры в проектах Go
boy illustration
Решение проблемы искажения китайских символов при чтении файлов Net Core.
boy illustration
Реализация легких независимых конвейеров с использованием Brighter
boy illustration
Как удалить и вернуть указанную пару ключ-значение из ассоциативного массива в PHP
boy illustration
Feiniu fnos использует Docker для развертывания учебного пособия по AList
boy illustration
Принципы и практика использования многопоточности в различных версиях .NET.
boy illustration
Как использовать PaddleOCRSharp в рамках .NET
boy illustration
CRUD используется уже два или три года. Как читать исходный код Spring?
boy illustration
Устраните проблему совместимости между версией Spring Boot и Gradle Java: возникла проблема при настройке корневого проекта «demo1» > Не удалось.
boy illustration
Научите вас шаг за шагом, как настроить Nginx.
boy illustration
Это руководство — все, что вам нужно для руководства по автономному развертыванию сервера для проектов Python уровня няни (рекомендуемый сборник).
boy illustration
Не удалось запустить docker.service — Подробное объяснение идеального решения ️
boy illustration
Настройка файлового сервера Samba в системе Linux Centos. Анализ NetBIOS (супер подробно)
boy illustration
Как настроить метод ssh в Git, как получить и отправить код через метод ssh
boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023