Multi-Tenant – Multi-tenancy có nghĩa là một phiên bản duy nhất của phần mềm và cơ sở hạ tầng hỗ trợ của nó phục vụ nhiều khách hàng. Mỗi khách hàng chia sẻ ứng dụng phần mềm và cũng chia sẻ một cơ sở dữ liệu. Dữ liệu của mỗi người khách hàng bị cô lập và vẫn vô hình đối với những khách hàng khác.Lợi ích của Multi tenantChi phí thấp hơn thông qua tính kinh tế theo quy mô: Với nhiều khách hàng, nhân rộng có ý nghĩa cơ sở hạ tầng ít hơn nhiều so với giải pháp lưu trữ vì khách hàng mới có quyền truy cập vào cùng một phần mềm cơ bản.Hơn nữa, người dùng không cần bận tâm về việc cập nhật các tính năng và cập nhật mới, họ cũng không cần phải trả phí bảo trì hoặc chi phí khổng lồ. Các bản cập nhật là một phần của đăng ký hoặc, nếu phải trả bất kỳ khoản phí bảo trì nào, nó được chia sẻ bởi nhiều người thuê, do đó làm cho nó trở thành danh nghĩa (nhân tiện, bao gồm các bản cập nhật).Kiến trúc Multi tenant phục vụ hiệu quả tất cả mọi người từ các khách hàng nhỏ, có quy mô có thể không đảm bảo cơ sở hạ tầng chuyên dụng. Chi phí phát triển và bảo trì phần mềm được chia sẻ, giảm chi tiêu, dẫn đến tiết kiệm được chuyển cho bạn, khách hàng.
Đang xem: Tổng quan multi tenancy là gì, nghĩa của từ tenancy agreement trong tiếng việt
Hỗ trợ dịch vụ tốt hơn.Mang lại lợi ích lâu dài cho các nhà cung cấp cũng như người dùng, có thể là về mặt bảo trì, chi phí đầu tư hoặc phát triển.Khuyết điểm Multi tenant:Khó backup database riêng lẻ từng tenantDữ liệu phìm to nhanh chóng Khó khăn khi scale hệ thống.
Có 3 phương án multi tenantPhương án I. Cùng chung một cơ sở dữ liệu (database), chia sẻ bảng (table)Tất cả các bảng liên quan đều có 1 khóa ngoại là UserId. Dữ liệu sản phẩm của từng sale đều được lưu chung trong bảng Product, nhưng được phân biệt nhau bởi trường UserId.Điểm mạnh:- Thiết kế lưu trữ đơn giản.- Dễ cho việc phát triển.- Không gặp phải vấn đề đồng bộ cấu trúc bảng trong quá trình phát triền.Nhược điểm:- Không độc lập database nên việc một shop có thể xem dữ liệu của shop khác nếu có quyền truy cập SQL, phân quyền trên SQL thực sự là vấn đề lớn.- Vấn đề backup, restore dữ liệu cho từng shop là gần như không thể, chỉ có thể backup cho tất cả.- Vấn đề phát sinh thực sự phức tạp khi dữ liệu phình to, rất khó khăn trong việc backup, restore…- Khó khăn khi scale hệ thống.Lời khuyên: Phương án này chỉ dùng làm những hệ thống nhỏ, ít dữ liệu, phát sinh dữ liệu không lớn.Phương án II. Cùng chung database, chia sẻ schemaHướng thiết kế này sử dụng một cơ sở dữ liệu, mỗi tenant tương ứng 1 schema. Có một schema chung để quản lý những các dữ liệu chung, quản lý thông tin về tenants. Cấu trúc các bảng ở tất cả các tenant đều giống nhau.Cần 1 schema chuẩn để dựa vào đó tạo ra tenant mới trong quá trình thêm mới tenant.
Schema là một khái niệm mới được đưa vào SQL Server từ phiên bản 2005, nó là một namespace dùng để gom nhóm các table có chung một đặc điểm nào đó đễ dễ dàng quản lý. Nếu bạn không sử dụng schema trong CSDL thì nó sẽ lấy schema mặc định làdbo.Ưu điểm của schemaGiúp nhóm các Database Object lại với nhau cho dễ quản lýCho phép phân quyền ở schema tăng tính bảo mật
Ví dụ trong lược đồ CSDL của bạn có hai loại table chính như sau:Các table về tin tức -> mình sẽ tạo schema tên là news gồm những table liên quan đến tin tứcCác table hệ thống -> mình sẽ tạo schema tên là sys gồm những table liên quan đến hệ thốngTrong một database thì tên của schema là duy nhất, luôn được chỉ định với cú pháp: server.database.schema.object.Ưu điểm: Khi bạn phân nhóm các table lại thì sẽ rất dễ dàng quản lý, và bạn có thể phân quyền quản lý từng schema cho từng user khác nhau, đây chính là điểm mạnh của schema.2. Cách tạo Schema với lệnh Create SchemaSQL Server cung cấp đầy đủ công cụ giao diện đồ họa đến công cụ dòng lệnh nên bạn có hai cách để tạo schema:Cách thứ nhất là sử dụng công cụ SSMS.Cách thứ hai là sử dụng lệnh Create Schema. Sử dụng SSMS thì bạn click chuột phải vào database và chọn Create schema, còn trong bài này mình sẽ hướng dẫn sử dụng tạo bằng dòng lệnh CREATE SCHEMA.Như ở ví dụ trên, bây giờ mình sẽ tạo hai schema tên là news và sys.CREATE SCHEMA news;CREATE SCHEMA sys;3. Cách xóa Schema với lệnh DROP SCHEMASau khi tạo schema xong nếu bạn không dùng tới thì hãy sử dụng lệnh DROP SCHEMA nhé.
Xem thêm: Thuốc Toplexil Là Thuốc Gì ? Giá Bao Nhiêu? Mua Ở Đâu? Thành Phần, Cách Dùng, Giá Bán
DROP SCHEMA news;DROP SCHEMA sys;4. Phân quyền cho schema Giả sử bạn muốn user thehalfheart có quyền quản lý cho schema news thì chỉ cần sử dụng lệnh GRANT, còn xóa quyền thì dùng lệnh DENY.Cấp quyền:GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: TO Xóa quyền:
Như vậy việc phân nhóm như thế này giúp lược đồ cơ sở dữ liệu của bạn trông chuyên nghiệp hơn, dễ dàng phân quyền và bảo mật hơn.
Ưu điểm: Khi bạn phân nhóm các table lại thì sẽ rất dễ dàng quản lý, và bạn có thể phân quyền quản lý từng schema cho từng user khác nhau, đây chính là điểm mạnh của schema.
Xem thêm: Write Off Là Gì ? Định Nghĩa, Ví Dụ, Giải Thích Write Off Là Gì
Lý do nữa để dùng Schema là bảo mật (Security Policy), ta có thể phân quyền ở cấp độ toàn Schema thay vì từng object riêng biệt trong Schema.Điểm mạnh:- Thiết kế theo hướng này thì có thê thay đổi các cấu trúc, hàm, thủ tục riêng rẽ giữa các tenant.- Dễ phân quyền hơn phương án 1.- Tiết kiệm được chi phí khi triển khai (do số lượng database chỉ là rất ít)Nhược điểm:- Phương án backup độc lập từng tenant là vấn đề nan giải, lập trình viên sẽ phải tự quản lý việc backup/restore cho từng tenant bằng code.- Việc đồng bộ những thay đổi trong cấu schema là vấn đề cần phải quan tâm.- Dữ liệu trong database sẽ phình ra nhanh chóng.- Số lượng schema trong 1 database là có giới hạn.- Khó khăn khi scale hệ thống.Phương án III. Mỗi tenant một database.Phương án này sẽ thực hiện như sau: hệ thống sẽ gồm 1 database chung (chuyên để quản lý các phần như danh sách tenant, user, role …), 1 database tenant chuẩn (chứa dữ liệu chuẩn), và các tenant khác.Mỗi tenant sẽ là 1 database, người dùng sẽ có quyền truy cập vào database chung và database tenant của user đó.Kết luận:Chọn phương án 1 để thực hiện do dễ nâng cấp dễ thực hiện