There is a minor difference between Saga pattern https://microservices.io/patterns/data/saga.html and my use case below. Saga pattern is about distributed transaction when an event is happening vs my use case below is a reconciliation pattern after events have all happened.
We have a large ecosystem of microservices (300+) in a division (2000+ employees). All our services loosely follow a message driven architecture. For example in an ecommerce world we have a System A which sends a message Customer X placed an order for item Y for $4.50. Order Id is 123
. There is then a System B which may be a payment service which receives this message and actually debits the Customer's payment method (paypal/debit card etc) for $4.50 which then sends a message that Payment was received from Customer X for item Y for $4.50
. This will be received by two systems a warehouse system which will start shipping the order and perhaps a compliance system which will ensure this gets reported correctly.
Given an order id such as 123
above I am designing a reconciliation system where all the events that are expected to occur such as OrderPlaced, PaymentReceived, ItemShipped, ComplianceCheckDone have actually happened. It appears an Order follows a typical workflow and each microservice sends updates as and when parts of it are triggered.
There are multiple ways to solve this however I am looking for existing architecture best practices, blue prints, patterns (frameworks?) to solve this problem. Assume no constraint on languages, systems, compilers etc.