จำเป็นต้องมีคลาวด์อินฟราสตรักเจอร์ที่ซับซ้อนจริงหรือ?
- ได้ข้อคิดมากมายจากการฟัง Pieter Levels พูดในพอดแคสต์ Lex Friedman
- Pieter รันแอปพลิเคชันบนเซิร์ฟเวอร์เครื่องเดียวและสร้างธุรกิจ micro SaaS ที่ประสบความสำเร็จ
- สิ่งสำคัญคือการหลีกเลี่ยงความซับซ้อนของคลาวด์อินฟราสตรักเจอร์และโฟกัสที่ product-market fit
- แม้อาจไม่เหมาะกับทุกสตาร์ทอัพ แต่ควรหลีกเลี่ยงความซับซ้อนที่มีไว้เพียงเพราะความซับซ้อน
สิ่งที่สังเกตเห็นล่าสุด
โปรเจ็กต์ 1: Lambda ใช้งานเกินพอดี
- ใช้ Lambda 20-30 ฟังก์ชันเพื่อรันบริการหลากหลายอย่าง
- ใช้ SQS และ Lambda สำหรับงานเบื้องหลัง
- ล็อกกระจายอยู่ใน CloudWatch
ผลลัพธ์: ดีบักยาก แก้ไขเปลี่ยนแปลงลำบาก และการดีพลอยซับซ้อน ทั้งที่สามารถทำให้ง่ายลงได้ด้วย NodeJS container เดียว หรือแอป Python Flask/FastAPI ร่วมกับ Redis
โปรเจ็กต์ 2: ความวุ่นวายของ microservices
- รัน microservices ขนาดเล็ก 7 ตัวบน Kubernetes (EKS)
- แยกบริการสำหรับ CRUD และ business logic ออกจากกัน
ผลลัพธ์: ใช้เวลากับการจัดการอินฟราสตรักเจอร์มากกว่าเดิม จึงน่าสงสัยว่าการแยกระดับนี้จำเป็นจริงหรือไม่
พลังของการตั้งค่าแบบเซิร์ฟเวอร์เดี่ยว
- เซิร์ฟเวอร์สมัยใหม่มีประสิทธิภาพสูง Hetzner และ latitude.sh มี VM ทรงพลังในราคาย่อมเยา
- GCP VM และ EC2 instances ก็มีราคาสมเหตุสมผล
- ให้พลังประมวลผลสูงด้วย RAM 40GB และหลายคอร์
- ทุกอย่างรวมศูนย์ ทำให้จัดการได้ง่าย
- ปัญหาการสเกลไปถึงระดับหลายล้าน QPS สามารถค่อยไปแก้ภายหลังได้
สิ่งที่ต้องมีสำหรับการตั้งค่าแบบ VM เดียว:
- เครื่องที่แรงพอ (EC2, GCP VM, Hetzner เป็นต้น)
- การเข้าถึงที่ปลอดภัย (HTTPS, SSH จำกัด IP หรือ SSM)
- CI/CD สำหรับการดีพลอยแบบไม่มี downtime
- การตั้งค่า DNS
- การสำรองฐานข้อมูลอย่างสม่ำเสมอ
- มี VM สำรองเพื่อรองรับความซ้ำซ้อน
Docker Compose
- Docker Compose ยอดเยี่ยมสำหรับการพัฒนาแบบโลคัล
- จัดการหลายบริการได้ด้วยคำสั่งเดียว
- ถูกใช้น้อยกว่าในสภาพแวดล้อม production
- อาจเกิด downtime ระหว่างการอัปเดต
Docker Compose Anywhere: โปรเจ็กต์สุดสัปดาห์
- พัฒนา Docker Compose Anywhere ภายในช่วงสุดสัปดาห์
- มีความสามารถดังต่อไปนี้:
- ตั้งค่าเซิร์ฟเวอร์ Linux แบบ one-click ผ่าน GitHub Actions
- ดีพลอยแบบไม่มี downtime ด้วย GitHub Container Registry และ Docker Rollout
- จัดการ environment variables และ secrets (กำลังพิจารณาใช้
ageหรือsops) - สำรองข้อมูล Postgres แบบอัตโนมัติผ่าน GitHub Actions
- รองรับหลายแอปบน VM เดียว
- SSL อัตโนมัติผ่าน Traefik และ Let's Encrypt
ข้อควรพิจารณาบางประการ
เพื่อความปลอดภัย:
- ตั้งกฎไฟร์วอลล์อย่างเข้มงวด (เปิดเฉพาะพอร์ตที่จำเป็น)
- ดูแลความปลอดภัยของ SSH keys (บน AWS นิยมใช้ SSM, บน GCP นิยมใช้ CLI)
- ใช้ bastion host เพื่อเสริมความปลอดภัย
- พิจารณาการปกป้อง secrets และใช้ WAF หรือ Cloudflare
การปกป้องข้อมูล:
- ส่งฐานข้อมูลสำรองที่เข้ารหัสแล้วไปเก็บบนคลาวด์สตอเรจที่ปลอดภัย (เช่น S3)
- สร้าง disk snapshots เป็นประจำเพื่อเพิ่มความซ้ำซ้อนอีกชั้น
- ใช้นโยบายการเก็บรักษาสำหรับแบ็กอัปและสแนปช็อต
สรุปโดย GN⁺
- บทความนี้เน้นว่าสตาร์ทอัพควรหลีกเลี่ยงคลาวด์อินฟราสตรักเจอร์ที่ซับซ้อน และใช้การตั้งค่าที่เรียบง่ายเพื่อโฟกัสกับ product-market fit
- อธิบายข้อดีของการตั้งค่าแบบเซิร์ฟเวอร์เดี่ยว และวิธีดีพลอยอย่างเรียบง่ายด้วย Docker Compose
- สิ่งสำคัญคืออย่าเสียเวลากับการจัดการอินฟราสตรักเจอร์ที่ซับซ้อน และให้โฟกัสกับการพัฒนาผลิตภัณฑ์หลัก
- โปรเจ็กต์ที่มีความสามารถคล้ายกัน ได้แก่ Heroku และ DigitalOcean
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ในหลายโปรเจ็กต์ มักเห็นทีมที่พยายามใช้เทคโนโลยีใหม่ล่าสุดแต่กลับสร้างผลงานคุณภาพต่ำ
ในสตาร์ทอัพขนาดเล็ก ใช้ VM เครื่องเดียวรัน nginx, webapp, postgres, redis เป็นต้น
เริ่ม SaaS จากเซิร์ฟเวอร์เครื่องเดียวแล้วค่อยขยายเป็นหลายเครื่อง
ฟีเจอร์หลักของ Kubernetes เช่น deployment, บริการของ pod และ blue-green deployment นั้นมีประโยชน์
หลายคนสร้างอินฟราสตรักเจอร์ที่ซับซ้อนเพื่อเรียนรู้ Kubernetes
แม้แต่หนังสือเกี่ยวกับไมโครเซอร์วิสก็ยังแนะนำว่า "ให้สร้างโมโนลิทก่อน"
ไม่แนะนำให้เลือกเฟรมเวิร์กที่ซับซ้อนตั้งแต่แรก
บนคลาวด์ ใช้แค่ VM, block storage, blob storage, DNS, IdP และผู้รับจดทะเบียนโดเมน
รันโปรเจ็กต์บน VPS ราคา $10/เดือน เครื่องเดียวมาเป็นเวลา 6 ปี
ชอบโซลูชันแบบคลาวด์ แต่เลือกใช้เฉพาะส่วนที่จำเป็น