1604 คำ
8 นาที
CyberSecurity Foundation EP.33.5 — Beyond Container: MicroVM, Wasm, Unikernel — 3 runtime ที่เปลี่ยนเกมหลัง Docker
สารบัญ

Series: CyberSecurity Foundation — รากฐาน Security สำหรับยุค AI (ภาษาคน)

Part 0 — WHY: เมืองนี้ทำไมต้องมียาม

Part 1 — HOW: ระบบนิเวศของเมือง

Part 2 — Identity: บัตรประชาชน + กุญแจห้อง

Part 3 — Data: ของในเซฟ

Part 4 — Infrastructure: ถนน กำแพง ท่อ

Part 4 (EP.35-38) + Part 5-6 — กำลังเขียนต่อ

ครับ ใน EP.33 เราเล่าจบที่ภาพของ enterprise ที่รัน production อยู่บน Docker + Kubernetes Netflix, Spotify, Uber, Airbnb — ทุกบริษัทที่คุณคุ้นชื่อ อยู่บน K8s กันหมด

ภาพนั้นจริงครับ — สำหรับยุค 2018-2024

แต่มีเรื่องเล็กๆ ที่ไม่ค่อยมีคนพูดดังๆ — AWS Lambda รันโค้ดของคุณบน “ไม่ใช่ container” มาตั้งแต่ปี 2018 แล้ว ทุกครั้งที่คุณกด deploy function บน Lambda — มันไปรันอยู่บน MicroVM ที่ชื่อ Firecracker ไม่ใช่ Docker

Cloudflare Workers ที่เป็นคู่แข่งของ Lambda — ไม่ใช้ container เลยตั้งแต่ day 1 ใช้ V8 isolate + WebAssembly แทน เลยทำให้ cold start เร็วกว่า Lambda ราว 100 เท่า

Cloudflare D1 (SQLite distributed) ที่ผมเล่าไว้ใน Database 101 EP.10 — รันอยู่บน WebAssembly ทั้งหมด ไม่มี Linux container อยู่ในวงจรเลย

นี่คือสิ่งที่ EP.33.5 จะพาดูครับ — 3 runtime ที่กำลังเดิมพันสำหรับยุคหลัง container Container ยังครองตลาด enterprise web app ใหญ่ๆ อยู่จริง แต่ที่ edge + serverless + AI inference — ภาพรวมเคลื่อนไปแล้ว

EP นี้สั้นแต่สำคัญ เพราะถ้าคุณต้องตัดสินใจเรื่อง infrastructure ใน 3 ปีข้างหน้า — runtime พวกนี้จะโผล่มาในวงตัดสินใจของคุณแน่นอน


ภาพในใจ — ที่อยู่อาศัยของ workload เปลี่ยนยุค#

ลองนึกภาพที่อยู่อาศัยของคนเรานะครับ

ยุค 1990s — ตึก — ก่อนยุค virtualization แต่ละ workload (เช่น email server, web server, database) ได้ server ของตัวเอง ทั้งเครื่อง physical เลย เหมือนคนหนึ่งคนได้ตึกทั้งหลัง ใหญ่เกินตัว เปลืองมาก

ยุค 2000s — คอนโด (Virtual Machine) — VMware/Hyper-V/KVM แบ่ง physical server ออกเป็นหลาย VM แต่ละ VM คือคอนโดที่มี OS เต็มตัวอยู่ข้างใน workload หนึ่งตัวต่อหนึ่งคอนโด เพื่อนบ้านอยู่กำแพงเดียวกันแต่มองไม่เห็นกัน — ใช้ทรัพยากรดีขึ้นเยอะ แต่ยังหนัก (บูตเป็นนาที กิน RAM หลาย GB)

ยุค 2013 — ตู้คอนเทนเนอร์ (Docker) — แทนที่จะแบ่งทั้ง OS — แบ่งแค่ “ของในห้องของแต่ละคน” OS, ห้องครัว, ห้องน้ำใช้ร่วมกัน (shared kernel) แต่ของส่วนตัวของแต่ละ container แยกขาด ตู้คอนเทนเนอร์ — เบา (50-500 MB) บูตเร็ว (วินาที) ขนย้ายง่าย

ยุค 2018+ — กระเป๋าใบเล็ก (Wasm) + บ้านน็อคดาวน์ (MicroVM) — ที่ EP.33.5 จะพาดูนี่แหละครับ — runtime ที่บางลงอีก เร็วขึ้นอีก ปลอดภัยขึ้นอีก

ทีนี้มาดู 3 runtime หลักหลัง container ทีละตัว


1. MicroVM (Firecracker) — VM ที่บูตใน 125ms#

MicroVM = virtual machine ที่ ตัดทุกอย่างที่ไม่จำเป็นออก เหลือแค่ส่วนที่ต้องมีจริงๆ เพื่อให้บูตเร็วและกินทรัพยากรน้อย — แต่ยังคงเป็น VM ที่มี hardware isolation เต็มตัว

ตัวที่ดังที่สุดในวงการชื่อ Firecracker — AWS open-source ออกมาในปี 2018

ทำไมเกิด#

ปัญหาของ AWS ในปี 2017 คือ — Lambda รันบน container (Docker) แต่ container แบ่ง kernel ใช้กับเพื่อนบ้าน ถ้าใครเจอช่องโหว่ของ kernel = หลุดออกจาก container ตัวเองไปอ่าน memory ของคนอื่นได้

ใน AWS Lambda — workload ของลูกค้าหลายเจ้าวิ่งอยู่บน physical server เครื่องเดียวกัน ถ้า isolation พังครั้งเดียว = ข้อมูลลูกค้าทุกเจ้าหลุดหมด นี่เป็น risk ที่ AWS รับไม่ได้

ทางเลือกตอนนั้นมี 2 ทาง — (1) ใช้ VM ปกติ (boot เป็นนาที + กิน RAM 1 GB+) = ช้าเกินสำหรับ serverless (2) อยู่กับ container ต่อ = security risk

AWS เลยสร้างทางที่ 3 ขึ้นมาเอง — MicroVM — เอา KVM (hypervisor ของ Linux) มาตัด feature ที่ไม่จำเป็นออกหมด เหลือแค่ที่ Lambda ต้องการจริงๆ ผลที่ได้คือ — VM ที่บูตใน 125 มิลลิวินาที กิน RAM overhead แค่ ~5 MB

Firecracker ทำงานยังไง#

Firecracker เป็น Virtual Machine Monitor (VMM) เขียนด้วย Rust รันบน Linux ใช้ KVM อยู่ใต้ฝา ทุก Lambda function ของคุณ = 1 MicroVM ที่บูตเฉพาะตอนที่มี request เข้ามา

  • เริ่มจาก minimal Linux kernel (~5 MB)
  • ไม่มี driver ที่ไม่จำเป็น (เช่น USB, GPU, audio — ไม่ใช้ใน serverless)
  • ไม่มี shell, ไม่มี package manager
  • มี API endpoint เดียวที่ Firecracker control ได้

ใครใช้#

  • AWS Lambda — ตั้งแต่ปี 2018 ทุก function รันอยู่บน Firecracker
  • AWS Fargate — container แบบ “managed” — รันอยู่บน Firecracker ใต้ฝา
  • Fly.io — startup ที่สร้าง platform ทั้งหมดอยู่บน Firecracker (deploy app ไปทุก region ของโลกได้ด้วย 1 คำสั่ง)
  • Kata Containers — project ของ OpenInfra Foundation ที่ใช้ MicroVM (รวมถึง Firecracker) มาห่อ container ให้ปลอดภัยขึ้น

Trade-off#

ข้อดี:

  • มี hardware isolation ของ VM (kernel แยกขาดเต็มตัว — ปลอดภัยกว่า container เยอะ)
  • บูตเร็วใกล้เคียง container (~125 ms)
  • กิน RAM น้อยกว่า VM แบบเดิม 100 เท่า

ข้อเสีย:

  • ยังหนักกว่า container อยู่ดี (cold start ระดับ 1 ms ทำไม่ได้)
  • Ecosystem แคบกว่า Docker (tool ที่มีให้ใช้น้อยกว่า)
  • ตั้ง setup ซับซ้อนกว่า — ไม่เหมาะให้ dev เอามารันบน laptop ของตัวเอง

ที่ผู้บริหารควรจำ: Firecracker คือเหตุผลที่ AWS Lambda ปลอดภัยกว่า self-hosted FaaS เจ้าอื่นที่ยังรันบน Docker เพราะ AWS แก้ปัญหา multi-tenant isolation ที่ระดับ hardware-level VM ไม่ใช่แค่ kernel-level container


2. WebAssembly (Wasm) — runtime ที่เบาที่สุดในโลก#

WebAssembly (Wasm) = bytecode format สำหรับ run code ใน sandbox — เริ่มต้นออกแบบมาเพื่อ browser แต่ตอนนี้กลายเป็น server runtime + edge runtime + plugin runtime ที่ดังที่สุด

ทำไมเกิด#

ปี 2015 — Mozilla, Google, Microsoft, Apple จับมือกันสร้าง standard ใหม่ที่ทำให้ browser รันโค้ดของภาษาอื่น (ไม่ใช่แค่ JavaScript) ได้เร็วใกล้เคียง native

ปี 2017 — Wasm 1.0 ออก browser ทุกตัวรองรับ

ปี 2019 — Mozilla ออก WASI (WebAssembly System Interface) — มาตรฐานที่ทำให้ Wasm รันนอก browser ได้ — ทั้งบน server, บน edge, บน IoT device

ตั้งแต่นั้นมา Wasm ก็กลายเป็น portable runtime ที่เร็วที่สุด ของยุคนี้ — เขียน Rust/Go/C++/AssemblyScript ครั้งเดียว compile เป็น .wasm รันได้ทุกที่ที่มี Wasm runtime

Wasm ทำงานยังไง#

Wasm = stack-based virtual machine ที่มี bytecode ของตัวเอง คอมไพล์ภาษาระดับสูง (Rust, Go, C++) ออกมาเป็น .wasm file → Wasm runtime อ่าน bytecode → execute ใน sandbox ที่แยกขาดจาก host

ที่ต่างจาก container/VM:

  • ไม่มี OS — ไม่ต้องบูต Linux, ไม่มี kernel, ไม่มี file system (เว้นแต่ host จะ inject เข้ามาให้)
  • ไม่มี process — มีแค่ function ที่ execute
  • Cold start อยู่ที่ ~5 ms (เทียบกับ Lambda 200-2000 ms)
  • กิน RAM ~1 MB (เทียบกับ container 50-500 MB)

ใครใช้#

ที่ edge (พระเอกหลัก):

  • Cloudflare Workers — V8 isolate + Wasm รันอยู่ใน 200+ city ทั่วโลก
  • Fastly Compute@Edge — Wasm runtime ของ Fastly เอง
  • Vercel Edge Functions — V8 isolate, ใช้งานกับ Wasm ได้
  • Deno Deploy — แพทเทิร์นเดียวกับ Cloudflare Workers

ที่เป็น plugin system:

  • Figma plugins — เขียน plugin เป็น Wasm = ปลอดภัยกว่า native JS plugin
  • Shopify Functions — ให้ merchant ปรับแต่ง checkout logic ผ่าน Wasm
  • Envoy proxy filters — extension ของ service mesh

ที่ database:

  • Cloudflare D1 — SQLite รันอยู่ใน Wasm
  • TursoDB — libSQL อยู่บน Wasm
  • DuckDB-WASM — analytics database ที่รันใน browser

ที่ AI:

  • WasmEdge — runtime สำหรับ AI inference ที่ edge
  • ONNX Runtime Web — รัน ML model ใน browser ผ่าน Wasm

Trade-off#

ข้อดี:

  • เบามาก เร็วมาก (cold start ~5 ms = “ใกล้ 0” ในแง่ user experience)
  • Portable — เขียนครั้งเดียวรันได้ทุก runtime
  • Secure by default — sandbox ที่ปฏิเสธทุก system call (host ต้องอนุญาตอะไรต้อง explicit)
  • ไม่มี cold start แบบ Lambda — เพราะไม่ต้องบูตอะไรเลย

ข้อเสีย:

  • WASI ยังเด็ก — feature ที่ Linux มี Wasm อาจยังไม่มี (เช่น native threading)
  • Filesystem access จำกัด (ขึ้นอยู่กับ host implementation)
  • Ecosystem ของ library ยังเล็กกว่าฝั่ง Node.js/Python อยู่มาก
  • Tool สำหรับ debug ยังไม่ค่อยพร้อม

ที่ผู้บริหารควรจำ: ถ้าคุณใช้ Cloudflare หรือ Vercel อยู่ — workload ของคุณก็รันอยู่บน Wasm อยู่แล้ว แม้คุณจะเขียน JavaScript ก็ตาม (V8 isolate คอมไพล์ JS เป็น bytecode คล้าย Wasm) Cold start ที่เกือบ 0 ms = ปลดล็อก UX ที่ทำไม่ได้บน Lambda


3. Unikernel — OS + app รวมเป็น binary เดียว#

Unikernel = แทนที่จะมี OS แยกจาก application — คอมไพล์ OS + app รวมเป็นไฟล์เดียว ที่บูตตรงบน hypervisor ไม่มี shell, ไม่มี debugger, ไม่มี multi-user — มีแค่ app ที่รันได้

ทำไมเกิด#

ปัญหาของ OS แบบเดิม (Linux) — มี driver + service + tool เป็นพันตัว ส่วนใหญ่ app ไม่ได้ใช้ แต่ติดมาด้วย attack surface = ใหญ่กว่าที่ควรเป็นเยอะ

Unikernel ตั้งคำถามว่า — ทำไมต้องมีของที่ไม่ได้ใช้ ถ้า app ของคุณคือ web server — จะมี driver ของ USB ทำไม print ทำไม sound ทำไม package manager ทำไม shell ทำไม

ตัด ตัด ตัด — เหลือแค่ kernel ที่ใช้จริง + app = single binary ที่บูตในระดับมิลลิวินาทีบน hypervisor

ตัวอย่างที่จริงมี#

  • MirageOS — เขียนด้วย OCaml (จาก University of Cambridge + Docker)
  • IncludeOS — เขียนด้วย C++
  • Nanos — unikernel ยุคใหม่ ทำงานเข้ากับ AWS/GCP ได้ดี
  • OSv — unikernel ที่เข้ากันได้กับ Linux ของ Cloudius Systems

ใครใช้จริง#

ความจริงที่ต้องบอกตรงๆ คือ — ยังไม่มี mainstream adoption Unikernel เป็น “concept ที่ดูดีในตำรา” แต่ในทางปฏิบัติเจอปัญหา 3 อย่าง:

  1. Debug ยาก — เกิด bug ใน production แล้ว ssh เข้าไปดูไม่ได้ (ไม่มี shell)
  2. Update ยาก — เปลี่ยน config = ต้องคอมไพล์ใหม่ทั้งระบบ
  3. Tool ecosystem เล็กมาก — ไม่มี Datadog agent, ไม่มี Splunk forwarder ที่พอร์ตมาให้

มี niche ที่ unikernel เหมาะอยู่บ้าง:

  • Embedded / IoT — ที่ทรัพยากรจำกัดสุดๆ และไม่ค่อย update
  • Security-critical workload — ที่ต้องการ attack surface เล็กที่สุด
  • High-frequency trading — ที่ต้องการ boot < 1 ms

แต่สำหรับ enterprise web app ทั่วไป — unikernel ไม่ใช่คำตอบ ความซับซ้อนของการดูแลแพงกว่าประโยชน์ที่ได้

Trade-off#

ข้อดี:

  • Attack surface เล็กที่สุดในวงการ
  • บูตเร็วที่สุด (microsecond)
  • Memory footprint เล็กที่สุด

ข้อเสีย:

  • Debug = ฝันร้าย
  • Update = ต้องคอมไพล์ใหม่ทั้งระบบ
  • Tool ecosystem แทบไม่มี
  • ต้องการ expertise ที่หาคนทำได้ยาก

ที่ผู้บริหารควรจำ: Unikernel = ของสำหรับเคสพิเศษมากๆ ถ้าคุณไม่ใช่ defense contractor ไม่ใช่ HFT firm ไม่ใช่ IoT manufacturer — ไม่ต้องสนใจ เอาเวลาที่จะอ่านเรื่อง unikernel ไปอ่าน Wasm ดีกว่า


Decision Tree — เมื่อไหร่ใช้อะไร#

ทั้ง 4 runtime (Container + MicroVM + Wasm + Unikernel) ไม่ได้ “มาแทนกัน” — แต่ละตัวเหมาะกับคนละเคส

Container (Docker + Kubernetes) — เป็น default สำหรับ:

  • Enterprise web application ที่ traffic เดาทางได้
  • Microservices ใน production
  • ทีมที่มี K8s expertise + tool ecosystem พร้อมอยู่แล้ว
  • Workload ที่ต้องพึ่ง ecosystem แน่นๆ (Helm, Istio, Datadog, Prometheus)

MicroVM (Firecracker) — เลือกเมื่อ:

  • คุณกำลังจะ build serverless platform ของตัวเอง (เช่น Fly.io)
  • ต้องการ multi-tenant security ที่แข็งกว่า container แต่ scale แบบ container ได้
  • ใช้ AWS Lambda/Fargate อยู่ = คุณอยู่บน Firecracker อยู่แล้วโดยไม่รู้ตัว

Wasm — เลือกเมื่อ:

  • ต้องการ edge function ที่ cold start ใกล้ 0 ms
  • ทำ plugin system ใน SaaS product (เช่น Figma, Shopify, Envoy)
  • AI/ML inference ที่ edge — model เล็กพอที่จะโหลดใน browser หรือ edge runtime ได้
  • Portable workload ที่ต้องรันได้ทุก platform

Unikernel — เลือกเมื่อ:

  • Embedded/IoT ที่ทรัพยากรจำกัดสุดๆ
  • Security-critical workload ที่ต้องการ attack surface เล็กที่สุด
  • HFT ที่ต้องการ boot < 1 ms
  • (เกือบไม่มีเคสอื่นที่คุ้มจริงๆ)

มุมผู้บริหาร — ทำไมเรื่องนี้สำคัญในปี 2026-2028#

ผู้บริหารส่วนใหญ่ในไทยตอนนี้ใช้ AWS/Azure/GCP เป็นหลัก stack คือ EC2/RDS/S3 หรือ Lambda + DynamoDB

ใน 3 ปีข้างหน้า — มี 3 trend ที่จะกระทบ stack ของคุณ:

Trend 1 — Vendor ขยับไปทาง Wasm#

  • Cloudflare ผลักหนักให้มอง workload ทั้งหมดเป็น Wasm — D1 (database), Workers (compute), R2 (storage with Workers triggers)
  • AWS เริ่มทดลอง Wasm ใน CloudFront Functions
  • Fastly ทำ Compute@Edge ที่เป็น Wasm-first
  • Vercel ขยับจาก Lambda ไป Edge Functions (V8 isolate)

ถ้า workload ของบริษัทคุณอยู่บน Cloudflare หรือ Vercel — คุณก็ใช้ Wasm อยู่แล้ว แค่ไม่รู้ตัว

Trend 2 — Edge computing โต = Wasm โตตาม#

Edge computing โตขึ้นเรื่อยๆ เพราะ:

  • ลูกค้าไทยเข้าเว็บที่ host อยู่ใน US = latency 200+ ms
  • Edge function ที่รันใน Singapore/Bangkok = 5-20 ms
  • AI inference ที่ edge = ตอบเร็วกว่า + ไม่ต้องส่งข้อมูลขึ้น central cloud (PDPA-friendly)

Edge ใช้ Wasm เกือบ 100% เพราะ container/VM ไม่สามารถ scale ระดับ 200+ city ได้

Trend 3 — Cost model เปลี่ยน#

  • Lambda — cold start 200-2000 ms = ลูกค้ารอ = UX แย่
  • Lambda — billing = ปัดขึ้นไปที่ 1 ms ใกล้สุด = ต้องจ่ายค่า cold start ด้วย
  • Workers — cold start ~5 ms = “ใกล้ 0” จริงๆ
  • Workers — billing = คิดตาม compute time จริง = ถูกกว่า Lambda 5-10 เท่าสำหรับ workload เดียวกัน

ถ้า workload ของคุณ traffic ไม่สม่ำเสมอ (เช่น API ที่ peak ตอน 9 โมงเช้า) — Workers/Edge Functions จะถูกกว่า Lambda เยอะมาก


ปิดบท + tease EP.34#

EP.33.5 จบที่นี่ครับ

ก่อนจะไปอ่าน EP.34 (DevSecOps) ต่อ ขอย้ำ 3 เรื่องที่ผู้บริหารควรเก็บกลับไป:

  1. Container ยังไม่จบ แต่ภาพรวมหลัง container กำลังเคลื่อน — MicroVM (AWS), Wasm (Cloudflare/Vercel/Fastly), Unikernel (niche)
  2. Cloud vendor แต่ละเจ้าเล่นเกมคนละแบบ — AWS เดิมพันที่ MicroVM, Cloudflare/Vercel/Fastly เดิมพันที่ Wasm พอเลือกแพลตฟอร์ม = เลือก runtime ที่ไหลตามมาด้วย
  3. Tool ด้าน security ที่ใช้กับ container ตอนนี้ ไม่ครอบคลุม Wasm — Trivy, Falco, Snyk Container พวกนี้ออกแบบมาสำหรับ Docker image ถ้าย้ายไป Wasm ต้องประเมิน security tool ใหม่หมด

ข้อ 3 นี่แหละครับ — คือสะพานข้ามไป EP.34 — DevSecOps เพราะ security ใน pipeline ของ container, Wasm, MicroVM ใช้ tool คนละชุด DevSecOps pipeline ที่ดี = ต้องปรับตาม runtime ที่ workload ใช้

EP.34 — DevSecOps: Shift Left, Pipeline Security, SBOM