Предположим, что я бросаю некоторые машины в эластичный кластер и хочу использовать в них какой-то консенсусный алгоритм (скажем, Paxos). Предположим, что они знают начальный размер сети, скажем, 8 машин.Paxos and Discovery
Таким образом, они будут работать алгоритм на основе консенсуса, и кворум 5.
Теперь рассмотрим эти случаи:
- Я вижу, что CPU слишком низко, и уменьшить размер кластера пополам, до 4 машин.
- Существует разделение разделов, и каждый раскол получает 4 машины.
Если я возьму текущий размер кластера, чтобы получить кворумы, я подвержен разбиению разделов. Так как для базового кластера ситуации (1) и (2) выглядят точно так же. Однако, если я использую фиксированное число, я не могу масштабировать кластер (и я подвержен несоответствиям из-за раздела, если я его масштабирую).
У меня есть третий вариант: информировать все машины о размере кластера при масштабировании, но есть вероятность того, что раздел будет происходить непосредственно перед масштабированием, например, и этот раздел не получит новый размер и имея достаточный кворум для достижения консенсуса, используя старый размер.
Является ли Paxos (и любые другие безопасные консенсусные алгоритмы) непригодными для использования в эластичной среде?
его плохая идея иметь четные числа акцепторов, разделенных на два сайта. секционирование очень вероятно. лучше обозначать только некоторые узлы как акцепторы и другие узлы только как учащиеся как запасные узлы на каждом сайте. обеспечить нечетное количество акцепторов в любой момент с большинством в вашем «предпочтительном» центре обработки данных. система может самостоятельно переконфигурировать; если accepter отправляется в автономный режим в течение длительного времени, система может автоматически запускать раунды paxos, чтобы изменить конфигурацию кластера, и понизить уровень участия в экзамене для учащегося и продвинуть одного из учеников-помощников на том же сайте, что и акцептор. – simbo1905