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?
fuente
Respuestas:
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.
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):
fuente
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.
fuente
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.
fuente