LLRT: รันไทม์ JavaScript ที่มีความหน่วงต่ำสำหรับฟังก์ชันที่ไม่มีเซิร์ฟเวอร์
LLRT (Low Latency Runtime) จาก Amazon Web Services เป็น JavaScript runtime ที่ทดลองสร้างขึ้นสำหรับฟังก์ชันที่ไม่มีเซิร์ฟเวอร์ซึ่งต้องการความล่าช้าในการเริ่มต้นที่น้อยที่สุด มันทำงาน JavaScript บนเครื่องยนต์ QuickJS ภายในแกน Rust เพื่อลดเวลาเริ่มต้นและการใช้หน่วยความจำเมื่อเปรียบเทียบกับ runtime แบบดั้งเดิม ความสามารถหลักรวมถึงการเริ่มต้นที่รวดเร็วมาก โปรไฟล์หน่วยความจำต่ำ ความเข้ากันได้บางส่วนของ API Node.js และชุดย่อยที่คอมไพล์ล่วงหน้าของ AWS SDK v3 นักพัฒนาที่ไม่มีเซิร์ฟเวอร์และสถาปนิกคลาวด์จะได้รับคุณค่ามากที่สุดจาก LLRT.
LLRT ลดความล่าช้าในการเริ่มต้นเย็นได้อย่างไร?
LLRT มุ่งเป้าไปที่การเริ่มต้นเย็นโดยการละเว้นฟีเจอร์ที่ไม่จำเป็นของแพลตฟอร์มและใช้เส้นทางการดำเนินการที่กระชับ โครงการนี้ใช้ QuickJS สำหรับการดำเนินการสคริปต์และใช้แกน Rust เพื่อลดค่าใช้จ่ายในการเริ่มต้น ซึ่งผู้เขียนรายงานว่าสามารถผลิตเวลาเริ่มต้นได้ถึง 10 เท่าที่เร็วกว่า Node.js การออกแบบนี้เสียสละความสมบูรณ์ของแพลตฟอร์มบางส่วนเพื่อแลกกับการลดความล่าช้าในการเรียกครั้งแรก ซึ่งมีความสำคัญสำหรับฟังก์ชันเซิร์ฟเวอร์ที่มีอายุสั้น
LLRT ตรงตามข้อกำหนดทั่วไปของแพลตฟอร์ม Lambda หรือไม่?
รันไทม์นี้มุ่งเน้นไปที่ Linux x86_64 และ ARM64 เพื่อให้สอดคล้องกับสภาพแวดล้อมการดำเนินการแบบเซิร์ฟเวอร์ ไม่มีการสร้างไบนารีล่วงหน้าที่เป็นทางการมุ่งเน้นไปที่ Linux และ macOS ซึ่งช่วยให้การปรับใช้ในคลาวด์สำหรับเป้าหมายเหล่านั้นง่ายขึ้น การทดสอบบน Windows ต้องการการคอมไพล์จากซอร์ส ซึ่งเพิ่มขั้นตอนการสร้าง สถาปนิกควรรวมการสร้างที่มุ่งเป้าไปที่ Linux หรือใช้สิ่งที่จัดเตรียมไว้สำหรับ macOS/Linux เมื่อเตรียมแพ็คเกจการปรับใช้สำหรับสภาพแวดล้อมที่เข้ากันได้กับ Lambda
LLRT ปลอดภัยที่จะนำไปใช้ในกระบวนการผลิตหรือไม่?
AWS ระบุว่า LLRT เป็นโครงการทดลอง ดังนั้นการนำไปใช้สำหรับบริการที่สำคัญต้องการการตรวจสอบ โครงการนี้ได้รับคำชมในด้านประสิทธิภาพ แต่ไม่ได้ใช้งานไลบรารีมาตรฐาน Node.js อย่างเต็มที่และดังนั้นจึงไม่สามารถแทนที่ได้ ทีมงานควรทำการทดสอบการรวมและการพึ่งพาภายใต้ภาระงานที่สมจริงและยืนยันพฤติกรรมข้ามการรวมบริการก่อนที่จะนำการจราจรสดไปยังฟังก์ชันที่ใช้ LLRT
ฉันต้องการเครื่องมือหรือความเชี่ยวชาญเพิ่มเติมเพื่อย้ายฟังก์ชันที่มีอยู่หรือไม่?
การย้ายต้องการท่อสร้างและการตรวจสอบ API เพราะ LLRT ดำเนินการ JavaScript เท่านั้น TypeScript ต้องถูกแปลงด้วย bundler เช่น esbuild หรือ swc ก่อนการปรับใช้ และการเรียกใช้ไลบรารีมาตรฐาน Node อาจต้องมีการเปลี่ยนแปลง ขั้นตอนการย้ายที่แนะนำรวมถึง:
- แปลง TypeScript และรวมการพึ่งพา
- แทนที่การเรียกใช้ที่ไม่รองรับเฉพาะ Node
- ทำการทดสอบการรวมและการเริ่มต้นเย็นในสภาพแวดล้อมการจัดเตรียม
คำแนะนำที่เป็นประโยชน์สำหรับการนำไปใช้
LLRT เหมาะสำหรับทีมที่สะดวกในการเพิ่มขั้นตอนการสร้างและทำการทดสอบ staging อย่างละเอียด ใช้เป็นอันดับแรกสำหรับฟังก์ชันที่ไม่สำคัญและมีความไวต่อความล่าช้า และตรวจสอบพฤติกรรมแบบ end-to-end ก่อนการเปิดตัวในวงกว้าง เก็บแผนการย้อนกลับและติดตามเมตริกการเรียกใช้งานหลังจากการปรับใช้แต่ละครั้งเพื่อให้สามารถจับข้อผิดพลาดได้เร็วขึ้น ถือว่ารันไทม์เป็นการทดลองในขณะที่คุณสร้างความมั่นใจใน CI pipeline ของคุณ แนะนำให้ใช้.