Praktik terbaik 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.

Praktik terbaik AWS SDK for Java 2.x

Bagian ini mencantumkan praktik terbaik untuk menggunakan SDK for Java 2.x.

Gunakan kembali klien SDK, jika memungkinkan

Setiap klien SDK memelihara kumpulan koneksi HTTP sendiri. Koneksi yang sudah ada di kolam dapat digunakan kembali oleh permintaan baru untuk mengurangi waktu untuk membuat koneksi baru. Kami merekomendasikan berbagi satu contoh klien untuk menghindari overhead memiliki terlalu banyak kumpulan koneksi yang tidak digunakan secara efektif. Semua klien SDK aman untuk utas.

Jika Anda tidak ingin berbagi instance klien, panggil close() instance untuk melepaskan sumber daya saat klien tidak diperlukan.

Tutup aliran masukan dari operasi klien

Untuk operasi streaming sepertiS3Client#getObject, jika Anda bekerja dengan ResponseInputStream langsung, kami sarankan Anda melakukan hal berikut:

  • Baca semua data dari aliran input sesegera mungkin.

  • Tutup aliran input sesegera mungkin.

Kami membuat rekomendasi ini karena aliran input adalah aliran langsung data dari koneksi HTTP dan koneksi HTTP yang mendasarinya tidak dapat digunakan kembali sampai semua data dari aliran telah dibaca dan aliran ditutup. Jika aturan ini tidak diikuti, klien dapat kehabisan sumber daya dengan mengalokasikan terlalu banyak koneksi HTTP yang terbuka, tetapi tidak terpakai.

Menyetel konfigurasi HTTP berdasarkan tes kinerja

SDK menyediakan satu set konfigurasi http default yang berlaku untuk kasus penggunaan umum. Kami menyarankan agar pelanggan menyetel konfigurasi HTTP untuk aplikasi mereka berdasarkan kasus penggunaan mereka.

Sebagai titik awal yang baik, SDK menawarkan fitur default konfigurasi cerdas. Fitur ini tersedia dimulai dengan versi 2.17.102. Anda memilih mode tergantung pada kasus penggunaan Anda, yang memberikan nilai konfigurasi yang masuk akal.

Gunakan OpenSSL untuk klien HTTP berbasis Netty

Secara default, SDK NettyNioAsyncHttpClientmenggunakan implementasi SSL default JDK sebagai. SslProvider Pengujian kami menemukan bahwa OpenSSL berkinerja lebih baik daripada implementasi default JDK. Komunitas Netty juga merekomendasikan penggunaan OpenSSL.

Untuk menggunakan OpenSSL, netty-tcnative tambahkan dependensi Anda. Untuk detail konfigurasi, lihat dokumentasi proyek Netty.

Setelah Anda netty-tcnative mengkonfigurasi untuk proyek Anda, NettyNioAsyncHttpClient instance akan secara otomatis memilih OpenSSL. Atau, Anda dapat mengatur secara SslProvider eksplisit menggunakan NettyNioAsyncHttpClient builder seperti yang ditunjukkan pada cuplikan berikut.

NettyNioAsyncHttpClient.builder() .sslProvider(SslProvider.OPENSSL) .build();

Konfigurasikan batas waktu API

SDK memberikan nilai default untuk beberapa opsi batas waktu, seperti batas waktu koneksi dan batas waktu soket, tetapi tidak untuk batas waktu panggilan API atau batas waktu percobaan panggilan API individual. Ini adalah praktik yang baik untuk mengatur batas waktu untuk upaya individu dan seluruh permintaan. Ini akan memastikan aplikasi Anda gagal dengan cepat dengan cara yang optimal ketika ada masalah sementara yang dapat menyebabkan upaya permintaan membutuhkan waktu lebih lama untuk menyelesaikan atau masalah jaringan yang fatal.

Anda dapat mengonfigurasi batas waktu untuk semua permintaan yang dibuat oleh klien layanan menggunakan ClientOverrideConfiguration#apiCallAttemptTimeout danClientOverrideConfiguration#apiCallTimeout.

Contoh berikut menunjukkan konfigurasi klien Amazon S3 dengan nilai batas waktu kustom.

S3Client.builder() .overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(<custom value>)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>))) .build();
apiCallAttemptTimeout

Pengaturan ini menetapkan jumlah waktu untuk satu percobaan HTTP, setelah itu panggilan API dapat dicoba ulang.

apiCallTimeout

Nilai untuk properti ini mengonfigurasi jumlah waktu untuk seluruh eksekusi, termasuk semua upaya coba lagi.

Sebagai alternatif untuk mengatur nilai batas waktu ini pada klien layanan, Anda dapat menggunakan RequestOverrideConfiguration#apiCallTimeout()dan RequestOverrideConfiguration#apiCallAttemptTimeout() mengonfigurasi satu permintaan.

Contoh berikut mengkonfigurasi listBuckets permintaan tunggal dengan nilai batas waktu kustom.

s3Client.listBuckets(lbr -> lbr.overrideConfiguration( b -> b.apiCallTimeout(Duration.ofSeconds(<custom value>)) .apiCallAttemptTimeout(Duration.ofMillis(<custom value>))));

Saat Anda menggunakan properti ini bersama-sama, Anda menetapkan batas keras pada total waktu yang dihabiskan untuk semua upaya di seluruh percobaan ulang. Anda juga menetapkan permintaan HTTP individual untuk gagal cepat pada permintaan yang lambat.

Gunakan metrik

SDK for Java dapat mengumpulkan metrik untuk klien layanan di aplikasi Anda. Anda dapat menggunakan metrik ini untuk mengidentifikasi masalah kinerja, meninjau tren penggunaan secara keseluruhan, meninjau pengecualian klien layanan yang dikembalikan, atau menggali untuk memahami masalah tertentu.

Kami menyarankan Anda mengumpulkan metrik, lalu menganalisis CloudWatch Log Amazon, untuk mendapatkan pemahaman yang lebih dalam tentang kinerja aplikasi Anda.