Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Coba lagi perilaku
Perilaku coba lagi mencakup pengaturan mengenai bagaimana SDKs upaya untuk memulihkan dari kegagalan yang dihasilkan dari permintaan yang dibuat Layanan AWS.
Konfigurasikan fungsi ini dengan menggunakan yang berikut ini:
retry_mode
- dibagikan AWSconfig
pengaturan fileAWS_RETRY_MODE
- variabel lingkunganaws.retryMode
- properti JVM sistem: Hanya Java/Kotlin-
Menentukan bagaimana SDK atau alat pengembang mencoba mencoba ulang.
Nilai default: Nilai ini khusus untuk AndaSDK. Periksa SDK panduan spesifik Anda atau basis kode Anda SDK untuk defaultnya
retry_mode
.Nilai yang valid:
-
standard
— (Disarankan) Seperangkat aturan coba lagi yang direkomendasikan di seluruh AWS SDKs. Mode ini mencakup serangkaian kesalahan standar yang dicoba ulang, dan secara otomatis menyesuaikan jumlah percobaan ulang untuk memaksimalkan ketersediaan dan stabilitas. Mode ini aman untuk digunakan dalam aplikasi multi-tenant. Jumlah maksimum percobaan default dengan mode ini adalah tiga, kecualimax_attempts
dikonfigurasi secara eksplisit. -
adaptive
— Mode coba lagi, hanya sesuai untuk kasus penggunaan khusus, yang mencakup fungsionalitas mode standar serta pembatasan laju sisi klien otomatis. Mode coba lagi ini tidak disarankan untuk aplikasi multi-penyewa, kecuali jika Anda berhati-hati untuk mengisolasi penyewa aplikasi. Untuk informasi selengkapnya, lihat Memilih antara standard dan adaptive coba lagi mode. Mode ini bersifat eksperimental dan mungkin mengubah perilaku di masa depan. -
legacy
— (Tidak Disarankan) Khusus untuk Anda SDK (periksa SDK panduan spesifik Anda SDK atau basis kode Anda).
-
max_attempts
- dibagikan AWSconfig
pengaturan fileAWS_MAX_ATTEMPTS
- variabel lingkunganaws.maxAttempts
- properti JVM sistem: Hanya Java/Kotlin-
Menentukan jumlah maksimum upaya untuk membuat atas permintaan.
Nilai default: Jika nilai ini tidak ditentukan, defaultnya tergantung pada nilai
retry_mode
pengaturan:-
Jika
retry_mode
yalegacy
— Menggunakan nilai default khusus untuk Anda SDK (periksa SDK panduan spesifik Anda SDK atau basis kode Anda untukmax_attempts
default). -
Jika
retry_mode
adastandard
— Membuat tiga upaya. -
Jika
retry_mode
adaadaptive
— Membuat tiga upaya.
Nilai yang valid: Angka lebih besar dari 0.
-
Memilih antara standard
dan adaptive
coba lagi mode
Kami menyarankan Anda menggunakan mode standard
coba lagi kecuali Anda yakin bahwa penggunaan Anda lebih cocok untukadaptive
.
catatan
adaptive
Mode mengasumsikan bahwa Anda mengumpulkan klien berdasarkan ruang lingkup di mana layanan backend dapat membatasi permintaan. Jika Anda tidak melakukan ini, pembatasan dalam satu sumber daya dapat menunda permintaan untuk sumber daya yang tidak terkait jika Anda menggunakan klien yang sama untuk kedua sumber daya.
Standar | Adaptif |
---|---|
Kasus penggunaan aplikasi: Semua. | Kasus penggunaan aplikasi:
|
Mendukung pemutusan sirkuit untuk mencegah mencoba lagi selama SDK pemadaman. | Mendukung pemutusan sirkuit untuk mencegah mencoba lagi selama SDK pemadaman. |
Menggunakan backoff eksponensial gelisah jika terjadi kegagalan. | Menggunakan durasi backoff dinamis untuk mencoba meminimalkan jumlah permintaan yang gagal, dengan imbalan potensi peningkatan latensi. |
Jangan pernah menunda upaya permintaan pertama, hanya percobaan ulang. | Dapat membatasi atau menunda upaya permintaan awal. |
Jika Anda memilih untuk menggunakan adaptive
mode, aplikasi Anda harus membangun klien yang dirancang di sekitar setiap sumber daya yang mungkin dibatasi. Sumber daya, dalam hal ini, disetel lebih baik daripada hanya memikirkan masing-masing Layanan AWS. Layanan AWS dapat memiliki dimensi tambahan yang mereka gunakan untuk membatasi permintaan. Mari kita gunakan layanan Amazon DynamoDB sebagai contoh. DynamoDB menggunakan Wilayah AWS ditambah tabel yang diakses ke permintaan throttle. Ini berarti bahwa satu tabel yang diakses kode Anda mungkin dibatasi lebih dari yang lain. Jika kode Anda menggunakan klien yang sama untuk mengakses semua tabel, dan permintaan ke salah satu tabel tersebut dibatasi, maka mode coba lagi adaptif akan mengurangi tingkat permintaan untuk semua tabel. Kode Anda harus dirancang untuk memiliki satu klien per egion-and-table pasangan R. Jika Anda mengalami latensi tak terduga saat menggunakan adaptive
mode, lihat spesifiknya AWS panduan dokumentasi untuk layanan yang Anda gunakan.
Coba lagi detail implementasi mode
Bagian AWS SDKsgunakan ember tokenadaptive
coba lagi) seberapa cepat permintaan harus dikirim. Dua bucket token digunakan olehSDK: ember token coba lagi dan bucket token rate permintaan.
-
Bucket token coba lagi digunakan untuk menentukan apakah SDK harus menonaktifkan percobaan ulang sementara untuk melindungi layanan hulu dan hilir selama pemadaman. Token diperoleh dari bucket sebelum percobaan ulang dicoba, dan token dikembalikan ke bucket saat permintaan berhasil. Jika bucket kosong saat percobaan ulang dicoba, permintaan tidak SDK akan mencoba lagi.
-
Bucket token rate permintaan hanya digunakan dalam mode
adaptive
coba lagi untuk menentukan tingkat pengiriman permintaan. Token diperoleh dari bucket sebelum permintaan dikirim, dan token dikembalikan ke bucket pada tingkat yang ditentukan secara dinamis berdasarkan respons pelambatan yang dikembalikan oleh layanan.
Berikut ini adalah pseudocode tingkat tinggi untuk mode standard
dan adaptive
coba lagi:
MakeSDKRequest() { attempts = 0 loop { GetSendToken() response = SendHTTPRequest() RequestBookkeeping(response) if not Retryable(response) return response attempts += 1 if attempts >= MAX_ATTEMPTS: return response if not HasRetryQuota(response) return response delay = ExponentialBackoff(attempts) sleep(delay) } }
Berikut ini adalah rincian lebih lanjut tentang komponen yang digunakan dalam pseudocode:
GetSendToken
:
Langkah ini hanya digunakan dalam mode adaptive
coba lagi. Langkah ini memperoleh token dari bucket token rate permintaan. Jika token tidak tersedia, itu akan menunggu hingga tersedia. Anda SDK mungkin memiliki opsi konfigurasi yang tersedia untuk gagal permintaan alih-alih menunggu. Token dalam bucket diisi ulang pada tingkat yang ditentukan secara dinamis, berdasarkan jumlah respons pelambatan yang diterima oleh klien.
SendHTTPRequest
:
Langkah ini mengirimkan permintaan ke AWS. Kebanyakan AWS SDKsgunakan HTTP pustaka yang menggunakan kumpulan koneksi untuk menggunakan kembali koneksi yang ada saat membuat HTTP permintaan. Umumnya, koneksi digunakan kembali jika permintaan gagal karena kesalahan pelambatan tetapi tidak jika permintaan gagal karena kesalahan sementara.
RequestBookkeeping
:
Token ditambahkan ke ember token jika permintaan berhasil. Hanya untuk mode adaptive
coba lagi, tingkat pengisian bucket token rate permintaan diperbarui berdasarkan jenis respons yang diterima.
Retryable
:
Langkah ini menentukan apakah respons dapat dicoba ulang berdasarkan hal berikut:
-
Kode HTTP status.
-
Kode kesalahan dikembalikan dari layanan.
-
Kesalahan koneksi, didefinisikan sebagai kesalahan yang diterima oleh SDK di mana HTTP respons dari layanan tidak diterima.
Kesalahan sementara (kode HTTP status 400, 408, 500, 502, 503, dan 504) dan kesalahan pelambatan (kode HTTP status 400, 403, 429, 502, 503, dan 509) semuanya berpotensi dicoba ulang. SDKperilaku coba lagi ditentukan dalam kombinasi dengan kode kesalahan atau data lain dari layanan.
MAX_ATTEMPTS
:
Jumlah default upaya maksimum diatur oleh retry_mode
pengaturan, kecuali diganti oleh pengaturan. max_attempts
HasRetryQuota
Langkah ini memperoleh token dari ember token coba lagi. Jika ember token coba lagi kosong, permintaan tidak akan dicoba lagi.
ExponentialBackoff
Untuk kesalahan yang dapat dicoba lagi, penundaan coba lagi dihitung menggunakan backoff eksponensial terpotong. SDKsPenggunaan backoff eksponensial biner terpotong dengan jitter. Algoritma berikut menunjukkan bagaimana jumlah waktu tidur, dalam detik, didefinisikan untuk respons permintaani
:
seconds_to_sleep_i = min(b*r^i, MAX_BACKOFF)
Dalam algoritma sebelumnya, nilai-nilai berikut berlaku:
b = random number within the range of: 0 <= b <= 1
r = 2
MAX_BACKOFF = 20 seconds
untuk sebagian besarSDKs. Lihat SDK panduan atau kode sumber khusus Anda untuk konfirmasi.
Kompatibilitas dengan AWS SDKs
Berikut ini SDKs mendukung fitur dan pengaturan yang dijelaskan dalam topik ini. Setiap pengecualian sebagian dicatat. Pengaturan properti JVM sistem apa pun didukung oleh AWS SDK for Java dan AWS SDK for Kotlin hanya.
SDK | Didukung | Catatan atau informasi lebih lanjut |
---|---|---|
AWS CLI v2 | Ya | |
SDKuntuk C ++ | Ya | |
SDKuntuk Go V2 (1.x) |
Ya | |
SDKuntuk Go 1.x (V1) | Tidak | |
SDKuntuk Java 2.x | Ya | |
SDKuntuk Java 1.x | Ya | JVMproperti sistem: gunakan com.amazonaws.sdk.maxAttempts sebagai penggantiaws.maxAttempts ; gunakan com.amazonaws.sdk.retryMode sebagai penggantiaws.retryMode . |
SDKuntuk JavaScript 3.x | Ya | |
SDKuntuk JavaScript 2.x | Tidak | Mendukung jumlah percobaan ulang maksimum, backoff eksponensial dengan jitter, dan opsi untuk metode khusus untuk coba lagi backoff. |
SDKuntuk Kotlin | Ya | |
SDKuntuk. NET3.x | Ya | |
SDKuntuk PHP 3.x | Ya | |
SDKuntuk Python (Boto3) |
Ya | |
SDKuntuk Ruby 3.x | Ya | |
SDKuntuk Rust | Ya | |
SDKuntuk Swift | Ya | |
Alat untuk PowerShell | Ya |