Аноним

Детекторы сбоев: различия между версиями

Материал из WEGA
м
 
(не показано 13 промежуточных версий этого же участника)
Строка 1: Строка 1:
== Ключевые слова и синонимы ==
== Ключевые слова и синонимы ==
Частичная синхронность; тайм-ауты; информация о сбоях; распределенные оракулы
Частичная синхронность (''Partial synchrony''); тайм-ауты (''Time-outs''); информация о сбоях (''Failure information''); распределенные оракулы (''Distributed oracles'')


== Постановка задачи ==
== Постановка задачи ==
Распределенная система состоит из набора процессов. Процессы обычно стремятся решить некоторую общую задачу, взаимодействуя посредством передачи сообщений или разделяемой памяти. Большинство интересных задач требуют, по крайней мере, на определенных этапах вычислений, некоторой формы ''согласования'' между процессами. Абстрактной формой такого согласования является ''консенсус'', когда процессам необходимо договориться об одном значении из множества предложенных. Решение этой, казалось бы, элементарной задачи лежит в основе надежных распределенных вычислений и, в частности, распределенных баз данных, полного упорядочения сообщений и эмуляции многих типов общих объектов.
Распределенная система состоит из набора процессов. Процессы обычно стремятся решить некоторую общую задачу, взаимодействуя посредством передачи сообщений или разделяемой памяти. Большинство интересных задач требуют, по крайней мере, на определенных этапах вычислений, некоторой формы ''согласования'' между процессами. Абстрактной формой такого согласования является ''консенсус'', когда процессам необходимо договориться об одном значении из множества предложенных. Решение этой, казалось бы, элементарной задачи лежит в основе надежных распределенных вычислений и, в частности, внесения данных в распределенные базы данных, полного упорядочения сообщений и эмуляции многих типов общих объектов.




Строка 9: Строка 9:




''Сбои'' и ''асинхронность'' являются основополагающими компонентами невозможности достижения консенсуса. Эта невозможность сохраняется даже в том случае, когда только ''один'' процесс выходит из строя, и делает это только путем ''отказа'', то есть прекращения своей деятельности. Терпимость к отказам – это самое малое, чего можно ожидать от распределенной системы, поскольку сама цель применения распределенного подхода, как правило, заключается в том, чтобы избежать единых точек сбоев в централизованных архитектурах. Обычно реальные распределенные приложения демонстрируют более серьезные сбои, когда процессы могут произвольно отклоняться от назначенного им протокола.
''Сбои'' и ''асинхронность'' являются основополагающими компонентами невозможности достижения консенсуса. Эта невозможность сохраняется даже в том случае, когда только ''один'' процесс ''выходит из строя'', и делает это только путем ''аварийного завершения'', то есть полного прекращения своей деятельности. Устойчивость к аварийным завершениям – это самое малое, чего можно ожидать от распределенной системы, поскольку сама цель применения распределенного подхода, как правило, заключается в том, чтобы избежать появления единственных точек сбоев в централизованных архитектурах. Обычно реальные распределенные приложения демонстрируют более серьезные сбои, когда процессы могут произвольно отклоняться от назначенного им протокола.




Строка 15: Строка 15:




Интуитивно понятно, что способ, которым такие допущения относительно времени обходят асинхронные невозможности, заключается в предоставлении процессам ''информации о сбоях'', обычно через механизмы ''тайм-аута'' (или ''пульса''), часто лежащие в основе реальных распределенных приложений. Хотя определенную информацию о сбоях можно получить и в распределенных системах, точность такой информации может варьироваться от системы к системе в зависимости от базовой сети, нагрузки приложения и механизмов обнаружения сбоев. Важнейшей проблемой в этом контексте является определение характеристик такой информации максимально абстрактным и точным способом.
Интуитивно понятно, что способ, которым такие допущения относительно времени обходят асинхронные невозможности, заключается в предоставлении процессам ''информации о сбоях'', обычно через механизмы ''тайм-аута'' (или ''пульса''), часто лежащие в основе реальных распределенных приложений. Однако, хотя определенную информацию о сбоях в распределенных системах действительно можно получить, точность такой информации может варьироваться от системы к системе в зависимости от ее базовой сети, нагрузки приложения и механизмов обнаружения сбоев. Важнейшей проблемой в этом контексте является определение характеристик такой информации максимально абстрактным и точным способом.


== Основные результаты ==
== Основные результаты ==
'''Абстракция детектора сбоев'''
'''Абстракция детектора сбоев'''


Чандра и Туэг [5] определяют абстракцию ''детектора сбоев'' как простой способ получения информации о сбоях, необходимой для обхода асинхронных невозможностей, в частности, невозможности консенсуса. Модель, рассмотренная в [5], представляет собой модель передачи сообщений, в которой могут возникать сбои процессов путем их ''аварийного завершения''. Такие процессы прекращают свою деятельность и не восстанавливаются. Процессы, не ведущие к аварийному завершению, считаются корректными. Предполагается, что в каждом выполнении системы хотя бы один процесс должен быть ''исправным''.
Чандра и Туэг [5] определяют абстракцию ''детектора сбоев'' как простой способ получения информации о сбоях, необходимой для обхода асинхронных невозможностей, в особенности, невозможности консенсуса. Модель, рассмотренная в данной работе, представляет собой модель передачи сообщений, в которой процессы могут претерпевать сбои в виде их ''аварийного завершения''. Такие процессы прекращают свою деятельность и не восстанавливаются. Процессы, не ведущие к аварийному завершению, считаются ''исправными''. Предполагается, что в каждом выполнении системы хотя бы один процесс должен быть ''исправным''.




Грубо говоря, детектор сбоев представляет собой оракула, который предоставляет процессам информацию о сбоях. К оракулу обращаются на каждом шаге вычислений процесса, и он предоставляет процессу значение, содержащее некоторую информацию о сбое. Это значение выбирается из некоторого множества значений, называемого диапазоном детектора сбоев. Например, диапазон может представлять собой множество подмножеств процессов в системе, а каждое подмножество может изображать множество процессов, завершенных аварийно или считающихся исправными. Это соответствует ситуации, когда детектор сбоев реализован с использованием тайм-аута: каждый процесс q, который не общается в течение некоторого периода времени с некоторым процессом p, будет включен в подмножество процессов, для которых процесс p подозревает наличие отказа.
Грубо говоря, детектор сбоев представляет собой оракула, который предоставляет процессам информацию о сбоях. К оракулу обращаются на каждом шаге вычислений процесса, и он предоставляет процессу значение, содержащее некоторую информацию о сбое. Это значение выбирается из некоторого множества значений, называемого ''диапазоном'' детектора сбоев. Например, диапазон может представлять собой множество подмножеств процессов в системе, а каждое подмножество может изображать множество процессов, завершенных аварийно или считающихся исправными. Это соответствует ситуации, когда детектор сбоев реализован с использованием тайм-аута: каждый процесс q, который не общается в течение некоторого периода времени с некоторым процессом p, будет включен в подмножество процессов, для которых процесс p подозревает наличие отказа.




Более конкретно, детектор сбоев – это функция D, которая ассоциирует с каждой моделью сбоев F множество историй детектора сбоев fHi g = D(F). И модель отказа, и история детектора сбоев сами являются функциями.
Более конкретно, детектор сбоев – это функция D, которая ассоциирует с каждой ''моделью сбоев'' F множество ''историй детектора сбоев'' <math> \{ H_i \} = D(F)</math>. И модель отказа, и история детектора сбоев сами являются функциями.


• Модель сбоев F – это функция, связывающая с каждым временем t множество процессов F(t), переживших аварийное завершение к моменту t. Это понятие предполагает существование глобальных часов, не зависящих от процессов, а также конкретное понятие события аварийного завершения, связанное со временем. Множество шаблонов сбоев называется средой.
• Модель сбоев F – это функция, связывающая с каждым временем t множество процессов F(t), переживших аварийное завершение к моменту t. Это понятие предполагает существование глобальных часов, не зависящих от процессов, а также конкретное понятие события ''аварийного завершения'', связанное со временем. Множество моделей сбоев называется ''средой''.


• История детектора сбоев H также является функцией, которая связывает с каждым процессом p и временем t некоторое значение v из диапазона значений детектора сбоев. (Диапазон детектора сбоев D обозначается RD). Считается, что это значение v было выдано детектором сбоев D для процесса p в момент времени t.
• История детектора сбоев H также является функцией, которая связывает с каждым процессом p и временем t некоторое значение v из диапазона значений детектора сбоев. (Диапазон детектора сбоев D обозначается <math>R_D</math>). Считается, что это значение v было выдано детектором сбоев D для процесса p в момент времени t.




Строка 42: Строка 42:
Чтобы проиллюстрировать эти концепции, рассмотрим два классических примера детекторов сбоев.
Чтобы проиллюстрировать эти концепции, рассмотрим два классических примера детекторов сбоев.


1. ''Идеальный'' детектор сбоев выдает подмножество процессов, т. е. диапазон детектора сбоев представляет собой множество подмножеств процессов в системе. Когда процесс q выводится в некоторое время t процессом p, то говорят, что q ''обнаружен'' (как аварийно завершенный) процессом p. Идеальный детектор сбоев гарантирует два следующих свойства:


1. Идеальный детектор сбоев выдает подмножество процессов, т. е. диапазон детектора сбоев представляет собой множество подмножеств процессов в системе. Когда процесс q выводится в некоторое время t процессом p, то говорят, что q обнаружен (как аварийно завершенный) процессом p. Идеальный детектор сбоев гарантирует два следующих свойства:
• каждый процесс, претерпевший аварийное завершение, в конечном итоге обязательно обнаруживается;


Каждый процесс, претерпевший аварийное завершение, в конечном итоге обязательно обнаруживается;
ни один исправный процесс не обнаруживается как аварийно завершенный.


• Ни один исправный процесс не обнаруживается как аварийно завершенный.


2. ''Эвентуально сильный'' детектор сбоев выдает подмножество процессов. Когда процесс q выводится в некоторое время t процессом p, то говорят, что q ''подозревается'' (в наличии аварийного завершения) процессом p. Эвентуально сильный детектор сбоев гарантирует два следующих свойства:


2. Эвентуально сильный детектор сбоев выдает подмножество процессов. Когда процесс q выводится в некоторое время t процессом p, то говорят, что q подозревается (в наличии аварийного завершения) процессом p. Эвентуально сильный детектор сбоев гарантирует два следующих свойства:
• каждый процесс, претерпевший аварийное завершение, в конечном итоге подпадает под подозрение;


Каждый процесс, претерпевший аварийное завершение, в конечном итоге подпадает под подозрение;
некоторый корректный процесс в конечном итоге никогда не попадает под подозрение.


• Некоторый корректный процесс в конечном итоге никогда не попадает под подозрение.
 
Идеальный детектор сбоев надежен: если процесс q обнаружен, значит, он аварийно завершен. Эвентуально сильный детектор сбоев ненадежен: у нас никогда нет гарантии, что выданный результат точен. Использование термина «подозрение» передает эту идею. Различие между ненадежностью и надежностью было точно отражено в работе [14] для общего контекста, когда диапазон детектора сбоев может быть произвольным.
Идеальный детектор сбоев ''надежен'': если процесс q обнаружен, значит, он аварийно завершен. Эвентуально сильный детектор сбоев ''ненадежен'': у нас никогда нет гарантии, что выданный результат точен. Использование термина «подозрение» передает эту идею. Различие между ненадежностью и надежностью было точно отражено в работе [14] для общего контекста, когда диапазон детектора сбоев может быть произвольным.




Строка 63: Строка 64:




'''Теорема 1 (Чандра-Туэг [ ]). Существует алгоритм, который решает задачу нахождения консенсуса с помощью идеального детектора сбоев.'''
'''Теорема 1 (Чандра-Туэг [5]). Существует алгоритм, который решает задачу нахождения консенсуса с помощью идеального детектора сбоев.'''




Данная теорема неявно говорит о том, что если распределенная система предоставляет средства для реализации идеального обнаружения сбоев, то невозможность консенсуса можно обойти, даже если все процессы, кроме одного, завершаются аварийно. Фактически этот результат справедлив для любой модели сбоя, то есть в любой среде. Вторая теорема, приведенная ниже, связывает существование алгоритма консенсуса с предположением об устойчивости. Говоря более конкретно, данная теорема справедлива в мажоритарной среде, которая представляет собой множество моделей сбоев, где более половины процессов исправны.
Данная теорема неявно говорит о том, что если распределенная система предоставляет средства для реализации идеального обнаружения сбоев, то невозможность консенсуса можно обойти, даже если все процессы, кроме одного, завершаются аварийно. Фактически этот результат справедлив для любой модели сбоев, то есть в любой среде.




'''Теорема 2 (Чандра-Туэг [ ]). Существует алгоритм, который решает задачу консенсуса с помощью эвентуально сильного детектора сбоев в мажоритарной среде.'''
Вторая теорема, приведенная ниже, связывает существование алгоритма консенсуса с предположением об устойчивости. Говоря более конкретно, данная теорема справедлива в ''мажоритарной'' среде, или ''среде большинства'', которая представляет собой множество моделей сбоев, где более половины процессов исправны.




Алгоритм, лежащий в основе приведенного выше результата, похож на алгоритмы эвентуально синхронного консенсуса [10], а также имеет некоторое сходство с алгоритмом Паксос [18].
'''Теорема 2 (Чандра-Туэг [5]). Существует алгоритм, который решает задачу консенсуса с помощью эвентуально сильного детектора сбоев в мажоритарной среде.'''
 
 
Алгоритм, лежащий в основе приведенного выше результата, похож на алгоритмы ''эвентуально синхронного'' консенсуса [10], а также имеет некоторое сходство с алгоритмом Паксос [https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B0%D0%BA%D1%81%D0%BE%D1%81] [18].
   
   


В работе [5] было показано, что ни один алгоритм, использующий только конечный детектор сильных сбоев, не может решить задачу консенсуса без предположения о большинстве. (В [14] этот результат обобщен на любой ненадежный детектор сбоев). Эта нижняя граница устойчивости интуитивно объясняется возможностью наличия разбиений в системе передачи сообщений, где по крайней мере половина процессов может завершиться аварийно, а детектор сбоев ненадежен. Скажем, в разделяемой памяти такой возможности нет, и задача консенсуса может быть решена с помощью эвентуально сильного сбоя [19].
В работе [5] было показано, что ни один алгоритм, использующий только эвентуально сильный детектор сбоев, не может решить задачу консенсуса без предположения о большинстве. (В [14] этот результат обобщен на любой ненадежный детектор сбоев). Эта нижняя граница устойчивости интуитивно объясняется возможностью наличия разбиений в системе передачи сообщений, где по крайней мере половина процессов может завершиться аварийно, а детектор сбоев ненадежен. Скажем, в разделяемой памяти такой возможности нет, и задача консенсуса может быть решена с помощью ''эвентуально сильного'' детектора сбоев [19].




'''Редукции детекторов сбоев'''
'''Редукции детекторов сбоев'''


Детекторы сбоев можно сравнивать друг с другом. Считается, что детектор сбоев <math>D_2</math> ''слабее'' детектора сбоев <math>D_1</math>, если существует асинхронный алгоритм, называемый алгоритмом ''редукции'', который может эмулировать <math>D_2</math>, используя <math>D_1</math>. Здесь важно сделать три замечания.


Детекторы сбоев можно сравнивать друг с другом. Считается, что детектор сбоев D2 слабее детектора сбоев D1, если существует асинхронный алгоритм, называемый алгоритмом редукции, который может эмулировать D2, используя D1. Здесь важно сделать три замечания.
• То, что алгоритм редукции является асинхронным, означает, что он не использует никакого другого источника информации о сбоях, кроме <math>D_1</math>.


• То, что алгоритм редукции является асинхронным, означает, что он не использует никакого другого источника информации о сбоях, кроме D1.
• Эмуляция детектора сбоев <math>D_2</math> означает реализацию распределенной переменной, которая имитирует выходной результат, который мог бы предоставить <math>D_2</math>.
 
• Эмуляция детектора сбоев D2 означает реализацию распределенной переменной, которая имитирует выходной результат, который мог бы предоставить D2.


• Существование алгоритма редукции зависит от среды. Поэтому, строго говоря, тот факт, что один детектор сбоев слабее другого, зависит от рассматриваемой среды.
• Существование алгоритма редукции зависит от среды. Поэтому, строго говоря, тот факт, что один детектор сбоев слабее другого, зависит от рассматриваемой среды.




Если детектор сбоев D1 слабее D2 и наоборот, то считается, что D1 и D2 эквивалентны. В противном случае, если D1 слабее D2, а D2 не слабее D1, то говорят, что D1 строго слабее D2. Опять же, строго говоря, эти понятия зависят от рассматриваемой среды.
Если детектор сбоев <math>D_1</math> слабее <math>D_2</math> и наоборот, то считается, что <math>D_1</math> и <math>D_2</math> ''эквивалентны''. В противном случае, если <math>D_1</math> слабее <math>D_2</math>, а <math>D_2</math> не слабее <math>D_1</math>, то говорят, что <math>D_1</math> ''строго слабее'' <math>D_2</math>. Опять же, строго говоря, эти понятия зависят от рассматриваемой среды.




Возможность сравнивать детекторы сбоев помогает определить понятие самого слабого детектора сбоев для решения этой задачи. Детектор сбоев D является самым слабым для решения задачи P, если выполняются два следующих условия:
Возможность сравнивать детекторы сбоев помогает определить понятие ''самого слабого'' детектора сбоев для решения этой задачи. Детектор сбоев D является самым слабым для решения задачи P, если выполняются два следующих условия:


• Существует алгоритм, который решает задачу P с помощью детектора D.
• Существует алгоритм, который решает задачу P с помощью детектора D.


• Если существует алгоритм, который решает P с помощью некоторого детектора сбоев D0, то D слабее, чем D0.
• Если существует алгоритм, который решает P с помощью некоторого детектора сбоев D', то D слабее, чем D'.




'''Теорема 3 (Чандра-Хадзилакос-Туэг [ ]). Эвентуально сильный детектор сбоев является самым слабым для решения задачи консенсуса в мажоритарной среде.'''
'''Теорема 3 (Чандра-Хадзилакос-Туэг [4]). Эвентуально сильный детектор сбоев является самым слабым для решения задачи консенсуса в мажоритарной среде.'''




Строка 106: Строка 109:


== Применение ==
== Применение ==
'''Практические аспекты'''
'''Практические аспекты'''


 
Определение концепции детектора сбоев значительно повлияло на проектирование надежных распределенных архитектур.
Определение концепции детектора сбоев оказало положительное влияние на проектирование надежных распределенных архитектур.




Строка 120: Строка 123:
'''Теоретические аспекты'''
'''Теоретические аспекты'''


Второе применение концепции детекторов сбоев – это теория распределенной вычислимости. Детекторы сбоев позволяют классифицировать задачи. Задача A ''сложнее'' (или ''строго сложнее'') задачи B, если самый слабый детектор сбоев для решения B слабее (или строго слабее) самого слабого детектора сбоев для решения A. (Это понятие, конечно, параметризуется конкретной средой).


Второе применение концепции детекторов сбоев – это теория распределенной вычислимости. Детекторы сбоев позволяют классифицировать задачи. Задача A сложнее (или строго сложнее) задачи B, если самый слабый детектор сбоев для решения B слабее (или строго слабее) самого слабого детектора сбоев для решения A. (Это понятие, конечно, параметризуется конкретгной средой).


Может показаться удивительным, что индуцированная редукция детекции сбоев между разными задачами не вполне соответствует классическому понятию редукции к ''«черному ящику»''. Например, хорошо известно, что не существует асинхронного распределенного алгоритма, который мог бы использовать абстракцию ''очереди'' (Queue) для реализации абстракции ''сравнения с обменом'' (Compare-Swap) в системе из n > 2 процессов, где n - 1 процессов могут претерпеть сбой в виде аварийного завершения [15]. В этом смысле абстракция сравнения с обменом строго более мощная (в смысле «черного ящика»), чем абстракция очереди. Имеет место следующий результат:


Может показаться удивительным, что индуцированная редукция детекции сбоев между разными задачами не вполне соответствует классическому понятию редукции к «черному ящику». Например, хорошо известно, что не существует асинхронного распределенного алгоритма, который мог бы использовать абстракцию очереди для реализации абстракции сравнения с обменом в системе из n > 2 процессов, где n – 1 процессов могут претерпеть сбой в виде аварийного завершения [15]. В этом смысле абстракция сравнения с обменом строго более мощная (в смысле «черного ящика»), чем абстракция очереди. Имеет место следующий результат:


'''Теорема 4 (Дельпорт-Фоконье-Геррауи [9]). Самый слабый детектор сбоев для решения задачи очереди также является самым слабым для решения задачи сравнения с обменом в системе из n > 2 процессов, где n - 1 процессов могут претерпеть сбой в виде аварийного завершения.'''


'''Теорема 4 (Дельпорт-Фоконье-Геррауи [ ]). Самый слабый детектор сбоев для решения задачи очереди также является самым слабым для решения задачи сравнения с обменом в системе из n > 2 процессов, где n – 1 процессов могут претерпеть сбой в виде аварийного завершения.'''


В некотором смысле эта теорема подчеркивает, что сводимость, порождаемая понятием детектора сбоев, отличается от традиционной редукции к черному ящику.


В некотором смысле эта теорема подчеркивает, что сводимость, определяемая понятием детектора сбоев, отличается от традиционной редукции к черному ящику.
== Открытые вопросы ==
Некоторые проблемы, лежащие в основе концепции детектора сбоев, все еще остаются нерешенными. Одна из таких проблем заключается в определении самого слабого детектора сбоев для решения фундаментальной задачи [[Согласование множеств|согласования множеств]] [6]: это задача на принятие решений, в которой процессы должны согласовать до k значений, а не одно значение, как в случае задачи консенсуса. Три независимые группы исследователей [3, 16, 22] доказали невозможность решения этой задачи в асинхронной системе с k сбоями, обобщив невозможность консенсуса [13]. Определение самого слабого детектора сбоев, позволяющего обойти эту невозможность, несомненно, помогло бы понять основы сводимости детекции сбоев.


== Открытые вопросы ==
Некоторые проблемы, лежащие в основе концепции детектора сбоев, все еще остаются нерешенными. Одна из таких проблем заключается в определении самого слабого детектора сбоев для решения фундаментальной задачи согласования множеств [6]: это задача на принятие решений, в которой процессы должны согласовать до k значений, а не одно значение, как в случае задачи консенсуса. Три независимые группы исследователей [3, 16, 22] доказали невозможность решения этой задачи в асинхронной системе с k сбоями, обобщив невозможность консенсуса [ ]. Определение самого слабого детектора сбоев, позволяющего обойти эту невозможность, несомненно, поможет понять основы сводимости детекции сбоев.


Еще одно любопытное направление исследований – связь сложности распределенного алгоритма с лежащим в его основе детектором сбоев [17]. Очевидно, что детекторы сбоев позволяют обойти асинхронные невозможности, но насколько они повышают сложность распределенных алгоритмов? Конечно, можно ожидать, что сложность решения задачи будет выше, если детектор сбоев слабее – но насколько именно?


Еще одно любопытное направление исследований – связь сложности распределенного алгоритма с лежащим в его основе детектором сбоев [ ]. Очевидно, что детекторы сбоев позволяют обойти асинхронные невозможности, но насколько они повышают сложность распределенных алгоритмов? Конечно, можно ожидать, что сложность решения задачи будет выше, если детектор сбоев слабее – но насколько именно?
== См. также ==
== См. также ==
* [[Невозможность асинхронного консенсуса]]
* [[Невозможность асинхронного консенсуса]]
4817

правок