.. | ||
meshpb | ||
gossip.go | ||
gossip_test.go | ||
Makefile | ||
README.md |
gossip
В этой задаче вам нужно придумать и реализовать протокол gossip.
Gossip-ом называют протоколы, которые применяют в распределённых системах без центральной конфигурации, чтобы обнаруживать участников протокола. Участники протокола периодически рассказывают друг другу про своих соседей, так что каждый "пир" (peer) знает всё про всех. Новому "пир"-у достаточно подключиться к одному из членов группы, чтобы узнать про всех остальных.
Протокол вам нужно придумать самим, но он должен соответствовать интерфейсу и иметь нужные свойства.
- Каждый участник протокола имеет уникальный идентификатор, совпадающий с его адресом. Этот адрес/идентификатор передаётся вам в конструкторе.
- Каждый участник знает метаданные про себя. Метаданные описываются типом
*meshpb.PeerMeta
. Метаданные могут обновляться в процессе работы. - Каждый участник eventually должен узнать идентификаторы и метаданные всех остальных участников.
Снепшот этой информации должен возвращать метод
GetMembers
. - Метод
AddSeed
добавляет адресseed
-а. По этому адресу может находиться другой участник (а может и не находиться). Адрес нужно использовать, чтобы пытаться подключиться к группе. Нельзя считать, чтоseed
существует (возвращать его из GetMembers), пока к нему не удалось подключиться. - Если какой-то из участников становится недоступным (перестаёт отвечать на RPC вызовы), то он должен
быть удалён из группы (метод
GetMembers
должен перестать возвращать его). - Сам
Peer
должен реализовыватьGossipService
из.proto
файла. КонструкторNewPeer
не должен запускать горутины, это должен делать методRun
. МетодStop
должен завершать все горутины.
Ваш протокол должен работать поверх GRPC, поэтому в начале ознакомьтесь с tutorial по GRPC.
Установка protoc
В этом задании вам нужно будет генерировать код для работы с GRPC.
Для того, чтобы заработал генератор, вам нужно установить несколько утилит. Установите их по инструкции. После установки, у вас в PATH должны появиться 3 команды. Проверьте это:
protoc --help
protoc-gen-go --help
protoc-gen-go-grpc --help
Генерация кода
Описание protobuf сообщений и сервисов находится в файле meshpb/protocol.proto
Команда для генерации записана в Makefile
. Чтобы запустить её, перейдите в директорию servicemesh
и выполните команду make
.
prime@fedora ~/C/shad-go (master)> cd servicemesh/
prime@fedora ~/C/s/servicemesh (master)> make
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative meshpb/protocol.proto