Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pengait SnapStart runtime Lambda untuk Java
Anda dapat menggunakan hook runtime untuk mengimplementasikan kode sebelum Lambda membuat snapshot atau setelah Lambda melanjutkan fungsi dari snapshot. Runtime hook tersedia sebagai bagian dari proyek Coordinated Restore at Checkpoint (CRac) sumber terbuka. CRac sedang dikembangkan untuk Open Java Development Kit (OpenJDK).
-
Resource- Antarmuka dengan dua metode,beforeCheckpoint()danafterRestore(). Gunakan metode ini untuk mengimplementasikan kode yang ingin Anda jalankan sebelum snapshot dan setelah pemulihan. -
Context <R extends Resource>— Untuk menerima pemberitahuan untuk pos pemeriksaan dan pemulihan, aResourceharus terdaftar dengan aContext. -
Core— Layanan koordinasi, yang menyediakan global defaultContextmelalui metode statisCore.getGlobalContext().
Untuk informasi selengkapnya tentang Context danResource, lihat Paket org.crac
Gunakan langkah-langkah berikut untuk mengimplementasikan hook runtime dengan paket org.crac.
Registrasi dan eksekusi hook runtime
Urutan Lambda mengeksekusi hook runtime Anda ditentukan oleh urutan pendaftaran. Urutan pendaftaran mengikuti urutan impor, definisi, atau eksekusi dalam kode Anda.
-
beforeCheckpoint(): Dieksekusi dalam urutan terbalik pendaftaran -
afterRestore(): Dieksekusi dalam urutan pendaftaran
Pastikan semua kait terdaftar diimpor dengan benar dan disertakan dalam kode fungsi Anda. Jika Anda mendaftarkan hook runtime dalam file atau modul terpisah, Anda harus memastikan bahwa modul diimpor, baik secara langsung atau sebagai bagian dari paket yang lebih besar, dalam file handler fungsi Anda. Jika file atau modul tidak diimpor dalam pengendali fungsi, Lambda mengabaikan hook runtime.
catatan
Saat Lambda membuat snapshot, kode inisialisasi Anda dapat berjalan hingga 15 menit. Batas waktu adalah 130 detik atau batas waktu fungsi yang dikonfigurasi (maksimum 900 detik), mana yang lebih tinggi. Hook- beforeCheckpoint() hook runtime Anda dihitung terhadap batas waktu kode inisialisasi. Saat Lambda mengembalikan snapshot, runtime harus dimuat dan afterRestore() hook runtime harus selesai dalam batas waktu tunggu (10 detik). Jika tidak, Anda akan mendapatkan SnapStartTimeoutException.
Langkah 1: Perbarui konfigurasi build
Tambahkan org.crac dependensi ke konfigurasi build. Contoh berikut menggunakan Gradle. Untuk contoh sistem build lainnya, lihat dokumentasi Apache Maven
dependencies { compile group: 'com.amazonaws', name: 'aws-lambda-java-core', version: '1.2.1' # All other project dependecies go here: # ... # Then, add the org.crac dependency: implementation group: 'org.crac', name: 'crac', version: '1.4.0' }
Langkah 2: Perbarui handler Lambda
Handler fungsi Lambda Anda adalah metode dalam kode fungsi Anda yang memproses peristiwa. Saat fungsi Anda diaktifkan, Lambda menjalankan metode handler. Fungsi Anda berjalan sampai handler mengembalikan respons, keluar, atau batas waktu.
Untuk informasi selengkapnya, lihat Tentukan pengendali fungsi Lambda di Java.
Handler contoh berikut menunjukkan cara menjalankan kode sebelum checkpointing (beforeCheckpoint()) dan setelah restore (afterRestore()). Handler ini juga mendaftarkan Resource ke global yang dikelola runtime. Context
catatan
Saat Lambda membuat snapshot, kode inisialisasi Anda dapat berjalan hingga 15 menit. Batas waktu adalah 130 detik atau batas waktu fungsi yang dikonfigurasi (maksimum 900 detik), mana yang lebih tinggi. Hook- beforeCheckpoint() hook runtime Anda dihitung terhadap batas waktu kode inisialisasi. Saat Lambda mengembalikan snapshot, runtime (JVM) harus dimuat dan hook afterRestore() runtime harus selesai dalam batas waktu tunggu (10 detik). Jika tidak, Anda akan mendapatkan SnapStartTimeoutException.
... import org.crac.Resource; import org.crac.Core; ... public class CRaCDemo implements RequestStreamHandler, Resource { public CRaCDemo() { Core.getGlobalContext().register(this); } public String handleRequest(String name, Context context) throws IOException { System.out.println("Handler execution"); return "Hello " + name; } @Override public voidbeforeCheckpoint(org.crac.Context<? extends Resource> context) throws Exception { System.out.println("Before checkpoint"); } @Override public voidafterRestore(org.crac.Context<? extends Resource> context) throws Exception { System.out.println("After restore");
Contexthanya mempertahankan a WeakReferenceResourceResource ke untuk menjamin bahwa hook runtime berjalan.
Berikut adalah dua contoh pola yang harus dihindari:
contoh— Objek tanpa referensi yang kuat
Core.getGlobalContext().register( new MyResource() );
contoh— Objek kelas anonim
Core.getGlobalContext().register( new Resource() { @Override public void afterRestore(Context<? extends Resource> context) throws Exception { // ... } @Override public void beforeCheckpoint(Context<? extends Resource> context) throws Exception { // ... } } );
Sebaliknya, pertahankan referensi yang kuat. Dalam contoh berikut, sumber daya terdaftar tidak dikumpulkan sampah dan hook runtime berjalan secara konsisten.
contoh— Objek dengan referensi yang kuat
Resource myResource = new MyResource();// This reference must be maintained to prevent the registered resource from being garbage collectedCore.getGlobalContext().register( myResource );