Coba lagi perilaku - AWS SDKs dan Tools

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 AWS config file bersama
AWS_RETRY_MODE- variabel lingkungan
aws.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, kecuali max_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 AWS config file bersama
AWS_MAX_ATTEMPTS- variabel lingkungan
aws.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 ya legacy — Menggunakan nilai default khusus untuk SDK Anda (periksa panduan SDK spesifik Anda atau basis kode SDK Anda untuk max_attempts default).

  • Jika retry_mode ada standard — Membuat tiga upaya.

  • Jika retry_mode ada adaptive — 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

adaptiveMode 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:
  1. Tidak sensitif terhadap latensi.

  2. Klien hanya mengakses satu sumber daya, atau, Anda menyediakan logika untuk mengumpulkan klien Anda secara terpisah oleh sumber daya layanan yang sedang diakses.

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 token untuk memutuskan apakah permintaan harus dicoba ulang dan (dalam kasus mode adaptive 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 secondsuntuk 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