Implementar uma política de repetição com Python
Qualquer aplicativo que seja executado na nuvem ou se comunique com serviços e recursos remotos deve ser capaz de lidar com falhas transitórias. É comum que esses aplicativos apresentem falhas devido a uma perda momentânea de conectividade de rede, um tempo limite de solicitação quando um serviço ou recurso está ocupado ou outros fatores. Os desenvolvedores devem criar aplicativos para lidar com falhas transitórias de forma transparente para melhorar a estabilidade e a resiliência.
Neste artigo, você aprenderá a usar a biblioteca de cliente do Armazenamento do Azure para Python para configurar uma política de repetição para um aplicativo que se conecta ao Armazenamento de Blobs do Azure. As políticas de repetição definem como o aplicativo lida com solicitações com falha e devem sempre ser ajustadas para corresponder aos requisitos de negócios do aplicativo e à natureza da falha.
Configurar opções de repetição
As políticas de repetição para armazenamento de Blob são configuradas programaticamente, oferecendo controle sobre como as opções de repetição são aplicadas a várias solicitações de serviço e cenários. Por exemplo, um aplicativo Web que emite solicitações com base na interação do usuário pode implementar uma política com menos tentativas e atrasos mais curtos para aumentar a capacidade de resposta e notificar o usuário quando ocorre um erro. Como alternativa, um aplicativo ou componente executando solicitações em lote em segundo plano pode aumentar o número de novas tentativas e usar uma estratégia de recuo exponencial para permitir que a solicitação seja concluída com êxito.
Para configurar uma política de repetição para solicitações de cliente, você pode escolher entre as seguintes abordagens:
- Use os valores padrão: A política de repetição padrão para a biblioteca de cliente do Armazenamento do Azure para Python é uma instância de ExponentialRetry com os valores padrão. Se você não especificar uma política de nova tentativa, a política de repetição padrão será usada.
- Passar valores como palavras-chave para o construtor do cliente: você pode passar valores para as propriedades da política de repetição como argumentos de palavra-chave ao criar um objeto de cliente para o serviço. Essa abordagem permite que você personalize a política de repetição para o cliente e é útil se você precisar configurar apenas algumas opções.
- Criar uma instância de uma classe de política de repetição: você pode criar uma instância da classe ExponentialRetry ou LinearRetry e definir as propriedades para configurar a política de repetição. Em seguida, você pode passar a instância para o construtor cliente para aplicar a política de repetição a todas as solicitações de serviço.
A tabela a seguir mostra todas as propriedades que você pode usar para configurar uma política de novas tentativas. Qualquer uma dessas propriedades pode ser passada como palavras-chave para o construtor cliente, mas algumas só estão disponíveis para uso com uma ExponentialRetry
instância OR LinearRetry
. Essas restrições são anotadas na tabela, juntamente com os valores padrão para cada propriedade se você não fizer alterações. Você deve ser proativo no ajuste dos valores dessas propriedades para atender às necessidades do seu aplicativo.
Propriedade | Type | Description | Default value | ExponencialRetry | LinearRetry |
---|---|---|---|---|---|
retry_total |
número inteiro | O número máximo de repetições. | 3 | Sim | Sim |
retry_connect |
número inteiro | O número máximo de novas tentativas de conexão | 3 | Sim | Sim |
retry_read |
número inteiro | O número máximo de novas tentativas de leitura | 3 | Sim | Sim |
retry_status |
número inteiro | O número máximo de repetições de status | 3 | Sim | Sim |
retry_to_secondary |
booleano | Se a solicitação deve ser repetida para o ponto de extremidade secundário, se possível. Use essa opção apenas para contas de armazenamento com replicação com redundância geográfica habilitada, como RA-GRS ou RA-GZRS. Você também deve garantir que seu aplicativo possa lidar com dados potencialmente obsoletos. | False |
Sim | Sim |
initial_backoff |
número inteiro | O intervalo de recuo inicial (em segundos) para a primeira tentativa. Aplica-se apenas à estratégia de backoff exponencial. | 15 segundos | Sim | No |
increment_base |
número inteiro | A base (em segundos) para incrementar o initial_backoff após a primeira tentativa. Aplica-se apenas à estratégia de backoff exponencial. | 3 segundos | Sim | No |
backoff |
número inteiro | O intervalo de backoff (em segundos) entre cada nova tentativa. Aplica-se apenas à estratégia de recuo linear. | 15 segundos | Não | Sim |
random_jitter_range |
número inteiro | Um número (em segundos) que indica um intervalo para desvio/aleatorização para o intervalo de backoff. Por exemplo, definir random_jitter_range como 3 significa que um intervalo de recuo de x pode variar entre x+3 e x-3. |
3 segundos | Sim | Sim |
Nota
As propriedades retry_connect
, retry_read
, e retry_status
são usadas para contar diferentes tipos de erros. A contagem de tentativas restante é calculada como o mínimo dos seguintes valores: retry_total
, retry_connect
, retry_read
, e retry_status
. Devido a isso, a configuração somente retry_total
pode não ter efeito, a menos que você também defina as outras propriedades. Na maioria dos casos, você pode definir todas as quatro propriedades com o mesmo valor para impor um número máximo de tentativas. No entanto, você deve ajustar essas propriedades com base nas necessidades específicas do seu aplicativo.
As seções a seguir mostram como configurar uma política de repetição usando diferentes abordagens:
- Usar a política de repetição padrão
- Criar uma política ExponentialRetry
- Criar uma política LinearRetry
Usar a política de repetição padrão
A política de repetição padrão para a biblioteca de cliente do Armazenamento do Azure para Python é uma instância de ExponentialRetry com os valores padrão. Se você não especificar uma política de nova tentativa, a política de repetição padrão será usada. Você também pode passar quaisquer propriedades de configuração como argumentos de palavra-chave ao criar um objeto cliente para o serviço.
O exemplo de código a seguir mostra como passar um valor para a retry_total
propriedade como um argumento de palavra-chave ao criar um objeto de cliente para o serviço de blob. Neste exemplo, o objeto cliente usa a política de repetição padrão com a retry_total
propriedade e outras propriedades de contagem de tentativas definidas como 5:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object with retry options
blob_service_client = BlobServiceClient(account_url, credential, retry_total=5,
retry_connect=5, retry_read=5, retry_status=5)
Criar uma política ExponentialRetry
Você pode configurar uma política de repetição criando uma instância de ExponentialRetry e passando a instância para o construtor do cliente usando o argumento de retry_policy
palavra-chave. Essa abordagem pode ser útil se você precisar configurar várias propriedades ou várias políticas para clientes diferentes.
O exemplo de código a seguir mostra como configurar as opções de repetição usando uma instância de ExponentialRetry
. Neste exemplo, definimos initial_backoff
como 10 segundos, increment_base
4 segundos e retry_total
3 tentativas:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Specify retry policy parameters
retry = ExponentialRetry(initial_backoff=10, increment_base=4, retry_total=3)
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)
Criar uma política LinearRetry
Você pode configurar uma política de repetição criando uma instância de LinearRetry e passando a instância para o construtor cliente usando o retry_policy
argumento de palavra-chave. Essa abordagem pode ser útil se você precisar configurar várias propriedades ou várias políticas para clientes diferentes.
O exemplo de código a seguir mostra como configurar as opções de repetição usando uma instância de LinearRetry
. Neste exemplo, definimos backoff
para 10 segundos, retry_total
para 3 tentativas e retry_to_secondary
para True
:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Specify retry policy parameters
retry = LinearRetry(backoff=10, retry_total=3, retry_to_secondary=True)
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential, retry_policy=retry)
Próximos passos
- Este artigo faz parte do guia do desenvolvedor do Blob Storage para Python. Consulte a lista completa de artigos do guia do desenvolvedor em Crie seu aplicativo.
- Para obter orientação de arquitetura e práticas recomendadas gerais para políticas de repetição, consulte Tratamento de falhas transitórias.
- Para obter orientação sobre como implementar um padrão de repetição para falhas transitórias, consulte Padrão de nova tentativa.