$ ./run-saas.sh
> Initializing multi-tenant architecture...
> ✓ 1 instance, 500 tenants, $0.02/tenant/hour
> System ready.
สวัสดีครับ Developer ทุกคน! ถ้าคุณกำลังสร้าง SaaS หรือกำลังวางแผนว่าจะสร้าง คำว่า “Multi-Tenancy” น่าจะเคยผ่านหูมาบ้าง แต่มันคืออะไรกันแน่? ทำไม SaaS ทุกตัวต้องพูดถึงมัน? บทความนี้จะพาคุณเข้าใจทุกอย่างตั้งแต่พื้นฐานจนถึงการ implement จริง
Multi-Tenancy คืออะไร?
Multi-Tenancy คือ architecture ที่ software instance เดียวสามารถให้บริการลูกค้าหลายคน (หลาย “tenant”) ได้พร้อมกัน โดยแต่ละ tenant จะรู้สึกเหมือนใช้ระบบแยกตัวเองโดยสมบูรณ์
ทำไมถึงเรียกว่า “Multi”?
ลองนึกภาพ อพาร์ตเมนต์ ครับ — อาคารหนึ่งหลัง แต่มีห้องหลายห้อง แต่ละห้องมี:
- ประตูล็อกแยกกัน (ข้อมูลไม่ปนกัน)
- เคาน์เตอร์น้ำค่าใช้จ่ายแยกกัน (billing แยก)
- ตู้จดหมายแยกกัน (notification แยก)
แต่ทุกห้องใช้:
- กลอนประตูรวม (codebase เดียว)
- ส่วนกลาง (infrastructure รวม)
- พนักงานอาคารเดียวกัน (maintenance team)
Tenant คืออะไร?
Tenant = ลูกค้า/องค์กร ที่ใช้บริการของคุณ ไม่ใช่ user แต่ละคนนะครับ
ยกตัวอย่าง:
- บริษัท ABC ใช้ระบบ CRM ของเรา → ABC คือ 1 tenant
- ภายใน ABC มีพนักงาน 50 คน → 50 users แต่เป็น tenant เดียว
💡 สำคัญ: อย่าสับสนระหว่าง “tenant” กับ “user” — tenant คือ entity ที่รวม users เข้าด้วยกัน
Single-Tenancy vs Multi-Tenancy — อะไรคือความต่าง?
Single-Tenancy คือ architecture ที่ใช้ software instance หนึ่งต่อ tenant หนึ่ง — เหมือน บ้านเดี่ยว ที่มีเจ้าของบ้านหนึ่งครอบครองทั้งหลัง
เปรียบเทียบ Side-by-Side
| Feature | Single-Tenancy | Multi-Tenancy |
|---|---|---|
| ค่าใช้จ่าย | สูงมาก ($100+/เดือน/tenant) | ต่ำ ($2-10/เดือน/tenant) |
| Isolation | สมบูรณ์แบบ | ขึ้นกับวิธี implement |
| การบำรุงรักษา | ยาก — ต้อง update หลายที่ | ง่าย — deploy ครั้งเดียว |
| Scalability | Scale ทั้ง instance | Shared resources |
| Customization | ปรับแต่งได้เต็มที่ | จำกัดตาม shared config |
| Compliance | ง่าย — isolate สมบูรณ์ | ต้องระวังเรื่อง data leak |
วิธีแยก Tenants — Architecture Types
Database Level Isolation
มี 3 วิธีหลักในการแยก tenants ในระดับ database:
- Shared Database, Separate Schema — ทุก tenant อยู่ใน DB เดียวกัน แต่ schema ต่างกัน
- Shared Database, Shared Schema (ใช้ tenant_id) — ทุก tenant อยู่ใน table เดียวกัน ใช้ tenant_id แยก
- Separate Database — แยก DB ต่อ tenant
ทำไมต้องใช้ Multi-Tenancy? — Benefits
- ลดค่าใช้จ่าย — Shared infrastructure = ค่าใช้จ่ายต่อ tenant ลดลงมหาศาล
- ขยายระบบง่าย — Horizontal scaling ได้ง่าย เพิ่ม tenant ใหม่ได้เร็ว
- บริหารจัดการง่าย — Deploy ครั้งเดียว ทุก tenant ได้อัพเดท
- Faster Time-to-Market — เพิ่มลูกค้าใหม่ได้เร็ว ไม่ต้อง setup infrastructure ใหม่ทุกครั้ง
สรุป — เลือกอย่างไรดี?
Multi-Tenancy = shared resources, cost-effective, scalable, เริ่มต้นที่นี่
Single-Tenancy = dedicated, secure, expensive, สำหรับ enterprise
แนะนำของผม: เริ่มต้นด้วย Multi-Tenancy ก่อน แล้วค่อย migrate เป็น Single-Tenancy สำหรับลูกค้าที่ต้องการ (upsell opportunity!)
บทความนี้เขียนสำหรับ Developer ทุกคนที่อยากเข้าใจ Multi-Tenancy ให้ลึกซึ้งขึ้น ถ้ามีคำถามหรืออยากให้เขียนเรื่องอะไรเพิ่มเติม บอกได้เลยครับ!