thảo luận Chia sẻ về tech stack, cấu trúc hệ thống mà công ty các bạn đang làm

Mình làm Android, dự án dùng từ Java -> Kotlin cho đến Flutter. Mới đây dùng thằng Jetpack Compose làm UI, giống làm UI kiểu react native với flutter, swiftUI. Cty nhỏ nhỏ nên có cái dự án thích áp dụng tech stack nào cũng được, quan trọng là có cải thiện
brick.png
 
Dạo gần đây mình có làm một dự án nhỏ nhỏ, mà stack thấy khá tiết kiệm, nhanh nữa.

Firebase (authen, firestore-DB, cloud functions - backend, google storage - file server, hosting web)

Web client: vuejs + element ui
Mobile client: flutter



via theNEXTvoz for iPhone
 
Tầng database: SQLServer
Server ứng dụng: Tomcat
Backend: Java SpringBoot
Front end: Angular 9
Hệ thống đang build dạng SAAS, muti-tenant (Multi-tenant app with database-per-tenant)
View attachment 670721
Tại sao chọn "database-per-tenant",:muốn data độc lập dữ các tenant, sau này vendor muốn tự quản lý db của họ thì vẫn ok. họ sử dụng app của mình thôi.
Hậu quả đạt được:
  • Môi lần migrate db là cực hình đó :D, dùng flyway nhưng phải tự handle để migratt all data.
  • Dùng RDS, mà SQL server cho có 100db trên 1 instance sqlserver. đang tìm cách giải quyết
  • Config mỗi request mở transaction đến 1 db thôi cũng khó nhằn, chạy batch job cũng vật.:(

Cũng đang implement 1 platform multi tenacy :) bác cho hỏi backend bên đó dạng monolith hay microservices nhỉ. Nếu là microservices thì bác implement phần authen thế nào
 
Cũng đang implement 1 platform multi tenacy :) bác cho hỏi backend bên đó dạng monolith hay microservices nhỉ. Nếu là microservices thì bác implement phần authen thế nào
Distributed system thôi thím. có 4 con:
auth-service.
system-service: quản lý tenant và system user
domain-service: biz và domain user.
notifycation-service: notify message và để hiện thị user đang edit giống google sheet ấy :D
auth-service thì dùng jwt kiêm trả mỗi request, xem user có quyền ko, có quyền mà bị lock, hay đã bị remove quyền khi đang login...
 
Distributed system thôi thím. có 4 con:
auth-service.
system-service: quản lý tenant và system user
domain-service: biz và domain user.
notifycation-service: notify message và để hiện thị user đang edit giống google sheet ấy :D
auth-service thì dùng jwt kiêm trả mỗi request, xem user có quyền ko, có quyền mà bị lock, hay đã bị remove quyền khi đang login...
Bác xử lý vụ connection pool như nào với mô hình này? Mỗi tenant có 1 pool hay thế nào bác?
 
Cũng đang implement 1 platform multi tenacy :) bác cho hỏi backend bên đó dạng monolith hay microservices nhỉ. Nếu là microservices thì bác implement phần authen thế nào
Làm microservice thì bạn nên có 1 api gateway và sẽ authen ở đây.
 
Vấn đề là có nhiều microservices và mỗi service lại có nhiều connection đến các tenant db

Nếu prartice thì oke, chứ đừng dùng kiến trúc ms khi chưa hiểu hết nó.

kiểu multi tenancy mình hiểu bên bạn đang dùng dạng tenancy per database. Và mình đang hiểu bạn định làm authenticate trên database, kiểu database A có 1 bảng user, database B có 1 bảng user. Nên bạn sẽ mắc 1 cái là thiết kế cái phần authen đó như nào.
 
Vấn đề là có nhiều microservices và mỗi service lại có nhiều connection đến các tenant db
Thì ở phần api gateway bạn check tenant id nào thì authen tenant đó . Làm multiple tenant thì request kiểu gì chả gửi kèm tenant id .
Còn microservice mà lại chia kiểu này thì hơi dở thông thường sẽ chia theo service và service đó sẽ có 1 db riêng . Trong table thì thêm cột tenant_id . Còn chia như này thì làm mono rồi.
 
Đúng rồi thím, 1 tenant 1 pool đang để 15 connection mỗi pool.
Thím có bao nhiêu tenant? Như này thì số lượng connection sẽ bùng nổ rất nhanh và server chạy db cần cực khỏe.
phép tính thô thiển của em:
100 tenant x 5 service x 15 connection = 7500 connection.
Sẽ rất lãng phí tài nguyên nếu các tenant ko sinh lời hoặc lưu lượng truy cập thấp...
 
Thì ở phần api gateway bạn check tenant id nào thì authen tenant đó . Làm multiple tenant thì request kiểu gì chả gửi kèm tenant id .
Còn microservice mà lại chia kiểu này thì hơi dở thông thường sẽ chia theo service và service đó sẽ có 1 db riêng . Trong table thì thêm cột tenant_id . Còn chia như này thì làm mono rồi.
Thím ấy chia mỗi tenant 1 db mà, các db sẽ dạng này: service_id_tenant_id: mỗi service lại có db riêng cho từng tenant.
 
Nếu prartice thì oke, chứ đừng dùng kiến trúc ms khi chưa hiểu hết nó.

kiểu multi tenancy mình hiểu bên bạn đang dùng dạng tenancy per database. Và mình đang hiểu bạn định làm authenticate trên database, kiểu database A có 1 bảng user, database B có 1 bảng user. Nên bạn sẽ mắc 1 cái là thiết kế cái phần authen đó như nào.

Practice thôi chứ team quyết định theo monolith phase này rồi. Mình đang viết và sẽ publish package hỗ trợ cho việc triển khai multi tenancy trên node :D
 
Thím có bao nhiêu tenant? Như này thì số lượng connection sẽ bùng nổ rất nhanh và server chạy db cần cực khỏe.
phép tính thô thiển của em:
100 tenant x 5 service x 15 connection = 7500 connection.
Sẽ rất lãng phí tài nguyên nếu các tenant ko sinh lời hoặc lưu lượng truy cập thấp...

Đúng r, vì vậy sẽ phải có GC riêng để quản lý và tối ưu connection :D
 
Thím có bao nhiêu tenant? Như này thì số lượng connection sẽ bùng nổ rất nhanh và server chạy db cần cực khỏe.
phép tính thô thiển của em:
100 tenant x 5 service x 15 connection = 7500 connection.
Sẽ rất lãng phí tài nguyên nếu các tenant ko sinh lời hoặc lưu lượng truy cập thấp...

Max tầm 500tenant tuong ung 500db. Vân đề độc lập data hàng đầu, và có thể tạo ket nối đên db client nếu client muốn tự quản lý. Thực ra là lượng truy cập thấp. b2b nên biz phức tạp thôi.

Sent using vozFApp
 
Practice thôi chứ team quyết định theo monolith phase này rồi. Mình đang viết và sẽ publish package hỗ trợ cho việc triển khai multi tenancy trên node :D

Thím có tạo db động luôn ko. Khi đăng ký là tự động tạo db rui access được luôn :D

Sent using vozFApp
 
Back
Top