Coordinare l'accesso alle risorse tra i lavoratori

3

Ho un database a cui accedono diversi server, chiamiamoli lavoratori. Questi lavoratori prendono un elemento dal database, eseguono alcune operazioni su di esso e quindi lo aggiornano nuovamente nel database. Anche i lavoratori sono volatili, possono esserne in numero e possono morire / iniziare in qualsiasi momento.

Il mio problema è il coordinamento delle risorse tra i lavoratori. Voglio assicurarmi che non ci siano 2 lavoratori che lavorano sullo stesso articolo. Voglio anche assicurarmi che se un lavoratore muore mentre lavorava su un oggetto, questo elemento verrà rilasciato su un altro server (immediatamente o tramite timeout).

Come posso garantire questo coordinamento? So di poter implementare alcune logiche personalizzate utilizzando le transazioni di database e alcuni tipi di rilevamento / monitoraggio dei server.

Questo sembra un problema comune, ma sto facendo fatica a cercare su Google una soluzione, non so quali termini cercare.

    
posta nmat 15.09.2015 - 22:21
fonte

1 risposta

1

Perché non utilizzare la sincronizzazione del database integrata? Tutti i database SQL di classe enterprise sono compatibili con ACID, come la maggior parte dei database NoSQL.

  1. Il lavoratore acquisisce un compito. Potrebbe essere necessario utilizzare una sintassi specifica per DB per questo:

    UPDATE task SET status = 'in process', worker = (ID di questo worker) WHERE status = 'new' LIMIT 1

    SELECT * FROM task WHERE status = 'in process' AND worker = (ID di questo worker)

  2. Il lavoratore lavora sull'attività: può aggiornare periodicamente un timestamp sull'attività per indicare che non sta scadendo.

  3. Il lavoratore termina: aggiorna l'attività per impostare il suo stato su complete e salva i risultati ovunque debbano andare.

Avrei un lavoro in esecuzione in background per cercare attività scadute e ripristinarle. Ciò sarebbe probabilmente più semplice dell'aggiunta di logica aggiuntiva alla query SELECT .

Ci sono probabilmente soluzioni esistenti là fuori per fare questo. L'utilizzo di questi può essere più semplice rispetto a quello proprio a seconda della complessità della gestione delle attività e delle esigenze. Nello specifico, qualcosa come Hadoop probabilmente farà il lavoro e sarà eccessivo per ciò che descrivi qui.

    
risposta data 16.09.2015 - 00:07
fonte

Leggi altre domande sui tag