Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Lakukan pemanasan klien SDK di AWS SDK for Java 2.x
Gunakan SdkWarmUp utilitas di AWS SDK for Java 2.x untuk menghangatkan klien SDK Anda selama inisialisasi aplikasi. Ini mengurangi latensi permintaan pertama yang ditangani aplikasi Anda setelah startup atau pemulihan.
Pemanasan menggunakan jalur permintaan SDK (membangun klien dan memanggil operasi) sebelum aplikasi Anda menangani lalu lintas nyata. Anda menggunakannya dengan fitur checkpoint-and-restore seperti Lambda. SnapStart Fitur-fitur ini mengambil snapshot dari aplikasi yang diinisialisasi, lalu memulihkan dari snapshot tersebut untuk mengurangi latensi start dingin.
TanpaSdkWarmUp, Anda harus menulis kode pemanasan Anda sendiri sebelum setiap pos pemeriksaan, yang rumit. DenganSdkWarmUp, Anda melakukan satu panggilan untuk menghangatkan semua klien Anda. Anda dapat menghangatkan semua klien SDK di classpath Anda, atau hanya klien tertentu yang digunakan aplikasi Anda.
Dalam topik ini, Anda mempelajari cara mengonfigurasi dan menggunakan SdkWarmUp dengan CRaC dan AWS Lambda SnapStart. Untuk informasi selengkapnya tentang teknik lain yang mengurangi waktu startup di Lambda, lihatKurangi waktu startup SDK untuk AWS Lambda.
SdkWarmUp API
SdkWarmUpadalah bagian dari sdk-core modul, sehingga tersedia untuk setiap klien layanan tanpa ketergantungan tambahan. Konfigurasikan proyek Anda untuk menggunakan versi 2.54.0 atau yang lebih baru dari AWS SDK for Java 2.x. Kemudian panggil salah satu dari dua metode statis yang dijelaskan di bagian berikut. Ketika Anda memanggil salah satu metodeSdkWarmUp, buat satu panggilan jaringan untuk menghangatkan klien HTTP. Untuk menghangatkan klien layanan, ia menggunakan respons lokal yang dikalengkan. Tidak memerlukan AWS
kredenSIAL atau izin IAM, dan tidak dikenakan biaya AWS .
Lakukan pemanasan semua klien SDK di classpath
warmUp()Metode ini menemukan setiap klien layanan SDK di classpath dan menghangatkan masing-masing, bersama dengan klien HTTP yang mereka gunakan. Gunakan metode ini ketika Anda bergantung pada sejumlah kecil modul layanan dan memanggil sebagian besar klien yang mereka sediakan. Contoh Java kode berikut memanggil warmUp() tanpa argumen:
import software.amazon.awssdk.core.warmup.SdkWarmUp; SdkWarmUp.warmUp();
Metode ini berjalan paling banyak sekali per JVM. Setelah panggilan berhasil, panggilan berikutnya segera kembali.
Lakukan pemanasan klien SDK tertentu
warmUp(Class<? extends SdkClient>... clients)Metode ini hanya menghangatkan klien yang Anda beri nama. Luluskan kelas klien sinkron untuk menghangatkan jalur sinkron, atau kelas klien asinkron untuk menghangatkan jalur asinkron.
Gunakan metode ini jika classpath berisi lebih banyak klien layanan daripada panggilan aplikasi Anda. Misalnya, ini terjadi ketika dependensi membawa modul layanan yang tidak Anda gunakan. Menamaan hanya klien yang Anda butuhkan membuat waktu pemanasan sebanding dengan penggunaan aktual aplikasi Anda daripada dengan jalur kelas penuh Anda. Contoh Java kode berikut hanya menghangatkan DynamoDbClient kelas S3Client dan:
import software.amazon.awssdk.core.warmup.SdkWarmUp; import software.amazon.awssdk.services.s3.S3Client; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; SdkWarmUp.warmUp(S3Client.class, DynamoDbClient.class);
Gunakan SdkWarmUp dengan Lambda SnapStart
AWS Lambda SnapStartmeningkatkan kinerja startup untuk Java fungsi. Ketika Anda menerbitkan versi baru dari suatu fungsi, Lambda SnapStart menginisialisasi dan mengambil snapshot dari memori dan status disk. Kemudian menyimpan snapshot untuk digunakan kembali. Untuk informasi tentang runtime yang didukung dan cara mengaktifkan SnapStart fungsi Anda, lihat Panduan Peng AWS Lambda embang.
Karena Lambda mengambil snapshot setelah konstruktor handler Anda berjalan, panggil SdkWarmUp.warmUp() konstruktor. Snapshot kemudian menyertakan klien Anda yang dihangatkan, dan setiap pemanggilan yang dipulihkan dari snapshot mendapat manfaat dari pemanasan. Contoh Java kode berikut memanggil SdkWarmUp.warmUp() dalam konstruktor handler Lambda:
import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import software.amazon.awssdk.core.warmup.SdkWarmUp; public class MyHandler implements RequestHandler<String, String> { public MyHandler() { SdkWarmUp.warmUp(); // Your other initialization here. } @Override public String handleRequest(String input, Context context) { // Your handler logic here. } }
Jika fungsi Anda perlu menjalankan kode khusus sebelum Lambda mengambil snapshot atau setelah dipulihkan, terapkan hook SnapStart runtime. Untuk informasi selengkapnya, lihat SnapStart runtime hook untuk Java di Panduan AWS Lambda Pengembang.
Gunakan SdkWarmUp dengan CraC mandiri
Anda juga dapat menggunakan SdkWarmUp dengan CRaC secara langsung, dalam aplikasi yang mengelola pos pemeriksaan sendiri. Bagian ini menunjukkan di mana panggilan pemanasan berada dalam aplikasi yang sudah dikonfigurasiCRaC. Untuk mengkonfigurasi aplikasiCRaC, lihat dukungan Step-by-step CRac aktiforg.crac:crac ketergantungan yang dibutuhkan antarmuka siklus hidup.
Lakukan pemanasan sebelum pos pemeriksaan
Panggil SdkWarmUp.warmUp() selama inisialisasi, sebelum Anda mengambil pos pemeriksaan. Aplikasi Anda sudah mendaftarkan dirinya sebagai CRac Resource untuk menutup dan membuka kembali koneksi di sekitar pos pemeriksaan. Tambahkan panggilan pemanasan ke konstruktor yang sama, seperti yang ditunjukkan pada contoh Java kode berikut:
import org.crac.Context; import org.crac.Core; import org.crac.Resource; import software.amazon.awssdk.core.warmup.SdkWarmUp; public class MyApp implements Resource { public MyApp() { SdkWarmUp.warmUp(); // Your other initialization here. Core.getGlobalContext().register(this); } @Override public void beforeCheckpoint(Context<? extends Resource> context) throws Exception { // Close your service clients here. } @Override public void afterRestore(Context<? extends Resource> context) throws Exception { // Create your service clients again here. } }
catatan
CRac tidak mengambil pos pemeriksaan saat deskriptor file apa pun terbuka. Jika Anda menggunakan klien AWS CRT-based HTTP, menutup klien layanan Anda saja tidak cukup, karena klien membuat loop acara bersama tetap terbuka. Lepaskan seperti beforeCheckpoint yang ditunjukkan dalam contoh kode Java berikut:
import org.crac.Context; import org.crac.Resource; import software.amazon.awssdk.crt.CrtResource; import software.amazon.awssdk.crt.io.EventLoopGroup; @Override public void beforeCheckpoint(Context<? extends Resource> context) { EventLoopGroup.closeStaticDefault(); CrtResource.waitForNoResources(); }
Klien HTTP Netty Apache berbasis dan berbasis melepaskan sumber dayanya saat Anda menutup klien layanan, sehingga mereka tidak memerlukan pembongkaran tambahan.
Ambil pos pemeriksaan seperti biasanya.
Sumber daya tambahan
Sumber daya berikut memberikan informasi lebih lanjut tentang topik yang dibahas dalam bagian ini:
-
Dokumentasi CRac di
GitHub