теория

Консенсус: согласие, когда никому нельзя верить

Смотри, вчера мы выяснили страшное: в распределённой системе никто не знает наверняка, кто жив, а кто нет. Казалось бы, на таком фундаменте вообще ничего надёжного не построишь. И вот тут — самое красивое: договориться всё-таки можно. Способ называется .

Консенсус — это когда несколько узлов приходят к согласию об одном значении («лидер — узел A») и держатся его, даже если часть узлов упала или сеть разорвалась. Весь фокус — в слове большинство.

Сердце механизма — : решение принято, только если за него проголосовало большинство узлов. Из пяти — трое. Почему это спасает от вчерашнего кошмара? Потому что двух непересекающихся большинств не бывает. Разрежет сеть пятёрку на «три» и «два» — кворум наберёт только тройка, она и выберет одного лидера. Двойка трёх голосов не соберёт и честно замрёт: лучше не работать вовсе, чем работать вторым лидером.

У консенсуса есть близнец — : все узлы получают сообщения в одном и том же порядке. Можно доказать, что это ровно та же задача: умеешь одно — умеешь другое. На этом строят реплицированные журналы, надёжные очереди и, конечно, выбор лидера.

А самая сильная гарантия согласованности зовётся : система ведёт себя так, будто данные существуют в единственной копии, а операции над ними мгновенны и атомарны. Никаких «реплика отстала», никаких «я записал, а сосед ещё не видит». Звучит как мечта — и стоит соответственно: за неё платят задержкой (каждая операция ждёт согласия большинства) и, как мы сейчас увидим, доступностью. Этот размен — согласованность против доступности при разрыве сети — и есть : когда сеть распалась, выбираешь либо одно, либо другое, но не оба сразу. Поэтому линеаризуемость не раздают всем подряд — её берут точечно: выбор лидера, уникальный номер заказа, остаток на счёте.

← назад