Существует ли связь между CRDT и протоколом RAFT или они ортогональны?
Возьмите случай использования многопользовательской сетевой игры. Мгновенно возникает проблема репликации и согласования общего состояния по всей сети.
Похоже, что существует множество инструментов, направленных на решение этой проблемы, и два из них, в частности, частично совпадают:
- Бесконфликтные реплицированные типы данных (CRDT) - используются для
- Алгоритм консенсуса RAFT - для выбора лидера транзакций в распределенной сети для достижения консенсуса.
У меня вопрос: есть ли связь между CRDT и протоколом RAFT или они ортогональны?
1 ответ
В терминах распределенных систем эти два понятия весьма различны и служат очень разным вариантам использования. В то время как оба стремятся достичь строгой согласованности, CRDT обычно делают это, не жертвуя доступностью, а Raft делает это за счет доступности. Перед сетевым разделом CRDT будут оставаться доступными, но кластер Raft может стать либо частично, либо полностью недоступным. Плот - это согласованный алгоритм, который опирается на большую часть кластера, взаимодействующего друг с другом для достижения прогресса.
Существуют также различия в типе состояния, которым может управлять каждый. CRDT работают для представления ограниченного и четко определенного набора типов данных, в то время как Raft и другие согласованные алгоритмы могут использоваться для моделирования гораздо более широкого спектра потенциальных структур данных и алгоритмов. Плот обычно используется для моделирования реплицированного конечного автомата. Команды для конечного автомата регистрируются и реплицируются с помощью алгоритма Рафта и применяются к конечному автомату. Конечные автоматы можно использовать для моделирования структур данных, таких как карты и наборы, или для управления параллелизмом, моделируя такие вещи, как блокировки, выборы лидеров и семафоры.
Вы также должны взглянуть на свою систему с точки зрения масштабируемости, и Raft и CRTD также существенно различаются. Плот - система, основанная на лидерах. Raft выбирает один узел в качестве лидера, и все изменения состояния реплицированного конечного автомата Raft проходят через этого одного лидера и синхронно реплицируются большинству подписчиков перед применением к конечному автомату. Альтернативно, CRDT значительно более масштабируемы, поскольку они не ограничены одним узлом.
В конечном счете, разница между Raft и CRDT заключается в разнице между согласованностью и производительностью. Плот спроектирован для создания единообразного представления единой системы с акцентом на безопасность, а не на производительность. Как правило, согласованные алгоритмы, такие как Raft, используются для таких вещей, как управление конфигурацией и обнаружение услуг. CRDT разработаны так, чтобы быть быстрыми и максимально последовательными, не жертвуя при этом доступностью. Как правило, CRDT используются для хранения в более зависимых и менее критичных системах.