предисловие
Транзакция базы данных (именуемая транзакцией, транзакцией) относится к логической единице в процессе выполнения базы данных, которая состоит из ограниченной последовательности операций с базой данных.
Транзакции имеют следующие четыре свойства, традиционно называемые свойствами ACID:
Атомарность: транзакция выполняется как единое целое, а содержащиеся в ней операции над базой данных выполняются либо все, либо ни одна из них.
Непротиворечивость: транзакция должна обеспечивать изменение состояния базы данных из одного согласованного состояния в другое. Непротиворечивое состояние означает, что данные в базе данных должны удовлетворять ограничениям целостности. Кроме того, непротиворечивость имеет еще один слой семантики, то есть промежуточное состояние транзакции нельзя наблюдать (этот слой семантики также говорит о том, что он должен принадлежать к атомарности).
Изоляция: при одновременном выполнении нескольких транзакций выполнение одной транзакции не должно влиять на выполнение других транзакций, как если бы база данных выполняла только эту операцию.
Долговечность: изменения в базе данных, внесенные совершенными транзакциями, должны постоянно храниться в базе данных. В конце транзакции эта операция необратима.
Что такое распределенная транзакция?
Распределенная транзакция означает, что участники транзакции, серверы поддержки транзакций, серверы ресурсов и менеджеры транзакций расположены на разных узлах разных распределенных систем. Проще говоря, большая операция состоит из разных маленьких операций.Эти маленькие операции распределены по разным серверам и принадлежат разным приложениям.Распределенные транзакции должны гарантировать, что все эти маленькие операции завершатся успешно или все потерпят неудачу. По сути, распределенные транзакции предназначены для обеспечения согласованности данных в разных базах данных.
Начнем с известных теорий CAP и BASE.
Распределенная транзакция
Общие решения
Двухфазный протокол, трехфазный протокол, сообщение транзакции MQ, компенсация, Saga, TCC и т. д. В этой статье мы сосредоточимся на совместном использовании реализации TCC.
Что такое ТСС?
Попробуйте: выполните все бизнес-проверки, зарезервируйте необходимые бизнес-ресурсы и обеспечьте идемпотентность.
Подтверждение: бизнес-логика, которая фактически выполняется без какой-либо бизнес-проверки, использует только бизнес-ресурсы, зарезервированные на этапе пробной версии. Следовательно, пока операция Try выполняется успешно, Confirm также должен выполняться успешно. Кроме того, операция подтверждения должна быть идемпотентной.
Отмена. Освобождение бизнес-ресурсов, зарезервированных на этапе пробной версии. Точно так же операция Cancel также должна удовлетворять требованиям идемпотентности.
Модель распределенных транзакций TCC состоит из трех частей:
Основная бизнес-служба (глобальная транзакция): основная бизнес-служба является инициатором всей деловой активности, организатором службы и отвечает за инициирование и завершение всей деловой активности.
Подчиненный бизнес-сервис (транзакция ответвления): Подчиненный бизнес-сервис является участником всей бизнес-деятельности, ответственным за обеспечение бизнес-операций TCC, реализацию трех интерфейсов предварительной операции (Try), операции подтверждения (Confirm) и операции отмены (Cancel). по основному делу.обслуживание вызов.
Диспетчер деловой активности (Диспетчер транзакций): Диспетчер деловой активности контролирует всю бизнес-деятельность, включая ведение записей о глобальном состоянии транзакций TCC и состоянии дел от каждой подбизнес-службы, а также звонки от всех бизнес-операций во время представления оперативной деятельности. Подтвердите операцию службы, звонки отменяют все операции с бизнес-услугами в бизнес-операциях отменены.
Какие вопросы следует учитывать при разработке компонента распределенной транзакции?
Любая машина выключена, что мне делать, если она выйдет из строя?
Как решить проблемы с сетевым узлом?
Когда совершать | откатывать глобальную транзакцию?
Внутри обруча
Прежде чем понять Hoop, я кратко познакомлю вас с некоторыми терминами, ограничениями по умолчанию.
Глоссарий:
GlobalTransaction: глобальная транзакция (следует за основной бизнес-службой)
BranchTransaction: транзакция филиала (вытекающая из бизнес-сервиса)
GlobalTransactionStateConfirm: Глобальное подтверждение состояния транзакции [требуется для восстановления транзакции]
соглашение
Во время выполнения глобальной транзакции исключений нет, зафиксируйте глобальную транзакцию
Если в методе глобальной транзакции выдается исключение (неуказанное исключение), все транзакции ветвей, выполненные до возникновения исключения, откатываются напрямую, а глобальная транзакция откатывается.
Hoop рекомендует настроить исключение тайм-аута сети на [delayHandleStep2Exceptions].При обнаружении такого исключения Hoop требуется средство проверки состояния транзакции, чтобы определить фиксацию/откат транзакции.
Hoop рекомендует настраивать [GlobalTransactionStateConfirm] для каждой глобальной транзакции, чтобы избежать неправильного отката зафиксированной транзакции в нештатной ситуации.
Основная роль обруча
TransactionInterceptor (глобальный перехватчик транзакций): управляйте глобальными транзакциями и ускоряйте жизненный цикл транзакций.
CoordinatorInterceptor (перехватчик координатора транзакций ветвей): координирует транзакции ветвей и глобальные транзакции.
HoopRecoverBootStrap (Recovery Bootstrap): управление, восстановление аномальных транзакций
AbstractHoopStorageBootStrap (механизм хранения записей транзакций): хранилище и глобальные записи транзакций ветвей транзакций.
Почему Hoop высокая производительность и высокая пропускная способность?
Во многих статьях tcc часто упоминается TransactionSynchronizationAdapter, который использует транзакции базы данных для поддержки двухэтапного выполнения. Hoop полностью отказывается от этого, потому что, если транзакция базы данных используется для продвижения второй фазы распределенной транзакции, в сценарии, где в фазе T много транзакций ветвей, длинная транзакция приведет к большому потреблению ресурсов. db, что станет проблемой производительности. Все узлы выполнения Hoop не блокируют ресурсы db, и нет длинных транзакций. Кроме того, в настоящее время обруч предоставляет механизм хранения mysql, который позволяет пользователям перезаписывать записи транзакций.
Восстановление Hoop поддерживает параллельное восстановление всех машин в приложении, одновременное восстановление одной машины и хороший контроль над машинными ресурсами.
Hoop поддерживает двухэтапную асинхронную фиксацию.
Ниже приведена серия псевдокодов, написанных Хупом, Лу Юнь (карта China Merchants Bank) переводит 100 юаней Сяоцяну (карта CCB)
пример 1: A.doTry выполнен успешно, B.doTry успешно, пяльцы отправляются автоматически A.confirm B.confirm
пример 2: A.doTry завершается успешно, B.doTry не удается, пяльцы автоматически откатываются назад A.cancel B.cancel
пример 3: A.doTry терпит неудачу, пяльцы автоматически выполняют A.cancel
Анализ исключений обруча
Восстановление аварийной транзакции для Hoop
Для одного приложения все развернутые экземпляры могут восстанавливать аномальные глобальные транзакции параллельно, повышая пропускную способность системы и экономя ресурсы компьютера.
Средство восстановления транзакций в основном продвигает состояние глобальной транзакции через средство проверки транзакций.
Суммировать
Характеристики бизнес-реализации модели распределенных транзакций TCC определяют, что она может обеспечить управление ресурсами между БД и службами и координировать различные доступы к БД и различные бизнес-операции в атомарную операцию с помощью модели TCC, которая решает проблему сценариев распределенной архитектуры приложений. деловые вопросы. Модель TCC также может выполнять некоторые настраиваемые функции в соответствии с потребностями бизнеса, например, асинхронные транзакции для снижения пиковых нагрузок и заполнения провалов. Однако бизнес-доступ к модели TCC должен разделить бизнес-логику на два этапа и реализовать три интерфейса: попробовать, подтвердить и отменить.. Степень настройки высока, а стоимость разработки высока.
Сценарий использования: Поскольку подчиненная бизнес-служба вызывается синхронно, результат будет влиять на решение основной бизнес-службы.Поэтому универсальное решение для распределенных транзакций TCC подходит для бизнеса с определенным временем выполнения и коротким временем, таким как в качестве основных трех интернет-финансовых предприятий.Услуги: транзакция, оплата, выставление счетов.
Позже я поделюсь с вами общей архитектурой и использованием обруча.
об авторе
Юрэн, инженер отдела исследований и разработок торговой команды Tongbanjie, присоединился к команде в мае 2016 года и в настоящее время в основном отвечает за разработку капитальных проектов.
Для получения более интересного контента отсканируйте QR-код, чтобы подписаться на общедоступную учетную запись WeChat «Tongbanjie Technology».