- •Общие задачи рис: обеспечение доступа к ресурсам, прозрачность, открытость, масштабируемость. Системы промежуточного уровня.
- •Синхронизация в рис: постановка задачи. Вычисление времени на локальном компьютере.
- •Принципы применения ntp/sntp-серверов точного времени.
- •Алгоритмы взаимного исключения: постановка задачи, централизованный алгоритм, распределенный алгоритм, алгоритм кольцевого маркера.
- •Реализация распределенной транзакции в субд Oracle 12c.
- •Репликация: определение, основные понятия, непротиворечивость реплик, параллельный доступ к реплике, плотная непротиворечивость, синхронная и асинхронная репликации.
- •Распространение обновлений
- •Протоколы распределения обновлений репликации: целевая (unicasting) и групповая (multicasting) рассылки, эпидемические протоколы, антиэнтпропия.
- •Надежность рис: доступность, безотказность, безопасность, ремонтопригодность. Способы достижения надежности рис.
- •Безопасность в рис: конфиденциальность, целостность, угрозы, аутентификация, авторизация, аудит, доверенная вычислительная база. Правила и механизмы защиты рис.
- •Парадигмы построения рис. Распределенные системы объектов. Реализации распределенных систем объектов. Основные принципы построение рис на платформе corba.
Надежность рис: доступность, безотказность, безопасность, ремонтопригодность. Способы достижения надежности рис.
Надежность — это термин, охватывающий множество важных требований к распределенным системам, включая:
доступность (availability); -
безотказность (reliability);
безопасность (safety);
ремонтопригодность (maintainability).
Доступность — это свойство системы находиться в состоянии готовности к работе. Обычно доступность показывает вероятность того, что система в данный момент времени будет правильно работать и окажется в состоянии выполнить свои функции, если пользователи того потребуют. Другими словами, система с высокой степенью доступности — это такая система, которая в произвольный момент времени, скорее всего, находится в работоспособном состоянии.
Под безотказностью имеется в виду свойство системы работать без отказов в течение продолжительного времени. В противоположность доступности безотказность определяется в понятиях временного интервала, а не момента времени. Система с высокой безотказностью — это система, которая, скорее всего, будет непрерывно работать в течение относительно долгого времени. Между безотказностью и доступностью имеется небольшая, но существенная разница. Если система отказывает на одну миллисекунду каждый час, она имеет доступность порядка 99,9999 %, но крайне низкую безотказность. С другой стороны, система, которая никогда не отказывает, но каждый август отключается на две недели, имеет высокую безотказность, но ее доступность составляет всего 96 %. Эти две характеристики — не одно и то же.
Безопасность определяет, насколько катастрофична ситуация временной неспособности системы должным образом выполнять свою работу. Так, многие системы управления процессами, используемые, например, на атомных электростанциях или космических кораблях, должны обладать высокой степенью безопасности. Если эти управляющие системы даже временно, на короткий срок, перестанут работать, результат может быть ужасен. Множество примеров происходивших в прошлом событий показывают, как тяжело построить безопасную систему (и может быть еще больше таких примеров ожидают нас в будущем).
Ремонтопригодность определяет, насколько сложно исправить неполадки в описываемой системе. Системы с высокой ремонтопригодностью могут также обладать высокой степенью доступности, особенно при наличии средств автоматического обнаружения и исправления неполадок. Однако, как мы увидим позже в этой главе, говорить об автоматическом исправлении неполадок гораздо проще, чем создавать способные на это системы. Часто надежные системы требуют также повышенного уровня защиты, особенно когда дело доходит до такого вопроса, как непротиворечивость.
Надежность связи между клиентом и сервером: классификация ошибок связи, сквозная передача данных (P2P), RPC, надежная групповая рассылка, масштабируемость надежной групповой рассылки, неиерархическое управление обратной связью, иерархическое управление обратной связью, атомарная групповая рассылка, виртуальная синхронность.
Основная особенность обеспечения надежности распределенных систем: отсутствие достоверной информации о реальном состоянии удаленных компонент системы.
Надежность распределенной системы: можно рассматривать как надежность распределенных серверных процессов плюс надежности связи между ними (клиент-сервер).
Типичные ошибки связи между клиентом и сервером:
1)поломка;
2) пропуски;
3) ошибки синхронизации (в т. ч. дублирование). Все усилия направлены на маскировку ошибок.
Сквозная передача данных: P2P(Point to Point), например TCP – надежный канал: маскирует потери сообщений путем подтверждения о получении данных и повторной передачи, для пользователя ошибки прозрачны, поломка (обрыв связи) – не маскируется: формируется исключение.
RPC (Remote Procedure Call): 1) не найден сервер (исключение, обычно не маскируется, иногда указывается несколько серверов или failover-сервер сообщает о причине); 2) потерян запрос от клиента к серверу (timeout на подтверждение, повторная отправка, нумерация, чтобы сервер обнаружил дублирование); 3) поломка сервера после получения запроса (timeout и думает, что потерян запрос; повторный запрос, потом увеличивается timeout и повторяет несколько раз, потом решает, что сервер поломался и ждет от него уведомления о возобновлении работы; серверы печати – часто не могут распознать дублирование); 4) потеря ответного сообщения от сервера клиенту (timeout, клиент не знает: потерялся запрос или сломался сервер, банковский запрос на перевод денег – запрос выполнен?; сервер: повтор запроса или новый запрос?); 5) поломка клиента (клиентские сообщения-сироты, а) журнал на стороне клиента, истребление сирот; б) реинкарнация: при перезапуске сообщение о новой эпохе, все старые вычисления прекращаются; в) мягкая реинкарнация: после получения сообщения о новой эпохе сервер связывается с клиентом и пытается довыполнить начатые вычисления; г) каждому запросу – срок исполнения, если не уложится сервер требует повтора).
Надежная групповая рассылка: использовать отдельный надежный (например, TCP) канал для каждого получателя возможно только, если получателей мало.
Надежная групповая рассылка: протокол, который гарантировано доставляет сообщения всем работающим в группе серверам; если считать, что группа получателей не изменяется (серверы не входят и не выходят из группы), то все просто.
Проблемы масштабируемости надежной групповой рассылки: если много получателей, то много ответов – все необходимо обработать (обратный удар); можно снизить обратный удар - получатель отправляет только сообщения об ошибках, увеличивается буфер сообщений на отправителе;
Неиерархическое управление обратной связью: SRM (Scalable Reliable Multicasting) – протокол надежной групповой рассылки: нет подтверждения о успешного приема; широковещательный групповой отклик в случае потери – другие, если потеряли, не посылают сообщения, в идеальном случае до первичного отправителя дойдет только одно сообщение об потере, но в этом случае – очень много служебных сообщений, которые требуются для обработки.
Неиерархическое управление обратной связью: статистика и перегруппировка получателей – получатели, часто имеющие ошибки в отдельную группу. Пример: групповое телевещание по истечении некоторого времени, работает лучше.
Иерархическое управление обратной связью: группа получателей разбита на множество подгрупп, организованных в виде дерева, внутри группы любая схема рассылки; у каждой группы – локальный координатор, который отвечает за обработку запросов на повторную передачу и поддерживает буфер истории.
Иерархическое управление обратной связью: если координатор потерял сообщение, то запрашивает его у другого координатора; если кто-то в группе потерял сообщение – запрашивает его у своего координатора. Декомпозиция – способ решения сложных задач: сами координаторы образуют группу.
Атомарная групповая рассылка:
1) доставка сообщения либо всем, либо никому;
2) доставка сообщений получателям в определенном порядке.
Атомарная групповая рассылка: репликация - один издатель, группа подписчиков; выполнилось изменение на издателе, одна реплика сломалась, она исключается из группы, условие вхождения после восстановления в группу – синхронизация с группой.
Виртуальная синхронность: есть группа процессов получателей; снимок состава группы – представление группы в данный момент; надежная групповая рассылка внутри группы, сломанный получатель исключается из группы (не получает групповую рассылку, все члены группы уведомляются); исправленный процесс входит в группу и синхронизируется; все это реализуется специальной надстройкой над уровнем OC
Распределенное подтверждение: постановка задачи, координатор, протокол однофазного подтверждения, протокол двухфазного подтверждения, протокол восстановления участника, протокол трехфазного подтверждения.
Постановка задачи: распределенная транзакция (двухфазная блокировка); как организовать распределенный COMMIT (distributed commit – распределенное подтверждение)? на одном из узлов РИС, может быть отказ, откатиться должны операции на всех узлах; как организовать распределенный ROLLBACK (distributed rollback – распределенный откат)?
Координатор – один из узлов распределенной системы, участвующих в распределенном подтверждении и управляющий этим процессом; как правило, координатором является инициатор распределенного подтверждения (узел, выполняющий распределенную транзакцию).
Протокол однофазного подтверждения: координатор выдал commit и сообщил всем участникам распределенной транзакции, что надо выполнить commit; если участник не может выполнить локальный commit, он не имеет механизма сообщить об этом.
Протокол двухфазного подтверждения (2PC):
координатор перед выполнением локального COMMIT, рассылает всем участникам сообщение vote_request и переходит в состояние ожидания;
участник получив vote_request проверяет может ли он выполнить COMMIT, если да, то возвращает vote_commit координатору, если не может возвращает vote_abort;
координатор собирает ответы участников, если все vote_commit, то рассылает всем участникам global_commit; если есть хотя бы один участник ответил vote_abort, то рассылает всем участникам global_ rollback;
каждый из проголосовавших участников ждет итогового сообщения координатора; если global_commit, то выполняет COMMIT, если global_rollback, то выполняет ROLLBACK (ABORT).
Основное преимущество 2PC: участник может попробовать выполнить действие предусмотренное распределенной транзакцией. Например, участник может проверить соответствие операции констрейнтам, если соответствует, то vote_commit, иначе vote_abort.
Проблема 1: участник выполнил операцию и ждет от координатора vote_request, а его нет. Устанавливается timeout, после которого отсылается координатору vote_abort и выполняется локальный ROLLBACK.
Проблема 2: координатор не получает ответов vote_commit/vote_abort от всех участников. Устанавливается timeout, после которого отсылается всем участникам global_rollback и выполняется локальный ROLLBACK (ABORT).
Проблема 3: участник не получает ответ global_commit/global_rollback от координатора. Устанавливается timeout, после которого осуществляется опрос других участников (если они есть) если, кто-то получил global_commit, то выполняется локальный COMMIT, иначе ROLLBACK (ABORT).
Процесс восстановления участника: если на узле был сбой после отправки координатору vote_commit, то после восстановления работоспособности узел должен решить, что делать COMMIT/ROLLACK(ABORT); один из вариантов связаться с другим участником или координатором выяснить; для полноценного процесса восстановления требуется сохранение информации в журналах.
Проблема 4: координатор всем отравил vote_request и сам сломался, участники никак не смогут определить, что им дальше делать; обычно ждут восстановление координатора. Поэтому 2PC – протокол блокирующего подтверждения.
Не путать с двухфазным блокированием данных при распределенной транзакции.
Протокол трехфазного подтверждения (3PC): используется редко. Суть протокола: состояние координатора и любого из участников удовлетворяет следующим 2м условиям:
нет такого состояния, при котором возможен прямой переход в состояния COMMIT или ROLLBACK (ABORT);
нет такого состояния, в котором невозможно принять итоговое решение, но возможен переход в COMMIT.
Протокол трехфазного подтверждения (3PC):
координатор рассылает всем участникам vote_request и ждет ответы;
если хотя бы один из участников отвечает vote_abort, координатор рассылает всем global_rollback;
если все участники ответили vote_commit, координатор рассылает всем prepare_commit;
если все участники ответили redy_commit, координатор рассылает всем global_commit;
если участник получил global_commit, он выполняет локальный COMMIT.
Проблема 1: координатор в состоянии PRECOMMIT не дождался ответа redy_commit от участника, после timeout делает вывод об отказе участника, исключает его из группы и остальным высылает global_commit; участник после обнаружения, что он вне группы, запускает процедуру включения в группу с восстановлением.
Проблема 2: участник может заблокироваться в состояниях REDY или PRECOMMIT; связывается с другим участником и выясняет состояние; если все участники находятся в PRECOMMIT выполняется локальный COMMIT.
Восстановление РИС: прямое и обратное исправление, устойчивое хранилище, граница восстановления, непротиворечивый срез, независимое и координированное создание контрольных точек, двухфазный протокол блокировки, инкрементные снимки состояния, протоколирование сообщений, кусочно-детерминированная модель.
Основа отказоустойчивости: восстановление после ошибок.
Два способа восстановления после ошибок: обратное исправление, прямое исправление.
Обратное исправление: возвращение системы из текущего ошибочного состояния в предыдущее безошибочное состояние. Для этого периодически на узлах делаются контрольные точки, к которым можно откатиться. Точки необходимо синхронизировать (в начале семестра рассматривался алгоритм сохранения состояния всей распределенной системы). Пример: БД. Пример: связь – запрос на повторную отправку пакета. Этот метод применяется чаще. Обратное исправление – затратный механизм (контрольная точки). Не все операции являются обратимыми. Контрольные точки применяются совместно с протоколированием (протоколы – информация о сообщениях, откат и накат). Протоколы могут размещаться как на координаторе так и на участнике.
Прямое исправление: выполняется не откат, а накат, делается попытка перевести систему в новое согласованное состояние. Пример: связь – восстановление потерянного пакета из других (при блочном кодировании).
Хранилища данных 3 вида: оперативная память (после выключения или отказа процессора стирается), дисковая память (поломка головок); устойчивые хранилища.
Устойчивые хранилища: RAID: зеркало, stripping, специальные диски для кодов исправления и пр.
Контрольная точка: непротиворечивый глобальный снимок распределенной системы (принципы построения рассматривались в начале курса), сохраненный в устойчивом хранилище.
Граница восстановления: последний распределенный непротиворечивый снимок состояния, который соответствует непротиворечивому срезу.
Непротиворечивый срез: множество локальных снимков состояния, образующих распределенный непротиворечивый снимок. Задача при восстановлении – найти такой срез. В локальных снимках не должны быть зафиксированы принятые сообщения, отправка которых не зафиксирована в других локальных снимках образующих глобальный снимок.
Независимое создание контрольных точек: локальные снимки создаются независимо друг от друга. Такой подход может привести к каскадному откату в самое начало – эффект домино.
Координированное создание контрольных точек: создание контрольных точек с помощью синхронизации всех процессов. Полученная контрольная точка является глобально непротиворечивой. Можно использовать алгоритм распределенного снимка, рассмотренный выше.
Двухфазный протокол блокировки: 1) координатор рассылает запрос checkpoint_request; 2) узел, получивший checkpoint_request, создает локальную контрольную точку, отправляет координатору checkpoint_response, все дальнейшие выходные сообщения буферизирует; 3)координатор получив от всех узлов checkpoint_response, отправляет всем узлам checkpoint_done; 4) узел, получив checkpoint_done, последовательно отправляет сообщения из очереди (восстановление).
Инкрементные снимки состояния: узел-координатор, имеет сохраненное локальной состояние; 1) рассылает checkpoint_request только тем узлам, которым оправлял сообщения после последнего сохраненного состояния, все дальнейшие выходные сообщения буферизируются; 2) узлы, получившие checkpoint_request, рассылают сообщения в узлы, в которые они оправляли сообщения после последнедего сохранения состояния, все входные сообщения буферизируются; 3) и т.д; 4) получив checkpoint_response от всех узлов выполняет сохранение состояния и отправку checkpoint_response; 5) координатор получив ото всех checkpoint_response, оправляет им же checkpoint_done для дальнейшего распространения и разблокировки.
Протоколирование сообщений: создание контрольных точек – затратная операция, технология сокращающая затраты – протоколирование сообщений. Протоколирование сообщений – запись в устойчивое хранилище всех сообщений между контрольными точками. Позволяет сократить количество контрольных точек за счет возможности повторить сообщения. Аналогия: полная резервная копия базы данных и журнал повтора (Oracle).
Кусочно-детерминированная модель: получение сообщений в общем случае не детерминированно, если есть механизм, позволяющий правильно упорядочивать события, то их можно протоколировать, т.е. задавать событиям вполне определенный порядок. Протоколирование позволяет процесс восстановления сделать детерминированным, т.е. при каждом повторе восстановления будет получен одинаковый результат.
