Nesta página, descrevemos as práticas recomendadas para repetir solicitações com falha para a API Identity and Access Management (IAM).
Para solicitações que podem ser repetidas, use a espera exponencial truncada com instabilidade introduzida.
Visão geral da espera exponencial truncada
Cada solicitação para a API IAM pode ser bem-sucedida ou não. Se o aplicativo repetir solicitações com falha sem esperar, ele poderá enviar um grande número de tentativas para o IAM em um curto período. Como resultado, pode haver exceção de cotas e limites que se aplicam a todos os recursos do IAM no projeto do Google Cloud.
Para evitar o acionamento desse problema, recomendamos o uso da espera exponencial truncada com instabilidade introduzida, que é uma estratégia padrão de tratamento de erros para aplicativos de rede. Nessa abordagem, um cliente repete de maneira periódica uma solicitação com falha, com atrasos exponencialmente crescentes entre as novas tentativas. Um pequeno atraso aleatório, conhecido como instabilidade, também é adicionado entre as novas tentativas. Esse atraso aleatório ajuda a evitar uma onda sincronizada de novas tentativas de vários clientes, também conhecida como problema de excesso de acionamentos.
Algoritmo de espera exponencial
O algoritmo a seguir implementa a espera exponencial truncada com instabilidade:
- Envie uma solicitação para o IAM.
-
Se a solicitação falhar, aguarde 1 +
random-fraction
segundos e repita a solicitação. -
Se a solicitação falhar, aguarde 2 +
random-fraction
segundos e repita a solicitação. -
Se a solicitação falhar, aguarde 4 +
random-fraction
segundos e repita a solicitação. -
Continue esse padrão, aguardando 2n +
random-fraction
segundos após cada nova tentativa, até o máximo demaximum-backoff
. -
Depois de
deadline
segundos, pare de repetir a solicitação.
Use os seguintes valores ao implementar o algoritmo:
-
Antes de cada nova tentativa, o tempo de espera é de
min((2n + random-fraction), maximum-backoff)
, comn
a partir de 0 e incrementado em 1 para cada nova tentativa. -
Substitua
random-fraction
por um valor fracionário aleatório menor ou igual a 1. Use um valor diferente para cada nova tentativa. Adicionar esse valor aleatório evita que os clientes sejam sincronizados e enviem um grande número de novas tentativas ao mesmo tempo. -
Substitua
maximum-backoff
pelo tempo máximo, em segundos, para aguardar entre as novas tentativas. Os valores típicos são 32 ou 64 (25 ou 26) segundos. Escolha o valor ideal para seu caso de uso. -
Substitua
deadline
pelo número máximo de segundos para continuar enviando novas tentativas. Escolha um valor que reflita seu caso de uso. Por exemplo, em um pipeline de integração/implantação contínuas (CI/CD) que não seja altamente urgente, definadeadline
como 300 segundos (5 minutos).
Tipos de erros para tentar novamente
Use essa estratégia de repetição para todas as solicitações à API IAM que
retornam os códigos de erro 500
, 502
, 503
ou 504
.
Como opção, é possível usar essa estratégia de nova tentativa para solicitações à
API IAM que retornam o código de erro 404
.
As leituras do IAM têm consistência eventual. Como
resultado, os recursos podem não estar visíveis imediatamente após a criação, o que
pode gerar erros 404
.
Além disso, use uma versão modificada dessa estratégia de repetição para todas as solicitações
à API IAM que retornam o código de erro 409
e o status
ABORTED
. Esse tipo de erro indica um problema de simultaneidade. Por exemplo, talvez
você esteja tentando atualizar uma política de permissão que outro
cliente já substituiu. Para esse tipo de erro, você deve sempre repetir
toda a série de solicitações read-modify-write, usando
a espera exponencial truncada com instabilidade introduzida. Se você repetir somente a operação de gravação, a solicitação
continuará com erros.
A seguir
- Saiba como problemas de simultaneidade são gerenciados nas políticas de permissão.
- Veja como implementar o padrão read-modify-write para atualizar as políticas de permissão.