2009-06-09 8 views
12

Una de las características del modelo de actor en Erlang es distribución transparente. A menos que malinterprete, cuando envía mensajes entre actores, teóricamente no debe suponer que están en el mismo espacio de proceso o incluso ubicados en la misma máquina física.¿Cómo afecta el soporte de Erlang a la distribución * transparente * de los actores?

Siempre he tenido la impresión de que los sistemas distribuidos y tolerantes a fallos requieren un diseño de aplicación cuidadoso para resolver problemas inherentes alrededor de ordering/causality y consensus (entre otros).

Estoy bastante seguro de que Erlang no promete resolver estas clases de problemas de forma transparente, así que mi pregunta es, ¿cómo pueden los desarrolladores de Erlang lidiar con esto? ¿Diseñas tu aplicación como si todos los actores estuvieran en el mismo espacio de proceso y luego solo resolvieran problemas de distribución cuando llega el momento de distribuirlos realmente?

Si es así, es este transparente característica de distribución de de Erlang realmente sólo preocupado con el protocolo de alambre utilizado para la mensajería remoto y no realmente transparente en el sentido de que una verdadera aplicación distribuida todavía requiere un diseño cuidadoso en la capa de aplicación?

Respuesta

3

Tiene la certeza de que erlang no resuelve intrínsecamente los problemas de Ordenar/Causalidad o Consenso. Lo que erlang resume para usted es la diferencia entre enviar mensajes a nodos locales o remotos.

No estoy seguro de que sería realmente posible resolver esos problemas en un diseño de lenguaje. Eso más apropiadamente pertenece en un marco. El marco OTP tiene algunas herramientas para ayudar con eso. Realmente, depende un tanto del problema específico que estás resolviendo.

Para un ejemplo de una mirada puesta en práctica de Erlang VectorClock en distributerl Erlang OTP supervisores también podrían proporcionar parte de la infraestructura necesaria para el consenso pero hay algunos pensaron que el consenso es una imposibilidad en mensajes asíncronos pasando sistemas distribuidos. Consulte su página wiki referenciada para obtener información adicional sobre eso.

3

Erlang, de hecho, resuelve estos problemas de forma transparente. Puede hacerlo porque es un lenguaje funcional con variables inmutables (asignación única). Utiliza el Actor model para concurrencia, y fue diseñado específicamente para permitir el intercambio en caliente de código y programación concurrente sin que el programador tenga que preocuparse por synchronization.

En realidad, el Wikipedia article tiene una muy buena descripción de esto. Entiendo que Ericsson inventó el lenguaje como una forma práctica de programar conmutadores telefónicos masivamente paralelos.

+1

Re: sincronicidad, me refería a relaciones causales y problemas de ordenamiento de eventos que surgen en sistemas distribuidos con tolerancia a fallas más que "sincronización de datos". Veré si puedo aclarar esa parte un poco. –

3

Erlang promete esas cosas (http://www.sics.se/~joe/thesis/armstrong_thesis_2003.pdf sección 3.1 (39-40)):

  • Todo es un proceso.
  • Los procesos están muy aislados.
  • La creación y destrucción de procesos es una operación ligera.
  • La transmisión de mensajes es la única forma en que los procesos interactúan.
  • Los procesos tienen nombres únicos.
  • Si conoce el nombre de un proceso, puede enviarle un mensaje.
  • Los procesos no comparten recursos.
  • El manejo de errores no es local.
  • Los procesos hacen lo que se supone que deben hacer o fallan.

y el resto es decisión suya. Si desea saber por qué, consulte el capítulo 2. En breve, puede enviar un mensaje para procesar si conoce su PID, incluso si está en otra pieza de HW. No puede estar seguro si el mensaje llega a menos que reciba una respuesta con un secreto en común. Puede estar seguro de que recibirá un mensaje de error cuando falle el proceso cuando lo monitoree (o lo vincule). Esos son elementos básicos con los que puedes construir lo que quieras.

+1

Gracias por el enlace. Creo que reitera mi punto de vista de que la "distribución transparente" de Erlang es realmente solo "mensajería remota transparente". Estoy de acuerdo con @ {Jeremy Wall} en que hay problemas que surgen cuando distribuyes sistemas que no se pueden resolver de forma transparente. Por ejemplo, los descritos en este documento: http://research.sun.com/techrep/1994/smli_tr-94-29.pdf –

Cuestiones relacionadas