Архитектура распределенных систем программного обеспечения. Учебное пособие издано при поддержке образовательной программы Формирование
Скачать 1 Mb.
|
Транзакционное взаимодействиеСвойстватранзакционноговзаимодействия Транзакцией называется последовательность операций, выполняемая системой, как единое целое. Транзакции превращают процессы доступа и модификации множества элементов данных в одну атомарную операцию. Если в процессе выполнения транзакции будет определено, что дальнейшее ее выполнение невозможно (по любой причине), все данные восстанавливаются с теми значениями и в том состоянии, в котором они были до начала транзакции. Это свойство называется "все или ничего". Транзакции могут состоять и из одной операции, но особенно важно применять подход "все или ничего" в тех случаях, когда необходимо последовательно выполнить несколько технически независимых, но нераздельных с точки зрения прикладной программы операций (например, банковский перевод со снятием и вложением средств на другой счет). Именно такие операции необходимо объединять в транзакции, чтобы либо операции выполнялись совместно, либо не выполнялась ни одна. Ключевой является возможность отката ситуации к исходному состоянию при невозможности совершить транзакцию. Для программирования транзакций создаются специальные приемы и разрабатываются системные примитивы, которые могут поддерживаться как базовой операционной системой, так и дополнительными программными системами (транзакционными мониторами). Список примитивов зависит от используемых в транзакциях объектов, и в разных системах эти примитивы разные. Однако практически во всех системах должны быть транзакционные скобки (начать и завершить транзакцию), операция прерывания транзакции (на случай, например, фиксации ошибки в данных), операции транзакционного чтения и транзакционной записи данных, входящих в некоторый файл, таблицу базы данных и так далее. Чтобы транзакции действительно выполняли свою роль, они должны: быть атомарными (Atomic). Атомарность гарантирует, что транзакция либо полностью выполняется, либо полностью не выполняется, то есть с точки зрения окружающих систем транзакция выполняется как одна неделимая операция. Пока транзакция находится в процессе выполнения, другие системы не могут наблюдать никаких ее промежуточных состояний; быть непротиворечивыми (Consistent). Непротиворечивость есть соблюдение инвариантов системы. Для каждой системы такие инварианты свои, например, в банковских системах инвариантом служит общая сумма вложенных средств. Никакая внутренняя операция (не затрагивающая кассу) не меняет общую сумму средств в банке; быть изолированными (Isolated). Изолированность или сериализуемость – это отсутствие влияния на параллельно выполняемые транзакции. Если какие-либо транзакции выполняются параллельно, итог будет таким же, как если бы все транзакции выполнялись последовательно в некотором (задаваемом системой) порядке; быть долговечными (Durable). Никакие сбои после завершения операции не могут привести к отмене результатов транзакции. В совокупности все эти свойства объединяют термином ACID. К наиболее важным видам транзакций можно отнести транзакции плоские, составные и распределенные. Плоские транзакциив полной мере обладают свойствами ACID. Это наиболее простой и наиболее часто используемый тип транзакции. Однако плоские транзакции имеют ограничения, в частности, они не могут иметь частичного результата в случае завершения или прерывания. С помощью составных и вложенных транзакцийудается разделить сложные транзакции верхнего уровня на серию иерархически вложенных параллельно работающих транзакций. Параллельность эта может быть вполне реальной: вложенные транзакции могут выполняться на других машинах, но может быть и виртуальной, то есть выполняемой для ускорения или упрощения программирования. Каждая из вложенных транзакций может делиться на транзакции аналогичным образом. Составные транзакции не в полной мере обладают свойствами ACID. Например, свойство долговечности применимо только к транзакциям самого верхнего уровня (результаты вложенных транзакций могут быть отменены, если не сможет быть выполнена какая-либо из других вложенных транзакций). Вложенные транзакции требуют серьезного подхода к администрированию. Семантика такого администрирования такова: в начале любой транзакции создается копия данных всей системы. Если транзакция прерывается, копия просто уничтожается, если она завершается успешно, ее внутренняя копия заменяет внешнюю и так далее. Рис.2.9.Составнаяивложенныетранзакции(а)ираспределеннаятранзакция (б). Вложенные транзакции делят исходную транзакцию логически, а логическое разделение транзакций не обязательно означает распределенности. Распределенные транзакциипредставляют собой плоские неделимые транзакции, работающие с распределенными данными (Рис. 2.9). |