Диссертация (1148255), страница 15
Текст из файла (страница 15)
Неполучив от Копии ответа в течение заданного времени, Сервер делает вывод овыходе Копии из строя и назначает один из Клиентов новой Копией, отправивему специальное сообщение. Поскольку все узлы поддерживают текущее состояние блокировок в актуальном состоянии, любой из них может занять рольКопии.Выход из строя Сервера возможен в следующих случаях:1. После получения сообщения CLN_ASK_SRV_*_LOCK.Копия отслеживает появление таких сообщений и ожидает получить отСервера сообщение SRV_ASK_BCK_*_LOCK в течение заданного времени. Если ожидаемое сообщение не было получено, Копия «делает вывод» о вы1Этот и другие таймауты определяются низлежащим сетевым уровнем и зависят от способа организациимеханизма упорядоченной доставки широковещательных сообщений.86ходе Сервера из строя и берёт на себя его роль.
Один из Клиентов назначается новым Сервером новой Копией, и система продолжает работу.2. После получения сообщения BCK_CNF_SRV_*_LOCK.ЗдесьКопияотслеживаетотправкуСерверомсообщенияSRV_CNF_CLN_*_LOCK и, в случае его отсутствия, действует аналогичнопредыдущему пункту.3. ПослеполучениясообщенияCLN_ASK_SRV_UPDATEилиCLN_ASK_SRV_RELEASE_LOCK.Сервер должен отреагировать сообщением SRV_ASK_BCK_UPDATE илиSRV_ASK_BCK_RELEASE_LOCK.
Обработка аналогична пунктам выше.4. ПослеполучениясообщенияBCK_CNF_SRV_UPDATEилиBCK_CNF_SRV_RELEASE_LOCK.Сервер должен отреагировать сообщением SRV_CNF_CLN_UPDATE илиSRV_CNF_CLN_RELEASE_LOCK соответственно. Обработка аналогична пунктам выше.5. При выделении блокировки следующему по очереди узлу.Копия не поддерживает очереди запросов на блокировки и не может распознать такую ситуацию. Однако если узел, ожидающий выполнения запроса на блокировку, не обнаруживает активности Сервера в течение заданного времени, то запрос на блокировку повторяется.
В этом случаеКопия отработает процедуру согласно пункту 1.Одновременный выход из строя Сервера и Копии является максимальносложным случаем. Ситуация определяется по отсутствию активности Сервера втечение длительного времени. В этом случае Клиент с минимальным значениемID берет роль Сервера на себя и назначает новую Копию. Список имеющихсяID предоставляется системой гарантированной доставки сообщений1 .1Что выглядит лишней связью между уровнями абстракции, и в перспективе данный механизм может873.5. Программная архитектура3.5.1.
Верхнеуровневая архитектураНа верхнем уровне узел МАС, функционирующий под управлением ОСРВМАКС с интегрированным решением МАКС DSM можно представить в виде,изображенном на рис. 3.2.Рисунок 3.2 – МАКС DSM в составе функционирующего узла МАСОсновными компонентами являются:1. Прикладное ПО. Соответствует пользовательскому приложению, разработанному для функционирования под управлением ОСРВ МАКС и использующему возможности МАКС DSM для совместной работы с даннымигруппы устройств в системе.2.
Прикладной интерфейс МАКС DSM. Предоставляет интерфейс для исбыть реализован иначе.88пользования разделяемых данных. Содержит средства для описания разделяемых переменных, а также определения секций доступа.3. Ядро МАКС DSM. Содержит алгоритмы DSM и осуществляет реализацию прикладного интерфейса. Выполняет операции, необходимые для совместного доступа к данным (блокировки, копирование, управление объектами синхронизации), формирует и обрабатывает сообщения протоколаDSM, обеспечивает выполнение узлом назначенной ему роли.4.
Радиомодуль. Аппаратура для передачи данных через эфир. Содержитприемопередатчик и средства управления им.5. ОСРВ МАКС. Является средой для выполнения всех программных компонентов. Управляет пользовательскими и служебными задачами, предоставляет интерфейс к аппаратуре, содержит вспомогательные алгоритмы,а также указанные ниже компоненты.6. Сетевой уровень.
Служит для приёма и отправки широковещательныхсообщений с гарантированной доставкой. Является низлежащим уровнемсистемы связи относительно МАКС DSM.7. Драйвер радиомодуля. Предоставляет программный интерфейс к возможностям радиомодуля. Преобразует пакеты сетевого уровня для отправкичерез физический канал и обратно.Результаты данного исследования воплощены в компонентах, указанныхв списке выше под номерами 2 и 3. Однако так как реализация прикладногоинтерфейса МАКС DSM уже была достаточно подробно рассмотрена в разделе3.1, сосредоточимся на описании ядра созданной системы.3.5.2. Основные компоненты ядра МАКС DSMВ нотации UML основные классы МАКС DSM представлены на рис. 3.3.Используется упрощенный вариант нотации (опущена информация по членам89классов, а также множество менее значимых классов).Рисунок 3.3 – Основные классы МАКС DSM в нотации UMLОсновой реализации МАКС DSM является класс DSM_Node.
Существуетединственный экземпляр этого класса для каждого узла (паттерн проектирования «Одиночка»). Объект хранит всю информацию, относящуюся к МАКСDSM, контролирует приём и передачу сообщений через низлежащий сетевойуровень, а также обеспечивает пользовательский интерфейс, представленныйсекциями доступа к разделяемым данным.Для хранения информации о разделяемых данных предназначен классDSM_Context. Список экземпляров классов данного типа хранится внутриDSM_Node.
В DSM_Context также содержится опущенная на схеме информация о состоянии блокировки, очередь запросов на блокировку (см. классDSM_LockReq), мьютексы, обеспечивающие потокобезопасность, а также отраженный на схеме список объектов типа MDSM_Shared для секций, ожидающихизменения данных.Класс MDSM_Shared служит для работы с разделяемой переменной. Существует единственный экземпляр, хранящий её текущее значение. Помимо этого,могут быть созданы экземпляры с копией значения, используемые в секцияхдля отслеживания изменений и мгновенного доступа без блокировки.90Сообщения МАКС DSM представлены классом DSM_Msg.Для получениясообщений служит класс DSM_RecvTask (задача ОСРВ МАКС).
Он получаетпакет из низлежащего сетевого уровня, преобразует этот пакет в сообщение, и,в зависимости от типа сообщения, вызывает метод из DSM_Node для его обработки. Кроме этого, производится фильтрация сообщений – таким образом, узел всистеме получает только те сообщения, что предназначены для его роли.Класс DSM_LockReq представляет собой запрос на блокировку. Он содержит ID узла, пытающегося осуществить блокировку и признак эксклюзивности доступа.
Экземпляры образуют очередь FIFO, связанную с объектомDSM_Context. После того, как разделяемая переменная становится доступнадля блокировки, Сервер выбирает из очереди следующий по порядку запроси выполняет соответствующую операцию. Если требуется неэксклюзивная блокировка, то в течение одного сеанса будут удовлетворены все запросы данноготипа в очереди, так как они не зависят друг от друга, и принципы моделиконсистентности не нарушаются.3.6. ЭкспериментВ данном разделе рассмотрим простую задачу, демонстрирующую работоспособность созданной системы МАКС DSM.Постановка задачиПусть необходимо обеспечить отказоустойчивое выполнение некоторой вычислительной задачи несколькими устройствами. Под отказоустойчивостьюздесь понимается продолжение выполнения задачи при выходе из строя одногоили более произвольных устройств системы до тех пор, пока остаётся, по крайней мере, одно исправное устройство.
При выходе из строя устройств системы,потери данных (промежуточных результатов) решаемой задачи происходить недолжно.91Решение задачиПод вычислительной задачей примем простое увеличение целочисленного счётчика. Система будет состоять из трёх устройств, аналогичных описанным в разделе 3.7.1 и дополненных цветными LCD экранами. Имитация выходаустройств из строя производится путём их выключения (отключения питания).Визуализация работы системы производится путём отображения на экранахустройств текущего значения счётчика. С целью повышения наглядности, увеличение счётчика должно происходить примерно один раз в секунду.Ключевые фрагменты программы представлены на рис.
3.4, при этом опущен код для создания потоков и реализация функции Show, осуществляющейвывод на экран.1 MDSM_DECLARE(X)2int c o u n t e r ;3 MDSM_DECLARE_END45// Поток №16while ( true )7{8MDSM_ACCESS_RW(X)9++ MDSM_ITEM( c o u n t e r ) ;10Task : : Delay ( 1 SEC ) ;1112MDSM_ACCESS_END}1314// Поток №215while ( true )16{17MDSM_ACCESS_ON(X)18Show (MDSM_ITEM( c o u n t e r ) ) ;1920MDSM_ACCESS_END}Рисунок 3.4 – МАКС DSM программа «счётчик»Аналогично представленному в разделе 3.1 примеру, в строках 1–3 опре92деляется группа распределённых переменных с именем , содержащая единственную переменную counter.Строки 6–12 являются ключевыми – именно здесь выполняется «вычислительная задача» – увеличение распределённого счётчика.
Данный код выполняется в отдельном потоке и представляет собой бесконечный цикл, что, однако,не приводит к повышенной нагрузке на процессор, так как фрагмент содержитпаузу в одну секунду, а также операцию MDSM_ACCESS_RW, которая блокируетвыполнение потока до момента осуществления распределённой блокировки. Таккак модификация счётчика выполняется в секции, определяемой конструкцией MDSM_ACCESS_RW, гарантируется, что лишь одно устройство в один моментвремени изменяет счетчик.
Задержка же, размещенная внутри критической секции, гарантирует, что блокировки не будут случаться чаще, чем раз в секунду.Как только время задержки истечёт, будет осуществлена блокировка другим(или тем же самым)1 устройством и выполнится очередное увеличение значения счётчика.Строки 15–20 показывают содержимое второго потока, отвечающего заотображение значения счётчика на экране. Здесь используется секция, блокирующая выполнение потока до возникновения события изменения распределённых данных.
Как только текущее устройство обнаружит факт изменения, выполнится вход в секцию (причём значением объектов группы будет результат произошедшего обновления). Функция Show выводит значение, переданноев качестве параметра на экран. После выхода из секции начинается новый цикложидания.После загрузки данной программы в тестовые устройства, отладочныйстенд вёл себя в полном соответствии с ожиданиями: устройства отображалиодно и то же значение, возрастающее на единицу каждую секунду2 . При этом1Поскольку узел МАКС DSM, выполняющий роль Сервера (см. раздел 2.2.2), поддерживает очередизапросов на блокировки, запрос от текущего устройства окажется в конце очереди, а блокировку получиткакое-то другое устройство.
Впрочем, это не существенно для выполнения условий поставленной задачи.2Возникновения дополнительных задержек удалось избежать благодаря поддержке очередей запросов93отображение нового значения выполнялось на всех устройствах синхронно1 .Выполнение требования отказоустойчивости было проверено методом бетатестирования – в серии экспериментов произвольным образом отключалось питание у одного, а затем и второго устройства из трёх. Ни в одном из эксперименов сбоя системы добиться не удалось – счётчик корректно и монотонноувеличивался на остающихся устройствах (остающемся устройстве).
Однако было замечено, что секундная задержка в случае выключения устройств не всегдавыдерживается. Проведенный анализ показал, что:1. Если устройство владеет блокировкой и отсчитывает секундную паузу,выключение такого устройства в самом начале его отсчёта приводит ксокращению паузы между приращениями счётчика. Это происходит попричине передачи блокировки другому устройству, которое при её получении сразу выполняет увеличение счётчика, и только затем начинаетотсчитывать новую задержку. Таким образом, информация о задержкеотключённого устройства теряется.2. Выключение Сервера примерно в момент завершения интервала задержки приводит к увеличению стандартной паузы за счет дополнительноговремени, необходимого на восстановление Сервера.Эффект под номером 2 визуально заметить сложно, однако первый эффект вполне различим, и его можно усилить, увеличив интервал задержки донескольких секунд.