Я читал о протоколе распределенного консенсуса и наткнулся на Paxos. В нем говорится, что вам нужен Paxos для выборов лидера. Статья утверждает то же самое. Итак, мой вопрос: когда Cassandra является кольцевой архитектурой, а не master-slave, зачем ей нужен механизм выбора лидера. Более того, если ответ положительный, какова роль лидера в кольце Кассандры. Когда для связи в ринге используется протокол Gossip.
Почему Paxos требуется для выборов лидера в cassandra
Ответы (2)
В статье продемонстрирован пример реализации алгоритма выбора лидера с использованием функции Cassandra под названием Легкая транзакция. Дело не в выборе главного узла для Cassandra.
Система выбора лидера только используется для транзакций с легким весом. Облегченная транзакция позволяет пользователю получить изоляцию по цене производительности.
Рассмотрим следующий пример: система управляет деньгами пользователей. Допустим, один пользователь хочет внести 100$ на счет.
Текущий баланс (0$) + новые деньги (100$) = 100$.
Другой пользователь хочет обновить ту же учетную запись. Он вводит 20$ на этот счет. Его расчет происходит до того, как первый человек вставит свои деньги.
Текущий баланс (0$) + новые деньги (20$) = 20$.
Можно было бы ожидать, что баланс после двух вложений денег будет 120$. Однако без выбора лидера одна запись перезапишет другую, и у вас останется либо 100 $, либо 20 $, в зависимости от того, какая запись завершится последней.
Выбор лидера позволяет узлам синхронизировать свои обновления на одном ресурсе, чтобы убедиться, что каждое вычисление изолировано. «Я обновлю значение, если оно равно 0$». Выбор делается так, чтобы один узел мог координировать транзакцию для конкретного запроса.
В нашем примере 100$ будет обновлено, но 20$ не удастся, и пользователю нужно будет повторить попытку.
Имейте в виду, что эта ведущая архитектура заметно отличается от архитектуры ведущий/подчиненный. В этом нет единой точки отказа, поскольку лидером может быть любой узел для конкретного запроса.
Дополнительные сведения по этой теме можно найти здесь.