Implementar uma política de repetição com o Python
Qualquer aplicativo executado na nuvem ou que se comunique com serviços e recursos remotos deve ser capaz de lidar com falhas transitórias. É comum que esses aplicativos sofram 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 clientes do Armazenamento do Microsoft Azure para Python, a fim de 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 trata 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 do Armazenamento de Blobs são configuradas programaticamente, oferecendo controle sobre como as opções de repetição são aplicadas a várias solicitações e cenários de serviço. 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 ocorrer 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 retirada exponencial para permitir que o tempo da solicitação seja concluído com êxito.
Para configurar uma política de repetição para as solicitações de cliente, você pode escolher uma entre as seguintes abordagens:
- Usar os valores padrão: a política de repetição padrão da biblioteca de clientes 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 repetição, a política de repetição padrão será usada.
- Transmitir valores como palavras-chave para o construtor do cliente: você pode transmitir valores para as propriedades da política de repetição como argumentos de palavra-chave ao criar um objeto cliente para o serviço. Essa abordagem permite personalizar 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 da política de repetição: crie uma instância da classe ExponentialRetry ou LinearRetry e defina as propriedades para configurar a política de repetição. Em seguida, você pode transmitir a instância para o construtor do 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 repetição. Qualquer uma dessas propriedades pode ser transmitida como palavras-chave para o construtor do cliente, mas algumas estão disponíveis apenas para uso com uma instância ExponentialRetry
ou LinearRetry
. Essas restrições são indicadas na tabela, juntamente com os valores padrão de cada propriedade, caso você não faça alterações. Você deve ser proativo ao ajustar os valores dessas propriedades de acordo com as necessidades do seu aplicativo.
Propriedade | Type | Descrição | Valor padrão | ExponentialRetry | LinearRetry |
---|---|---|---|---|---|
retry_total |
int | O número máximo de repetições. | 3 | Sim | Yes |
retry_connect |
int | O número máximo de tentativas de conexão | 3 | Sim | Yes |
retry_read |
int | O número máximo de repetições de leitura | 3 | Sim | Yes |
retry_status |
int | O número máximo de tentativas de status | 3 | Sim | Yes |
retry_to_secondary |
bool | Indica se a solicitação deve ser repetida no ponto de extremidade secundário, se possível. Só use essa opção para contas de armazenamento com replicação com a redundância geográfica habilitada, como RA-GRS ou RA-GZRS. Você também deve garantir que o seu aplicativo possa lidar com dados potencialmente obsoletos. | False |
Sim | Yes |
initial_backoff |
int | O intervalo de retirada inicial (em segundos) para a primeira repetição. Só se aplica à estratégia de retirada exponencial. | 15 s | Sim | Não |
increment_base |
int | A base (em segundos) para incrementar a initial_backoff após a primeira repetição. Só se aplica à estratégia de retirada exponencial. | 3 Segundos | Sim | Não |
backoff |
int | O intervalo de retirada (em segundos) entre cada repetição. Só se aplica à estratégia de retirada linear. | 15 s | Não | Sim |
random_jitter_range |
int | Um número (em segundos) que indica um intervalo de tremulação/randomização para o intervalo de retirada. Por exemplo, definir random_jitter_range como 3 significa que um intervalo de retirada igual a x pode variar entre x+3 e x-3. |
3 Segundos | Sim | Sim |
Observação
As propriedades retry_connect
, retry_read
e retry_status
são usadas para contar diferentes tipos de erros. A contagem de repetição restante é calculada como o mínimo dos seguintes valores: retry_total
, retry_connect
, retry_read
e retry_status
. Por isso, a configuração apenas de 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 de acordo com as necessidades específicas do seu aplicativo.
As seguintes seções mostram como configurar uma política de repetição usando abordagens diferentes:
- 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 clientes 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 repetição, a política de repetição padrão será usada. Você também pode transmitir 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 transmitir um valor para a propriedade retry_total
como um argumento de palavra-chave ao criar um objeto cliente para o serviço de blob. Neste exemplo, o objeto cliente usa a política de repetição padrão com a propriedade retry_total
e outras propriedades de contagem de repetição 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 transmitindo a instância para o construtor do cliente usando o argumento de palavra-chave retry_policy
. Essa abordagem pode ser útil se você precisa 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
como 4 segundos e retry_total
como 3 repetições:
# 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 transmitindo a instância para o construtor do cliente usando o argumento de palavra-chave retry_policy
. Essa abordagem pode ser útil se você precisa 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
como 10 segundos, retry_total
como 3 repetições e retry_to_secondary
como 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óximas etapas
- Este artigo faz parte do guia para desenvolvedores do Armazenamento de Blobs para Python. Veja a lista completa de artigos do guia para desenvolvedores em Como criar seu aplicativo.
- Para obter diretrizes arquitetônicas e práticas recomendadas gerais para políticas de repetição, confira Tratamento de falhas transitórias.
- Para obter diretrizes sobre como implementar um padrão de repetição para falhas transitórias, confira o padrão de Repetição.