สำหรับสาย tech น่าจะเคยได้ยินข่าวที่ทาง 37Signals
หรือบริษัทที่สร้าง Basecamp และ HEY นั้น
ได้ทำการย้ายระบบงานจาก Cloud กลับมายัง On-premise
ซึ่งช่วยลดค่าใช้จ่ายลงมาอย่างมาก

ปล. ไม่ใช่บอกว่าระบบที่ใช้งาน Cloud จะไม่ดี
เพราะว่าในการเริ่มต้นนั้นจะสะดวกสบายมากขึ้น
สามารถลดการดูแลรักษา hardware รวมถึงการ scale ด้วย
แต่เมื่อถึงจุดหนึ่งก็ต้องมีการปรับเปลี่ยนเป็นธรรมดา

โดยทาง 37Signals ก็ยังใช้แนวคิดเช่นเดิม เพิ่มเติมคือย้ายมาดูแลเอง
เนื่องจากคำนวณหลาย ๆ อย่างแล้ว จะลดค่าใช้จ่ายลงมา
และปรับปรุงประสิทธิภาพของระบบงานอีกด้วย
ซึ่งสอดคล้องกับ business ที่ทำอยู่

ในการย้ายครั้งนี้ ได้สร้างเรื่องมือที่ชื่อว่า Kamal หรือ MRSK มาใช้งาน

เป็นเครื่องมือสำหรับการ deploy ระบบงาน
ในรูปแบบของ container นั่นเอง
มีเครื่องมือที่ใช้ดังนี้

  • Docker
  • Traefix ทำตัวเป็น reverse proxy และ load balance รวมทั้งช่วยในการ rollout อีกด้วย

แสดงโครงสร้างดังรูป

ในการ deploy นั้นจะมีขั้นตอนดังนี้

  • ทำการสร้าง docker image ปกติ จากนั้นทำการ push ไปยัง Docker container registry
  • ทีม deploy ทำการ ssh เข้าไปยัง server ที่จะ deploy
  • ทำการ deploy ผ่าน kamal command line
  • เครื่อง server อย่างต่ำมี 2 เครื่อง คือ Application และ Database (stateless และ stateful)
  • โดยมา Traefik มาคั่นอยู่หน้า application เพื่อ route traffic จาก user เข้ามานั่นเอง ถ้าต้องการ scale ก็สามารถนำ load balance มาไว้ข้างหน้าอีกที ซึ่ง Kamal ไม่สนับสนุน ต้องทำเอง

แสดงดังรูป

ลืมบอกไปว่า Kamal พัฒนาด้วย Ruby นะครับ ดังนั้นการติดตั้งจะผ่าน gem นั่นเอง
หรือทำการ alias ผ่าน docker ได้เลย
ดูได้จาก installation document

ในการ deploy ก็ทำการสร้างไฟล์ config ในรูปแบบของ YAML ดังนี้

  • สนับสนุนไฟล์ .env
  • สนับสนุน environment variable ของ OS
  • กำหนด role ของ server ได้ ว่าจะเป็น web หรือ job schedule หรือจะใช้งาน Traefik หรือไม่
  • สามารถ custom script ต่าง ๆ ผ่าน Hooks ที่เตรียมไว้ให้ได้ ว่าแต่ละจุดต้องการให้ทำอะไรเพิ่มเติม

จากแนวทางนี้ทาง Kamal จะเรียกว่า
การ deploy จาก bare metal มายัง Cloud VMs นั่นเอง
ช่วยทำให้เกิดมาตรฐานของการพัฒนา และ deploy ระบบงาน
เป็นกรอบการทำงานหนึ่งที่น่าสนใจ
ที่ถูกสร้างขึ้นมาตามความต้องการของ 37Signal นั่นเอง
แต่ก็เป็นแนวทางหนึ่ง ที่เราสามารถนำมาต่อยอดได้เช่นกัน

ทั้งเรื่องของ Zero-downtime deployment
ทั้งเรื่องของ Rolling restart
ทั้งเรื่องของ Service management
โดยใช้ผ่าน Docker ทั้งหมด

ลองศึกษาและใช้งานกันดูครับ

Reference Websites