Консенсусный протокол (такой как Paxos, Raft и т. Д.) Не может использоваться для разработки протокола членства в нескольких группах. Это связано с тем, что все консенсусные протоколы основаны на фундаментальной идее о том, что любое решение может быть принято только в том случае, если большинство членов «согласились» его принять. Таким образом, избегается феномен «сплит-мозг», поскольку не может быть двух разделов (размером больше большинства: (n/2)+1
), которые согласились на другого лидера (и, следовательно, набор членов), поскольку по меньшей мере один член будет членом обоих разделов и проголосовал бы за только один из разделов (тот, который просил сначала голосовать).
Одним из протоколов, который можно было бы использовать для создания протокола членства в нескольких группах, является Virtual Synchrony. Однако обратите внимание, что виртуальная синхронизация - это протокол, используемый для отправки сообщений (статически) предопределенным группам процессов, а также существующим членам этих групп. В результате он не предназначен для случаев, когда новые группы процессов должны создаваться (динамически) в каждом новом разделе. Также обратите внимание, что виртуальная синхронизация - это протокол, который не масштабируется для более крупных членов, поскольку латентность сообщения пропорциональна размеру групп.
Я считаю, что с помощью виртуального протокола синхронности, вы могли бы разработать такой протокол членства, который может удовлетворять условию
После группы претерпевает изменения членства, если два узла, которые принадлежали к исходной группе (существует путь между ними), они должны согласовать последовательность изменений, которые произошли с группой
Однако обратите внимание, что это членство не является строго согласованным в строгом смысле, поскольку отказ узла может быть распространено внутри группы в конечном итоге , Тем не менее, поставки сообщений (что важно для большинства) будут доставлены таким образом, чтобы эти поставки подчинялись членству в группе. Это достигается путем наложения порядка доставки сообщений на стороне участников.
Другой альтернативный подход для протокола членства являются gossip-based membership protocols с реализации в реальной жизни быть интегрированы в различные инструменты в промышленности, таких как Consul.Чтобы использовать этот подход, вы можете испускать несколько разных классов сообщений от каждого члена, в зависимости от разных групп, которые вы хотите отслеживать. Однако снова эти группы статически определяются внутри протокола и, в конечном итоге, согласуются (что означает, что каждый отказ будет окончательно обнаружен всеми живыми членами).
В заключение, я думаю, что сильно соответствует протокол членства не представляется возможным в строгом определении, так как вы не можете отличить члена, который не удалось, и элемент, который реагирует очень-очень медленно (базису FLP и теорема CAP).
Спасибо, однако, я сознательно не использовал слово «консенсус», поскольку это означало бы, что останется только одна группа. Я не знал, что для Virtual Synchrony требуется статически предопределенный набор узлов, так что это интересно. «_... и они намного сложнее разрабатывать на SO post_», должен сказать, что я надеялся на ссылку или имя алгоритма, чтобы иметь что-то для google + некоторое описание высокого уровня, если мне повезет (например, я не ожидал бы глубокого объяснения бумаги Плота тому, кто попросил о согласованных алгоритмах). –
Поскольку виртуальная синхронизация довольно сложная, я предоставил ссылку на wiki в качестве отправной точки, я надеюсь, что это поможет найти полезные ресурсы. Я пропустил объяснение виртуальной синхронности, потому что есть несколько версий, и снова потребуется много места. Что касается консенсусных алгоритмов, обратите внимание, что они используются для согласования одного значения (не обязательно одной группы), поэтому теоретически можно было бы использовать для создания нескольких групп, используя сопоставление групп в качестве этого значения (если бы не было большинства -ограничение, описанное выше). – Dimos
Я слегка неправильно истолковал ваш вопрос, поэтому немного исправил свой первоначальный ответ. Я также добавил несколько альтернатив, надеюсь, что мой обновленный ответ поможет. – Dimos