Transcript for:
Алгоритм Консенсуса Raft

всем привет с вами denis вы на канале литл анна 2 точка ру здесь мы разбираемся с бизнес-процессами информационными системами на человеческом языке если вам такой формат близок подписывайтесь и пишите в комментариях что бы вы хотели узнать из сложных эти вопросов на человеческом языке а сегодня у нас с вами довольно-таки сложная и интересная тема алгоритма консенсуса на примере алгоритмы раз мы разберемся что такое консенсус зачем он нужен какая от него польза чем мы платим за его достижения и как работает конкретный алгоритм ровд поехали консенсус широком смысле этого слова это когда группа участников о чем-то договорилась и приняла решение принимая во внимание мнение большинства и таким образом игнорируя мнение меньшинства в контексте информационных систем алгоритма консенсуса я консенсус важен потому что он позволяет отвечать на множество вопросов примеру какие данные считать правильными это важно потому что частенько наши данные могут не помещаться на один сервер и нам надо их хранить на нескольких серверах и таким образом мы получаем ту самую группу участников которые нужно о чем-то договориться а сверху добавляются прочие особенности современных айти технологий интернет тупить сервера добавляются удаляются связь к ним теряются у них ломаются железяки и так далее и со всем этим добром нам нужно все равно как-то адекватно отвечать на вопрос какие данные считать правильно и вообще главная особенность построения сложных информационных систем она заключается в том что нам из ненадежных компонент нужно собрать надежный к счастью множество умных людей давно решает эти вопросы и нам с вами ничего не надо будет выдумывать сегодня мы разберемся с алгоритмом ровд это алгоритм консенсуса в сетях ненадежных вычислений как именно он работает с визуализациями со всеми подробностями сейчас прямо и посмотрим поехали представьте что у нас есть просто база данных примеру она состоит из одной ноты всего лишь и у нас есть клиент который записывает на этот сервер какую-то информацию поскольку но до 1 никакой консенсусе не нужен она находится в концепцию си сама с собой и все как бы хорошо работает но когда у нас добавляется несколько таких not нескольких серверов баз данных мы получаем с вами как раз ту самую проблему консенсуса который я ранее говорил ровд это протокол который реализует вот этот распределенный контекст ну давайте посмотрим самого верхнего уровня каждая нота в алгоритме ровд может быть в трех состояниях первое состояние это состояние последователя folder спейд второе состояние это состояние кандидат сущностью поймете зачем эти состояний нужны и третье состояние до состояния лидера каждая но до начинает свое взаимодействие когда запускается в состоянии последователя поскольку последователи не знают кто сейчас есть у них лидер потому что все вы пустились к примеру одновременно они пытаются стать кандидатами кандидата рассылают запросы на голосования на остальные ноты и ноты отвечает своими голосами как только один кандидат получил множество голосов он становится лидером лидером нашей вот этой распределенной системе в концерте и процесс выбора лидера он так называется процесс выбора лидера и алгоритме ровд все изменения которые клиент на может присылать они идут через лидера примеру клиент записывает значение 5 после этого это но до в свой лоб записывает информацию о том что и прислали значение 5 но при этом оно пока считает это значение не записано она отсылает запросы на то что space соседней ноды установите себе тоже 5 пожалуйста и когда соседние ноды подтвердили что мне эту все получили лидер понимает что множество not большинство нот эту информацию зафиксировали после этого он говорит теперь это значение 5 считается нашим состоянием нашим значением которое мы все записываю и об этом сообщает уже соседнем нодом и после этого наш кластер из нот находится состоянии консенсуса и мы можем подтвердить от клиента о том что мы его пятерочку записали куда нужно этот процесс называется или публикации логов давайте теперь посмотрим поподробнее детали всех этих состояний алгоритме ровд у каждой ноты есть 2 тайм аута который контролируют выбору да вы первый тайм аут называется тайм-аут выборов это то время которое но до ждет попытки стать кандидатом они задаются случайным образом для каждой ноты перезапуске в диапазоне от 150 секунд до 300 соответственно таким образом как мы видим проходит этот тайм аут перед тем какая то но до пытается стать лидером и 1 но да у которой с trigger нулся этот тайм аут она становится кандидатом и она запускает процесс она голосует само за себя у него есть уже свой собственный голос и она рассылает информацию соседям о том что ребята пожалуйста проголосуйте за меня тоже момент получения запроса на голосование вот этот вот этот тайм аут на соседних нотах сбрасывается и таким образом если у нас есть кандидат либо но до участвует в голосовании либо да если есть кандидаты много участок в голосованиях то она сама не пытается стать кандидатом таким образом лидером становится то надо которая получила максимально оказывать личество голосов и соответственно ноты поскольку они голосовали они знают за кого не голосовали и они перестают питаться быть кандидатами они остаются последовательно после этого лидер начинает с определенной периодичностью рассылать свои сообщения которые называются периодичность называется her big time out или можно сказать пульсацией потом что я по-прежнему лидер вы по-прежнему слушаете меня и соседние ноды всю эту информацию фиксируют и они знают кто у них лидер сейчас таким образом это все работает тайм-аут попытки стать кандидатом сбрасывается и новая попытка определить лидера не выполняется пока ноды не получат по канады не перестанут получать эти heart beat и эти пульсации и не попытаются стать кандидатами что произойдет к примеру если мы отключим сейчас лидера у нас пройдет переголосовать как вы видите поскольку тайм-аут голоса таймов попытка стать кандидатом они сбрасываются но до проголосовала за себя вперед и но db и считает лидером ноутбука и таким образом у нас даже при выключении лидера происходит процесс перед голосование и наш кластеры но там все равно продолжает работать то что мы требуем большинство голосов гарантирует нам что у нас всегда будет выбран один лидер если у нас две ноты попытаются в одно и то же время стать кандидатами это у нас произойдет распределение голосов давайте посмотрим на пример как вы видите но до d и надо c они у них попался одинаковый тайм-аут прямо сейчас они попытаются стать кандидатами точнее станут кандидатами и начнут рассылать во все соседние ноды информацию о том что проголосуйте за меня соседи надо а и надо б проголосует за разных соответственно лидеров и надо да и на dc они получат по два голоса это значит что лидер не выбран потому что большинство голосов не получено и процесс выбора запустится по новый и они будут ждать пока процесс выбора не будет в это время надо а успела точно голосование за себя и теперь она стала лидером и получила множество голосов теперь давайте посмотрим поподробнее как вам работает процесс репликации логов том числе с сетевыми ошибками соответственно но до c у нас в текучем состоянии лидером является нашлет эти her clit и постоянно все многом и все у нас работает хорошо информация о том что именно мы записываем сейчас как правильное состояние наших данных она посылается как раз вместе с heart beat ими примеру клиент отсылает запрос к лидеру navi пожалуйста 5 лидер записывает свой лог изменений после этого с помощью всех битов он отсылает эту информацию тем двум но там тоже установите 5 после того как он получил в ответ что три из трех нот устанавливают это значение как 5 он считает эту информацию записанный и отвечает клиенту о том что ваша запись была выполнена мы сохранили все как положено и после этого он отсылает соответственно информацию но там о том что зафиксируйте пожалуйста с помощью heart beat их что теперь мы считаем значение 5 правильным для всех и примеру у нас теперь клиент хочет добавить значение нашем текущем значении плюс 2 он добит дописал + 2 точно такой же процедуре отправил эти два в соседние ноды теперь у нас актуальное состояние нашей информации к the sea что интересно что вот этот подход он позволяет работать даже в ситуациях когда происходят какие-то сетевые проблемы сейчас вы поймёте каким именно образом представим что вот эти ноты 2 снизу но добей ну да а они потеряют сетевой связь с соседними своими нотами и у нас получится наш кластеру разделится на две части на d b и b и и но до cd и они начинают жить отдельно них происходит сверху у нас прошло перед голосование там есть лидер и здесь есть лидер и они обмениваются информации и к примеру у нас добавляется еще один клиент который шлет апдейт в но db потому что он считает это своим серверам и там они устанавливают значение 3 но значение 3 не записывается никуда потому что при его сохранение член записывать влог но она не считается актуальным состоянием нашей информации потому что при его сохранение но до b знает что не множества ног подтвердила корректную информацию о только одна а у нас в кластере 5 минут и она соответственно надо бы не может записать это как актуальное состояние а другой клиент записывать значения 8 значение 8 записывается правильно потому что там у нас множество большинство находится наших но там три ноты здесь 2 соответственно тогда nottoday но дает подтвердило эту запись и плюс мы сами на ноги c подтвердили эту запись у нас это значение становится восьмеркой это является актуальным значением нашего кластера потому что мы используем множество голосов для того чтобы зафиксировать правильное значение и допустим у нас наша сеть вылечилась heart beat ее шлюз и но надо б видит что нота c имеет большинство голосов прямо сейчас поэтому она перестает считать себя лидером аннотации видеть что у нас пришли еще две новые моды наш пастор и рассылает им все последние обновления и при этом все обновления которые здесь были не зафиксированы потому что не было получено множество голосов они стираются исчезают и таким образом ожившие но до нашего кластера становится с таким же значением как и весь наш кластер теперь наша совместную информацию наш весь лук она одинаково на всех нотах вот таким образом работает алгоритм ровд там есть еще несколько других особенностей если вы хотите очень сильно ударить то в комментариях точнее под записью этого видео будет ссылка на научную работу pdf в которой подробно расписан как работает алгоритм ровд и будет ссылка на эту визуализацию с помощью которой мы с вами все это дело и посмотрели спасибо подписывайтесь до новых видео и до связи до свидания