- Hocus (ทางเลือกแทน GitPod/GitHub Codespaces ที่โฮสต์เองได้) ได้แทนที่ Firecracker ด้วย QEMU
Firecracker เหมาะที่สุดกับเวิร์กโหลดที่รันช่วงสั้น ๆ แล้วจบลง
- เป็นไมโครVM hypervisor ที่เบา เร็ว และปลอดภัย ซึ่งถูกใช้ใน AWS Lambda
- แต่ก็ไม่ได้เบาขนาดนั้น
- ไม่มี "ความสามารถในการจัดการ RAM แบบไดนามิก" ซึ่งจำเป็นสำหรับเวิร์กโหลดที่รันนาน ๆ เมื่อจัดสรร RAM ไปแล้วจะไม่คืนกลับให้โฮสต์
- ก็ไม่มีความสามารถในการคืนพื้นที่สตอเรจกลับไปยังโฮสต์เช่นกัน ต่อให้สร้างไฟล์ขนาดใหญ่ใน VM แล้วลบออก ก็จะไม่คืนพื้นที่ว่างให้โฮสต์ และจะยังคงกินพื้นที่อยู่จนกว่าจะลบไดรฟ์ของ VM ทั้งลูก
- ไม่รองรับ GPU และไม่ได้มี disk IO ประสิทธิภาพสูง
QEMU ก็ไม่ได้สมบูรณ์แบบ
- มีสิ่งที่ต้องตั้งค่าเยอะเกินไป
- เพื่อคืน RAM ที่ไม่ได้ใช้งาน โฮสต์ต้องแก้โจทย์ 3 อย่าง
- ต้องรู้ก่อนว่ามีฟีเจอร์นี้อยู่ (เรียกว่า free page reporting และต้องเปิดใช้งานเอง)
- ต้องเข้าใจฟีเจอร์ DAMON ของ Linux รู้ว่ามันใช้ทำอะไร ตั้งค่าอย่างไร และต้องคอมไพล์ Linux kernel ที่รองรับมัน
- ต้องปิดการใช้ Transparent Huge Pages ใน guest ไม่เช่นนั้น VM จะไม่คืนหน่วยความจำจำนวนมาก
- กว่าจะทดลองใช้งานได้จริงใช้เวลา 2 เดือน
- อ่านโค้ดของ Firecracker/QEMU
- แลกอีเมลกับนักพัฒนาเพื่อตั้งค่า DAMON
→ (นักพัฒนา DAMON คือคุณ Park Seongjae ซึ่งเป็นชาวเกาหลี)
บทสรุป
- QEMU มีฟีเจอร์ที่จำเป็นต่อการรันเวิร์กโหลดทั่วไป
- แต่การตั้งค่าต้องใช้เวลาและความอดทน
- สำหรับ Short-lived, Untrusted Workload นั้น Firecracker เป็นตัวเลือกที่ดี
- แต่ถ้าคุณอยากรันสภาพแวดล้อมสำหรับพัฒนาบน VM ก็ใช้ Hocus ได้เลย (เพราะงานยาก ๆ เราจัดการไว้ให้หมดแล้ว)
3 ความคิดเห็น
การแนะนำผลิตภัณฑ์ของตัวเองก็เป็นเรื่องดีนะครับ.. แต่ก็ทำให้นึกเหมือนกันว่าใช้บริการของ AWS ไปตรง ๆ น่าจะดีกว่า..
อย่างที่คุณ ssssut พูด มันเป็นบริการที่ทำงานได้แม้บน Fargate ด้วย ดังนั้นผมคิดว่าคงไม่ได้ถึงขั้นนั้นนะครับ
ผมยังไม่เข้าใจเลยว่าการไม่คืนหน่วยความจำมันมีปัญหาอะไร CPU ต่อให้เกิดการแย่งทรัพยากรกัน อย่างมากแอปพลิเคชันก็แค่ช้าลง แต่เรื่องการแสดงผลไม่มีปัญหา ส่วนหน่วยความจำนี่คือไม่มีทางแก้เลย...
เพิ่มเติม: ไม่ได้ใช้ Firecracker แค่ใน AWS Lambda เท่านั้น แต่ยังใช้ใน ECS Fargate ที่รันเป็นเวลานานด้วย
ความคิดเห็นบน Hacker News