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