Có thể sử dụng cơ sở dữ liệu dùng chung 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 tiện, 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 thích sử dụng cơ sở dữ liệu cho mỗi mẫu dịch vụ. Điều này làm cho các microservices tự chủ hơn. Trong trường hợp này, bạn nên sao chép một số dữ liệu của mình giữa nhiều dịch vụ nhỏ. Bạn có thể chia sẻ dữ liệu bằng các cuộc gọi api giữa các microservices hoặc bạn có thể chia sẻ nó với tính năng nhắn tin không đồng bộ. Nó phụ thuộc vào cơ sở hạ tầng của bạn và tần suất thay đổi dữ liệu. 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ụ giao hàng có thể trùng lặp địa điểm giao hàng và thông tin sản phẩm. Dịch vụ sản phẩm quản lý các sản phẩm và địa điểm. Sau đó, dữ liệu yêu cầu được sao chép vào cơ sở dữ liệu của dịch vụ Delivery với các thông báo không đồng bộ (ví dụ: bạn có thể sử dụng Rabbit mq hoặc apache kafka). Dịch vụ giao hàng không thay đổi sản phẩm và dữ liệu vị trí nhưng nó sử dụng dữ liệu khi thực hiện công việc của mình. Nếu một phần dữ liệu sản phẩm được sử dụng bởi Dịch vụ giao hàng thường xuyên thay đổi, thì việc sao chép dữ liệu với 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 các cuộc gọi api giữa Sản phẩm và Dịch 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 sản phẩm có thể phân phối đến một địa điểm cụ thể hay không. Dịch vụ giao hàng yêu cầu dịch vụ Sản phẩm với số nhận dạng (tên, id, v.v.) của sản phẩm và vị trí. 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 microservices. Vì cơ sở dữ liệu của các microservices ở đây khác nhau, chúng tôi không thể xác định các khóa ngoại giữa dữ liệu của các microservices này.
Các 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 cũng ít tự chủ hơn khi bạn 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 không hoạt động, Dịch vụ giao hàng 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 với thông báo không đồng bộ, dữ liệu cần thiết để thực hiện phân phối sẽ nằm trong cơ sở dữ liệu của dịch vụ 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.