СПАСОИ (10) - Лекция №14 - Анализ и выбор архитектуры (продолжение)
...начало
Анализ и выбор архитектуры распределённой системы
Интероперабельные системы
Веб-сервисы
Пример разработок 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 имя_пользователя.таблица@имя_канала;
Синхронная и асинхронная репликация
Транзакция - совокупность изменений в БД, которая должна быть выполнена вся или ни одного. Атомарное обновление.
Действия, выполняемые системой для синхронной и асинхронной репликации разные.
Синхронная - фиксация изменений на серверах БД выполняется в две фазы:
- опрашиваются все серверы, участвующие в транзакции, на предмет того, готовы ли они зафиксировать изменения. Если хоть один отказался, то всем рассылается
ROLLBACK
; - если все серверы дали положительный ответ, то им высылается
COMMIT
.
Асинхронная - изменения передаются на серверы БД по мере их готовности. Если какой-либо сервер не готов принять изменения, то они сохраняются в глобальном координаторе, которые затем будут ему переданы, когда он будет готов.
Асинхронная на уровне записей без конфликтов
UPDATE котировка
SET продажа = 31, покупка = 30
WHERE код_ценной_бумаги = 0;
Перед обновлением на клиенте выполняется команда "начать транзакцию". Все изменения в БД отражаются в журнале изменений - записи до и после обновления. По оператору "конец транзакции" выполняются следующие действия:
- запускается менеджер журнала изменений, который читает записи транзакции после обновления и передаёт их репликационному серверу;
- репликационный сервер для каждой записи транзакции по имени таблицы, имени ключевого атрибута а также по диапазону ключей ищет соответствующую строчку в таблице публикаций. Для нашего примера будет найдена первая строчка;
- из таблицы Подписка определяются серверы, которые подписались на эту публикацию (у нас это сервер 2);
- соответствующая запись тиражируется на подписавшиеся серверы.
В рамках технологии существуют различные методы (не способы):
- тиражирование из первичного (где разрешается изменять данные) сервера во вторичные (где только ReadOnly);
- тиражирование из первичного сервера и его резервов;
- поточная модель тиражирования данных;
- иерархическая модель.
Из первичного во вторичный
Все изменения тиражируются с первичного на вторичные серверы в соответствии с подпиской.
Преимущества:
- позволяет избежать дублирования и зацикливания. В принципе, все реплики можно сделать первичными, если снабдить каждое обновление временной меткой;
- обеспечивает целостность БД, так как первичный сервер выполняет распространение изменение всей транзакции.
Данный метод реализован практически во всех СУБД.
продолжение...