La tolerancia a fallas de Erlang (según tengo entendido) incluye el uso de procesos de supervisor para vigilar los procesos de los trabajadores, por lo que si un trabajador muere, el supervisor puede poner en marcha uno nuevo.¿Cómo supervisan los procesos los procesos del supervisor? ¿Se puede hacer lo mismo en la JVM?
¿Cómo hace Erlang este monitoreo, especialmente en un escenario distribuido? ¿Cómo puede estar seguro de que el proceso realmente ha muerto? ¿Hace latidos del corazón? ¿Hay algo incorporado en el entorno de tiempo de ejecución? ¿Qué sucede si un cable de red está desconectado? ¿Asume que los otros procesos han muerto si no se puede comunicar con ellos? etc.
Estaba pensando en cómo lograr la misma tolerancia a fallos, etc. reclamada por Erlang en la JVM (en Java o Scala, por ejemplo). Pero no estaba seguro si requería soporte integrado en la JVM para hacerlo tan bien como Erlang. Sin embargo, no había encontrado una definición de cómo lo hace Erlang como punto de comparación.
Gracias, eso tiene mucho sentido. Parece una cosa común que el envío de mensajes entre máquinas es diferente al envío entre procesos locales (mayores gastos generales, más razones por las que puede fallar, etc.). Así que codifique su aplicación para que lo sepa (no hay una solución mágica para hacer las llamadas locales/remotas iguales, así que no intente). Esto significa que un modelo similar en la JVM es ciertamente posible. Solo supervise los procesos locales/hilos/fibras/actores/lo que sea, y codifique en su aplicación ping de otros nodos (y qué hacer si no puede alcanzar uno). –