Ответ
Консенсус — это механизм согласования состояния данных между узлами распределённой системы, обеспечивающий их согласованность даже при сбоях. В Golang часто реализуется через алгоритмы вроде Raft или Paxos.
Пример с Raft (используя библиотеку hashicorp/raft):
config := raft.DefaultConfig()
config.LocalID = raft.ServerID("node1")
store := raft.NewInmemStore()
snapshotStore := raft.NewInmemSnapshotStore()
transport := raft.NewInmemTransport("node1")
raftNode, err := raft.NewRaft(
config,
NewFSM(), // ваша реализация конечного автомата
store,
store,
snapshotStore,
transport,
)
Ключевые свойства консенсуса:
- Лидер выбирается для координации записи
- Записи реплицируются на большинство узлов
- Система остаётся доступной при отказе меньшинства узлов