La tolleranza ai guasti di Erlang (a quanto ho capito) include l'uso dei processi di supervisione per tenere d'occhio i processi di lavoro, quindi se un lavoratore muore, il supervisore può avviarne uno nuovo.In che modo i processi di supervisione controllano i processi? Lo stesso può essere fatto sulla JVM?
In che modo Erlang esegue questo monitoraggio, soprattutto in uno scenario distribuito? Come può essere sicuro che il processo sia veramente morto? Fa battiti del cuore? C'è qualcosa di costruito nell'ambiente di runtime? Cosa succede se un cavo di rete è scollegato? Si presume che gli altri processi siano morti se non è in grado di comunicare con loro? ecc.
Stavo pensando a come ottenere la stessa tolleranza ai guasti ecc. rivendicata da Erlang nella JVM (in Java o Scala). Ma non ero sicuro di aver bisogno del supporto integrato nella JVM per farlo, così come Erlang. Non avevo ancora trovato una definizione di come Erlang lo fa ancora come un punto di confronto.
Grazie, ha molto senso. Sembra una cosa comune che l'invio di messaggi tra macchine sia diverso dall'invio tra processi locali (maggiori costi generali, più motivi per cui può fallire, ecc.). Quindi codifica la tua applicazione per sapere su questo (non c'è un proiettile d'argento per rendere le chiamate locali/remote lo stesso, quindi non provare). Ciò significa che un modello simile nella JVM è certamente possibile. Supervisiona solo processi/thread/fibre/attori/qualsiasi cosa locali e codice nel ping dell'applicazione di altri nodi (e cosa fare se non puoi raggiungerne uno). –