ZooKeeper основан на ZAB, а Consul основан на Raft.Оба очень похожи на алгоритмы атомного вещания на высоком уровне.Таким образом, что касается «постоянства» CAP (которое на самом деле является линеаризуемостью, очень сильной формой постоянства), то оба будут предоставлять одинаковые гарантии.Оба имеют линеаризуемую запись в кворум (большинство).Другие узлы (не в кворуме) могут отставать в обновлениях по умолчанию, что приводит к устареванию чтения.Это сделано таким образом, потому что полная линеаризуемость замедляет работу, и многие приложения хороши с небольшим устареванием чтения.Однако, если это неприемлемо в конкретном случае использования, всегда можно использовать вызов sync
перед чтением в ZooKeeper и режим Consistent
в Консуле для достижения полной линеаризации.
Однако для обнаружения службы,Консул, кажется, предоставляет конструкции более высокого уровня, которые не являются стандартными в ZooKeeper.
С точки зрения использования на выборах лидера, могут использоваться оба варианта.
Но, учитывая, что ZooKeeper используется во многих проектах Apache высшего уровня, и он также старше, чем Raft и, следовательно, Consul, я надеюсь, что он получит лучшую поддержку сообщества и документацию.Также великолепна документация Apache, предоставляющая различные рецепты.
Наконец, если вы используете ZooKeeper, вы также можете использовать Apache Curator, который предоставляет API более высокого уровня поверх ZooKeeper.