Страница 5 из 25 3.Двухфазное подтверждение транзакций 3.1. Background Слово "транзакция" произошло от слияния слов "акция трансформации". Транзакция это действие или группа действий, которые переводят систему из одного целостного состояния в другое. Например, при переводе денег с одного счета на другой, должна быть изменена сумма либо обоих счетов, либо ни одного в случае ошибки. Транзакци характеризуются свойствами ACID: Atomicity (атомарность) - "все или ничего". Либо вся транзакция завершается, либо ни одна из ее частей. Если транзакция не может быть завершена, то все операции, произведенные внутри транзакции, отменяются. Consistency (целостность) - Транзакция должна переводить базу данных из одного целостного состояния в другое. Целостность определяется бизнес-правилами (логикой базы данных) и вводится в действие приложением. Isolation (изоляция, изолированность) - Поскольку может возникать множество конкурентных транзакций, каждая транзакция должна быть изолирована от действий, производимых другими транзакциями. Т.е. транзакции должно "казаться", что она является единственной, выполняемой над базой данных. Durability (прочность)- Изменения, подтвержденные транзакцией, обязаны вступить в силу. Если использовать в качестве примера оплату по кредитной карте, то все ACID-свойства должны иметь место. Представим что информация кредитной карты хранится в одной БД, а информация о счете клиента - в другой. В этом случае при изменении количества денег на кредитной карте соответственно должен измениться счет клиента, и выполняться это должно в одной транзакции. Такие ситуации обрабатываются при помощи двухфазного подтверждения транзакций (Two Phase Commit - 2PC). Это механизм, который применяет к изменениям в обоих базах данных свойства ACID.Двухфазное подтверждение транзакций имеет две отдельные фазы: подготовка и подтверждение. Если по какой-то причине процесс не может быть выполнен в течение фазы подготовки, например после снятия денег с кредитной карты но до изменения суммы счета клиента, то транзакция должна быть отменена (rollback). Это гарантирует что на счету не останется денег больше, чем на кредитной карте (или наоборот). Пока обе базы данных не будут изменены правильным образом, любые действия над БД должны оставаться неподтвержденными. Если все порции транзакции выполнились успешно, то подтверждение производится над двумя БД. Это называется двухфазным подтверждением транзакций. |