Konfigurasikan batas waktu di AWS SDK for Java 2.x - AWS SDK for Java 2.x

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konfigurasikan batas waktu di AWS SDK for Java 2.x

AWS SDK for Java 2.x Ini menyediakan beberapa lapisan konfigurasi batas waktu untuk membantu Anda membangun aplikasi yang tangguh. SDK menawarkan berbagai jenis batas waktu yang bekerja sama untuk mengoptimalkan kinerja dan keandalan aplikasi Anda.

Ada dua kategori utama batas waktu di SDK:

  • Batas Waktu Klien Layanan - Batas waktu tingkat tinggi yang mengontrol operasi API

  • HTTP Client Timeouts - Batas waktu tingkat rendah yang mengontrol komunikasi jaringan

Batas waktu klien layanan

Batas waktu klien layanan beroperasi pada tingkat API dan mengontrol keseluruhan perilaku operasi layanan, termasuk percobaan ulang dan beberapa upaya.

Batas waktu panggilan API

Batas waktu panggilan API menetapkan jumlah waktu maksimum untuk seluruh operasi API, termasuk semua upaya coba lagi. Batas waktu ini memberikan batasan keras pada berapa lama aplikasi Anda menunggu operasi lengkap selesai.

S3Client s3Client = S3Client.builder() .overrideConfiguration(ClientOverrideConfiguration.builder() .apiCallTimeout(Duration.ofMinutes(2)) // Total time for entire operation, such as when you call the getObject method. .build()) .build();

Karakteristik utama:

  • Termasuk semua upaya coba lagi.

  • Termasuk waktu yang dihabiskan menunggu di antara percobaan ulang.

  • Memberikan waktu tunggu maksimum mutlak.

  • Mencegah operasi berjalan tanpa batas waktu.

Batas waktu percobaan panggilan API

Batas waktu percobaan panggilan API menetapkan waktu maksimum untuk satu upaya operasi API. Jika batas waktu ini terlampaui, SDK akan mencoba ulang operasi (jika percobaan ulang dikonfigurasi) daripada gagal seluruh panggilan.

S3Client s3Client = S3Client.builder() .overrideConfiguration(ClientOverrideConfiguration.builder() .apiCallAttemptTimeout(Duration.ofSeconds(30)) // Time for single attempt. .build()) .build();

Karakteristik utama:

  • Berlaku untuk upaya individu saja.

  • Mengaktifkan kegagalan cepat dan coba lagi untuk permintaan lambat.

  • Harus lebih pendek dari batas waktu panggilan API.

  • Membantu mengidentifikasi dan memulihkan dari masalah sementara.

Konfigurasikan batas waktu klien layanan

Anda dapat mengonfigurasi batas waktu klien layanan secara global untuk semua operasi atau per permintaan:

Konfigurasi Global:

S3Client s3Client = S3Client.builder() .overrideConfiguration(b -> b .apiCallTimeout(Duration.ofSeconds(105L)) .apiCallAttemptTimeout(Duration.ofSeconds(25L))) .build(); // When you use the s3Client for an API operation, the SDK uses the configured timeout values.

Konfigurasi Per-Permintaan:

S3Client basicS3Client = S3Client.create(); // The following configuration uses the same settings as shown before, but these settings // apply to only the `putObject` call. When you use `basicS3Client` in another API call without // supplying the override configuration, there are no API timeout limits. No timeout limits is the default for the SDK. AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder() .apiCallTimeout(Duration.ofSeconds(105L)) .apiCallAttemptTimeout(Duration.ofSeconds(25L)) .build(); basicS3Client.putObject(b -> b .bucket("amzn-s3-demo-bucket") .key("example-key") .overrideConfiguration(overrideConfiguration), RequestBody.fromString("test"));

Praktik terbaik untuk batas waktu API

SDK for Java 2.x tidak menetapkan batas waktu panggilan API atau batas waktu percobaan panggilan API individual secara default. Tetapkan batas waktu untuk upaya individu dan seluruh permintaan. Ini membantu aplikasi Anda gagal dengan cepat ketika masalah sementara menyebabkan upaya permintaan memakan waktu lebih lama atau ketika masalah jaringan yang fatal terjadi.

Batas waktu klien HTTP

Batas waktu klien HTTP beroperasi pada tingkat jaringan dan mengontrol berbagai aspek komunikasi HTTP. Batas waktu ini bervariasi tergantung pada implementasi klien HTTP yang Anda gunakan.

Batas waktu koneksi

Batas waktu koneksi mengontrol berapa lama menunggu saat membuat koneksi baru ke titik Layanan AWS akhir.

// Available with all HTTP clients. ApacheHttpClient.builder() .connectionTimeout(Duration.ofSeconds(5L)) .build();

Tujuan:

  • Mencegah tergantung pada masalah konektivitas jaringan.

  • Gagal cepat ketika layanan tidak dapat dijangkau.

  • Penting untuk aplikasi yang membutuhkan penanganan kesalahan responsif.

Batas waktu soket (Apache dan URLConnection klien)

Batas waktu soket mengontrol berapa lama menunggu data pada koneksi yang sudah ada.

ApacheHttpClient.builder() .socketTimeout(Duration.ofSeconds(30L)) // Time to wait for response data. .build();

Baca dan tulis batas waktu (klien Netty)

Klien Netty menyediakan batas waktu terpisah untuk operasi baca dan tulis:

NettyNioAsyncHttpClient.builder() .readTimeout(Duration.ofSeconds(30L)) // Reading response data. .writeTimeout(Duration.ofSeconds(30L)) // Writing request data. .build();

Batas waktu negosiasi TLS (klien Netty)

Mengontrol waktu yang diizinkan untuk TLS/SSL jabat tangan:

NettyNioAsyncHttpClient.builder() .tlsNegotiationTimeout(Duration.ofSeconds(3L)) .build();

Batas waktu kolam koneksi

Beberapa klien HTTP menyediakan batas waktu untuk operasi kumpulan koneksi:

ApacheHttpClient.builder() .connectionAcquisitionTimeout(Duration.ofSeconds(10L)) // Wait for pool connection. .connectionTimeToLive(Duration.ofMinutes(5L)) // Maximum connection age. .connectionMaxIdleTime(Duration.ofSeconds(60L)) // Maximum idle time. .build()

Konfigurasikan klien HTTPIni berisi informasi lebih lanjut tentang klien HTTP di AWS SDK for Java 2.x

Interaksi dan hierarki batas waktu

Memahami bagaimana batas waktu yang berbeda berinteraksi sangat penting untuk konfigurasi yang tepat:

Hirarki batas waktu

API Call Timeout (2 minutes) ├── Retry Attempt 1 │ ├── API Call Attempt Timeout (45 seconds) │ └── HTTP Client Timeouts │ ├── Connection Timeout (5 seconds) │ ├── TLS Negotiation Timeout (3 seconds) │ └── Read/Write Timeout (30 seconds) ├── Retry Attempt 2 │ └── [Same structure as Attempt 1] └── Retry Attempt 3 └── [Same structure as Attempt 1]

Aturan konfigurasi

Batas waktu panggilan API ≥ batas waktu percobaan panggilan API
// Correct configuration. .apiCallTimeout(Duration.ofMinutes(2)) // 120 seconds. .apiCallAttemptTimeout(Duration.ofSeconds(30)) // 30 seconds.
Batas waktu upaya panggilan API ≥ batas waktu klien HTTP
// HTTP client timeouts must be less than attempt timeout. .apiCallAttemptTimeout(Duration.ofSeconds(30L)) // 30 seconds. // HTTP client configuration. .connectionTimeout(Duration.ofSeconds(5L)) // 5 seconds. .readTimeout(Duration.ofSeconds(25L)) // 25 seconds (< 30).
Akun untuk beberapa upaya
// If you have 3 retry attempts, each taking up to 30 seconds // API call timeout must be at least 90 seconds plus overhead. .apiCallTimeout(Duration.ofMinutes(2L)) // 120 seconds. .apiCallAttemptTimeout(Duration.ofSeconds(30)) // 30 seconds per attempt.

Gunakan default konfigurasi cerdas

SDK menyediakan default cerdas yang secara otomatis mengonfigurasi nilai batas waktu yang sesuai:

// Enable smart defaults. S3Client client = S3Client.builder() .defaultsMode(DefaultsMode.AUTO) // Automatically choose appropriate defaults. .build(); // Available modes: // - STANDARD: Balanced defaults // - IN_REGION: Optimized for same-region calls // - CROSS_REGION: Optimized for cross-region calls // - MOBILE: Optimized for mobile applications // - AUTO: Automatically detect and choose appropriate mode // - LEGACY: Provides settings that were used before smart defaults existed.

Smart default secara otomatis mengkonfigurasi:

  • Nilai batas waktu koneksi.

  • Nilai batas waktu negosiasi TLS.

  • Pengaturan klien lainnya.

Ringkasan

Konfigurasi batas waktu yang efektif AWS SDK for Java 2.x memerlukan pemahaman interaksi antara batas waktu klien layanan dan batas waktu klien HTTP:

  1. Batas waktu klien layanan mengontrol perilaku API tingkat tinggi.

  2. Batas waktu klien HTTP mengontrol perilaku jaringan tingkat rendah.

  3. Hirarki yang tepat memastikan batas waktu bekerja sama secara efektif.

  4. Smart default memberikan titik awal yang baik untuk sebagian besar aplikasi.

Konfigurasikan batas waktu dengan tepat untuk kasus penggunaan Anda untuk membangun aplikasi yang tahan terhadap masalah jaringan dan responsif terhadap pengguna.