Тема по распределенным транзакциям (1): основы распределенных транзакций

распределенный

содержание:

  • Основные понятия (эта глава)
  • Теория распределенных транзакций
  • 2pc решений для распределенных транзакций
  • TCC для распределенных транзакционных решений
  • Надежная консистентность сообщений для распределенных транзакций
  • Уведомление о лучших усилиях для распределенных транзакционных решений
  • Комплексный анализ случая распределенных транзакций

1. Основные понятия

1.1 Что такое транзакция

Что такое транзакция? Приведу пример из жизни: вы идете в небольшой магазин, чтобы что-то купить, «оплата из одних рук, доставка из первых рук» является примером транзакции, оплата и доставка должны быть успешными, транзакция успешна, любая не удалось выполнить операцию, транзакция прошла успешно. Все успешные кампании будут отменены.

Чтобы понять приведенный выше пример, давайте посмотрим на определение транзакции:

Транзакцию можно рассматривать как одно большое действие, состоящее из различных небольших действий, которые либо завершаются успешно, либо терпят неудачу.

1.2. Локальные транзакции

В компьютерных системах транзакции в большей степени контролируются реляционными базами данных, которые реализуются с использованием транзакционных характеристик самой базы данных, поэтому это называется транзакциями базы данных, поскольку приложения в основном полагаются на реляционные базы данных для управления транзакциями, а базы данных обычно связаны с приложениями. на том же сервере, поэтому транзакция на основе реляционной базы данных также называется локальной транзакцией.

Ознакомьтесь с четырьмя характеристиками транзакций базы данных ACID:

A (Atomic): Атомарность, все операции, составляющие транзакцию, либо выполняются, либо не выполняются вообще, и невозможно выполнить частичный успех или частичный провал.
C (согласованность): согласованность, до и после выполнения транзакции ограничения согласованности базы данных не разрушаются. Например: Чжан Сан переводит 100 юаней Ли Си, и данные до и после перевода верны.Это называется согласованностью.Если Чжан Сан переводит 100 юаней, а счет Ли Си не увеличивается на 100 юаней, будут данные ошибка Согласованность не достигнута.
I (изоляция): Изоляция. Транзакции в базе данных, как правило, параллельны. Изоляция означает, что выполнение двух параллельных транзакций не мешает друг другу, и одна транзакция не может видеть промежуточное состояние запущенного процесса других транзакций. Грязных чтений и повторных чтений можно избежать, настроив уровень изоляции транзакций.
D (долговечность): долговечность.После завершения транзакции изменения данных транзакцией будут сохранены в базе данных и не будут отменены.

1.3 Распределенные транзакции

С быстрым развитием Интернета система программного обеспечения превратилась из исходного монолитного приложения в распределенное приложение.На следующем рисунке показана эволюция монолитных приложений в микросервисы:


Распределенная система разделит систему приложений на несколько служб, которые могут быть развернуты независимо. Поэтому для выполнения транзакционных операций требуется удаленное взаимодействие между службами и службами. В этой среде распределенной системы различные службы взаимодействуют удаленно через сеть. Полная транзакция называетсяРаспределенная транзакция, такие как регистрация пользователя для отправки транзакций с баллами, создание заказов на уменьшение инвентарных транзакций, транзакции банковского перевода и т. д. — все это распределенные транзакции.

Мы знаем, что локальные транзакции полагаются на функции транзакций, предоставляемые самой базой данных, для достиженияТаким образом, следующая логика может управлять локальными транзакциями:

begin transaction;
    //1.本地数据库操作:张三减少金额
    //2.本地数据库操作:李四增加金额
commit transation;

Но в распределенной среде это станет следующим образом:

begin transaction;
    //1.本地数据库操作:张三减少金额 
    //2.远程调用:让李四增加金额 
commit transation;

Вполне возможно, что когда удаленный вызов заставил Ли Си успешно увеличить сумму, удаленный вызов не вернулся из-за проблем с сетью.В это время локальная отправка транзакции не удалась, и операция Чжан Саня по уменьшению суммы была отменена. время данные Чжан Саня и Ли Си противоречивы.

Поэтому на основе распределенной архитектуры нельзя использовать традиционные транзакции базы данных.Учетные записи Чжан Саня и Ли Си не находятся в одной базе данных или даже в одной прикладной системе.Осуществление транзакций передачи требует удаленных вызовов.Из-за проблемы с сетью, будут возникать проблемы с распределением.

1.4 Сценарии, генерируемые распределенными транзакциями

1. Типичным сценарием является микросервисная архитектура.Транзакционные операции выполняются посредством удаленных вызовов между микросервисами. Например: микрослужба заказов и микрослужба запасов.При размещении заказа микрослужба заказов запрашивает микрослужбу запасов, чтобы уменьшить запасы. Короче говоря: создавайте распределенные транзакции по процессам JVM.

image.png

2. Одна система обращается к нескольким экземплярам базы данных. Распределенные транзакции возникают, когда одной системе требуется доступ к нескольким базам данных (экземплярам). Например, информация о пользователе и информация о заказе хранятся в двух экземплярах MySQL соответственно. Если система управления пользователями удаляет информацию о пользователе, информацию о пользователе и информацию о заказе пользователя необходимо удалить отдельно. Поскольку данные распределены в разных экземплярах данных, необходимо управляться через различные ссылки на базу данных, в это время генерируется распределенная транзакция. Короче говоря: создавайте распределенные транзакции между экземплярами базы данных.

image.png

3. Несколько сервисов обращаются к одному и тому же экземпляру базы данных. Например, микросервис заказа и микросервис инвентаризации будут генерировать распределенные транзакции, даже если они обращаются к одной и той же базе данных. Причина в том, что в процессах JVM два микросервиса содержат разные ссылки на базы данных для операций с базами данных. ., в это время генерируется распределенная транзакция.


Чтобы не было скучно читать, я написал здесь только содержание первого раздела. Следующее содержание будет обновляться по главам. Вы можете подписаться на меня, чтобы продолжить чтение. Если вы считаете, что это хорошо, вы можете поставить лайк и поддержка!