- Waktu boot instance EC2 dapat dikurangi dari 40 detik menjadi 5 detik
- Ini sangat penting ketika instance EC2 baru diperlukan untuk menangani tugas tertentu
Alasan waktu boot lama
- Saat meminta instance EC2 baru, AWS melakukan beberapa tugas:
- Membuat volume root EBS dari AMI yang dipilih
- Menetapkan alamat IP privat ke instance
- Memilih host untuk instance
- Benar-benar mem-boot mesin
- Bahkan setelah perangkat keras menyala, bootloader, kernel, dan proses ruang pengguna masih harus dimulai.
Cara menghindari masalah
- Menjalankan pool komputasi siaga dan merutekan permintaan build ke instance EC2 yang sudah berjalan.
- Namun, ini tidak layak secara ekonomis untuk semua pekerjaan.
- Untuk runner GitHub Actions, setiap pekerjaan dirutekan ke instance EC2 khusus.
- Menjaga 50 instance EC2 tetap online untuk menangani 50 pekerjaan paralel adalah hal yang tidak realistis.
Waktu boot yang lebih cepat
- Selalu lebih cepat jika tidak melakukan pekerjaan yang tidak perlu untuk tugas tertentu.
- Setiap tahap pembuatan instance EC2, booting, dan peluncuran aplikasi dioptimalkan secara sistematis.
- Metode yang digunakan adalah mem-boot instance sekali, menghentikannya, lalu menyalakannya kembali saat dibutuhkan.
Streaming volume root EBS
- Kesiapan volume root EBS sangat memengaruhi waktu boot instance EC2 dan performa aplikasi.
- Saat volume EBS dibuat dari AMI, blok data harus diambil dari S3 ketika pertama kali diakses.
- AWS merekomendasikan metode untuk memuat semua blok data terlebih dahulu.
Mem-boot instance sekali
- Instance berbasis EBS dapat dihentikan lalu dijalankan kembali.
- Instance yang dihentikan hanya mempertahankan konfigurasinya, dan Anda hanya membayar biaya untuk volume root EBS.
- Dengan mem-boot instance sekali untuk melakukan pekerjaan inisialisasi lalu menghentikannya, akan tercipta volume root EBS yang sudah "di-warm up".
Warm pool Auto Scaling
- AWS menyediakan warm pool untuk EC2 Auto Scaling.
- Namun, Auto Scaling Group memerlukan waktu untuk merespons permintaan.
- Untuk performa terbaik, instance EC2 dijalankan secara langsung menggunakan panggilan API
LaunchInstances dan StartInstances.
Mengubah ukuran instance
- Waktu boot dioptimalkan dengan mengubah tipe instance yang sudah di-warm up.
- Tipe instance yang murah digunakan untuk pekerjaan inisialisasi, lalu diubah ke tipe instance berperforma lebih tinggi saat pekerjaan sebenarnya dijalankan.
Alur keseluruhan
- Instance runner GitHub Actions melalui alur berikut:
- Dibuat sebagai instance
t3.large
- Alamat IP privat ditetapkan pada VPC target
- Kernel dan proses ruang pengguna dijalankan sekali
- Instance dihentikan
- Saat permintaan pekerjaan datang, tipe instance diperbarui ke
m7a lalu dijalankan
- Jika tidak ada kapasitas instance
m7a, diperbarui ke tipe cadangan lalu dijalankan ulang
- Dengan alur ini, waktu persiapan instance untuk pekerjaan berkurang dari 40 detik menjadi 5 detik.
1 komentar
Opini Hacker News
Ringkasan