1795 คำ
9 นาที
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 5 — Operations: ตำรวจ ดับเพลิง สืบสวน

Part 6 — Governance: เทศบาล + กฎหมายเมือง

→ สารบัญรวมของซีรีส์ (Hub)

ครับ ใน 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