0

Cơ bản về Multi-Tenant Architecture

Multi-Tenant Architecture: Từ "Cốt dạo" đến Hệ thống SaaS triệu đô

Trong lộ trình phát triển của một Software Developer, chắc hẳn bạn đã từng nghe đến khái niệm SaaS (Software as a Service). Những nền tảng như Jira, Slack, hay KiotViet là ví dụ điển hình: Một phần mềm duy nhất phục vụ hàng ngàn doanh nghiệp, nhưng dữ liệu của mỗi khách hàng lại hoàn toàn độc lập.

Làm thế nào để xây dựng được một hệ thống như vậy? Câu trả lời nằm ở Multi-Tenant Architecture (Kiến trúc đa khách thuê). video 👉️👉️

1. Multi-Tenant Architecture là gì?

Hiểu đơn giản, Tenant (khách thuê) là một nhóm người dùng (một công ty, một chi nhánh) có quyền truy cập chung vào phần mềm với một vùng dữ liệu riêng biệt.

Thay vì cài đặt cho mỗi khách hàng một bộ mã nguồn riêng (Single-Tenant), chúng ta sử dụng Multi-Tenant: Một bộ mã nguồn duy nhất nhưng phục vụ nhiều Tenant. Điều này giúp giảm chi phí vận hành, bảo trì và dễ dàng cập nhật tính năng cho toàn bộ khách hàng cùng lúc.

2. Ba mô hình triển khai Multi-Tenant phổ biến

Tùy vào nhu cầu về bảo mật, hiệu năng và chi phí, chúng ta có 3 cách tiếp cận chính:

Mô hình 1: Shared Database, Shared Schema (Ở chung phòng)

Đây là cách đơn giản nhất. Tất cả dữ liệu của các Tenant nằm chung trong cùng một bảng (Table). Để phân biệt, chúng ta thêm một cột định danh (ví dụ: tenant_id hoặc channel_id).

Ưu điểm: Cực kỳ dễ triển khai, chi phí hạ tầng thấp nhất, bảo trì đơn giản.

**Nhược điểm: ** Dữ liệu phình to rất nhanh, ảnh hưởng đến hiệu năng (Performance).

Rủi ro bảo mật cao: Chỉ cần một sai sót nhỏ trong câu query (quên filter tenant_id) là dữ liệu của khách hàng này sẽ hiển thị cho khách hàng khác.

Phù hợp: Các dự án nhỏ, tần suất ghi dữ liệu thấp.

Mô hình 2: Shared Database, Separate Schema (Ở chung nhà, khác phòng)

Mô hình này phổ biến với các hệ quản trị như PostgreSQL. Một Database chứa nhiều Schema, mỗi Tenant sở hữu một Schema riêng với các bảng giống hệt nhau về cấu trúc.

Lưu ý về MySQL: Trong MySQL, Database và Schema là một. Với PostgreSQL, cấu trúc là: Database > Schema > Table.

Ưu điểm:

Dữ liệu được cô lập tốt hơn về mặt logic.

Dễ dàng thực hiện Migration (cập nhật cấu trúc bảng) cho riêng từng Tenant.

Nhược điểm: Phức tạp hơn trong việc quản lý kết nối (Connection pooling).

Vẫn dùng chung tài nguyên phần cứng (CPU, RAM). Nếu một Tenant "khủng" chiếm dụng tài nguyên, các Tenant khác sẽ bị ảnh hưởng (Noisy Neighbor effect).

Mô hình 3: Separate Database per Tenant (Mua nhà riêng)

Mỗi khách hàng sở hữu một Server Database vật lý hoặc logic hoàn toàn riêng biệt.

Ưu điểm: Bảo mật tuyệt đối (Physical Isolation).

Khả năng mở rộng (Scaling) độc lập: Khách hàng lớn có thể dùng Server cấu hình mạnh, khách hàng nhỏ dùng Server yếu hơn. Nhược điểm: Chi phí vận hành và hạ tầng cực kỳ đắt đỏ. Khó khăn trong việc Monitoring và Migration hàng loạt.

Phù hợp: Khách hàng Enterprise, hệ thống tài chính, ngân hàng hoặc dữ liệu đặc biệt nhạy cảm.

3. Tổng kết:

Chọn mô hình nào?

Việc lựa chọn kiến trúc giống như việc chọn nơi ở:

Shared Schema: Ở chung phòng trọ (Rẻ, vui nhưng thiếu riêng tư).

Separate Schema: Ở chung cư (Riêng tư hơn nhưng vẫn dùng chung thang máy, bãi xe).

Separate Database: Ở biệt thự riêng (An toàn, tự do nhưng tốn kém).

Khi xây dựng hệ thống SaaS, hãy bắt đầu bằng việc hiểu rõ đối tượng khách hàng của bạn là ai. Nếu là doanh nghiệp lớn (B2B), hãy ưu tiên sự cô lập dữ liệu. Nếu là khách hàng cá nhân nhỏ lẻ, hãy ưu tiên sự tối ưu về chi phí hạ tầng.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí