Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Coba lagi perilaku
catatan
Untuk bantuan dalam memahami tata letak halaman pengaturan, atau dalam menafsirkan tabel Support by AWS SDKs and tools berikut, lihatMemahami halaman pengaturan panduan ini.
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:
retry_mode
- Pengaturan AWSconfig
file bersamaAWS_RETRY_MODE
- variabel lingkunganaws.retryMode
- Properti sistem JVM: Hanya Java/Kotlin-
Menentukan cara SDK atau alat pengembang mencoba mencoba ulang.
Nilai default: Nilai ini khusus untuk SDK Anda. Periksa panduan SDK spesifik Anda atau basis kode SDK Anda untuk mengetahui 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 SDK Anda (periksa panduan SDK spesifik Anda atau basis kode SDK Anda).
-
max_attempts
- Pengaturan AWSconfig
file bersamaAWS_MAX_ATTEMPTS
- variabel lingkunganaws.maxAttempts
- Properti sistem JVM: 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 SDK Anda (periksa panduan SDK spesifik Anda atau basis kode SDK 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 SDK mencoba lagi selama pemadaman. | Mendukung pemutusan sirkuit untuk mencegah SDK mencoba lagi selama 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 Wilayah AWS menggunakan plus 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 Region-and-table pasangan. Jika Anda mengalami latensi tak terduga saat menggunakan adaptive
mode, lihat panduan AWS dokumentasi khusus untuk layanan yang Anda gunakan.
Coba lagi detail implementasi mode
Penggunaan bucket tokenadaptive
coba lagi) seberapa cepat permintaan harus dikirim. AWS SDKs Dua bucket token digunakan oleh SDK: bucket token coba lagi dan bucket token rate permintaan.
-
Bucket token coba lagi digunakan untuk menentukan apakah SDK harus menonaktifkan sementara percobaan ulang 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, SDK tidak akan mencoba lagi permintaan tersebut.
-
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. SDK Anda mungkin memiliki opsi konfigurasi yang tersedia untuk menggagalkan 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. Sebagian besar AWS SDKs menggunakan perpustakaan HTTP yang menggunakan kumpulan koneksi untuk menggunakan kembali koneksi yang ada saat membuat permintaan HTTP. 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 status HTTP.
-
Kode kesalahan dikembalikan dari layanan.
-
Kesalahan koneksi, didefinisikan sebagai kesalahan apa pun yang diterima oleh SDK di mana respons HTTP dari layanan tidak diterima.
Kesalahan sementara (kode status HTTP 400, 408, 500, 502, 503, dan 504) dan kesalahan pelambatan (kode status HTTP 400, 403, 429, 502, 503, dan 509) semuanya berpotensi dicoba ulang. Perilaku coba lagi SDK 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. SDKs Penggunaan 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 besar SDKs. Lihat panduan SDK atau kode sumber khusus Anda untuk konfirmasi.
Support oleh AWS SDKs dan alat
Berikut ini SDKs mendukung fitur dan pengaturan yang dijelaskan dalam topik ini. Setiap pengecualian sebagian dicatat. Setiap pengaturan properti sistem JVM didukung oleh AWS SDK untuk Java dan satu-satunya. AWS SDK for Kotlin
SDK | Didukung | Catatan atau informasi lebih lanjut |
---|---|---|
AWS CLI v2 | Ya | |
SDK for C++ | Ya | |
SDK for Go V2 (1.x) |
Ya | |
SDK for Go 1.x (V1) | Tidak | |
SDK for Java 2.x | Ya | |
SDK for Java 1.x | Ya | Properti sistem JVM: gunakan com.amazonaws.sdk.maxAttempts sebagai penggantiaws.maxAttempts ; gunakan com.amazonaws.sdk.retryMode sebagai pengganti. aws.retryMode |
SDK untuk 3.x JavaScript | Ya | |
SDK untuk 2.x JavaScript | Tidak | Mendukung jumlah percobaan ulang maksimum, backoff eksponensial dengan jitter, dan opsi untuk metode khusus untuk coba lagi backoff. |
SDK para Kotlin | Ya | |
SDK for .NET 3.x | Ya | |
SDK for PHP 3.x | Ya | |
SDK untuk Python (Boto3) |
Ya | |
SDK for Ruby 3.x | Ya | |
SDK untuk Rust | Ya | |
SDK para Swift | Ya | |
Alat untuk PowerShell | Ya |