Иерархия ошибок в распределённых системах — различия между версиями
Yeputons (обсуждение | вклад) |
м (rollbackEdits.php mass rollback) |
(не показана 1 промежуточная версия 1 участника) | |
(нет различий)
|
Текущая версия на 19:43, 4 сентября 2022
То, что принципиально усложняет жизнь в распределённых системах — проблемы с доставкой сообщений, отказы процессов и каналов связи.
Мы рассматриваем пять видов отказов, в порядке усложнения. Более сложный отказ может моделировать более простой, т.е. алгоритм, который хорошо работает с более сложным отказом, с более лёгким тоже должен справиться.
- Отсутствие отказов.
- Полный отказ одного или нескольких узлов (crash): узел упал и больше гарантированно никогда не поднимается. Не отвечает на сообщения, не посылает свои. "Воскреснуть" тоже не может. На практике этого можно достичь, если каждому процессу давать в начале случайное число, а при перезапуске его генерировать заново.
- Полный отказ одного или нескольких каналов связи (link failure): сообщения между парой процессов с некоторого момента никогда не доставляются. Можно проэмулировать отказ узла, убрав все ведущие к нему каналы. Тут тонко с алгоритмами, которые требуют что-нибудь для всех живых узлов, но это ладно. (Не)ориентированность не обсуждали.
- Ненадёжная доставка сообщений (omission): сообщения между парой процессов иногда теряются, а иногда доходят. Можно проэмулировать полный отказ канала, сказав, что теряются всегда.
- Византийская ошибка (byzantine failure): есть один или несколько "византийских" процессов, которые могут делать что угодно: игнорировать сообщения, посылать любые сообщения любым процессам, с которыми есть связь (в том числе не соответствующие протоколу). В частности, "византийский" процесс может имитировать процесс, с которым плохая связь.