3.1. Giới thiệu
3.1.1. Định nghĩa
Hệ thống multi tenant là một kiến trúc cho phép một phiên bản duy nhất của một ứng dụng hoặc phần mềm phục vụ đồng thời nhiều khách hàng hoặc tenant. Trong hệ thống này, mỗi tenant hoạt động trong môi trường biệt lập và độc lập của riêng họ, đảm bảo quyền riêng tư dữ liệu và tách biệt tài nguyên. Mô hình này đã trở nên phổ bién hon do khả năng sử dụng hiệu quả tài nguyên, giảm kinh phi và
cung câp các tùy chọn câu hình cùng khả năng mở rộng.
Multi tenant đề cập đến cách tiếp cận kiến trúc trong đó một ứng dụng phần mềm phục vụ nhiều khách hàng hoặc người thuê sử dụng kiến trúc dùng chung. Người thuê có thê là người dùng cá nhân, phòng ban trong một tô chức hoặc thậm chí là các tổ chức riêng biệt. Mỗi khách thuê có không gian và tài nguyên riêng trong hệ thống, đảm bảo cách ly và bảo mật dữ liệu. Dưới đây là những lợi ích của việc sử dụng hệ thống multi tenant:
e Hiệu quả kinh phí: Bang cách chia sẻ kiến trúc và tài nguyên, các hệ
thống multi tenant giúp tiết kiệm kinh phí đáng ké so với việc duy trì các
hệ thống một người thuê riêng biệt. Người thuê có thể tận hưởng những lợi ích của một hệ thống giàu tính năng mà không phải chịu gánh nặng tài
chính.
e_ Khả năng mở rộng: Hệ thống multi tenant được thiết kế dé xử lý nhu cầu
ngày càng tăng của multi tenant. Với việc phân bé nguồn lực hiệu quả và kiến trúc dùng chung, việc mở rộng quy mô hệ thống để đáp ứng số lượng khách thuê ngày càng tăng trở nên dễ dàng và tiết kiệm kinh phí
hơn.
e Tuy chỉnh và cá nhân hóa: Hệ thống multi tenant cho phép các mức độ
tùy chỉnh và cá nhân hóa khác nhau nhằm phục vụ tenant khác nhau. Các
106
tùy chỉnh có thê bao gồm từ sửa đổi thương hiệu và UI đơn giản đến các điều chỉnh chức năng phức tạp hơn, cung cấp trải nghiệm phù hợp cho
từng tenant.
e©_ Sử dụng tài nguyên hiệu qua: Bang cách chia sẻ các tài nguyên như máy
chủ, CSDL và các thành phần kiến trúc, các hệ thống multi tenant tối ưu hóa việc sử dụng tài nguyên. Điều này dẫn đến hiệu quả tốt hơn về phần cứng và phần mềm, giảm tác động môi trường tông thể.
e Bao trì và cập nhật đơn giản: Với một phiên bản duy nhất của ứng dung
phục vụ multi tenant, bảo trì hệ thống, cập nhật và sửa lỗi trở nên hợp
lý hơn. Các sửa đổi có thể được tận dụng cho kiến trúc dùng chung, giảm thiêu thời gian chết và giảm nỗ lực cho các hoạt động bảo trì.
1. Các loại hệ thống multi tenant
Việc chọn loại hình multi tenant phù hợp phụ thuộc vào các yếu tố như mức
độ cách ly dữ liệu cần thiết, nhu cầu tùy chỉnh, yêu cầu về khả năng mở rộng và mục tiêu sử dụng tài nguyên. Điều quan trọng là phải xem xét các yếu tố này khi thiết kế và triển khai hệ thống multi tenant.
Cần lưu ý rang các loại multi tenant này không loại trừ lẫn nhau. Ví dụ: một
hệ thống có thé sử dung multi tenant cấp CSDL dé tối ưu hoá tài nguyên va multi tenant cấp lược đồ cho các tùy chọn tùy chỉnh nâng cao.
Hiểu được các loại hình thuê nhà khác nhau giúp đưa ra quyết định sáng suốt khi thiết kế và triển khai hệ thống multi tenant. Trong các phần sau, chúng ta sẽ khám phá các thành phần chính và cân nhắc liên quan đến kiến trúc multi tenant để dam bảo triển khai và vận hành thành công.
Multi tenant có thể được thực hiện theo nhiều cách khác nhau tùy thuộc vào
mức độ cô lập và tùy chỉnh cho mỗi người thuê. Dưới đây là các loại đa thuê nhà phô biến:
107
1. Multi tenant CSDL
Một phiên bản CSDL duy nhất được chia sẻ giữa các tenant. Mỗi tenant có lược đồ hoặc không gian tên riêng trong CSDL, cung cấp cách ly đữ liệu. Bảng hoặc bản ghi thường được gắn thẻ với mã định danh tenant để đảm bảo tách biệt và kiểm soát truy cập. Loại hình multi tenant này có thể có những hạn chế về khả năng
tùy chỉnh và khả năng mở rộng.
2. Lược đồ đa cấp thuê nhà
Mỗi tenant có lược đồ chuyên dụng riêng trong CSDL. Tenant chia sẻ cùng một phiên bản CSDL nhưng có các lược đồ riêng cho dit liệu của họ. Điều này cung cấp mức độ cô lập cao hơn so với multi tenant cấp CSDL. Mỗi tenant có thé có bảng, dạng xem và quy trình được lưu trữ riêng, cho phép tùy chỉnh nhiều hơn. Multi tenant cấp lược đồ cung cấp sự cân bang tốt giữa các tùy chọn chia sẻ tài
nguyên và tùy chỉnh.
3. Multi tenant cấp ứng dụng
Multi tenant chia sẻ một phiên bản duy nhất của ứng dụng. Mỗi người thuê có không gian riêng biệt và độc lập trong ứng dụng. Dữ liệu cho mỗi tenant thường
được lưu trữ trong CSDL chung hoặc CSDL riêng biệt. Multi tenant cấp ứng dụng cung cấp mức độ tùy chỉnh và linh hoạt cao nhất cho từng người thuê nhưng có thể yêu cầu nhiều tài nguyên hơn.
3.1.2. Thành phần chính
Mỗi thành phan này đóng một vai trò thiết yêu trong hoạt động thành công của một hệ thống multi tenant. Điều quan trọng là phải thiết kế và thực hiện các thành phan này một cách can thận, xem xét các yêu cầu cụ thé của người thuê và các mục tiêu tong thé của hệ thống.
Một hệ thống multi tenant được thiết kế tốt bao gồm một số thành phần chính hoạt động cùng nhau để cung cấp dịch vụ hiệu quả và an toàn cho multi tenant. Dưới đây là các thành phần cần thiết:
108
3.1.2.1. quản lý người thuê
e Thành phan quản lý tenant xử lý việc đăng ký, cung cấp và giới thiệu
khách thuê mới vào hệ thống.
e Nó bao gồm các tính năng như tao tenant, quản lý người dùng, kiểm
soát truy cập và cau hình dành riêng cho tenant.
e quản lý người thuê đảm bảo rằng mỗi người thuê có môi trường biệt lập
riêng và quyền truy cập phù hợp.
3.1.2.2. Tach biệt dữ liệu
e Tách biệt dữ liệu là yếu tố cần thiết trong các hệ thống multi tenant dé
đảm bảo quyền riêng tư và bảo mật của dữ liệu người thuê.
e Các cơ chế như phân vùng CSDL, tách lược đồ hoặc kỹ thuật ảo hóa
được dùng cho việc giữ cho dir liệu tenant được tách biệt với nhau.
e Kiểm soát truy cập mạnh mẽ và kỹ thuật mã hóa nhằm ngăn chặn truy
cập trái phép vào dữ liệu tenant.
3.1.2.3. Bao mật
e Bảo mật là điều cực kỳ thiết yếu trong một hệ thống multi tenant dé bao
vệ dữ liệu, ứng dụng và kiến trúc của người thuê.
e_ Nó liên quan đến việc thực hiện các cơ chế xác thực và ủy quyền mạnh
mẽ dé đảm bảo răng người thuê chỉ có thé truy cập dit liệu của riêng ho.
e Các biện pháp bảo mật bồ sung, chăng hạn như mã hóa dé liệu ở trạng
thái nghỉ và khi truyền, hệ thống phát hiện xâm nhập và kiêm tra bảo
mật thường xuyên, nên được áp dụng.
109
3.1.2.4. Kha năng mở rộng
e Khả năng mở rộng là rất quan trọng dé xử lý số lượng khách thuê ngày
càng tăng và nhu cầu ngày càng tăng của họ trong một hệ thống multi
tenant.
e Kỹ thuật mở rộng theo hướng ngang và dọc có thé được dùng cho việc
đảm bảo rằng hệ thống có thê xử lý các yêu cầu về tải và hiệu suất.
e_ Các công nghệ như cân bằng tải, tự động mở rộng quy mô và điện toán
phân tán.
3.1.2.5. Khả năng tuỳ chỉnh
e Tuy chỉnh là một khía cạnh quan trọng của hệ thong multi tenant vi nó
cho phép người thuê cá nhân hóa hệ thong theo nhu cầu cụ thé của ho.
e Hệ thống nên cung cấp các tính năng như cấu hình dành riêng cho
tenant, xây dựng thương hiệu, quy trình làm việc và tùy chỉnh UI.
e Kiến trúc linh hoạt và các tùy chon khả năng mở rộng cho phép người
thuê điều chỉnh hệ thống theo yêu cầu của họ mà không ảnh hưởng đến
những người thuê khác.
3.1.2.6. Hỗ trợ và liên lạc người thuê
e_ Một hệ thống multi tenant nên bao gồm các cơ chế giao tiếp và hỗ trợ
hiệu quả giữa quản trị viên hệ thống và người thuê.
e Các tính năng như thông báo, nhắn tin, bộ phận trợ giúp và cơ sở kiến
thức có thé được tích hợp dé tạo điều kiện giao tiếp cho người thuê và cung cấp hỗ trợ kịp thời.
110
3.1.3. Tách biệt người thuê
Điều quan trọng cần lưu ý là việc đạt được sự cô lập của người thuê đòi hỏi sự kết hợp của các biện pháp kỹ thuật, thực hành mã hóa an toàn và kiểm soát hoạt động. Mỗi biện pháp nay cần được thực hiện cân thận và kiểm toán thường xuyên
để duy trì tính toàn vẹn và quyền riêng tư của dữ liệu người thuê.
Cách ly người thuê là một khía cạnh quan trọng của hệ thống multi tenant vì
nó đảm bảo quyên riêng tư, bảo mật và tính độc lập của mỗi người thuê trong kiến trúc dùng chung. Mục dich là để ngăn chặn truy cập trái phép vào di liệu và tài nguyên của người thuê. Dưới đây là một số cân nhắc chính để đạt được sự cô lập
tenant hiệu quả
3.1.3.1. Phan vùng CSDL
e Phân vùng CSDL là một kỹ thuật phd biến dé đạt được sự cô lập dữ
liệu trong một hệ thông multi tenant.
e Dữ liệu của mỗi tenant được lưu trữ trong các phân vùng hoặc lược đồ
riêng biệt trong CSDL.
e Việc phân vùng có thé được thực hiện dựa trên mã định danh duy nhất
cho mỗi tenant, chăng hạn như ID tenant.
e_ Cách tiếp cận này cho phép quản lý và truy xuất hiệu quả dữ liệu cụ thé
của người thuê.
3.1.3.2. Áo hóa hoặc container hoá
e_ Các công nghệ ảo hóa như máy ảo (VM) hoặc nền tảng container hóa
(ví dụ: Docker) có thê cung cấp sự cô lập mạnh mẽ giữa các tenant.
° Ứng dụng của mỗi tenant và các phụ thuộc của nó có thê được đóng gói
trong một máy ảo hoặc vùng chứa chuyên dụng.
e_ Cách tiếp cận này đảm bao rằng tài nguyên tenant được cách ly hoàn
toàn, bao gồm CPU, bộ nhớ và mạng.
111
3.1.3.3. Hạn ngạch và giới hạn tài nguyên
e Việc thực hiện hạn ngạch và giới hạn tài nguyên giúp ngăn chặn bat kỳ
tenant nào tiêu thụ một phần tài nguyên hệ thống không công bằng.
e Han ngạch có thê được đặt trên CPU, bộ nhớ, bộ nhớ, băng thông mạng
hoặc các kích thước tài nguyên khác.
e Giám sát và thực thi các hạn ngạch nay dam bao rằng người thuê hoạt
động trong giới hạn được phân bé của họ, thúc đây việc sử dụng tài
nguyên hợp lý.
3.1.3.4. Kiểm tra truy cập và xác thực
e Chức năng kiểm soát mạnh mẽ nhăm thực thi sự cô lập của tenant.
e Việc triển khai kiểm soát truy cập dựa trên vai trò (RBAC) hoặc các kỹ
thuật tương tự đảm bảo rang người thuê chỉ có thể truy cập dit liệu va
tài nguyên của riêng họ.
3.1.3.5. Ma hóa dữ liệu và quyền riêng tư
e_ Mã hóa dữ liệu người thuê khi lưu trữ và khi truyền sẽ bổ sung thêm
một lớp bảo mật và quyên riêng tư.
e Việc triển khai các thuật toán và giao thức mã hóa sẽ bảo vệ dữ liệu
người thuê khỏi bị truy cập trái phép, ngay cả khi kiến trúc bị xâm
phạm.
e Cần tuân thủ các biện pháp quản lý khóa bảo mật dé bảo vệ khóa mã
hóa.
112
3.2.
3.1.3.6. Logging
¢ Cơ chế logging đóng một vai trò thiết yếu trong việc đảm bao sự cô lập
và an ninh của người thuê.
° Bằng cách ghi lại tất cả các hoạt động và sự kiện có liên quan trong hệ
thống, có thể phát hiện và điều tra bất kỳ vi phạm tiềm ẩn hoặc nỗ lực
truy cập trái phép nào.
e Thường xuyên xem xét lịch sử logging giúp xác định và giảm thiêu rủi
ro bảo mật.
Phân tích hệ thống
TH Logistic System Tools
Architecture
QE
User Bx.
| =
m—= - at =
E "—§ và FE 8—_—E Văn
113
Hình 3-1. Kiến trúc hệ thong 3.3. Thành phần và dịch vụ
3.3.1. Kiến trúc của hệ thống một người thuê
3.3.1.1. Front-end
Ứng dụng quản trị web mạnh mẽ và giàu tính năng sử dụng framework React.js dé phát triển. Để đảm bảo triển khai liền mạch và khả năng mở rộng, chúng tôi đã container hóa ứng dụng bằng Docker, cho phép triển khai nhất quán và hiệu quả trên nhiều môi trường khác nhau. Bằng cách tận dụng công nghệ container hóa
cua Docker, ứng dụng được gói gọn trong một container di động và biệt lập, dam
bảo các phụ thuộc và cau hình của nó được chứa tốt và có thể tái tạo. Cách tiếp cận này không chi hợp lý hóa quy trình triển khai mà còn cho phép dé dàng mở rộng quy mô và quản lý ứng dụng, gitip ứng dụng có khả năng thích ứng cao với nhu cầu thay đổi của người dùng và biến động lưu lượng truy cập. Sau khi được đóng gói, ứng dụng được triển khai trên kiến trúc máy chủ, tận dụng sức mạnh của tài nguyên máy chủ để xử lý các yêu cầu của người dùng và cung cấp hiệu suất tối ưu. Thiết lập triển khai này đảm bảo người dùng có thể truy cập ứng dụng. Nhìn chung, sự kết hợp giữa React.js, container hóa Docker và triển khai máy chủ cho phép ứng dụng quản trị web mang lại trải nghiệm đáng tin cậy, có thể mở rộng và thân thiện với
người dùng.
Đối với ứng dụng trình điều khiến, bằng cách tận dụng một loạt các công cụ, thư viện và API được cung cấp bởi Android, chúng tôi đã kết hợp các chức năng nâng cao dé cho phép trình điều khiển điều hướng. Dé đảm bảo hiệu suất, độ tin cậy
và khả năng mở rộng của ứng dụng, chúng tôi đã tuân thủ các phương pháp hay
nhất trong ngành và kiểm tra kỹ lưỡng trên nhiều thiết bị, kích thước UI và phiên bản Android. Bằng cách tận dụng sức mạnh của Android, ứng dụng tài xế của chúng tôi nham nâng cao năng suất của tài xế và cuối cùng là nâng cao hiệu quả
tông thê của các dịch vụ vận tải của chúng tôi.
114
3.3.1.2. Back-end
Tất cả các dịch vụ kinh doanh vận tải không thé được goi trực tiếp qua mạng con công cộng. Thay vào đó, chúng tôi thiết lập API Gateway bằng Kong, cung cấp một số lợi ích trong bối cảnh xây dựng và quản lý API như:
e Định tuyến yêu cầu và cân bang tải: Kong đóng vai trò là điểm vào tập
trung cho các yêu cầu API của chúng tôi. Nó cho phép chúng tôi xác định các quy tắc định tuyến dịch vụ hoặc vi dịch vụ thích hợp dựa trên các tiêu chí như đường dẫn URL, tiêu đề hoặc phương thức. Kong cũng cung cấp khả năng cân bằng tải để phân chia lưu lượng truy cập trên nhiều dịch vụ back-end.
e Xác thực và ủy quyền: Kong hỗ trợ các cơ chế như khóa API, JWT
(JSON Web Tokens), OAuth, v.v. Nó cho phép chúng tôi xác thực va
ủy quyền các yêu cầu API, đảm bảo rằng chỉ những khách hàng được
ủy quyền mới có thé truy cập API của chúng tôi.
e Khả năng mở rộng và tính sẵn sàng cao: Kong được thiết kế dé xử lý
khối lượng lưu lượng truy cập lớn và cung cấp khả năng mở rộng và các tùy chọn sẵn sàng cao. Nó được triển khai trong một thiết lập cluster, trong đó nhiều phiên bản Kong làm việc cùng nhau đề xử lý lưu lượng truy cập và chia sẻ cau hình. Điều này cho phép chúng tôi thay đổi quy mô theo chiều ngang va đảm bảo kha năng phục hồi và khả năng chịu lỗi cho cổng API của chúng tôi.
Tất cả các dịch vụ kinh doanh vận tải đều được bao bọc bởi Bậc ứng dụng Auto Scaling Group, cho phép chúng tôi tự động điều chỉnh số lượng phiên bản trong một nhóm dựa trên các điều kiện đã xác định. Chúng tôi có thể đảm bảo rằng ứng dụng của chúng tôi có thé xử lý các mức lưu lượng truy cập khác nhau và duy trì độ sẵn sàng cao băng cách tự động điều chỉnh số lượng phiên bản dựa trên nhu
câu. Điêu này giúp tôi ưu hóa việc sử dụng tài nguyên, cải thiện hiệu năng ứng dụng
115
và nâng cao khả năng thay đổi quy mô và độ tin cậy tổng thé của kiến trúc AWS của chúng tôi. Kinh doanh vận tải bao gồm các thành phần sau:
Dịch vụ xác thực (FastAPI): Phụ trách xác thực và ủy quyền người dùng, bất kỳ yêu cầu nào gửi đến phải được chuyên tiếp đến dịch vụ này dé đảm bảo an toàn diém cuối.
Dịch vụ người dùng (NestJs): Phụ trách xử lý dữ liệu người dùng (admin/driver).
Dịch vụ việc làm (SpringBoot): Phụ trách xử lý dữ liệu đơn hang.
Dịch vụ sản phẩm (SpringBoot): Phụ trách xử lý dữ liệu san phẩm.
Dịch vụ định vi (SpringBoot): Phụ trách xử lý dữ liệu vi trí giao hang
và nhận hàng.
Route service (SpringBoot): Phụ trách xử lý dữ liệu route giao hàng.
Dịch vụ vận chuyên (SpringBoot): Phụ trách xử lý dữ liệu xe.
Dich vụ tổ chức (SpringBoot): Phụ trách xử lý dit liệu của tổ chức.
Dịch vụ thanh toán (SpringBoot): Phụ trách xử lý dữ liệu hóa đơn và
thanh toán.
Dịch vụ kiểm tra sức khỏe (SpringBoot): Phụ trách xử lý dữ liệu tình
trạng xe.
Tât cả các thành phân này sẽ được container hóa với Docker, sẽ đóng gói các
ứng dụng và các phụ thuộc của chúng lại với nhau, cũng giúp dễ dàng điều chỉnh
microservice.
3.3.1.3. CSDL
Trong hệ thống của chúng tôi, chúng tôi sử dung hai loại CSDL phô biến nhất:
Squan lý (sử dụng PostgreSquan lý) và NoSquan lý (sử dụng MongoDB)
PostgreSquản lý là một hệ thống quản lý CSDL quan hệ nguồn mở (RDBMS) được biết đến với các tính năng nâng cao, khả năng mở rộng và tuân thủ ACID. Nó
116