ความคิดของ Ryan Dahl เกี่ยวกับ JavaScript Containers
(tinyclouds.org)- Docker ทำให้ลินุกซ์คอนเทนเนอร์เป็นที่แพร่หลาย: ช่วยให้การดีพลอยซอฟต์แวร์ง่ายขึ้นด้วยการทำ virtualization ระดับ OS
- Cloudflare Workers และ Deno Deploy คือการทำแนวคิด JS Container ให้เป็นจริง (ในสภาพแวดล้อมที่แตกต่างกัน)
- JS Container จะพัฒนาไปอย่างไรในอีกไม่กี่ปีข้างหน้า?
Universal Scripting Language
- มีสิ่งต่าง ๆ มากขึ้นเรื่อย ๆ ที่เชื่อมโยงกันบนพื้นฐานของเว็บ: The web is eating the world
- เว็บคือสื่อพื้นฐานของข้อมูลมนุษยชาติ และ JS เชื่อมโยงอย่างลึกซึ้งกับโครงสร้างพื้นฐานของเว็บ จึงแตกต่างจากภาษาอื่น
- ภาษาสคริปต์ช่วยแก้ปัญหาฝั่งเซิร์ฟเวอร์ได้มากมาย และทำให้เขียน business logic ได้เร็วกว่าและถูกกว่า
- ภาษาสคริปต์มีประโยชน์และหลายภาษาก็คล้ายกันมาก โดย JavaScript ถูกใช้อย่างกว้างขวางที่สุดและน่าจะยังใช้ได้ต่อไปในอนาคต
- กล่าวได้ว่า JavaScript คือภาษาสคริปต์แบบสากล
Shell : Executables :: JavaScript : WebAssembly
-
JavaScript Sandbox ซึ่งเป็นคอนเทนเนอร์ระดับสูงรูปแบบใหม่สำหรับเซิร์ฟเวอร์กำลังเกิดขึ้น
-
มันไม่ได้ถูกสร้างมาเพื่อแก้ปัญหาแบบเดียวกับที่ลินุกซ์คอนเทนเนอร์มุ่งเป้าไว้
-
มันเกิดขึ้นจากผลของการทำให้เรียบง่าย
→ ลด Boilerplate ของ business logic สำหรับเว็บเซอร์วิสให้เหลือน้อยที่สุด
→ ใช้แนวคิดร่วมกับเบราว์เซอร์ และลดจำนวนแนวคิดที่โปรแกรมเมอร์ต้องรู้ให้เหลือน้อยที่สุด -
วิศวกรเว็บทุกคนรู้จัก JavaScript Browser API อยู่แล้ว
→ abstraction ของ JS Container ถูกสร้างบนพื้นฐานของ Browser API เดียวกัน จึงมีเรื่องที่ต้องรู้น้อยลง
→ ความเป็นสากลของ JS ช่วยลดความซับซ้อน -
Shell คือภาษาสคริปต์แบบ interpreter สำหรับรันโปรแกรม Unix
→ แม้จะมีเงื่อนไข ลูป และตัวแปร แต่ก็มีข้อจำกัด จึงเขียนโปรแกรมได้ยาก และความสามารถจริงมาจากไฟล์ executable ที่ถูกเรียกใช้ -
ใน abstraction layer ฝั่งเซิร์ฟเวอร์แบบใหม่นี้ JS เข้ามาแทนบทบาทของ Shell
→ มันเหมาะกับการเขียนสคริปต์มากกว่า Bash/Zsh แต่เช่นเดียวกับที่ Shell เรียก executable, JS Sandbox ก็เรียก WASM
→ หากต้องการงานซับซ้อนอย่างการปรับขนาดภาพ การใช้ WASM จะดีกว่าเขียนใน JS
→ เหมือนกับที่เราไม่ทำ image resizing ใน bash แต่เรียกใช้ Imagemagick แทน
The North Star
- อนาคตของสคริปต์คือ JavaScript ในเบราว์เซอร์
- ความผิดพลาดพื้นฐานที่สุดของ Node.js คือในช่วงที่ API ใหม่ ๆ กำลังถูกทำให้เป็นมาตรฐาน มันกลับสร้างสิ่งต่าง ๆ มากเกินไปที่ออกนอกแนวทางของเบราว์เซอร์
→ ในปี 2010 เรายังไม่มี ES modules แต่เมื่อมันถูกทำให้เป็นมาตรฐานแล้ว ก็ต้องนำกลับเข้ามาใน Node
→ Promise, Async/Await, Fetch, Streams และอีกหลายอย่างก็เป็นแบบนั้น
→ สิ่งที่ไม่ใช่มาตรฐานอย่าง CommonJS require, package.json, node_modules, npm, global process object ในท้ายที่สุดก็จะถูกทำให้เป็นมาตรฐานแล้วเพิ่มเข้าไปในเบราว์เซอร์ หรือถูกแทนที่ด้วยสิ่งอื่นที่อิงเว็บ - คอนเทนเนอร์ระดับสูงยังไม่ได้ถูกทำให้เป็นมาตรฐาน และยังไม่ชัดเจนว่าสิ่งทั้งหมดนี้จะพัฒนาไปอย่างไร
- ตอนนี้ Cloudflare Workers และ Deno Deploy ใช้ FetchEvent API แต่ก็อาจมีการค้นพบ interface ที่ดีกว่าได้
บทสรุป
- JavaScript คือภาษาสคริปต์อเนกประสงค์
- ด้วยความเป็นสากลของ JavaScript จึงกำลังเกิด abstraction แบบใหม่ที่คล้ายคอนเทนเนอร์ ซึ่งช่วยทำให้ฝั่งเซิร์ฟเวอร์เรียบง่ายขึ้น
- นี่ไม่ได้หมายความว่าลินุกซ์คอนเทนเนอร์จะหายไป abstraction ระดับนั้นยังคงมีประโยชน์ต่อไป
→ แต่สำหรับ "business logic" จำนวนมากที่ผู้คนเขียน มันอาจเป็น abstraction ที่ค่อนข้าง low-level
→ เมื่อต้องสร้างเว็บไซต์ สิ่งอย่างการตั้งค่า systemd คือ boilerplate - "เว็บเซอร์วิส" จำนวนมากอาจถูกทำให้ง่ายขึ้นได้ หากมองจากมุมของ JavaScript Container แทนที่จะเป็นลินุกซ์คอนเทนเนอร์
- เรากำลังสำรวจแนวคิดนี้อยู่ที่ Deno
→ โดยพยายามทำให้ abstraction ของเซิร์ฟเวอร์เรียบง่ายลงอย่างถึงราก
2 ความคิดเห็น
มีบทความแปลออกมาแล้วนะ
https://medium.com/@yujso66/…
ถ้าจะให้ผมสรุปในแบบของผมเอง
น่าจะสรุปได้ประมาณนี้ครับ
ลิงก์อื่น ๆ เพื่อช่วยให้เข้าใจมากขึ้น