Wasm คือ CGI แบบใหม่
- บทบาทของ Wasm: Wasm(WebAssembly) กำลังเตรียมนำการเปลี่ยนแปลงครั้งใหม่มาสู่โมเดลของเว็บแอปพลิเคชัน โดยมุ่งเน้นไปที่การทำให้สร้างและดูแลรักษาแอปพลิเคชันประสิทธิภาพสูงได้ง่ายขึ้น
- โมเดลเว็บแอปพลิเคชันในอดีต: CGI ได้เปลี่ยนเว็บจากคลังเอกสารให้กลายเป็นเครือข่ายของแอปพลิเคชัน FastCGI ถูกพัฒนาขึ้นเพื่อแก้ปัญหาด้านประสิทธิภาพ และต่อมาได้พัฒนาไปสู่ serverless computing
- Serverless computing: Serverless computing อย่าง Amazon Lambda ทำให้ต้องจัดการ "ฟังก์ชัน" แทนการจัดการเซิร์ฟเวอร์ ซึ่งมีข้อดีคือสามารถขยายได้อย่างรวดเร็วตามปริมาณคำขอ
Wasm บนเซิร์ฟเวอร์
- ความสามารถในการขยายของ Wasm: Wasm ไม่ได้ทำงานได้แค่ในเบราว์เซอร์ แต่ยังรันบนเซิร์ฟเวอร์ได้ด้วย ซึ่งมอบโมเดลการแยกส่วนที่เบากว่าสำหรับแอปพลิเคชันฝั่งเซิร์ฟเวอร์
- สภาพแวดล้อมการรัน Wasm: โมดูล Wasm ทำงานอยู่บน virtual machine และสามารถคอมไพล์มาจากหลายภาษาได้ ซึ่งอาจช่วยเพิ่มประสิทธิภาพในสภาพแวดล้อม serverless
จุดแลกเปลี่ยนของ Wasm
- เธรดและการคอมไพล์แบบ JIT: Wasm ไม่รองรับเธรดโดยพื้นฐาน และไม่สามารถทำ JIT compile ได้ ซึ่งอาจส่งผลต่อประสิทธิภาพ
- อินเทอร์เฟซหน่วยความจำ: การย้ายข้อมูลระหว่างโมดูล Wasm กับโฮสต์อาจต้องมีการคัดลอกข้อมูล ซึ่งอาจส่งผลต่อประสิทธิภาพ
แนวโน้มในอนาคต
- การพัฒนาของ Wasm: เมื่อสภาพแวดล้อมการรันและเครื่องมือพัฒนาของ Wasm พัฒนามากขึ้น ภาษาสคริปต์ต่าง ๆ จะมี Wasm runtime ของตนเอง ซึ่งอาจช่วยเพิ่มความเร็วในการทำงานของแอปพลิเคชันได้อย่างมาก
- Edge computing: Wasm ทำให้สามารถประมวลผลใกล้กับผู้ใช้ผ่าน edge computing ได้ ซึ่งช่วยเพิ่มประสิทธิภาพ
# สรุปโดย GN⁺
- Wasm กำลังขับเคลื่อนการเปลี่ยนแปลงครั้งใหม่ของโมเดลเว็บแอปพลิเคชัน และช่วยให้สร้างกับดูแลแอปพลิเคชันประสิทธิภาพสูงได้ง่ายขึ้น
- การผสานกันของ serverless computing และ Wasm ช่วยลดความซับซ้อนของการจัดการเซิร์ฟเวอร์ และมีข้อดีคือขยายได้อย่างรวดเร็วตามปริมาณคำขอ
- Wasm ไม่ได้ทำงานได้แค่ในเบราว์เซอร์ แต่ยังรันบนเซิร์ฟเวอร์ได้ด้วย ซึ่งมอบโมเดลการแยกส่วนที่เบากว่าสำหรับแอปพลิเคชันฝั่งเซิร์ฟเวอร์
- การพัฒนาของ Wasm อาจทำให้ภาษาสคริปต์ต่าง ๆ มี Wasm runtime ของตนเอง และช่วยเพิ่มความเร็วในการทำงานของแอปพลิเคชันได้อย่างมาก
- ทำให้สามารถประมวลผลใกล้กับผู้ใช้ผ่าน edge computing ได้ ซึ่งช่วยเพิ่มประสิทธิภาพ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
Amazon ได้เริ่มยุคของ serverless computing ด้วย Lambda ส่วน Google App Engine เปิดตัวก่อน Lambda อยู่ 6 ปี
ยากที่จะเข้าใจความแตกต่างระหว่าง WASM กับเทคโนโลยีก่อนหน้าอย่าง Java Applets, ActiveX, Silverlight และ Macromedia Flash คิดว่าเราได้เรียนรู้บทเรียนเกี่ยวกับการรันโค้ดคอมไพล์จากบุคคลที่สามที่ไม่น่าเชื่อถือในเว็บเบราว์เซอร์แล้ว
JIT compilation ทำไม่ได้ เพราะด้วยเหตุผลด้านความปลอดภัยจึงไม่อนุญาตให้สร้างโค้ด WASM แบบไดนามิก ซึ่งเป็นความสามารถที่จำเป็นต่อการทำสิ่งอย่างการ hot reload โค้ดให้เรียบร้อย
คิดว่าข้ออ้างด้านความปลอดภัยไม่น่าเชื่อถือ เพราะสามารถ hot reload JS หรือสร้างโค้ดใน runtime ได้ และยังสามารถ reload WASM runtime แบบไดนามิกพร้อมคงหน่วยความจำไว้ได้ แต่ประสบการณ์ผู้ใช้น่าจะไม่สะดวก
หาสาเหตุที่ทำให้เป็นไปไม่ได้ในเชิงเทคนิคไม่เจอ ถ้าเป็นมาตรการด้านความปลอดภัยก็น่าจะเลี่ยงได้ง่าย
WASM bytecode มีแนวคิดคล้ายกับ .NET IL, Java bytecode และสิ่งอื่น ๆ ที่ออกแบบมาเพื่อ JIT compilation
คิดว่าโปรเจกต์ WASM ยังขาดทิศทางที่ชัดเจนและความมุ่งมั่นที่จะทำให้สำเร็จ ฟีเจอร์พื้นฐานหลายอย่างก็ยังขาดอยู่
WASM แทนที่ VM ของภาษาเฉพาะด้วย VM แบบอเนกประสงค์ ซึ่งทำให้สามารถรันเกือบทุกอย่างได้ผ่านคอมไพเลอร์หรืออินเทอร์พรีเตอร์
WASM ถูกวางภาพว่าเป็นตัวแทนของ JavaScript, Docker, Java, CGI และอื่น ๆ ซึ่งเท่ากับเป็นทุกอย่าง
คิดว่า WASM ควรจะโฮสต์และดีพลอยได้ง่ายเหมือนแอปพลิเคชัน PHP แต่ตอนนี้อาจยังไม่เป็นแบบนั้น
ทำให้นึกถึงกฎเก่าแก่ของซอฟต์แวร์ที่ว่า แอปพลิเคชันที่ใหญ่และเก่ามากพอ สุดท้ายจะลงเอยด้วยการนำสแตกซอฟต์แวร์ทั้งหมดที่มันรันอยู่มาทำใหม่อีกครั้ง
คำสัญญาที่ยิ่งใหญ่ของ WASM ฝั่งเซิร์ฟเวอร์คือการมอบแพลตฟอร์มถาวรที่ไม่ต้องอาศัยการอัปเดตเป็นระยะ
คิดว่า local-first คืออนาคต แอปจะทำงานหลักอยู่ภายในเบราว์เซอร์ของผู้ใช้ และแทบไม่ต้องพึ่งเซิร์ฟเวอร์เลย
WASM อาจประสบความสำเร็จได้ในเบราว์เซอร์ของผู้ใช้ โดย Microsoft ก็กำลังใช้มันกับ C#/Blazor
ดูเหมือนเรากำลังประดิษฐ์ JVM และระบบนิเวศของมันขึ้นมาใหม่
คิดว่า WASM จะมุ่งไปสู่การแทนที่โค้ดที่ใช้รัน lambda function ในคลาวด์
โดยปกติ WASM ถูกมองว่าเป็นสิ่งที่รันบน host platform แต่จริง ๆ แล้วไม่จำเป็นต้องเป็นแบบนั้น
ด้วยคุณสมบัติ sandbox ของ WASM มันจึงสามารถรันได้นอกระบบปฏิบัติการหรือบน ring0