Tôi thấy khó tránh khỏi trùng lặp dữ liệu hoặc cơ sở dữ liệu dùng chung cho ngay cả thiết kế microservice đơn giản nhất, điều này khiến tôi nghĩ rằng tôi đang thiếu một cái gì đó. Đây là một ví dụ cơ bản về vấn đề tôi gặp phải. Giả sử ai đó đang sử dụng một ứng dụng web để quản lý kho, họ sẽ cần hai dịch vụ; một cho hàng tồn kho quản lý các mặt hàng và số lượng trong kho và dịch vụ người dùng sẽ quản lý dữ liệu người dùng. Nếu chúng tôi muốn kiểm toán ai đã lưu trữ cơ sở dữ liệu, chúng tôi có thể thêm ID người dùng vào cơ sở dữ liệu cho dịch vụ kiểm kê dưới dạng lưu trữ cuối cùng theo giá trị.
Sử dụng ứng dụng, chúng tôi có thể muốn xem tất cả các mặt hàng sắp hết và một danh sách những người đã dự trữ chúng lần trước để chúng tôi có thể yêu cầu họ bổ sung lại. Sử dụng kiến trúc được mô tả ở trên, một yêu cầu sẽ được gửi đến dịch vụ kiểm kê để lấy chi tiết vật phẩm của tất cả các mặt hàng có số lượng ít hơn 5. Điều này sẽ trả về một danh sách bao gồm ID người dùng. Sau đó, một yêu cầu riêng sẽ được gửi đến dịch vụ người dùng để lấy tên người dùng và chi tiết liên hệ cho danh sách ID người dùng thu được từ dịch vụ kiểm kê.
Điều này có vẻ hết sức kém hiệu quả và không cần nhiều dịch vụ nữa trước khi chúng tôi thực hiện nhiều yêu cầu đối với các API dịch vụ khác nhau, lần lượt thực hiện nhiều truy vấn cơ sở dữ liệu. Một cách khác là sao chép chi tiết người dùng trong dữ liệu hàng tồn kho. Khi người dùng thay đổi chi tiết liên hệ của họ, chúng tôi sẽ cần sao chép thay đổi thông qua tất cả các dịch vụ khác. Nhưng điều này dường như không phù hợp với ý tưởng bối cảnh bị ràng buộc của microservice. Chúng tôi cũng có thể sử dụng một cơ sở dữ liệu duy nhất và chia sẻ điều này giữa các dịch vụ khác nhau và có tất cả các vấn đề của cơ sở dữ liệu tích hợp .
Cách chính xác / tốt nhất để thực hiện điều này là gì?