# gossip В этой задаче вам нужно придумать и реализовать протокол gossip. Gossip-ом называют протоколы, которые применяют в распределённых системах без центральной конфигурации, чтобы обнаруживать участников протокола. Участники протокола периодически рассказывают друг другу про своих соседей, так что каждый "пир" (peer) знает всё про всех. Новому "пир"-у достаточно подключиться к одному из членов группы, чтобы узнать про всех остальных. Протокол вам нужно придумать самим, но он должен соответствовать интерфейсу и иметь нужные свойства. * Каждый участник протокола имеет уникальный идентификатор, совпадающий с его адресом. Этот адрес/идентификатор передаётся вам в конструкторе. * Каждый участник знает метаданные про себя. Метаданные описываются типом `*meshpb.PeerMeta`. Метаданные могут обновляться в процессе работы. * Каждый участник eventually должен узнать идентификаторы и метаданные всех остальных участников. Снепшот этой информации должен возвращать метод `GetMembers`. * Метод `AddSeed` добавляет адрес `seed`-а. По этому адресу может находиться другой участник (а может и не находиться). Адрес нужно использовать, чтобы пытаться подключиться к группе. Нельзя считать, что `seed` существует (возвращать его из GetMembers), пока к нему не удалось подключиться. * Если какой-то из участников становится недоступным (перестаёт отвечать на RPC вызовы), то он должен быть удалён из группы (метод `GetMembers` должен перестать возвращать его). * Сам `Peer` должен реализовывать `GossipService` из `.proto` файла. Конструктор `NewPeer` не должен запускать горутины, это должен делать метод `Run`. Метод `Stop` должен завершать все горутины. Ваш протокол должен работать поверх GRPC, поэтому в начале ознакомьтесь с [tutorial](https://grpc.io/docs/languages/go/basics/) по GRPC. ## Установка protoc В этом задании вам нужно будет генерировать код для работы с GRPC. Для того, чтобы заработал генератор, вам нужно установить несколько утилит. Установите их по [инструкции](https://grpc.io/docs/languages/go/quickstart/#prerequisites). После установки, у вас в 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 ```