- Có thể giảm thời gian khởi động của một EC2 instance từ 40 giây xuống 5 giây
- Điều này đặc biệt quan trọng khi cần một EC2 instance mới để xử lý một tác vụ cụ thể
Vì sao thời gian khởi động lại lâu
- Khi yêu cầu một EC2 instance mới, AWS phải thực hiện nhiều bước:
- Tạo root EBS volume từ AMI đã chọn
- Gán địa chỉ IP riêng cho instance
- Chọn host cho instance
- Thực sự khởi động máy
- Ngay cả sau khi phần cứng được bật, bootloader, kernel và các tiến trình user space vẫn phải khởi chạy.
Cách né tránh vấn đề
- Vận hành một pool compute chờ sẵn để định tuyến các yêu cầu build đến những EC2 instance đã chạy sẵn.
- Tuy nhiên, cách này không khả thi về mặt chi phí cho mọi loại công việc.
- Với GitHub Actions runner, mỗi job được định tuyến đến một EC2 instance chuyên dụng.
- Việc giữ 50 EC2 instance luôn online để xử lý 50 job song song là không thực tế.
Thời gian khởi động nhanh hơn
- Với các tác vụ cụ thể, luôn nhanh hơn nếu không làm những việc không cần thiết.
- Từng bước trong quá trình tạo instance, khởi động và chạy ứng dụng được tối ưu một cách có hệ thống.
- Cách làm là khởi động instance một lần, tắt nó đi, rồi khởi động lại khi cần.
Streaming root volume EBS
- Việc chuẩn bị root EBS volume ảnh hưởng lớn đến thời gian khởi động EC2 instance và hiệu năng ứng dụng.
- Khi tạo EBS volume từ AMI, các khối dữ liệu phải được lấy từ S3 tại thời điểm chúng được truy cập lần đầu.
- AWS khuyến nghị nạp trước toàn bộ các khối dữ liệu.
Khởi động instance chỉ một lần
- Có thể stop rồi start lại các instance dùng EBS.
- Instance đã dừng chỉ giữ lại cấu hình, và bạn chỉ phải trả chi phí cho root EBS volume.
- Khởi động instance một lần để thực hiện khởi tạo ban đầu rồi dừng lại sẽ tạo ra một root EBS volume đã được "làm ấm".
Warm pool của Auto Scaling
- AWS cung cấp warm pool cho EC2 Auto Scaling.
- Tuy nhiên, Auto Scaling Group cần thời gian để phản ứng với yêu cầu.
- Để có hiệu năng tốt nhất, họ khởi chạy trực tiếp EC2 instance bằng các lệnh gọi API
LaunchInstances và StartInstances.
Điều chỉnh kích thước instance
- Thời gian khởi động được tối ưu bằng cách thay đổi loại của instance đã được làm ấm.
- Dùng loại instance giá rẻ cho bước khởi tạo, rồi đổi sang loại hiệu năng cao hơn khi chạy tác vụ thực tế.
Toàn bộ luồng
- GitHub Actions runner instance đi qua luồng sau:
- Tạo bằng instance
t3.large
- Gán địa chỉ IP riêng trong VPC đích
- Khởi chạy kernel và các tiến trình user space một lần
- Dừng instance
- Khi có yêu cầu job, cập nhật loại instance sang
m7a rồi khởi động
- Nếu không có dung lượng
m7a, cập nhật sang loại dự phòng rồi khởi động lại
- Với luồng này, thời gian chuẩn bị instance cho job giảm từ 40 giây xuống 5 giây.
1 bình luận
Ý kiến trên Hacker News
Tóm tắt