Тщательно изучите серию статей etcd (10): etcd Lease API

задняя часть etcd

0 Обзор альбома

etcd является важным базовым компонентом облачной архитектуры, которая инкубируется и размещается CNCF. etcd можно использовать не только для регистрации и обнаружения сервисов в микросервисах и кластерах Kubernetes, но и как промежуточное ПО для хранения ключей и значений.

"Понимание статей серии etcd" познакомит с etcd с точки зрения базовой функциональной практики etcd, интерфейса API, принципа реализации, анализа исходного кода и опыта преодоления ям в реализации. Ожидается, что статей будет около 20, автор будет обновлять каждую неделю, прошу обратить внимание.

1 т.д. арендная служба

Услуга аренды обеспечивает поддержку аренды. Аренда — это механизм определения живучести клиента. Кластер предоставляет аренду со сроком жизни. Срок аренды истекает, если кластер etcd не получает keepAlive в течение заданного TTL.

Чтобы привязать аренду к хранилищу ключей и значений, к каждому ключу можно прикрепить не более одной аренды. Когда срок аренды истекает или отзывается, все ключи, связанные с этой арендой, удаляются. Каждый ключ с истекшим сроком действия генерирует событие удаления в истории событий.

Интерфейс, определенный сервисом Lease в rpc.proto, выглядит следующим образом:

service Lease {

  rpc LeaseGrant(LeaseGrantRequest) returns (LeaseGrantResponse) {}

  rpc LeaseRevoke(LeaseRevokeRequest) returns (LeaseRevokeResponse) {}

  rpc LeaseKeepAlive(stream LeaseKeepAliveRequest) returns (stream LeaseKeepAliveResponse) {}

  rpc LeaseTimeToLive(LeaseTimeToLiveRequest) returns (LeaseTimeToLiveResponse) {}
}

  • LeaseGrant создает договор аренды
  • LeaseRevoke отменяет договор аренды
  • LeaseKeepAlive используется для поддержания аренды
  • LeaseTimeToLive Получить информацию об аренде

Эти методы описаны ниже.

2 Метод LeaseGrant

Метод LeaseGrant создает договор аренды. Срок аренды истекает, когда сервер не получает подтверждение активности в течение заданного времени жизни. Если срок аренды истекает, срок действия всех ключей, прикрепленных к аренде, истечет и они будут удалены. Каждый ключ с истекшим сроком действия генерирует событие удаления в истории событий. Метод определяется следующим образом:

rpc LeaseGrant(LeaseGrantRequest) returns (LeaseGrantResponse) {}

Тело запроса — LeaseGrantRequest:

message LeaseGrantRequest {
  int64 TTL = 1;

  int64 ID = 2;
}

TTL рекомендует время жизни в секундах. Идентификатор — это идентификатор запроса аренды, если идентификатор равен 0, арендодатель (т. е. сервер etcd) выбирает идентификатор. Тело сообщения ответа, LeaseGrantResponse, определяется следующим образом:

message LeaseGrantResponse {
  ResponseHeader header = 1;

  int64 ID = 2;

  int64 TTL = 3;
  string error = 4;
}

ID — это ID распознанной аренды. TTL — это время жизни аренды в секундах, выбранное сервером.

3 Метод LeaseRevoke

LeaseRevoke отменяет аренду, после чего срок действия всех ключей, прикрепленных к аренде, истекает и они удаляются.

rpc LeaseRevoke(LeaseRevokeRequest) returns (LeaseRevokeResponse) {}

Тело сообщения запроса LeaseRevokeRequest определяется следующим образом:

message LeaseRevokeRequest {

  int64 ID = 1;
}

ID — это идентификатор аренды, которую необходимо отменить. При отмене аренды все связанные ключи будут удалены. Тело сообщения ответа, LeaseRevokeResponse, определяется следующим образом:

message LeaseRevokeResponse {
  ResponseHeader header = 1;
}

В LeaseRevokeResponse есть только одно общее поле заголовка ответа.

4 Метод LeaseKeepAlive

Метод LeaseKeepAlive поддерживает аренду. LeaseKeepAlive поддерживает аренду путем потоковой передачи запросов проверки активности от клиента к серверу и потоковой передачи ответов проверки активности от сервера клиенту.

rpc LeaseKeepAlive(stream LeaseKeepAliveRequest) returns (stream LeaseKeepAliveResponse) {}

Тело сообщения запроса LeaseKeepAliveRequest определяется следующим образом:

message LeaseKeepAliveRequest {
  int64 ID = 1;
}

ID — это ID договора аренды для проживания. Текст ответа LeaseKeepAliveResponse:

message LeaseKeepAliveResponse {
  ResponseHeader header = 1;
  int64 ID = 2;

  int64 TTL = 3;
}

ID — это идентификатор аренды из запроса на поддержание активности. TTL — это новый срок действия аренды.

5 Метод LeaseTimeToLive

Метод LeaseTimeToLive получает информацию об аренде.

rpc LeaseTimeToLive(LeaseTimeToLiveRequest) returns (LeaseTimeToLiveResponse) {}

Тело сообщения запроса LeaseTimeToLiveRequest определяется следующим образом:

message LeaseTimeToLiveRequest {
  // ID 是租约的 ID
  int64 ID = 1;
  bool keys = 2;
}

keys установлено значение true, чтобы запросить все ключи, прикрепленные к этой аренде. Тело сообщения ответа LeaseTimeToLiveResponse определяется следующим образом:

message LeaseTimeToLiveResponse {
  ResponseHeader header = 1;
  // ID 是来自请求的 ID
  int64 ID = 2;
  int64 TTL = 3;
  int64 grantedTTL = 4;
  repeated bytes keys = 5;
}

Среди них TTL — это оставшийся TTL в секундах; срок аренды истекает после следующего TTL + 1 секунда. GrantedTTL — начальное время предоставления права на создание/продление аренды в секундах. Ключи — это список Ключей, прикрепленных к данному договору аренды.

6 Резюме

В этой статье в основном представлены основные методы, такие как LeaseGrant, LeaseRevoke, LeaseKeepAlive и LeaseTimeToLive, связанные с API аренды etcd. API аренды часто используется в клиентской практике, поэтому полезно ознакомиться с этой частью и понять ее.

Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер

Рекомендуемое чтение

  1. Сравнение etcd с другими компонентами k-v, такими как Zookeeper и Consul
  2. Тщательно изучите серию статей etcd (1): первое знакомство с etcd
  3. Тщательно изучите серию статей etcd (2): различные положения установки etcd
  4. Тщательно изучите серию статей etcd (3): эксплуатация и обслуживание кластера etcd, развертывание.
  5. Тщательно изучите серию статей etcd (4): безопасность etcd
  6. Тщательно изучите серию статей etcd (5): использование etcdctl
  7. Тщательно изучите серию статей etcd (6): etcd core API v3
  8. [Знакомство со статьями из серии etcd (7): API сервиса etcd gRPC

](блюз доступен empty.com/2020/08/27/…) 9. Тщательно изучите серию статей etcd (8): API транзакций etcd 10. Тщательно изучите серию статей etcd (9): etcd compact и watch API

Ссылаться на

etcd docs