Hỏi về cách phân chia database quan hệ nhiều nhiều trong 1 hệ thống microservice

Hiện tại em đang làm đồ án có sử dụng kiến trúc microservice. Em dự định sẽ chia các service ra với mỗi service sẽ sử dụng 1 database, các service sẽ giao tiếp qua 1 message broker. Lúc này phát sinh vấn đề là phân chia db như thế nào. Ví dụ như em có 2 model là user và group. 1 user thuộc nhiều group và 1 group có nhiều user.
Em có research trước trên mạng thì ra được 1 solution là ở cả 2 service đều giữ bảng quan hệ nhiều nhiều UserGroup, mỗi khi bên service nào có thay đổi thì sẽ bắn message sang cho service kia để update nhưng em thấy khi nghiệp vụ phức tạp lên các bảng bị lặp sẽ rất nhiều.
Không biết có ai đã có kinh nghiệm làm về microservice có thể cho em 1 vài lợi gợi ý hướng làm được không

Có lẽ bạn phải xem lại cách chia service của bạn. Theo kinh nghiệm thì thường sẽ dùng aggregate pattern trong domain driven design, đại loại là các model nào thường đi với nhau thì nên đưa vào cùng một service (VD: cart_item lúc nào cũng đi liền với cart). Trong trường hợp của bạn 2 model user và group có quan hệ chặt chẽ với nhau sao không cho cùng vào một service (account-service chẳng hạn). Một service nên nhỏ, độc lập và thực hiện một task trong hệ thống, tuy nhiên không nên vụn vặt quá mức.

3 Likes

Vâng, cho em hỏi thêm là em có 3 model article, thread (trong thread có model question và comment) và tag. 1 article sẽ có nhiều tag và 1 thread cũng như vậy, 3 model này em có nên cho chung vào một
service không hay tách riêng ntn ạ. Em suy nghĩ mãi mà chưa ra

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?