Questa è la sequenza comune di due componenti distribuiti nella nostra applicazione Java:
1 A sends request to B
2 B starts some job J in parallel thread
3 B returns response to A
4 A accepts response
5 Job finishes after some time
6 Job sends information to A
7 A receives response from a Job and updates
Questo è lo scenario ideale, assumendo che tutto funzioni. Certo, la vita reale è piena di fallimenti. Ad esempio, uno dei casi peggiori potrebbe essere se #6
fallisce semplicemente a causa della rete: il lavoro è stato eseguito correttamente, ma A
non ne sa nulla.
Sto cercando un approccio leggero su come gestire gli errori in questo sistema. Tieni presente che un sacco di componenti, quindi il clustering di tutti solo a causa della gestione degli errori non ha senso. Successivamente, ho abbandonato l'utilizzo di qualsiasi memoria distribuita / repo che verrebbe di nuovo installata su ciascun componente per lo stesso motivo.
I miei pensieri vanno nella direzione di avere uno stato assoluto su un B e di non avere mai uno stato persistente su A
. Ciò significa quanto segue:
- prima di
#1
contrassegno suA
che l'unità di lavoro in cui cambia sta per iniziare - solo
B
potrebbe deselezionare questo stato. -
A
può recuperare informazioni suB
in qualsiasi momento, per aggiornare lo stato. - nessuna nuova modifica sulla stessa unità può essere invocata su
A
.
cosa ne pensi? C'è un modo leggero per domare gli errori nel sistema di questo tipo?