Nel nostro sistema avevamo in passato un fornitore di dati esterni (chiamiamolo sorgente) che inviava heartbeat regolari a un'applicazione java (chiamalo client). Se l'heartbeat non è riuscito, il sistema si è spento (per evitare di servire dati obsoleti in un'applicazione critica). Questo è stato semplice in quanto sia i dati che l'heartbeat utilizzavano lo stesso canale, rendendolo altamente affidabile.
Da allora ci siamo spostati su un sistema distribuito con client java suddivisi in diversi microservizi e dati che scorrevano in parte attraverso le code kafka tra i servizi.
La cosa importante - il sistema più a monte (chiamalo destinazione) dovrebbe comunque ricevere in modo affidabile un battito cardiaco.
Se continuiamo a inviare l'heartbeat tramite un canale separato, qualsiasi guasto in uno dei microservices o nella coda di kafka interromperà il flusso di dati verso la destinazione, d'altra parte, l'heartbeat continuerà a scorrere senza interruzioni - in caso contrario scopo completo di avere un battito cardiaco
Una delle soluzioni a cui sto pensando è quella di spingere gli heartbeat attraverso tutti i servizi e le code di kafka in modo che prendano lo stesso percorso dei dati stessi. In ogni caso, quali sono i migliori modelli / criteri di progettazione per reimplementare l'heartbeat in un sistema così distribuito?