2010-07-02 12 views
10

Deseo escribir una aplicación maestro-esclavo en Erlang. Estoy pensando en las siguientes cosas que necesito de la arquitectura:Inicio de nodos Erlang remotos

  • los esclavos no deben morir cuando el maestro muere, sino más bien tratar de volver a conectar con ella mientras el maestro está abajo

  • el maestro debe iniciarse automáticamente los nodos remotos si no se conectan de forma automática o están abajo (probablemente el comportamiento supervisor OTP)

¿hay un comportamiento orientado OTP para hacer esto? Sé que puedo iniciar nodos remotos con slave:start_link() y puedo monitorear los nodos con erlang:monitor(), pero no sé cómo se puede incorporar esto en un comportamiento gen_server.

+0

Las funciones erlang: monitor_node/2 y erlang: monitor_node/3 también están disponibles. –

+2

¿Has visto la sección de aplicaciones distribuidas? http://www.erlang.org/doc/design_principles/distributed_applications.html – Zed

+0

Necesitamos una terminología clara aquí. ¿Desea distribuir su aplicación en varias máquinas virtuales de erlang (que se ejecutan múltiples nodos) o desea construir un árbol de procesos tolerante a errores? No está completamente claro de tu pregunta. –

Respuesta

1

Acepto los comentarios sobre el uso de erlang: monitor_node y el uso de aplicaciones distribuidas.

No se puede usar simplemente el módulo esclavo para lograr eso, indica claramente "Todos los nodos esclavos que son iniciados por un maestro terminan automáticamente cuando el maestro termina".

Actualmente no existe un comportamiento OTP para hacerlo tampoco. Los árboles de supervisión son jerárquicos; parece que está buscando algo donde exista una jerarquía en términos de lógica de aplicación, pero el desove se realiza de igual a igual (o de forma individual, dependiendo de su punto de vista).

Si va a utilizar varias máquinas virtuales de Erlang, debe considerar cuidadosamente cuántas ejecuta, ya que una gran cantidad de ellas puede causar problemas de rendimiento debido a que el sistema operativo intercambia los procesos del sistema operativo dentro y fuera. Una regla empírica para obtener el mejor rendimiento es apuntar a tener no más de un proceso de sistema operativo (es decir, una máquina virtual de Erlang) por núcleo de CPU.

Cuestiones relacionadas