Именование и обнаружение gRPC
etcd предоставляет резолвер gRPC для альтернативной системы имён, которая получает конечные точки из etcd при обнаружении служб gRPC. Механизм основан на наблюдении за обновлениями ключей с префиксом имени службы.
Эта возможность является экспериментальной, поскольку зависит от пакета google.golang.org/grpc/resolver , который всё ещё считается экспериментальным в grpc-go.
Использование обнаружения etcd с go-grpc
Клиент etcd предоставляет резолвер gRPC для разрешения конечных точек gRPC с бэкендом etcd. Резолвер инициализируется клиентом etcd:
Управление конечными точками службы
Резолвер etcd рассматривает как потенциальные конечные точки службы все ключи под префиксом целевого имени с завершающим “/” (например, “foo/bar/my-service/”), значения которых закодированы в JSON (исторически — go-grpc naming.Update).
Конечные точки добавляются созданием новых ключей и удаляются удалением ключей.
Добавление конечной точки
Новые конечные точки можно добавить в службу с помощью etcdctl:
Метод endpoints.Manager клиента etcd также может зарегистрировать новую конечную точку с ключом, соответствующим Addr:
Чтобы включить циклическую балансировку нагрузки при подключении к службе с несколькими конечными точками, настройте соединение с внутренним циклическим балансировщиком gRPC:
Удаление конечной точки
Узлы можно удалить из службы с помощью etcdctl:
Метод endpoints.Manager клиента etcd также поддерживает удаление конечных точек:
Регистрация конечной точки с арендой
Регистрация конечной точки с арендой гарантирует её удаление из службы, если узел не сможет поддерживать heartbeat keepalive, например из-за отказа машины:
В Golang:
Атомарное обновление конечных точек
Чтобы изменить несколько конечных точек в одной транзакции, можно напрямую использовать endpoints.Manager: