Bất kỳ ai biết về việc triển khai bus thông báo cung cấp sự kiểm soát chi tiết về đảm bảo tính nhất quán? ACID đầy đủ quá chậm và không có ACID quá sai.Tìm kiếm triển khai bus tin nhắn cung cấp một cái gì đó giữa ACID đầy đủ và không có gì
Chúng tôi hiện đang sử dụng gói Rhino ESB MSMQ cho thông điệp của chúng tôi. Khi sử dụng tin nhắn giao dịch bền, giao dịch với các giao dịch phân tán, MSMQ có thể chặn cam kết trong thời gian đáng kể trong khi chờ đợi khi hoàn thành I/O.
Thư của chúng tôi rơi vào hai danh mục chung: logic nghiệp vụ và biến đổi hóa đơn. Tài khoản thứ hai chiếm tỷ lệ đáng kể lưu lượng truy cập của tin nhắn.
Thông điệp logic nghiệp vụ yêu cầu đảm bảo đầy đủ ACID và MSMQ đã chứng minh khá đầy đủ cho điều này.
điệp denormalisation:
- PHẢI được bền.
- PHẢI KHÔNG được xử lý cho đến sau khi giao dịch gốc bắt đầu hoàn tất.
- CÓ THỂ được xử lý nhiều lần.
- CÓ THỂ được xử lý ngay cả khi giao dịch gốc có quay lại, miễn là 2) được tuân thủ.
(Trong một số trường hợp cụ thể các yêu cầu độ bền có thể có thể được nới lỏng, nhưng việc xác định và xử lý những trường hợp như trường hợp ngoại lệ cho quy tắc thêm phức tạp.)
Tất cả bài viết denormalisation được xử lý trong quá trình như vậy không có cần cho IPC.
Nếu quá trình được khởi động lại, tất cả các giao dịch có thể được giả định là đã hoàn thành (cam kết hoặc cuộn lại) và tất cả các thông báo chuẩn hóa chưa được xử lý phải được khôi phục. Có thể chấp nhận các thông điệp khử nhiễu đã được xử lý. Theo như tôi có thể nói, các hệ thống nhắn tin đối phó với các giao dịch có xu hướng cung cấp sự lựa chọn giữa ACID đầy đủ hoặc không có gì, và ACID mang một hình phạt hiệu suất. Chúng tôi đang thấy các cuộc gọi đến TransactionScope # Commit(), miễn là vài trăm mili giây trong một số trường hợp tùy thuộc vào số lượng tin nhắn được gửi.
Sử dụng hàng đợi tin nhắn không giao dịch khiến thư được xử lý trước khi giao dịch gốc của họ hoàn tất, dẫn đến sự cố nhất quán.
Một phần khác của hệ thống có yêu cầu nhất quán tương tự nhưng độ phức tạp thấp hơn đã sử dụng triển khai tùy chỉnh giống như nhật ký giao dịch và tổng quát rằng trường hợp sử dụng này chắc chắn là một tùy chọn, nhưng tôi không muốn triển khai hệ thống nhắn tin giao dịch có độ trễ thấp, đồng thời, bền vững, nếu tôi không phải: P
Trong trường hợp bất kỳ ai thắc mắc, lý do yêu cầu độ bền của thông điệp khử nhiễu là phát hiện desyncs và cố định desyncs có thể cực kỳ khó và cực kỳ tốn kém tương ứng. Mọi người làm thông báo khi có điều gì đó hơi sai và làm mới trang không khắc phục được sự cố, vì vậy, bỏ qua desyncs không phải là một tùy chọn.
Quyết định tách các giao dịch bus thông báo khỏi các giao dịch cơ sở dữ liệu bằng cách thực hiện một hàng đợi trong quá trình xử lý lâu bền. Các thông điệp logic nghiệp vụ vẫn sẽ không có giá trị nhưng giao dịch mà chúng được gửi sẽ chỉ liên quan đến hàng đợi thông báo và được đảm bảo hoàn thành chỉ sau khi giao dịch cơ sở dữ liệu kích hoạt, do đó đảm bảo tính nhất quán khi được sử dụng với cách ly ReadCommitted. Hàng đợi có độ bền cao cũng sẽ được sử dụng để kích hoạt các hoạt động khử nhiễu thay vì gửi chúng qua MSMQ. –