Menerapkan kebijakan coba lagi dengan Python
Aplikasi apa pun yang berjalan di cloud atau berkomunikasi dengan layanan dan sumber daya jarak jauh harus dapat menangani kesalahan sementara. Umum bagi aplikasi ini untuk mengalami kesalahan karena hilangnya konektivitas jaringan sesaat, batas waktu permintaan saat layanan atau sumber daya sibuk, atau faktor lainnya. Pengembang harus membangun aplikasi untuk menangani kesalahan sementara secara transparan untuk meningkatkan stabilitas dan ketahanan.
Dalam artikel ini, Anda mempelajari cara menggunakan pustaka klien Azure Storage untuk Python guna menyiapkan kebijakan coba lagi untuk aplikasi yang tersambung ke Azure Blob Storage. Kebijakan coba lagi menentukan bagaimana aplikasi menangani permintaan yang gagal, dan harus selalu disetel agar sesuai dengan persyaratan bisnis aplikasi dan sifat kegagalan.
Mengonfigurasi opsi coba lagi
Kebijakan percobaan kembali untuk Blob Storage dikonfigurasi secara terprogram, menawarkan kontrol atas bagaimana opsi coba lagi diterapkan ke berbagai permintaan dan skenario layanan. Misalnya, aplikasi web yang mengeluarkan permintaan berdasarkan interaksi pengguna mungkin menerapkan kebijakan dengan lebih sedikit percobaan ulang dan penundaan yang lebih singkat untuk meningkatkan responsivitas dan memberi tahu pengguna ketika kesalahan terjadi. Atau, aplikasi atau komponen yang menjalankan permintaan batch di latar belakang dapat meningkatkan jumlah percobaan ulang dan menggunakan strategi backoff eksponensial untuk memungkinkan waktu permintaan berhasil diselesaikan.
Untuk mengonfigurasi kebijakan coba lagi untuk permintaan klien, Anda dapat memilih dari pendekatan berikut:
- Gunakan nilai default: Kebijakan coba lagi default untuk pustaka klien Azure Storage untuk Python adalah instans ExponentialRetry dengan nilai default. Jika Anda tidak menentukan kebijakan coba lagi, kebijakan coba lagi default akan digunakan.
- Meneruskan nilai sebagai kata kunci ke konstruktor klien: Anda dapat meneruskan nilai untuk properti kebijakan coba lagi sebagai argumen kata kunci saat Anda membuat objek klien untuk layanan. Pendekatan ini memungkinkan Anda untuk menyesuaikan kebijakan coba lagi untuk klien, dan berguna jika Anda hanya perlu mengonfigurasi beberapa opsi.
- Membuat instans kelas kebijakan coba lagi: Anda dapat membuat instans kelas ExponentialRetry atau LinearRetry dan mengatur properti untuk mengonfigurasi kebijakan coba lagi. Kemudian, Anda dapat meneruskan instans ke konstruktor klien untuk menerapkan kebijakan coba lagi ke semua permintaan layanan.
Tabel berikut ini memperlihatkan semua properti yang bisa Anda gunakan untuk mengonfigurasi kebijakan coba lagi. Salah satu properti ini dapat diteruskan sebagai kata kunci ke konstruktor klien, tetapi beberapa hanya tersedia untuk digunakan dengan ExponentialRetry
instans atau LinearRetry
. Pembatasan ini dicatat dalam tabel, bersama dengan nilai default untuk setiap properti jika Anda tidak membuat perubahan. Anda harus proaktif dalam menyetel nilai properti ini untuk memenuhi kebutuhan aplikasi Anda.
Properti | Tipe | Deskripsi | Nilai default | ExponentialRetry | LinearRetry |
---|---|---|---|---|---|
retry_total |
int | Jumlah percobaan kembali maksimum. | 3 | Ya | Ya |
retry_connect |
int | Jumlah maksimum percobaan ulang koneksi | 3 | Ya | Ya |
retry_read |
int | Jumlah maksimum percobaan ulang baca | 3 | Ya | Ya |
retry_status |
int | Jumlah maksimum percobaan ulang status | 3 | Ya | Ya |
retry_to_secondary |
bool | Apakah permintaan harus dicoba kembali ke titik akhir sekunder, jika dapat. Hanya gunakan opsi ini untuk akun penyimpanan dengan replikasi geo-redundan diaktifkan, seperti RA-GRS atau RA-GZRS. Anda juga harus memastikan aplikasi Dapat menangani data yang berpotensi kedaluarsa. | False |
Ya | Ya |
initial_backoff |
int | Interval backoff awal (dalam detik) untuk coba lagi pertama. Hanya berlaku untuk strategi backoff eksponensial. | 15 detik | Ya | Tidak |
increment_base |
int | Basis (dalam detik) untuk menaikkan initial_backoff setelah percobaan ulang pertama. Hanya berlaku untuk strategi backoff eksponensial. | 3 detik | Ya | Tidak |
backoff |
int | Interval backoff (dalam detik) antara setiap coba lagi. Hanya berlaku untuk strategi backoff linier. | 15 detik | Tidak | Ya |
random_jitter_range |
int | Angka (dalam detik) yang menunjukkan rentang untuk jitter/acak untuk interval backoff. Misalnya, pengaturan random_jitter_range ke 3 berarti bahwa interval backoff x dapat bervariasi antara x+3 dan x-3. |
3 detik | Ya | Ya |
Catatan
Properti retry_connect
, retry_read
, dan retry_status
digunakan untuk menghitung berbagai jenis kesalahan. Jumlah coba lagi yang tersisa dihitung sebagai minimum nilai berikut: retry_total
, , retry_connect
retry_read
, dan retry_status
. Karena itu, pengaturan hanya retry_total
mungkin tidak memiliki efek kecuali Anda juga mengatur properti lain. Dalam kebanyakan kasus, Anda dapat mengatur keempat properti ke nilai yang sama untuk memberlakukan jumlah maksimum percobaan ulang. Namun, Anda harus menyetel properti ini berdasarkan kebutuhan spesifik aplikasi Anda.
Bagian berikut menunjukkan cara mengonfigurasi kebijakan coba lagi menggunakan pendekatan yang berbeda:
- Gunakan kebijakan coba lagi default
- Membuat kebijakan ExponentialRetry
- Membuat kebijakan LinearRetry
Gunakan kebijakan coba lagi default
Kebijakan coba lagi default untuk pustaka klien Azure Storage untuk Python adalah instans ExponentialRetry dengan nilai default. Jika Anda tidak menentukan kebijakan coba lagi, kebijakan coba lagi default akan digunakan. Anda juga dapat meneruskan properti konfigurasi apa pun sebagai argumen kata kunci saat membuat objek klien untuk layanan.
Contoh kode berikut menunjukkan cara meneruskan nilai untuk retry_total
properti sebagai argumen kata kunci saat membuat objek klien untuk layanan blob. Dalam contoh ini, objek klien menggunakan kebijakan coba lagi default dengan retry_total
properti dan properti jumlah coba lagi lainnya diatur ke 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)
Membuat kebijakan ExponentialRetry
Anda dapat mengonfigurasi kebijakan coba lagi dengan membuat instans ExponentialRetry, dan meneruskan instans ke konstruktor klien menggunakan retry_policy
argumen kata kunci. Pendekatan ini dapat berguna jika Anda perlu mengonfigurasi beberapa properti atau beberapa kebijakan untuk klien yang berbeda.
Contoh kode berikut menunjukkan cara mengonfigurasi opsi coba lagi menggunakan instans ExponentialRetry
. Dalam contoh ini, kita mengatur initial_backoff
ke 10 detik, increment_base
ke 4 detik, dan retry_total
ke 3 percobaan ulang:
# 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)
Membuat kebijakan LinearRetry
Anda dapat mengonfigurasi kebijakan coba lagi dengan membuat instans LinearRetry, dan meneruskan instans ke konstruktor klien menggunakan retry_policy
argumen kata kunci. Pendekatan ini dapat berguna jika Anda perlu mengonfigurasi beberapa properti atau beberapa kebijakan untuk klien yang berbeda.
Contoh kode berikut menunjukkan cara mengonfigurasi opsi coba lagi menggunakan instans LinearRetry
. Dalam contoh ini, kita mengatur backoff
ke 10 detik, retry_total
ke 3 percobaan ulang, dan retry_to_secondary
ke 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)
Langkah berikutnya
- Artikel ini adalah bagian dari panduan pengembang Blob Storage untuk Python. Lihat daftar lengkap artikel panduan pengembang di Membangun aplikasi Anda.
- Untuk panduan arsitektur dan praktik terbaik umum untuk kebijakan coba lagi, lihat Penanganan kesalahan sementara.
- Untuk panduan tentang menerapkan pola coba lagi untuk kegagalan sementara, lihat Pola coba lagi.