Sto cercando di arricchire un sistema di e-commerce utilizzando microservices (.NET Core e Kubernetes), event sourcing (Kafka) e CQRS. Il caso d'uso particolare a cui stavo pensando è il seguente.
Esiste un microservizio di inventario progettato per utilizzare CQRS. Gli aggiornamenti vengono inseriti in Kafka come eventi, che il microservizio di inventario consuma per aggiornare la sua vista materializzata e le letture vengono eseguite direttamente sulla vista materializzata. Il problema che sto cercando di risolvere è come gestire gli ordini. Nel mio attuale design, gli ordini vengono creati in un microservizio di ordine che emette quindi eventi che il microservizio di inventario consumerebbe e detrarre l'inventario che faceva parte dell'ordine. Tuttavia, c'è una condizione di gara qui. È possibile che un altro acquirente acquisti gli stessi prodotti prima che l'inventario dall'ordine precedente possa essere detratto.
Come si gestisce questo tipo di operazione transazionale che si estende su microservizi? Ho letto che si dovrebbe verificare lo stock rispetto allo stream anziché la vista materializzata (poiché il flusso è la vera fonte della verità), ma sono un po 'confuso su come sarebbe pratico (dato che il flusso potrebbe essere enorme) . Se ho intenzione di farlo, allora perché ho anche la visione materializzata se non posso fidarmi?