Ho dei dubbi su come implementare e mantenere la sincronizzazione tra due origini dati in un sistema distribuito. Nel mio caso, ho un servizio che controlla i lavori scaduti in un repository. Se il lavoro è scaduto, viene rimosso dal repository e accodato in una coda distribuita (l'esempio è in Python ma dovrebbe essere facile da capire):
def check_expired_jobs(self):
jobs = self._job_repository.all()
for job in [ job for job in jobs if job.has_expired() ]:
self._job_queue.enqueue(job.crawl_task)
self._job_repository.delete(job)
Le mie preoccupazioni sono che possono succedere molte cose da quando sia la coda che il repository sono fonti di dati remote. Se l'operazione della coda ha esito positivo, ma per qualsiasi motivo l'eliminazione del repository non riesce, potrei incorrere in un problema di incoerenza. Non è la prima volta che incontro un problema del genere e voglio affrontarlo nel miglior modo possibile.
Quale sarebbe la migliore prassi per mantenere sincronizzate più fonti / repository di dati?