¿Qué hace que Erlang sea adecuado para aplicaciones en la nube?

9

Estamos comenzando un nuevo proyecto e implementando en la creación de instancias de nuestras corporaciones de una nube de código abierto (ver http://www.openstack.org/ ). El proyecto es herramientas de seguridad para nuestra corporación. Actualmente ejecutamos muchos cientos de servidores dedicados para herramientas de seguridad y los estamos trasladando a la instancia de OpenStack de nuestras corporaciones.

Otros proyectos en mi empresa actualmente usan erlang en varias aplicaciones de servidor distribuido, y otras preguntas y respuestas señalan que erlang se usa en varios servicios populares en la nube. Estoy tratando de convencer a otros para que consideren dónde podría ser aplicable en nuestro proyecto.

¿Cuáles son los puntos fuertes de erlang para la programación en la nube? ¿Dónde están las áreas en las que es particularmente apropiado usar erlang?

Duncan
fuente
15
Defina "nube" y podemos decirle lo que tal vez quiera saber. El término "nube" es hablar de marketing y significa algo diferente para cada persona que lo usa.
Pensé que decir OpenStack Cloud sería una definición suficiente de lo que estamos implementando. Ver openstack.org . ¿O estás solicitando más información sobre el proyecto? Son herramientas de seguridad para nuestra corporación. Actualmente ejecutamos muchos cientos de servidores dedicados para herramientas de seguridad y los estamos trasladando a la instancia de OpenStack de nuestras corporaciones.
Duncan
Edité la pregunta para mejorarla y eliminar la preocupación de "marketing". Mi problema es seleccionar la mejor herramienta para el trabajo. Soy un novato en stackexchange, así que no tengo el truco.
Duncan
1
específicamente el término "nube" es nebuloso y no significa nada específico, es hablar de marketing, aún no ha definido lo que realmente califica algo como una aplicación en la nube . Personalmente, sé lo que sé lo que creo que significa, estoy seguro de que no es lo que crees que significa , dada la pregunta.
"el término 'nube' es nebuloso", ¡bueno! Significa algo virtual y debe especificar si ese "algo" es software, sistema operativo, una sola máquina, varias máquinas y redes, o algo más.
GlenPeterson

Respuestas:

8

Aparte del hecho de que Erlang se desarrolló específicamente para ejecutarse en situaciones concurrentes / paralelizadas / distribuidas, las dos técnicas principales que emplea para hacer esto posible son:

Sin efectos secundarios:

Esto significa que cuando le da a una función una pieza de datos para ejecutar, no afectará, salvo en casos muy estrictos, cualquier otra cosa en el sistema / proceso en ejecución. Esto significa que si ejecuta una función 300 veces a la vez simultáneamente, ninguna de esas 300 ejecuciones de la función afectará a ninguna de las otras.

La técnica de implementación para garantizar que no haya efectos secundarios se llama "inmutabilidad", lo que significa, en términos generales, que no se puede mutar (cambiar). Esto significa que tan pronto como cree una variable, el valor de esa variable no podrá modificarse. Erlang implementa este comportamiento con "asignación única", de modo que después de asignar un valor a una variable, no puede asignarle un valor nuevamente.

X = 1.
X = 2. // This is not a valid operation

Esto garantiza que ningún código pueda cambiar accidentalmente el valor de X causando una condición de carrera, por lo tanto, es inherentemente seguro para subprocesos y el uso concurrente se vuelve trivial. Este es un comportamiento muy poco común entre los lenguajes de software y la mayor forma en que Erlang logra ser tan adecuado para la ejecución concurrente.

El modelo del actor:

Esta es una forma particular de modelado que ha demostrado que hace que la implementación y administración del procesamiento concurrente sea muy simple para los desarrolladores. Directamente de wikipedia (http://en.wikipedia.org/wiki/Actor_model):

El modelo de actor adopta la filosofía de que todo es actor. Esto es similar a la filosofía de todo es un objeto utilizado por algunos lenguajes de programación orientados a objetos, pero difiere en que el software orientado a objetos generalmente se ejecuta secuencialmente, mientras que el modelo de actor es inherentemente concurrente. Un actor es una entidad computacional que, en respuesta a un mensaje que recibe, puede concurrentemente: enviar un número finito de mensajes a otros actores; crear un número finito de nuevos actores; designe el comportamiento que se utilizará para el siguiente mensaje que reciba. No se supone una secuencia de las acciones anteriores y podrían llevarse a cabo en paralelo. El desacoplamiento del remitente de las comunicaciones enviadas fue un avance fundamental del modelo de actor que permite la comunicación asincrónica y las estructuras de control como patrones de mensajes que pasan.

Jimmy Hoffa
fuente
Sobre "Sin efectos secundarios", usted dice "Este es un comportamiento muy poco común entre los lenguajes de software". Estoy un poco sorprendido por esto. ¿No pueden Java y C # hacer esto hoy? ¿Qué idiomas sabes que tienen que tener efectos secundarios al llamar a una función?
NoChance
3
@EmmadKareem No es una cuestión de si se puede escribir un programa y sin efectos secundarios; como notó, puede hacer esto en Java o C #. Es si el valor predeterminado es libre de efectos secundarios y si hay compatibilidad del compilador para esto. En Java no puede, por ejemplo, decirle al compilador "este método no tiene efectos secundarios". ¡Esto a su vez significa que el compilador no puede advertirte cuando estás rompiendo las reglas!
Andres F.
@EmmadKareem No digo que sea imposible escribir C # o Java sin efectos secundarios (aunque es extremadamente raro), sino que digo que muy pocos lenguajes de programación tienen políticas estrictas integradas en el lenguaje que segregan las funciones con efectos secundarios de los que no lo tienen.
Jimmy Hoffa
Sería genial si Java tuviera una anotación @NoSideEffects para poner un método para decirle al compilador que imponga efectos secundarios para ese método. En mi propio código, me gusta pensar que es común que los métodos no tengan efectos secundarios. Claro, algunos métodos tienen que ser mutadores en un lenguaje como Java, pero muchos no. Especialmente si prefieres objetos inmutables en tus diseños.
GlenPeterson
Jimmy Hoffa y @AndresF., Gracias por sus aclaraciones.
NoChance
9

Erlang es particularmente fuerte en computación concurrente / paralelizada. De hecho, fue diseñado originalmente para ese mismo propósito. No tiene nada que ver con la nube, excepto que a menudo, las aplicaciones pesadas en cálculos se paralelizan e implementan en instancias de "nube" para facilitar el crecimiento / reducción de la capacidad bajo demanda.

El resto es solo hablar de marketing.

papilla
fuente
77
Erlang fue diseñado para computación tolerante a fallas . Es solo que la informática distribuida es un requisito previo para eso (¿cómo puede devolver un resultado de manera confiable si alguien derrama café accidentalmente sobre su única máquina, necesita al menos dos máquinas?) Y la computación paralela y concurrente son solo casos especiales de computación distribuida, por lo que Erlang También pasa a ser bueno en eso. Pero para eso no fue diseñado.
Jörg W Mittag
1
@ JörgWMittag Mientras separemos los pelos ... sí, su propósito era lograr la tolerancia a fallas. Lo logró a través de la paralelización. Fue diseñado para implementar esto en el conmutador de telefonía digital AX que llevaba dos tuberías de cálculo paralelas aisladas con una que funcionaba en espera activa.
pap
1
Sí, lo siento, debería haber sido más claro: la computación en la nube se distribuye más o menos por definición, y a menudo (no siempre, pero generalmente) se implementa por grupos de máquinas económicas y, lo que es más importante, poco confiables , pero está diseñada para ofrecer un servicio confiable. Eso es lo que hace que Erlang encaje tan bien.
Jörg W Mittag
3

Un aspecto de la nube que es diferente de las implementaciones de hardware tradicionales es la facilidad con la que puede activar nuevas instancias cuando sea necesario. La capacidad de monitorear otros nodos y procesos en otros nodos hace que sea relativamente simple construir sistemas altamente dinámicos que puedan agregar o eliminar vms y administrarlos según sea necesario.

Esto es particularmente cierto si está construyendo su sistema utilizando el marco OTP (Open Telecom PLatform) de erlang, que proporciona estructura y mecanismos (árboles de supervisión) para apoyar la construcción de algunas cosas bastante sofisticadas con mucho menos efecto de lo que imagina. Erlang maneja todas las partes difíciles para que no tenga que hacerlo.

Garry Hodgson
fuente