thảo luận Triển khai microservice cho backend springboot

  • Người tạo chủ đề Người tạo chủ đề Hero Kun
  • Ngày bắt đầu Ngày bắt đầu
Nó là shared db, có gì lạ đâu. vẫn được dùng
Ông kia có bảo là không dùng đc đâu. Ông ấy bảo là làm thế thì không khác gì mono thôi.

The drawbacks of this pattern are:
  • Development time coupling - a developer working on, for example, the OrderService will need to coordinate schema changes with the developers of other services that access the same tables. This coupling and additional coordination will slow down development.
  • Runtime coupling - because all services access the same database they can potentially interfere with one another. For example, if long running CustomerService transaction holds a lock on the ORDER table then the OrderService will be blocked.
  • Single database might not satisfy the data storage and access requirements of all services.
  • Database per Service is an alternative approach
 
Ủa thế làm theo cách này thì scale kiểu gì vậy, khi mà tất cả các services đều phụ thuộc vào chung 1 db. Có scale servers code lên thì throughput vẫn là throughput của 1 db.
ủa người ta phân db theo domain. ví dụ card có nhiều service nhưng 1 db, loan có nhiêu service nhưng 1 db. deposit nhiêu service 1 db.
scale service khi CPU tăng cao. mà cpu tăng cao chưa chắc là do db mà cứ kieu 1 db ko scale được
 
ủa người ta phân db theo domain. ví dụ card có nhiều service nhưng 1 db, loan có nhiêu service nhưng 1 db. deposit nhiêu service 1 db.
scale service khi CPU tăng cao. mà cpu tăng cao chưa chắc là do db mà cứ kieu 1 db ko scale được
card, loan, deposit là các services r, thay vì monolithic là tất cả cùng một project.
Scale service khi CPU tăng cao là tăng số servers lên để giảm CPU sử dụng trên server (vd load balancer) thì cái này cả monolithic vẫn dùng được (triển khai monolithic trên 2 servers khác nhau để load balancer).
Vấn đề là khi monolithic toàn bộ services card, loan, deposit sẽ phải share cùng một db nên performance app sẽ giảm. Thêm nữa như trong bài nói, là dùng shared database có khả năng dẫn đến tightly coupled (Development time coupling), một vấn đề của monolithic, nghĩa là thay đổi logic order sẽ (khả năng cao) là thay đổi cả code lẫn bảng của product. Trong khi microservice thì các services sẽ sử dụng loosely coupled. Nghĩa là các services chỉ public interface (vd Rest API) để tương tác lẫn nhau, phần implementation của từng service sẽ giấu đi (code, database tables). Do đó, khi thay đổi một service thì sẽ ít gây ra ảnh hưởng đến service còn lại.
 
Sửa lần cuối:
Được chứ bác, dùng tốt là đằng khác ấy. Nhưng đợt này bên mình do cần dồn dịch tài nguyên và 1 vài lí do bất khả kháng nên phải off keycloak đi và tự làm 1 con IAM để dùng. Nghĩ cũng chán mà thôi cũng kệ.
Phần authorization bác implement như nào vậy ? Bác lấy permission từ token r tự phân quyền hay gửi request cho keycloak validate vậy ?
 
Phần authorization bác implement như nào vậy ? Bác lấy permission từ token r tự phân quyền hay gửi request cho keycloak validate vậy ?
Chưa Implement cái này bao giờ nhưng theo mình để quyền trong token thì ko ổn lắm, lỡ quyền lưu trong db có thay đổi rồi nhưng token vẫn giữ quyền cũ thì nó ko đồng bộ
zFNuZTA.png
 
mỗi 1 service phải tách riêng DB thì mới gọi là microservice chứ. Dùng chung thì là micro nửa vời, chả khác gì mono cả.
:v tùy vào công ty muốn làm tới mức nào, cái gì cũng có 2 mặt mà bác :v dùng chung DB là trò anti-pattern của Microservice để move nhanh thôi. Mấy cái như Distributed Transaction thay vì phải implement 2PC hay Saga thì nhiều cty viết hẳn store-produced để xử luôn, nhanh gọn lẹ do dùng Shared-Database (anti-pattern) và cũng được xem là 1 loại Microservice nếu desisgn schema tốt mà
JCFtpJo.png
JCFtpJo.png
JCFtpJo.png
 
:v tùy vào công ty muốn làm tới mức nào, cái gì cũng có 2 mặt mà bác :v dùng chung DB là trò anti-pattern của Microservice để move nhanh thôi. Mấy cái như Distributed Transaction thay vì phải implement 2PC hay Saga thì nhiều cty viết hẳn store-produced để xử luôn, nhanh gọn lẹ do dùng Shared-Database (anti-pattern) và cũng được xem là 1 loại Microservice nếu desisgn schema tốt
JCFtpJo.png
JCFtpJo.png
JCFtpJo.png
Cái bôi đen này hơi khoai, chia DB ra chắc còn dễ hơn.
Còn dùng store-produced vậy mỗi lần cần sửa logic phải mò xuống DB à ? t thấy vừa cực vừa rủi ro
tjRRqf6.gif
 
Cái bôi đen này hơi khoai, chia DB ra chắc còn dễ hơn.
Còn dùng store-produced vậy mỗi lần cần sửa logic phải mò xuống DB à ? t thấy vừa cực vừa rủi ro
tjRRqf6.gif
:v đánh đổi thôi bác, giờ chia 1 service 1 DB rồi đi maintain Replication / Backup cho mỗi con à. Chẳng qua thời nay nó có Cloud, cung cấp managed service thì bác thấy dễ thôi, chứ cứ thử on-prem thử xem, ói máu ấy chứ. Dùng managed thì ngon nma đến cuối tháng thì nóng ví vì bill thôi.
 
:v đánh đổi thôi bác, giờ chia 1 service 1 DB rồi đi maintain Replication / Backup cho mỗi con à. Chẳng qua thời nay nó có Cloud, cung cấp managed service thì bác thấy dễ thôi, chứ cứ thử on-prem thử xem, ói máu ấy chứ. Dùng managed thì ngon nma đến cuối tháng thì nóng ví vì bill thôi.
ko cần replica đâu thím, mình từng làm microservice. Ví dụ service A cần thông tin trong DB của service B thì chỉ cần mở 1 interface cho A gọi sang B service là được, tất nhiên nó là internal interface
r2DB4tw.gif
 

Thống kê chủ đề

Ngày tạo
Hero Kun,
Người trả lời cuối
thieugiatri4492,
Trả lời
146
Lượt xem
17.525
Quay lại
Lên đầu trang