Progettazione di un sistema distribuito per assegnare in modo univoco identificatori a ciascun nodo

-3

Diciamo che voglio progettare un sistema distribuito il cui unico scopo è assegnare ad ogni nodo in esecuzione un identificatore univoco in un piccolo intervallo (Say, 5-100 nodi in un identificatore a 10 bit). Quando viene aggiunto un nodo, dovrebbe ottenere un identificatore non utilizzato. Dobbiamo supportare più di 1024 nodi aggiunti e rimossi, quindi ovviamente è necessario un sistema per rilasciare gli identificatori.

Dai primi principi, quali tecniche sarebbero state utilizzate per implementare un sistema come questo? Come dovrebbero essere aggiunti nuovi nodi al sistema e conoscere gli altri? In che modo gli identificatori possono essere rilasciati quando un nodo si arresta in modo anomalo, garantendo al contempo che nessuno dei due nodi in esecuzione abbia lo stesso identificativo? È possibile rendere un sistema come questo tollerante ai guasti?

C'è un metodo con cui posso testare le idee che devo vedere se funzionano effettivamente in presenza di errori, ecc.?

    
posta Gavin Wahl 19.11.2018 - 19:18
fonte

1 risposta

1

L'approccio più semplice sarebbe quello di assegnare gli ID usando un registro esterno (simile a un server DHCP che assegna gli IP in una rete). In caso contrario, lasciare che un nodo leader assegni gli ID. Esistono algoritmi di consenso per la selezione di un leader del cluster e questi metodi possono anche essere in grado di gestire il fallimento del leader (con alcuni vincoli).

Se un approccio basato sui leader non è fattibile, potresti essere in grado di negoziare le assegnazioni di ID in modo peer-to-peer, specialmente se i nodi sono garantiti per cooperare (nessuna assegnazione maligna). Le modifiche di assegnazione si propagano lentamente attraverso il cluster mentre i nodi aggiornano la loro tabella di assegnazione dai loro pari, ma ciò significa anche che la conferma della maggioranza di un incarico potrebbe richiedere del tempo. Per creare un nuovo incarico, un nuovo nodo selezionerebbe un ID disponibile a caso e proporrà questa modifica. Sono possibili tre risultati: la maggior parte dei nodi conferma questa assegnazione, oppure esiste un'assegnazione in conflitto nel qual caso deve essere provato un nuovo ID, o il cluster non riesce a confermare l'assegnazione prima di una scadenza (ad esempio a causa di un errore di rete).

Se la cooperazione non può essere assicurata, il metodo di ultima istanza sarebbe raggiungere il consenso registrando le assegnazioni di ID su una blockchain privata, possibilmente usando una prova del metodo di puntata.

Si noti che in quasi tutti questi casi, sarebbe molto più semplice utilizzare GUID anziché riciclare ID a 10 bit.

    
risposta data 19.11.2018 - 21:47
fonte

Leggi altre domande sui tag