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

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество
Перейти к навигации Перейти к поиску
м (ссылка вперёд)
Строка 92: Строка 92:
# из таблицы Подписка определяются серверы, которые подписались на эту публикацию (у нас это сервер 2);
# из таблицы Подписка определяются серверы, которые подписались на эту публикацию (у нас это сервер 2);
# соответствующая запись тиражируется на подписавшиеся серверы.
# соответствующая запись тиражируется на подписавшиеся серверы.
В рамках технологии существуют различные методы (не способы):
# тиражирование из первичного (где разрешается изменять данные) сервера во вторичные (где только ReadOnly);
# тиражирование из первичного сервера и его резервов;
# поточная модель тиражирования данных;
# иерархическая модель.
===== Из первичного во вторичный =====
Все изменения тиражируются с первичного на вторичные серверы в соответствии с подпиской.
Преимущества:
* позволяет избежать дублирования и зацикливания. В принципе, все реплики можно сделать первичными, если снабдить каждое обновление временной меткой;
* обеспечивает целостность БД, так как первичный сервер выполняет распространение изменение всей транзакции.
Данный метод реализован практически во всех СУБД.


{{Forward|l=СПАСОИ (10) - Лекция №15 - Анализ и выбор архитектуры (продолжение)}}
{{Forward|l=СПАСОИ (10) - Лекция №15 - Анализ и выбор архитектуры (продолжение)}}

Версия от 14:29, 24 мая 2013

...начало

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

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

Веб-сервисы

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

Надо сказать, что ADO.NET уже считается устаревшим. На смену ему стали использоваться, например, LINQ (без языка запросов) и LINQ to SQL.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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