Sau khi thực hiện một nghiên cứu thêm chút, tôi stumbled khi này bài báo từ mà tôi đã kéo một số dấu ngoặc kép ra rằng tôi nghĩ là hữu ích cho những gì tôi muốn đạt được (và cho bất kỳ độc giả trong tương lai). Điều này cung cấp một cách để áp dụng một mô hình lập trình phản ứng trên một mô hình lập trình bắt buộc.
Tìm nguồn cung ứng sự kiện
Ý tưởng ở đây là đại diện cho sự chuyển đổi trạng thái của mọi ứng dụng dưới dạng một sự kiện bất biến. Các sự kiện sau đó được lưu trữ dưới dạng nhật ký hoặc nhật ký khi chúng xảy ra (còn được gọi là 'cửa hàng sự kiện'). Chúng cũng có thể được truy vấn và lưu trữ vô thời hạn, nhằm thể hiện trạng thái của ứng dụng, nói chung, phát triển theo thời gian.
Điều này giúp đạt được điều đó là nếu một dịch vụ siêu nhỏ đi xuống nhưng các sự kiện khác liên quan đến nó đang được xuất bản và các sự kiện được sử dụng bởi các dịch vụ khác của microservice, khi dịch vụ đó xuất hiện, nó có thể tham khảo điều này event store
để lấy tất cả các sự kiện mà nó đã bỏ lỡ trong suốt thời gian nó đi xuống.
Apache Kafka là nhà môi giới sự kiện
Hãy xem xét việc sử dụng Apache Kafka có thể lưu trữ và gửi hàng ngàn sự kiện mỗi giây và có các cơ chế sao chép và chống lỗi tích hợp. Nó có một kho lưu trữ các sự kiện liên tục có thể được lưu trữ trên đĩa vô thời hạn và được tiêu thụ bất cứ lúc nào (nhưng không bị xóa) khỏi Chủ đề (hàng đợi ưa thích của Kafka) đã được gửi tới.
Các sự kiện sau đó được chỉ định bù đắp mà xác định chúng một cách đơn nhất trong Chủ đề - Kafka có thể tự quản lý các khoản bù trừ đó, dễ dàng cung cấp cho nhiều nhất một lần một hoặc một ít ngữ nghĩa giao hàng, nhưng chúng cũng có thể được đàm phán khi một người tiêu dùng sự kiện tham gia Chủ đề , cho phép microservice bắt đầu tiêu thụ các sự kiện từ bất kỳ nơi nào tùy ý - thường là từ nơi người tiêu dùng rời đi. Nếu phần bù sự kiện được tiêu thụ cuối cùng được duy trì giao dịch trong bộ lưu trữ cục bộ của dịch vụ khi usecase 'hoàn thành thành công', phần bù đó có thể dễ dàng được sử dụng để đạt được một chính xác một lần ngữ nghĩa phân phối sự kiện.
Trên thực tế, khi người tiêu dùng tự nhận mình là Kafka, Kafka sẽ ghi lại những tin nhắn nào được gửi đến người tiêu dùng nào để nó không phục vụ lại.
Sagas
Đối với các usecase phức tạp hơn, nơi thực sự cần liên lạc giữa các dịch vụ khác nhau, trách nhiệm hoàn thành usecase phải được công nhận - usecase được phân cấp và chỉ kết thúc khi tất cả các dịch vụ liên quan thừa nhận nhiệm vụ của họ đã hoàn thành thành công, nếu không thì toàn bộ usecase phải thất bại và các biện pháp khắc phục phải được kích hoạt để khôi phục lại bất kỳ trạng thái cục bộ không hợp lệ nào.
Đây là khi saga đi vào chơi. Một saga là một chuỗi các giao dịch địa phương. Mỗi giao dịch cục bộ cập nhật cơ sở dữ liệu và xuất bản một thông báo hoặc sự kiện để kích hoạt giao dịch cục bộ tiếp theo trong saga. Nếu một giao dịch cục bộ thất bại vì nó vi phạm quy tắc kinh doanh thì saga thực hiện một loạt các giao dịch bù trừ hoàn tác các thay đổi được thực hiện bởi các giao dịch địa phương trước đó. Đọc này để biết thêm.