Devo creare un data store per le transazioni che soddisfano i seguenti requisiti:
- Una 'transazione' è in effetti una macchina a stati che si sposta attraverso un numero di stati durante il suo ciclo di vita ei messaggi di dati in entrata rappresentano le modifiche allo stato di una transazione (ad esempio, le mosse della transazione da 'Created' a 'Open' a 'Billed' )
- I dati in arrivo vengono estratti da API di terze parti o ricevuti tramite chiamate all'API pubblica del sistema.
- Ogni messaggio di dati in entrata è in un formato proprietario che deve essere trasformato in un unico formato coerente e memorizzato
- La visualizzazione coerente dei dati della transazione viene quindi pubblicata sui client in due modi:
-
- Tramite un endpoint REST statico
-
- Tramite un feed in tempo reale degli eventi di cambiamento
Il sistema deve essere resiliente e tollerante ai guasti: è vietato abbandonare eventi o modifiche a una transazione.
I miei pensieri sono:
- Avere un livello di input molto semplice per eliminare i messaggi in arrivo su una coda
- Un livello dell'adattatore dovrebbe leggere dalla coda per analizzare, trasformare e archiviare i messaggi in arrivo
- L'API statica è relativamente banale
- Non sono sicuro di come progettare l'aspetto in tempo reale.
Alcune domande / considerazioni sulla progettazione:
- Il livello dell'adattatore dovrebbe pubblicare eventi dopo aver archiviato i dati, oppure si tratta di problemi di missaggio?
- Devo memorizzare le modifiche alla transazione come flusso di eventi e materializzare una vista per qualsiasi domanda?
- Qualcuno può indicarmi qualche architettura di riferimento per sistemi simili?