СПАСОИ (10) - Лекция №14 - Анализ и выбор архитектуры (продолжение)

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана - студенческое сообщество
Перейти к: навигация, поиск

...начало

Arrow left.png

Анализ и выбор архитектуры распределённой системы

Интероперабельные системы

Веб-сервисы

Пример разработок Microsoft:

10semSPASOIl14pic1.png

Надо сказать, что ADO.NET уже считается устаревшим. На смену ему стали использоваться, например, LINQ (без языка запросов) и LINQ to SQL. Неверно, LINQ работает под ADO.NET. Существуют три отдельные технологии ADO.NET LINQ: LINQ to DataSet, LINQ to SQL и LINQ to Entities. Технология LINQ to DataSet обеспечивает расширенные и оптимизированные запросы к DataSet, LINQ to SQL позволяет запрашивать непосредственно схемы базы данных SQL Server, а LINQ to Entities позволяет выполнять запросы к EDM (модель данных с использованием сущностей). http://msdn.microsoft.com/ru-ru/library/bb399365(v=vs.110).aspx

Пользователь читает из каталогов информацию о веб-сервисах и формирует XML-сообщение для доступа к нужному сервису. Результаты обращения возвращаются также в XML виде.

Тиражирование данных

Или репликации. Это автоматическое копирование изменённых данных с одного сервера на другой.

Плюсы тиражирования:

  • увеличивается производительность системы - пользователям из одного города для получения котировок из другого города достаточно обратиться к своему локальному серверу, а не к удалённому в другом городе;
  • надёжность - если один сервер вышел из строя, то ничего страшного, полная копия данных имеется и на другом сервере.

Зачем нужно тиражирование

10semSPASOIl14pic2.png

Изменения котировок на московской бирже обязательно должны реплицироваться на сервера питерской биржи и наоборот.

Классификация способов тиражирования

Следующие способы:

  • традиционная (снимки);
  • усовершенствованная:
    • синхронная;
    • асинхронная:
      • пакетная;
      • на уровне записей:
        • без конфликтов (одна Master реплика, остальные ReadOnly);
        • с обнаружением конфликтов:
          • с ручным разрешением конфликтов;
          • с автоматическим разрешением конфликтов.

Тиражирование на основе снимков

10semSPASOIl14pic3.png

Описание канала связи:

CREATE DATABASE LINK имя_канала
CONNECT TO имя_пользователя
IDENTIFIED пароль
USING спецификация_описание_узла_сервера_БД;

Описание снимка:

CREATE SNAPSHOT имя_снимка
REFRESH FAST|COMPLETE
-- снимок на сервере 2 будет обновляться каждые 7 дней с момента даты создания снимка
NEXT Sysdate+7
-- оператор SELECT автоматически пересылается на удалённый сервер БД при запросе обновления
SELECT * FROM имя_пользователя.таблица@имя_канала;

Синхронная и асинхронная репликация

Транзакция - совокупность изменений в БД, которая должна быть выполнена вся или ни одного. Атомарное обновление.

Действия, выполняемые системой для синхронной и асинхронной репликации разные.

Синхронная - фиксация изменений на серверах БД выполняется в две фазы:

  1. опрашиваются все серверы, участвующие в транзакции, на предмет того, готовы ли они зафиксировать изменения. Если хоть один отказался, то всем рассылается ROLLBACK;
  2. если все серверы дали положительный ответ, то им высылается COMMIT.

Асинхронная - изменения передаются на серверы БД по мере их готовности. Если какой-либо сервер не готов принять изменения, то они сохраняются в глобальном координаторе, которые затем будут ему переданы, когда он будет готов.

Асинхронная на уровне записей без конфликтов

10semSPASOIl14pic4.png
UPDATE котировка
SET продажа = 31, покупка = 30
WHERE код_ценной_бумаги = 0;

Перед обновлением на клиенте выполняется команда "начать транзакцию". Все изменения в БД отражаются в журнале изменений - записи до и после обновления. По оператору "конец транзакции" выполняются следующие действия:

  1. запускается менеджер журнала изменений, который читает записи транзакции после обновления и передаёт их репликационному серверу;
  2. репликационный сервер для каждой записи транзакции по имени таблицы, имени ключевого атрибута а также по диапазону ключей ищет соответствующую строчку в таблице публикаций. Для нашего примера будет найдена первая строчка;
  3. из таблицы Подписка определяются серверы, которые подписались на эту публикацию (у нас это сервер 2);
  4. соответствующая запись тиражируется на подписавшиеся серверы.

Arrow right.png

продолжение...