Có thể sử dụng cơ sở dữ liệu được chia sẻ cho nhiều dịch vụ nhỏ. Bạn có thể tìm thấy các mẫu để quản lý dữ liệu của microservices trong liên kết này: http://microservices.io/patterns/data/database-per-service.html. Nhân đây, nó là một blog rất hữu ích cho kiến trúc microservices.
Trong trường hợp của bạn, bạn muốn sử dụng cơ sở dữ liệu cho mỗi mẫu dịch vụ. Điều này làm cho microservices tự chủ hơn. Trong tình huống này, bạn nên sao chép một số dữ liệu của bạn trong nhiều microservices. Bạn có thể chia sẻ dữ liệu với các cuộc gọi api giữa các dịch vụ nhỏ hoặc bạn có thể chia sẻ dữ liệu đó với tính năng nhắn tin không đồng bộ. Nó phụ thuộc vào cơ sở hạ tầng và tần suất thay đổi dữ liệu của bạn. Nếu nó không thay đổi thường xuyên, bạn nên sao chép dữ liệu với các sự kiện không đồng bộ.
Trong ví dụ của bạn, dịch vụ Phân phối có thể trùng lặp vị trí phân phối và thông tin sản phẩm. Dịch vụ sản phẩm quản lý sản phẩm và địa điểm. Sau đó, dữ liệu cần thiết được sao chép vào cơ sở dữ liệu của dịch vụ Chuyển phát với các thông điệp không đồng bộ (ví dụ bạn có thể sử dụng thỏ mq hoặc apache kafka). Dịch vụ phân phối không thay đổi dữ liệu sản phẩm và vị trí nhưng nó sử dụng dữ liệu khi nó đang thực hiện công việc của mình. Nếu phần dữ liệu sản phẩm được sử dụng bởi dịch vụ Chuyển phát thường thay đổi, việc sao chép dữ liệu bằng nhắn tin không đồng bộ sẽ rất tốn kém. Trong trường hợp này, bạn nên thực hiện cuộc gọi api giữa dịch vụ Sản phẩm và Giao hàng. Dịch vụ giao hàng yêu cầu Dịch vụ sản phẩm kiểm tra xem một sản phẩm có thể giao hàng đến một địa điểm cụ thể hay không. Dịch vụ giao hàng yêu cầu Sản phẩm dịch vụ có mã định danh (tên, id, v.v.) của một sản phẩm và địa điểm. Các số nhận dạng này có thể được lấy từ người dùng cuối hoặc được chia sẻ giữa các dịch vụ nhỏ. Bởi vì các cơ sở dữ liệu của microservices là khác nhau ở đây, chúng tôi không thể xác định các khóa nước ngoài giữa các dữ liệu của các microservices.
Cuộc gọi Api có thể dễ thực hiện hơn nhưng chi phí mạng cao hơn trong tùy chọn này. Ngoài ra các dịch vụ của bạn ít tự chủ hơn khi bạn đang thực hiện các cuộc gọi api. Bởi vì, trong ví dụ của bạn khi dịch vụ Sản phẩm ngừng hoạt động, Dịch vụ phân phối không thể thực hiện công việc của mình. Nếu bạn sao chép dữ liệu bằng tính năng nhắn tin không đồng bộ, dữ liệu cần thiết để thực hiện phân phối nằm trong cơ sở dữ liệu của dịch vụ microservice phân phối. Khi dịch vụ Sản phẩm không hoạt động, bạn sẽ có thể giao hàng.
Nguồn
2017-07-02 17:36:27
Great câu trả lời. Tôi sử dụng các cuộc gọi API, nhưng nó cũng cần sắp xếp và phân trang dữ liệu từ một dịch vụ khác. Bạn có biết cách tiếp cận tốt nhất cho trường hợp đó không? – tranceholic
Bạn nên thêm các tham số liên quan đến phân trang và sắp xếp vào api của bạn. Sau đó, trách nhiệm của việc nhận được đúng trang với đúng thứ tự sẽ được thực hiện bởi người tiêu dùng của api. Có một số công nghệ được sử dụng để định nghĩa một api như GraphQL. Theo tôi biết, những công nghệ đó đã có các tính năng sắp xếp và phân trang. Nếu bạn không sử dụng loại công nghệ này, bạn có thể chỉ cần lấy các tham số từ ứng dụng khách của bạn và sử dụng chúng để trả về dữ liệu của bạn được sắp xếp với các trang. –