Cung cấp dịch vụ A (CMS) điều khiển một mô hình (Sản phẩm, giả sử các trường duy nhất mà nó có là id, tiêu đề, giá cả) và các dịch vụ B (Vận chuyển) và C (Email) phải hiển thị cho mô hình cụ thể cách tiếp cận nên để đồng bộ hóa thông tin mô hình nhất định trên các dịch vụ đó trong phương pháp tìm nguồn cung ứng sự kiện? Giả sử rằng danh mục sản phẩm hiếm khi thay đổi (nhưng thay đổi) và có những quản trị viên có thể truy cập dữ liệu của các lô hàng và email rất thường xuyên (các chức năng ví dụ là: B: display titles of products the order contained
và C display content of email about shipping that is going to be sent
:). Mỗi dịch vụ có DB riêng.
Giải pháp 1
Gửi tất cả thông tin bắt buộc về Sản phẩm trong sự kiện - điều này có nghĩa là cấu trúc sau cho order_placed
:
{
order_id: [guid],
product: {
id: [guid],
title: 'Foo',
price: 1000
}
}
Trên dịch vụ B và C thông tin sản phẩm được lưu trữ trong product
thuộc tính JSON trên orders
bảng
Như vậy, để hiển thị thông tin cần thiết, chỉ có dữ liệu được truy xuất từ sự kiện được sử dụng
Vấn đề : tùy thuộc vào những thông tin khác cần được trình bày trong B và C, lượng dữ liệu trong sự kiện có thể tăng lên. B và C có thể không yêu cầu cùng một thông tin về Sản phẩm, nhưng sự kiện sẽ phải chứa cả hai (trừ khi chúng tôi tách các sự kiện thành hai). Nếu dữ liệu đã cho không xuất hiện trong sự kiện đã cho, mã không thể sử dụng dữ liệu đó - nếu chúng tôi thêm tùy chọn màu cho Sản phẩm đã cho, đối với các đơn hàng hiện tại ở B và C, sản phẩm đã cho sẽ không màu trừ khi chúng tôi cập nhật sự kiện và sau đó chạy lại chúng .
Giải pháp 2
Chỉ gửi hướng dẫn sản phẩm trong sự kiện - điều này có nghĩa là cấu trúc sau cho order_placed
:
{
order_id: [guid],
product_id: [guid]
}
Trên các dịch vụ B và C thông tin sản phẩm được lưu trữ trong product_id
thuộc tính trên orders
bảng
Thông tin sản phẩm được truy xuất bởi các dịch vụ B và C khi được yêu cầu bằng cách thực hiện lệnh gọi API đến A/product/[guid]
điểm cuối
Vấn đề : điều này làm cho B và C phụ thuộc vào A (mọi lúc). Nếu lược đồ của Sản phẩm thay đổi trên A, các thay đổi phải được thực hiện trên tất cả các dịch vụ phụ thuộc vào chúng (đột nhiên)
Giải pháp 3
Chỉ gửi hướng dẫn sản phẩm trong sự kiện - điều này có nghĩa là cấu trúc sau cho order_places:
{
order_id: [guid],
product_id: [guid]
}
Trên các dịch vụ B và C thông tin sản phẩm được lưu trữ trong products
bảng; vẫn còn product_id
trên orders
bàn, nhưng có sự sao chép products
dữ liệu giữa A, B và C; B và C có thể chứa thông tin khác nhau về Sản phẩm so với A
Thông tin sản phẩm được tạo mầm khi dịch vụ B và C được tạo và được cập nhật bất cứ khi nào thông tin về Sản phẩm thay đổi bằng cách gọi đến A/product
điểm cuối (hiển thị thông tin bắt buộc của tất cả các sản phẩm) hoặc bằng cách thực hiện truy cập DB trực tiếp vào A và sao chép thông tin sản phẩm cần thiết được cung cấp dịch vụ.
Vấn đề : điều này làm cho B và C phụ thuộc vào A (khi gieo hạt). Nếu lược đồ của Sản phẩm thay đổi trên A, các thay đổi phải được thực hiện trên tất cả các dịch vụ phụ thuộc vào chúng (khi gieo hạt)
Theo hiểu biết của tôi, cách tiếp cận đúng sẽ là đi theo giải pháp 1 và cập nhật lịch sử sự kiện theo logic nhất định (nếu Danh mục sản phẩm không thay đổi và chúng tôi muốn thêm màu để hiển thị, chúng tôi có thể cập nhật lịch sử một cách an toàn để có trạng thái hiện tại Sản phẩm và điền dữ liệu bị thiếu trong các sự kiện) hoặc phục vụ cho việc không tồn tại dữ liệu đã cho (nếu Danh mục sản phẩm đã thay đổi và chúng tôi muốn thêm màu để hiển thị, chúng tôi không thể chắc chắn liệu tại thời điểm đó trong Sản phẩm đã cho trước đó có màu hay không - chúng ta có thể giả sử rằng tất cả các Sản phẩm trong danh mục trước đó đều màu đen và phục vụ cho việc cập nhật các sự kiện hoặc mã)
updating event history
tôi là: đi qua tất cả các sự kiện, sao chép chúng từ một luồng (v1) sang một luồng khác (v2) để duy trì lược đồ sự kiện nhất quán.
display image at the point when purchase was made
) hoặc không thể (đại diện cho ý định display current image as it within catalog
)
updating event history
- Trong sự kiện tìm nguồn cung ứng sự kiện lịch sử là nguồn sự thật của bạn và không bao giờ nên được thay đổi mà chỉ đi về phía trước. Nếu các sự kiện thay đổi, bạn có thể sử dụng phiên bản sự kiện hoặc các giải pháp tương tự nhưng khi phát lại các sự kiện của bạn đến một thời điểm cụ thể thì trạng thái của dữ liệu sẽ như lúc đó.