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.
Topik
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
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 NettyNioAsyncHttpClient
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
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()
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.