Condividi tramite


Implementare un criterio di ripetizione dei tentativi con Python

Qualsiasi applicazione eseguita nel cloud o comunica con servizi e risorse remoti deve essere in grado di gestire gli errori temporanei. È comune che queste applicazioni verifichino errori a causa di una perdita momentanea della connettività di rete, di un timeout della richiesta quando un servizio o una risorsa è occupato o altri fattori. Gli sviluppatori devono creare applicazioni per gestire in modo trasparente gli errori temporanei per migliorare la stabilità e la resilienza.

Questo articolo illustra come usare la libreria client Archiviazione di Azure per Python per configurare un criterio di ripetizione dei tentativi per un'applicazione che si connette a Archiviazione BLOB di Azure. I criteri di ripetizione dei tentativi definiscono il modo in cui l'applicazione gestisce le richieste non riuscite e devono essere sempre ottimizzate per soddisfare i requisiti aziendali dell'applicazione e la natura dell'errore.

Configurare le opzioni di ripetizione dei tentativi

I criteri di ripetizione dei tentativi per l'archiviazione BLOB vengono configurati a livello di codice, offrendo il controllo sulla modalità di applicazione delle opzioni di ripetizione ai vari scenari e richieste di servizio. Ad esempio, un'app Web che invia richieste in base all'interazione dell'utente potrebbe implementare un criterio con meno tentativi e ritardi più brevi per aumentare la velocità di risposta e notificare all'utente quando si verifica un errore. In alternativa, un'app o un componente che esegue richieste batch in background potrebbe aumentare il numero di tentativi e usare una strategia di backoff esponenziale per consentire il completamento corretto del tempo di richiesta.

Per configurare un criterio di ripetizione dei tentativi per le richieste client, è possibile scegliere tra gli approcci seguenti:

  • Usare i valori predefiniti: il criterio di ripetizione dei tentativi predefinito per la libreria client Archiviazione di Azure per Python è un'istanza di ExponentialRetry con i valori predefiniti. Se non si specifica un criterio di ripetizione dei tentativi, viene usato il criterio di ripetizione dei tentativi predefinito.
  • Passare i valori come parole chiave al costruttore client: è possibile passare i valori per le proprietà dei criteri di ripetizione come argomenti di parola chiave quando si crea un oggetto client per il servizio. Questo approccio consente di personalizzare i criteri di ripetizione dei tentativi per il client ed è utile se è sufficiente configurare alcune opzioni.
  • Creare un'istanza di una classe di criteri di ripetizione dei tentativi: è possibile creare un'istanza della classe ExponentialRetry o LinearRetry e impostare le proprietà per configurare i criteri di ripetizione dei tentativi. È quindi possibile passare l'istanza al costruttore client per applicare i criteri di ripetizione dei tentativi a tutte le richieste di servizio.

La tabella seguente illustra tutte le proprietà che è possibile usare per configurare un criterio di ripetizione dei tentativi. Una di queste proprietà può essere passata come parole chiave al costruttore client, ma alcune sono disponibili solo per l'uso con un'istanza ExponentialRetry o LinearRetry . Queste restrizioni sono indicate nella tabella, insieme ai valori predefiniti per ogni proprietà se non si apportano modifiche. Dovresti essere proattivo nell'ottimizzazione dei valori di queste proprietà per soddisfare le esigenze della tua app.

Proprietà Type Descrizione Default value EsponenzialeRetry LinearRetry
retry_total int Numero massimo di tentativi. 3
retry_connect int Numero massimo di tentativi di connessione 3
retry_read int Numero massimo di tentativi di lettura 3
retry_status int Numero massimo di tentativi di stato 3
retry_to_secondary bool Indica se la richiesta deve essere ritentata all'endpoint secondario, se possibile. Usare questa opzione solo per gli account di archiviazione con replica con ridondanza geografica abilitata, ad esempio RA-GRS o RA-GZRS. È anche necessario assicurarsi che l'app possa gestire dati potenzialmente non aggiornati. False
initial_backoff int Intervallo di backoff iniziale (in secondi) per il primo tentativo. Si applica solo alla strategia di backoff esponenziale. 15 secondi No
increment_base int Base (in secondi) per incrementare il initial_backoff dopo il primo tentativo. Si applica solo alla strategia di backoff esponenziale. 3 secondi No
backoff int Intervallo di backoff (in secondi) tra ogni tentativo. Si applica solo alla strategia di backoff lineare. 15 secondi No
random_jitter_range int Numero (in secondi) che indica un intervallo da instabilità/casuale per l'intervallo di backoff. Ad esempio, l'impostazione su random_jitter_range 3 indica che un intervallo di backoff di x può variare tra x+3 e x-3. 3 secondi

Nota

Le proprietà retry_connect, retry_reade retry_status vengono usate per contare diversi tipi di errori. Il numero di tentativi rimanenti viene calcolato come minimo dei valori seguenti: retry_total, retry_connectretry_read, e retry_status . Per questo motivo, l'impostazione potrebbe non avere effetto solo retry_total se non si impostano anche le altre proprietà. Nella maggior parte dei casi, è possibile impostare tutte e quattro le proprietà sullo stesso valore per applicare un numero massimo di tentativi. Tuttavia, devi ottimizzare queste proprietà in base alle esigenze specifiche della tua app.

Le sezioni seguenti illustrano come configurare un criterio di ripetizione dei tentativi usando approcci diversi:

Usare il criterio di ripetizione dei tentativi predefinito

Il criterio di ripetizione dei tentativi predefinito per la libreria client Archiviazione di Azure per Python è un'istanza di ExponentialRetry con i valori predefiniti. Se non si specifica un criterio di ripetizione dei tentativi, viene usato il criterio di ripetizione dei tentativi predefinito. È anche possibile passare qualsiasi proprietà di configurazione come argomenti di parola chiave quando si crea un oggetto client per il servizio.

Nell'esempio di codice seguente viene illustrato come passare un valore per la retry_total proprietà come argomento parola chiave durante la creazione di un oggetto client per il servizio BLOB. In questo esempio, l'oggetto client usa il criterio di ripetizione dei tentativi predefinito con la retry_total proprietà e altre proprietà del conteggio dei tentativi impostate su 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)

Creare un criterio ExponentialRetry

È possibile configurare un criterio di ripetizione dei tentativi creando un'istanza di ExponentialRetry e passando l'istanza al costruttore client usando l'argomento parola retry_policy chiave . Questo approccio può essere utile se è necessario configurare più proprietà o più criteri per client diversi.

Nell'esempio di codice seguente viene illustrato come configurare le opzioni di ripetizione dei tentativi usando un'istanza di ExponentialRetry. In questo esempio si imposta su initial_backoff 10 secondi, increment_base su 4 secondi e retry_total su 3 tentativi:

# 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)

Creare un criterio LinearRetry

È possibile configurare un criterio di ripetizione dei tentativi creando un'istanza di LinearRetry e passando l'istanza al costruttore client usando l'argomento parola retry_policy chiave . Questo approccio può essere utile se è necessario configurare più proprietà o più criteri per client diversi.

Nell'esempio di codice seguente viene illustrato come configurare le opzioni di ripetizione dei tentativi usando un'istanza di LinearRetry. In questo esempio si imposta su backoff 10 secondi, retry_total su 3 tentativi e retry_to_secondary su 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)

Passaggi successivi

  • Questo articolo fa parte della Guida per sviluppatori di Archiviazione BLOB per Python. Vedere l’elenco completo degli articoli della guida per sviluppatori in Creare la propria app.
  • Per indicazioni sull'architettura e procedure consigliate generali per i criteri di ripetizione dei tentativi, vedere gestione degli errori temporanei.
  • Per indicazioni sull'implementazione di un modello di ripetizione dei tentativi per gli errori temporanei, vedere Modello di ripetizione dei tentativi.