Пример упрощенной реализации gossip-протокола для децентрализованной передачи сообщений между узлами.
Каждый узел генерирует случайные сообщения с контрольной суммой.
Локальное хранилище узла ограничено одним сообщением, поэтому сохраняется только сообщение с самой "большой" контрольной суммой. После завершения сеанса связи у всех узлов должно быть одинаковое сообщение в локальном хранилище.
Настройки хранятся в файле config.toml
.
# Адрес для первичного поиска пиров и обмена служебными сигналами
MulticastAddress = "224.0.0.1:9999"
# Максимальное количество сообщений за сеанс выбарается рандомно из диапазона [0:LimitMessages]
LimitMessages = 10
# Примерный процент "испорченных" сообщений [0:100]
InvalidFrequent = 5
go get github.com/DemonVex/hashgossip
Сборка бинарника
make build
Запуск N экземпляров приложения. Каждый экземпляр пишет логи в отдельный файл в папке _logs
make N={num} run
e.g. make N=10 run
Снимок содержимого локальных хранилищ (через multicast запрос)
make watcher
Отправить всем узлам (через multicast) запрос на завершение работы
make kill
Отправить сигнал kill и почистить папку с логами
make clean