9 คะแนน โดย GN⁺ 2025-04-09 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • Hyperlight Wasm คือส่วนขยายล่าสุดของเทคโนโลยี เครื่องเสมือนน้ำหนักเบาพิเศษ (VM) อย่าง Hyperlight ที่ Microsoft บริจาคให้ CNCF โดยใช้สำหรับรันเวิร์กโหลด WebAssembly (บนพื้นฐานของ Component Model) ได้อย่างรวดเร็วและปลอดภัย
  • แตกต่างจาก VM แบบดั้งเดิมตรงที่ไม่ต้องมี OS หรืออุปกรณ์เสมือน โดย เปิดให้ใช้งานเฉพาะ memory slice และ CPU ทำให้บูตได้เร็วภายใน 1~2ms
  • สามารถรัน wasm component ที่เขียนด้วยหลากหลายภาษา (C, Rust, Go, Python, JS ฯลฯ) ได้ ภายใต้การป้องกันของไฮเปอร์ไวเซอร์

คุณสมบัติหลักของ Hyperlight Wasm

  • ประสิทธิภาพที่เร็วกว่่า VM แบบดั้งเดิม

    • VM แบบดั้งเดิม: เริ่มต้นอุปกรณ์ → โหลดเคอร์เนล → บูต OS → รันแอปพลิเคชัน (ประมาณ 125ms)
    • Hyperlight Wasm: รันได้เพียงสร้าง memory slice + โหลด Wasm (1~2ms และในอนาคตตั้งเป้าไว้ที่ <1ms)
    • ความเร็วในการรันนี้เหมาะกับ การประมวลผล serverless แบบ on-demand หรือ การจัด warm pool ให้น้อยที่สุด
  • รันได้หลายภาษาแม้ไม่มีระบบปฏิบัติการ

    • ใช้พื้นฐานจากมาตรฐาน WASI และ WebAssembly Component Model จึงสามารถรันคอมโพเนนต์ที่เขียนจากภาษาส่วนใหญ่ได้
    • ฝัง wasmtime runtime มาในตัว ทำให้ ภาษาแบบ interpreter อย่าง Python, JavaScript, C# ก็รันได้พร้อม runtime
    • ในมุมของนักพัฒนา เพียงคอมไพล์ไปยัง target wasm32-wasip2 ก็สามารถรันบน Hyperlight ได้
  • ความปลอดภัยที่ดีขึ้น (sandbox สองชั้น)

    • โครงสร้างป้องกันสองชั้นด้วย Wasm sandbox + VM sandbox ที่อิงไฮเปอร์ไวเซอร์
    • แม้ผู้โจมตีจะหลุดออกจาก wasm ได้ ก็ยังต้องข้าม VM sandbox เพิ่มอีกชั้น

ตัวอย่างการพัฒนา: รันเซิร์ฟเวอร์ UDP Echo ที่สร้างด้วย Rust

  • ดาวน์โหลดและคอมไพล์ไบนารี wasm ด้วย CLI wkg
  • แปลงไฟล์นิยามอินเทอร์เฟซ WASI (.wit) เป็นไบนารีเพื่อสร้าง binding
  • ใช้ hyperlight_component_macro และ host_bindgen! เพื่อ สร้าง binding ของ import/export interface ของ Wasm แบบอัตโนมัติ
  • กำหนดลอจิกของ echo server ผ่านการ implement อินเทอร์เฟซ UdpSocket
  • สร้าง sandbox ของ hyperlight-wasm เพื่อโหลดและรัน wasm component
  • Ahead-of-Time compilation

    • ใช้เครื่องมือ hyperlight-wasm-aot เพื่อคอมไพล์ wasm แบบ AOT ช่วยลดเวลาในการรัน
    • รันเซิร์ฟเวอร์ด้วย cargo run และทดสอบ UDP ได้ด้วยคำสั่ง nc -u

การขยายความสามารถและแผนในอนาคต

  • Hyperlight Wasm มีแผนรองรับ สถาปัตยกรรม Arm64 นอกเหนือจาก x86
  • ปัจจุบันยังต้อง implement อินเทอร์เฟซ WASI เอง แต่ในอนาคตมีแผน จัดเตรียม binding พื้นฐานมาให้
  • มีแผนทำให้สามารถ sandbox บริการง่าย ๆ เช่น HTTP server ได้อย่างรวดเร็ว

แนวทางการเข้าร่วมคอมมูนิตี้โอเพนซอร์ส

  • Hyperlight เป็นโครงการโอเพนซอร์สของ Microsoft ที่เผยแพร่ภายใต้ Apache 2.0 license และอยู่ใน CNCF Sandbox
  • Hyperlight Wasm มีเป้าหมายเพื่อ มอบสภาพแวดล้อมรันงานที่รวดเร็วและปลอดภัย เหมาะกับ cloud-native computing
  • สามารถดูโค้ดและร่วมพัฒนาได้ผ่าน GitHub repository

👉 GitHub repository: hyperlight-wasm

2 ความคิดเห็น

 
GN⁺ 2025-04-09
ความคิดเห็นบน Hacker News
  • เมื่อไม่กี่เดือนก่อน ฉันเริ่มใช้ WebAssembly อย่างจริงจังเพื่อสร้างไลบรารี backend authentication ที่ทำงานได้ในหลายภาษา

    • ใช้ Extism เป็นฐานเพื่อลดความซับซ้อนของอินเทอร์เฟซ
    • เป็นประสบการณ์ที่เหมือนเวทมนตร์
    • WASM อยู่ในจุดที่น่าสนใจ
    • มันได้พิสูจน์คุณค่าด้วย core spec ที่เล็กที่สุดเท่าที่จำเป็น
    • ตอนนี้มีแรงผลักดันครั้งใหญ่ที่จะเพิ่มพื้นผิว API ที่ใหญ่ขึ้นสำหรับ WASI และ Component Model
    • หลายคนในชุมชนกังวลกับทิศทางนี้
    • โดยส่วนตัวหวังว่า WASM จะไม่ซับซ้อนเกินไปจนเดินตามรอยเว็บเบราว์เซอร์ที่มีแต่บริษัทเทคขนาดใหญ่เท่านั้นที่สามารถทำ implementation และการทดลองได้
  • เมื่อไม่กี่เดือนก่อน เราได้เปิดตัว Hyperlight ซึ่งเป็น VMM แบบ lightweight

    • สามารถสร้าง VM ใหม่ได้ในเวลาประมาณ 1 มิลลิวินาที
    • วันนี้เรายินดีที่จะเปิดตัว Hyperlight Wasm guest ที่ทำงานบนรันไทม์ Wasmtime
    • ทำให้สามารถรัน Wasm Component binary บนอินเทอร์เฟซ WASI ได้โดยไม่ต้องมี guest OS ของ VM
    • โพสต์นี้อธิบายวิธีการทำงานและอธิบายผ่านตัวอย่าง
  • น่าตื่นเต้นมาก

    • หวังว่า WASM/WASI จะเติบโตไปเป็นความฝันแบบ JVM แห่งยุค 90
    • มันสามารถเป็นเป้าหมายการพัฒนาที่ memory-safe และพอร์ตกับทดสอบได้ง่ายบนหลายแพลตฟอร์ม
    • หวังว่า WASM จะถูกใช้ได้กับอีกหลายอย่างนอกเหนือจากเบราว์เซอร์
  • ดูน่าสนใจ

    • นี่เป็นกรณีใช้งานสำหรับเวลาที่อยากสร้างอะไรแบบ Cloudflare Workers หรือ Lambda ด้วย WASM เองโดยตรงหรือไม่?
  • เจ๋งดี

    • กำลังพยายามทำความเข้าใจว่าคุณค่าเพิ่มเติมตรงนี้คืออะไร
    • มันต่างจากการรันผ่าน wasmtime อย่างไร?
  • โปรเจ็กต์เจ๋ง ๆ และน่าสนใจทั้งหมดทำให้รู้สึกว่า WASM ประสบความสำเร็จทุกที่ยกเว้นในเบราว์เซอร์

    • อาจต้องเอา Web ออกจาก Web Assembly แล้วตั้งชื่อใหม่ก็ได้
  • มีไอเดียไหมว่าจะเอาสิ่งนี้ไปใส่ในการตั้งค่า Proxmox ได้อย่างไร?

    • เข้าใจว่าสิ่งนี้ถูกออกแบบมาให้ทำงานบน bare metal
    • รู้สึกกระอักกระอ่วนเล็กน้อยเพราะไม่มีเครื่อง x86 แบบ bare metal ว่างอยู่
    • ดูเหมือนคงต้องใส่มันลงใน VM แล้วก็ยอมรับ nested virtualization
  • อินสแตนซ์เริ่มต้นและถูกจัดการอย่างไร?

    • ผ่าน API แบบไหน?
    • สามารถให้ความสามารถในการรัน tree ของ Wasm Components ที่เชื่อมกับ Wasm Component binary, มอบหมายความสามารถ และจัดการ lifecycle ได้หรือไม่?
  • โดยพื้นฐานแล้ว มี VM (wasm) สำหรับ sandbox โปรแกรมในฮาร์ดแวร์ VM ซึ่งเป็น abstraction สำหรับแยกโปรแกรมภายใน user-space process (Linux process)

    • เคยคิดไหมว่าจะใช้ Unix process เพื่อแยกโปรแกรมแทน?
  • เป็น unikernel/library OS หรือไม่?