gossip

package
v0.0.0-...-50b27ac Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2023 License: MIT Imports: 3 Imported by: 0

README

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. Чтобы запустить её, перейдите в директорию gossip и выполните команду make.

prime@fedora ~/C/shad-go (master)> cd gossip/
prime@fedora ~/C/s/gossip (master)> make
protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative meshpb/protocol.proto

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Peer

type Peer struct {
	// contains filtered or unexported fields
}

func NewPeer

func NewPeer(config PeerConfig) *Peer

func (*Peer) AddSeed

func (p *Peer) AddSeed(seed string)

func (*Peer) Addr

func (p *Peer) Addr() string

func (*Peer) GetMembers

func (p *Peer) GetMembers() map[string]*meshpb.PeerMeta

func (*Peer) Run

func (p *Peer) Run()

func (*Peer) Stop

func (p *Peer) Stop()

func (*Peer) UpdateMeta

func (p *Peer) UpdateMeta(meta *meshpb.PeerMeta)

type PeerConfig

type PeerConfig struct {
	SelfEndpoint string
	PingPeriod   time.Duration
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL