Avatar
1
Thưởng Đặng Văn Beginner
Multiple tenant multiple database .net core
Hi mọi người!

Em đang học thiết kế ứng dụng mô hình SaaS Applications. Em muốn làm mô hình dạng mỗi shop sẽ là 1 database riêng biết. Em cũng mới chuyển qua .net core nên có 1 số câu hỏi như sau mong mọi người giúp:

  1. Khi nhiều shop thì cách mình định danh shop đó như thế nào ạ?
  2. Khi mà làm mô hình thế thì cần tìm hiểu thêm về những vấn đề gì (ví dụ cân bằng tài server....). Cái này hệ thống lớn mới cần nhưng em cũng muốn tìm hiểu coi nó sẽ như thế nào

Mọi người ai có kinh nghiệm giải đáp giúp em ạ. Có cái ví dụ nào cho e thì càng tốt ạ. Em cảm ơn mọi người.

  • Answer
.net core multiple tenant
Remain: 5
5 Answers
Avatar
tvd12 Beginner
tvd12 Beginner
Câu hỏi này có vẻ không liên quan gì đến .netcore nhỉ.

  1. Khi có nhiều shop thì em sẽ thêm 1 trường vào các bảng liên quan đến shop, ví dụ:

create table Shop {
  shopId,
  shopName
}

create table Product {
  productId,
  projectName,
  shopId
}

  1. Hiện tại anh thấy đội DevOps đang dùng K8s để triển khai hệ thống lớn, em có thể tìm hiểu về K8s nhé, nó sẽ bao gồm việc cấu hình LB, quản lý và monitor hệ thống em ạ.
  • 1
  • Reply
Dạ nếu em muốn chia mỗi shop 1 database riêng thì mình sẽ xử lý như thế nào a nhỉ.  –  Thưởng Đặng Văn 1650222588000
Avatar
Nguyen Nam Beginner
Nguyen Nam Beginner
Mình thấy có bài này hướng dẫn config multiple DB with .net Using Multiple Databases in ASP.NET Core via Entity Framework Core (code-maze.com)

Còn đối với bài toán của bạn thì theo mình nên thiết kế DB như của a tvd12 là hợp lý nhất rồi.

  • 1
  • Reply
Dạ tại vì mình muốn tách biệt mỗi shop ra 1 db riêng biệt. Vì khi deploy cho khách dùng thì có thể shop đó sẽ thay đổi một số tính năng nào đó trong quá trình sử dụng. Thì mình sẽ dễ tách ra để phát triển thêm các tính năng mà shop yêu cầu ạ.  –  Thưởng Đặng Văn 1650222840000
Như vậy theo mình thì cứ mỗi shop 1 DB riêng cũng được. Mỗi shop sẽ có 1 server riêng để deploy code cũng như DB.  –  Nguyen Nam 1650224699000
Dạ ý tưởng em là tất cả đều dùng chung 1 app nhưng db riêng. Thì khi shop nào có nhu cầu phát triển thêm thì sẽ tách riêng app và db.

Em đang bị vướng chỗ này. Khi các shop ở các db riêng thì mỗi shop se có connection khác nhau. Mà connection của mình thường sẽ lấy ở trong appsetting.json.

Thì e đang vướng chỗ từ khi shop login thì sẽ nhập tên shop sau đó sẽ lấy chuỗi kết nối này như thế nào để truy cập đúng db của shop đó.

 –  Thưởng Đặng Văn 1650225533000
Theo mình thì nên làm như này.

Trường hợp shop thuê nhưng không có yêu cầu gì thêm thì nên có 1 bảng shop rồi dùng shopID để liên kết với các bảng có liên quan.

Trường hợp shop thuê có yêu cầu riêng thì mình cần tách riêng DB, code cũng như server riêng cho từng shop.

Còn việc muốn dùng 1 app mà lại tách riêng từng DB thì mình chưa thấy bao giờ nhưng nếu muốn làm thì bạn cần phải làm 1 số việc như:

+ Có 1 service riêng để login, logout dùng chung 1 DB.

+ Cấu hình bằng tay cho tất cả connection của mỗi shop...

Bạn thử tham khảo bài này xem có giúp được gì không?

https://dejanstojanovic.net/aspnet/2020/november/accessing-multiple-databases-from-the-same-dbcontext-in-ef-core/
 –  Nguyen Nam 1650228084000
Avatar
monkey Beginner
monkey Beginner
Tiếp nối câu trả lời của anh:

  1. Anh chưa hiểu tại sao em lại phải làm như vậy, vì làm vậy quá phức tạp, việc sử dụng chung db sẽ đơn giản hơn nhiều
  2. Tuy nhiên nếu em thực sự bắt buộc phải tổ chức mỗi shop 1 db em có thể tham khảo cách này xem sao:

API Gateway em có thể sử dụng RestAPI hoặc Grpc.

Khi cần truy cập data của shop nào, ví dụ product thì api sẽ kiểu này: /api/v1/{shopName}/products

  • 0
  • Reply
Avatar
hi a @monkey :

Mô hình em muốn làm như thế này. Như em có trình bày ở trên là do có thể rất nhiều shop họ sẽ có quy trình riêng. cái core chỉ là 1 phần thôi nên khi phát triển thêm cho các shop từ cái core đó. Nên em muốn tách db ra ngay từ đầu luôn.

Em có đọc được bài này ngta làm nhiều connection trong appsetting. Em đang muốn đưa cái đó vào database luôn (khi ngta đăng ký shop). Nên chưa biết cách xử lý cái connection khi shop đăng nhập như thế nào:

https://codewithmukesh.com/blog/multitenancy-in-aspnet-core/

 

 

 

 

  • 0
  • Reply
Hiện tại các thư viện .netcore anh thấy đang khởi tạo DatabaseContext rồi repository từ khi chạy server, nên em muốn chỉ khi tạo shop mới tạo DB thì khả năng cao em phải tìm 1 thư viện nào đó hỗ trợ việc tạo database context lazy init, anh mò mà chưa có thấy  –  monkey 1650250526000
Avatar
Đàm Nhất Beginner
Dựa vào subdomain
  • 0
  • Reply