Опубликован: 11.12.2006 | Доступ: свободный | Студентов: 5820 / 381 | Оценка: 4.42 / 3.86 | Длительность: 57:15:00

Лекция 25: Службы компонентов и Microsoft Distributed Transaction Coordinator

Приложение электронной коммерции

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

  • Мощность одной системы недостаточна. Количество транзакций, выполняемых приложением электронной коммерции, может превысить возможности одной системы.
  • Деловая логика.Возможно, имеет смысл с точки зрения деловой перспективы выполнять различные функции в различных системах. Например, компании нужно, чтобы информация пользователей была в одной системе, а информация о продукции – в другой системе.
  • Используется аутсорсинг (использование услуг сторонних организаций).Функции электронной коммерции иногда выполняются сторонними организациями. Например, одна компания может использовать услуги другой компании для формирования счетов-фактур.

При использовании нескольких систем (или нескольких баз данных одной системы) для доступа к информации в этих системах (или базах данных) используются распределенные транзакции. Если не использовать MS DTC, то возможны ситуации, когда не удается обеспечить свойство атомарности.

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

Примечание. Существует много способов выполнения транзакций электронной коммерции. Метод, описанный в следующем списке, не обязательно является самым лучшим способом выполнения транзакций электронной коммерции; это относительно простой метод, выбранный для того, чтобы облегчить понимание данного примера.
  1. Покупатель устанавливает соединение с Web-сервером компании Piercetronic. На данный момент он, скорее всего, просматривает статические Web-страницы и фактически не подсоединяется к базе данных.
  2. Просматривая товары, он, в конце концов, находит миску, которую хочет приобрести. Затем он выбирает этот товар, чтобы поместить его в свою покупательскую корзину.
  3. Чтобы поместить товар в покупательскую корзину, требуется выполнить две операции с базой данных:
    • Должен быть выполнен поиск, чтобы определить, какой это покупатель: уже выполнявший покупки (зарегистрированный) или новый покупатель. Если это зарегистрированный покупатель, то считывается идентификатор его счета. (Некоторые приложения делают это в момент покупки.)
    • Выбранный товар помещается в таблицу покупательской корзины.
  4. Когда покупатель указывает, что он готов оплатить покупку, начинается выполнение транзакции или набора транзакций с базой данных для осуществления следующих операций:
    • Выполняется чтение таблицы покупательской корзины, чтобы найти товар, который приобретает покупатель.
    • В таблицу заказов помещается новая строка, содержащая данный заказ.
    • Осуществляется доступ в базу данных покупателей для обновления счета данного покупателя, чтобы выписать счет-фактуру на данный заказ. Поскольку в данном примере информация счетов покупателей хранится в базе данных, отличной от базы данных, содержащей таблицу заказов, то данная транзакция становится распределенной транзакцией.
    • Теперь удаляется запись в таблице покупательской корзины. (Однако в некоторых приложениях таблица покупательской корзины очищается позже в составе пакетной операции.)
    • После обновления таблицы счетов и таблицы заказов можно фиксировать данную транзакцию. На этом выполнение распределенной транзакции заканчивается.
  5. В дальнейшем сотрудники склада компании Piercetronic выполнят доступ в базу данных и составят заказ на доставку. В частности, будут выполнены следующие транзакции:
    • Выполняется запрос к таблице заказов и считывается данный заказ.
    • Соответствующий товар снимается с полки и помещается в коробку для доставки.
    • Система компании Piercetronic подсоединяется к процессору кредитных карточек для снятия денег со счета покупателя. Эта транзакция является распределенной транзакцией, поскольку снимаемая сумма записывается также локально. (Некоторые приложения выписывают счет на карточку покупателя, когда он оплачивает сумму, но это не является типичной процедурой, поскольку получение подтверждения по кредитной карточке обычно занимает больше времени, чем можно держать открытой данную транзакцию.)
    • В составе распределенной транзакции происходит обновление таблицы заказов, а также обновление базы данных, содержащей информацию счетов, чтобы отразить факт доставки.
  6. Происходит доставка пакета с покупкой, и собака покупателя получает новую миску.

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

  • С кредитной карточки покупателя могут быть сняты деньги, а товар не будет получен.
  • Его заказ может быть помещен и доставлен без снятия денег с его кредитной карточки.
  • Таблица заказов может быть обновлена, чтобы указать доставку товара, а фактическая доставка не будет выполнена.

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