Введение
Самостабилизация – это концепция обеспечения отказоустойчивости в распределенных системах. Независимо от начального состояния, самостабилизирующаяся распределенная система в конечном числе шагов выполнения придет к корректному состоянию. На первый взгляд, гарантия самостабилизации может показаться менее надежной, чем традиционная отказоустойчивость алгоритмов, которые стремятся гарантировать, что система всегда остается в корректном состоянии при определенных переходах состояний. Однако, традиционная отказоустойчивость не всегда достижима. Например, ее нельзя обеспечить при запуске системы в некорректном состоянии или при ее повреждении злоумышленником. Более того, из-за своей сложности, распределенные системы очень трудно отлаживать и анализировать. Следовательно, предотвратить переход распределенной системы в некорректное состояние крайне сложно. Фактически, некоторые формы самостабилизации внедрены во многие современные компьютерные и телекоммуникационные сети, поскольку они позволяют справляться с ошибками, которые не были учтены при проектировании алгоритма. Спустя много лет после основополагающей работы Эдсгера Дейкстры в 1974 году, эта концепция остается актуальной, поскольку она закладывает важную основу для самоорганизующихся компьютерных систем и систем, устойчивых к сбоям. В результате, статья Дейкстры получила награду ACM PODC Influential Paper Award в 2002 году – одно из самых престижных признаний в сообществе распределенных вычислений. Кроме того, после смерти Дейкстры награда была переименована и теперь называется Премия Дейкстры.
Self stabilization is a concept of fault tolerance in distributed systems. Given any initial state, a self stabilizing distributed system will end up in a correct state in a finite number of execution steps. At first glance, the guarantee of self stabilization may seem less promising than that of the more traditional fault tolerance of algorithms, that aim to guarantee that the system always remains in a correct state under certain kinds of state transitions. However, that traditional fault tolerance cannot always be achieved. For example, it cannot be achieved when the system is started in an incorrect state or is corrupted by an intruder. Moreover, because of their complexity, it is very hard to debug and to analyze distributed systems. Hence, it is very hard to prevent a distributed system from reaching an incorrect state. Indeed, some forms of self stabilization are incorporated into many modern computer and telecommunications networks, since it gives them the ability to cope with faults that were not foreseen in the design of the algorithm. Many years after the seminal paper of Edsger Dijkstra in 1974, this concept remains important as it presents an important foundation for self managing computer systems and fault tolerant systems. As a result, Dijkstra's paper received the 2002 ACM PODC Influential Paper Award, one of the highest recognitions in the distributed computing community. Moreover, after Dijkstra's death, the award was renamed and is now called the Dijkstra Award.
История
Э. В. Дейкстра в 1974 году представил концепцию самостабилизации, что послужило стимулом для дальнейших исследований в этой области. Его демонстрация включала представление самостабилизирующихся алгоритмов взаимного исключения. Он также показал первые самостабилизирующиеся алгоритмы, не опиравшиеся на жесткие предположения о системе. Некоторые предыдущие протоколы, использовавшиеся на практике, действительно стабилизировались, но лишь при условии существования глобального системного времени и известной верхней границы длительности каждого системного перехода. Лишь десять лет спустя, на конференции 1983 года под названием "Симпозиум по принципам распределенных вычислений", Лесли Лампорт указал на значимость работы Дейкстры, после чего исследователи обратили внимание на эту элегантную концепцию устойчивости к сбоям. В своем докладе Лампорт заявил: "Я считаю это самой выдающейся работой Дейкстры, по крайней мере, его самой выдающейся опубликованной статьей. Она почти неизвестна. Я считаю ее вехой в исследованиях отказоустойчивости. Я считаю самостабилизацию очень важной концепцией в отказоустойчивости и весьма перспективным направлением для исследований."
Обзор
Распределенный алгоритм самостабилизируется, если, начиная с произвольного состояния, он гарантированно сходится к легитимному состоянию и остается в легитимном множестве состояний впоследствии. Состояние считается легитимным, если, начиная с этого состояния, алгоритм удовлетворяет своей спецификации. Свойство самостабилизации позволяет распределенному алгоритму восстанавливаться после кратковременной неисправности, независимо от ее природы. Более того, самостабилизирующемуся алгоритму не требуется инициализация, поскольку он в конечном итоге начинает работать правильно, независимо от начального состояния. В работе Дикстры, представляющей концепцию самостабилизации, приводится пример в контексте "токенового кольца" – сети компьютеров, расположенных по кругу. В этом случае каждый компьютер или процессор может "видеть" полное состояние процессора, непосредственно предшествующего ему, и это состояние может указывать на то, что у процессора "есть токен" или "нет токена". Когда подобные проверки были часто очень сложными и требовали много времени, такое поведение считалось желательным. (Метод, описанный в вышеупомянутой статье, собирает огромное количество информации со всей сети в одном месте; после этого он пытается определить, является ли собранное глобальное состояние корректным; даже само это определение может быть сложной задачей).
Временная сложность
Временная сложность самостабилизирующегося алгоритма измеряется в (асинхронных) раундах или циклах. Раунд – это кратчайшая траектория выполнения, в которой каждый процессор выполняет хотя бы один шаг. Аналогично, цикл – это кратчайшая траектория выполнения, в которой каждый процессор выполняет хотя бы одну полную итерацию своего повторяемо выполняемого списка команд. Для измерения времени стабилизации выхода определяется подмножество переменных состояния, которое является внешне видимым (выходом). Определенные состояния выхода определяются как корректные (допустимые). Считается, что множество выходов всех компонентов системы стабилизировалось в момент, когда оно начинает быть корректным, при условии, что оно остается корректным неопределенно долго, если не возникают дополнительные сбои. Время стабилизации выхода – это время (количество (асинхронных) раундов) до момента стабилизации выхода.
Связанная работа
Расширение концепции самостабилизации – это суперстабилизация. Цель суперстабилизации – работа с динамическими распределенными системами, подверженными топологическим изменениям. В классической теории самостабилизации произвольные изменения рассматриваются как ошибки, и никакие гарантии не предоставляются до тех пор, пока система не стабилизируется. В суперстабилизирующих системах существует предикат прохождения, который всегда выполняется во время переконфигурации топологии системы.