tráfico trafico sirven que para los estudios erlangs calcular erlang case-study

trafico - ¿Dónde se usa Erlang y por qué?



para que sirven los estudios de trafico de erlang (11)

Me gustaría saber una lista de las aplicaciones / sitios web / soluciones más comunes donde se utiliza Erlang, con éxito o no .

La explicación de por qué se utiliza en una solución específica en lugar de en otros lenguajes de programación también sería muy apreciada.

Enumerar los casos de estudio de BAD Erlang (casos en los que Erlang se usa mal) también sería interesante.


¿Para qué sirve el erlang?

http://beebole.com/en/blog/erlang/why-erlang/

http://www.aquabu.com/2008/2/15/erlang-pragmatic-studio-day-3-notes

http://www.reddit.com/r/programming/comments/9q0lr/erlang_and_highfrequency_trading/ (respuesta de jerf)

Es importante darse cuenta de que las 4 partes de Erlang: el lenguaje en sí, las VMs (BEAM, hipe) libs estándar (más módulos en github, CEAN, etc.) y el entorno de desarrollo se están actualizando / expandiendo / mejorando constantemente. Por ejemplo, recuerdo haber leído que el rendimiento de punto flotante mejoró cuando el autor de Wings3d se dio cuenta de que necesitaba mejorar (no puedo encontrar una fuente para esto). Y este tipo acaba de escribir sobre esto:

http://marian-dan.com/wordpress/?p=324

Hace un par de años, la publicidad del buscador amplio de Tim Bray y todas las personas que comienzan a hacer marcos de aplicaciones web y servidores HTTP llevan (al menos en parte) a mejorar el manejo de expresiones regulares y binarios. Y hay todo el trabajo que integra HiPE y SMP, el proyecto de dializador, las pruebas de unidades múltiples y las librerías de compilación que surgen, ...

Así que su punto dulce se está expandiendo. Lo difícil es que los documentos oficiales no pueden mantenerse al día, y la lista de correo y el volumen de la blogósfera erlang están creciendo rápidamente.



Construimos un intercambio de apuestas (también conocido como mercado de predicción) utilizando Erlang. Elegimos Erlang sobre algunos de los lenguajes financieros más tradicionales (C ++, Java, etc.) debido a la concurrencia incorporada. Los mercados funcionan de manera muy similar a las centrales telefónicas. Nuestro CTO dio una charla sobre nuestro uso de Erlang en la charla de CTO .

También usamos CouchDB y RabbitMQ como parte de nuestra pila.


Desde la Programación Erlang :

alt text http://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4WEZdE2yFFvvg

Muchas empresas están utilizando Erlang en sus sistemas de producción:

Amazon usa Erlang para implementar SimpleDB, proporcionando servicios de base de datos como parte de Amazon Elastic Compute Cloud (EC2).

Yahoo! Lo utiliza en su servicio de marcadores sociales, Delicious, que cuenta con más de 5 millones de usuarios y 150 millones de URL marcadas.

Facebook usa Erlang para potenciar el backend de su servicio de chat, manejando más de 100 millones de usuarios activos.

WhatsApp usa Erlang para ejecutar servidores de mensajería, logrando hasta 2 millones de usuarios conectados por servidor.

T-Mobile utiliza Erlang en sus sistemas de autenticación y SMS.

Motorola está utilizando Erlang en productos de procesamiento de llamadas en la industria de la seguridad pública.

Ericsson utiliza Erlang en sus nodos de soporte, utilizados en redes móviles GPRS y 3G en todo el mundo.


Las aplicaciones Erlang de código abierto más populares incluyen las siguientes:

• El modelador de subdivisión 3D Wings 3D , utilizado para modelar y texturizar mallas poligonales.

• El sistema Ejabberd , que proporciona un servidor de aplicaciones de mensajería instantánea (IM) basado en mensajería extensible y protocolo de presencia (XMPP).

• La base de datos orientada a documentos "sin esquema" de CouchDB , que proporciona escalabilidad a través de clústeres multiservidor y multinúcleo.

• La biblioteca MochiWeb que proporciona soporte para crear servidores HTTP ligeros. Se utiliza para potenciar servicios como MochiBot y MochiAds, que sirven contenido generado dinámicamente a millones de espectadores diariamente.

RabbitMQ , una implementación de protocolo de mensajería AMQP. AMQP es un estándar emergente para la mensajería empresarial de alto rendimiento.


Erlang extrae su fuerza de ser un lenguaje funcional sin memoria compartida. Por lo tanto, en mi opinión, Erlang no será adecuado para aplicaciones que requieran manipulaciones de memoria in situ. Edición de imágenes por ejemplo.


Erlang proviene de Ericsson y se utiliza en algunos de sus sistemas de telecomunicaciones.

Fuera de las telecomunicaciones, CouchDb (una base de datos orientada a documentos) es posiblemente la aplicación Erlang más conocida hasta ahora.

¿Por qué Erlang? De la overview (vale la pena leer en su totalidad):

Los modelos de documentos, vistas, seguridad y replicación, el lenguaje de consulta de propósito especial, el diseño de disco eficiente y robusto y la naturaleza concurrente y confiable de la plataforma Erlang están todos cuidadosamente integrados para un sistema confiable y eficiente.


Estamos utilizando Erlang para proporcionar la potencia muscular de back-end para nuestro juego multijugador basado en navegador, en tiempo real Pixza . No utilizamos Flash ni ningún otro complemento de terceros, aunque el juego es multijugador en tiempo real. En su lugar usamos técnicas puras JS y COMET. Y Erlang apoya la "realidad real" de Pixza.


Estoy trabajando para wooga, una compañía de juegos sociales y usamos Erlang para algunos de nuestros backends del juego (básicamente http apis para millones de usuarios diarios) y servicios auxiliares como el proveedor de notificaciones push de ios, pagos, etc.

Creo que realmente brilla en las tareas relacionadas con la red y hace que sea bastante sencillo estructurar e implementar servicios de red simples y complejos por igual. La distribución, la tolerancia a fallas y el rendimiento son fáciles de lograr porque Erlang ya tiene algunos de los ingredientes clave incorporados y se están utilizando durante mucho tiempo en infraestructura de producción crítica. Así que no es como "la nueva tecnología de cadera cosa 0.0.2 alfa".

Sé que otras compañías de juegos también usan Erlang. Deberías poder encontrar presentaciones en slideshare sobre eso.


La lista de aplicaciones más comunes para Erlang está cubierta (CouchDb, ejabberd, RabbitMQ, etc.), pero me gustaría contribuir con lo siguiente.

La razón por la que se utiliza en estas aplicaciones proviene de la fuerza central de Erlang: administrar la disponibilidad de las aplicaciones.

Erlang fue construido desde cero para el entorno de telecomunicaciones que requiere que los sistemas cumplan con al menos 5x9 de disponibilidad (99,999% de tiempo de actividad anual). ¡Esta cifra no deja mucho espacio para el tiempo de inactividad durante un año! Por esta razón, principalmente, Erlang viene cargado con las siguientes características (no exhaustivas):

  • Escalabilidad horizontal (capacidad de distribuir trabajos a través de los límites de la máquina fácilmente a través de comunicaciones internas y internas de la máquina). La base de datos integrada (Mnesia) también se distribuye por naturaleza.

  • Escalabilidad vertical (capacidad de distribuir trabajos a través de recursos de procesamiento en la misma máquina): SMP se maneja de forma nativa.

  • Intercambio en caliente de código : la capacidad de actualizar / actualizar el código en vivo durante las operaciones

  • Asíncrono : el mundo real es asíncrono, por lo que Erlang fue creado para dar cuenta de esta naturaleza básica. Una característica que contribuye a este requisito: los procesos "gratuitos" de Erlang (> 32000 pueden ejecutarse simultáneamente).

  • Supervisión : muchas estrategias diferentes para la supervisión de procesos con estrategias de reinicio, umbrales, etc. Ayuda a recuperarse de casos / sobrecargas en las esquinas con mayor facilidad mientras mantiene los rastros de los problemas para su posterior solución de problemas, análisis post mortem, etc.

  • Administración de recursos : estrategias de programación, monitoreo de recursos, etc. Tenga en cuenta que el programador de procesos predeterminado opera con escalamiento O (1).

  • Depuración en vivo : la capacidad de "iniciar sesión" en nodos en vivo a voluntad ayuda a las actividades de resolución de problemas. La depuración se puede realizar en vivo con acceso completo al estado de ejecución de cualquier proceso. Además, las herramientas de informe de errores integradas son muy útiles (pero a veces un tanto difíciles de usar).

Por supuesto, podría hablar sobre sus raíces funcionales, pero este aspecto es algo ortogonal al objetivo principal (alta disponibilidad). El componente principal de la naturaleza funcional que contribuye generosamente al objetivo objetivo es, OMI: "no compartir nada". Esta característica ayuda a contener los "efectos secundarios" y reduce la necesidad de mecanismos de sincronización costosos.

Supongo que todas estas características ayudan a extender el caso para usar Erlang en aplicaciones críticas para el negocio.

Algo que Erlang no es realmente bueno en el procesamiento de grandes bloques de datos.


Me di cuenta de que esto está en el proceso de escribir un informe: Erlang en Acoustic Ray Tracing .

Es un informe de experiencia sobre el intento de un grupo de investigación de usar Erlang para el rastreo de rayos acústicos. Descubrieron que si bien era más fácil escribir el programa, tenía menos errores, etc. Escale peor, y funcionó 10 veces más lento que un programa C comparable. Por lo tanto, un lugar donde puede no ser adecuado es en los escenarios de uso intensivo de CPU.

Sin embargo, tenga en cuenta que las personas que escribieron el documento se encontraban en las etapas de aprendizaje de Erlang por primera vez, y es posible que no hayan conocido los procedimientos de desarrollo adecuados para Erlang con uso intensivo de CPU.


ejabberd es una de las aplicaciones erlang más conocidas y con la que aprendí erlang.

Creo que es uno de los proyectos más interesantes para aprender erlang porque realmente se basa en la fuerza de erlang. (Sin embargo, algunos argumentarán que no es OTP, pero no te preocupes, todavía hay un gran código dentro ...)

Por qué ?

Un servidor XMPP (como ejabberd) puede verse como un enrutador de alto nivel, enrutando mensajes entre usuarios finales. Por supuesto, hay otras características, pero este es el aspecto más importante de un servidor de mensajería instantánea. Tiene que enrutar muchos mensajes simultáneamente y manejar muchas conexiones TCP / IP.

Así que tenemos 2 características:

  • manejar muchas conexiones
  • enrutar mensajes dados algunos aspectos del mensaje

Estos son ejemplos donde brilla erlang.

manejar muchas conexiones

Es muy fácil construir servidores TCP / IP no bloqueables y escalables con erlang. De hecho, fue diseñado para resolver este problema. Y dado que puede generar cientos de miles de procesos (y no subprocesos , es un enfoque de no compartir, que es más simple de diseñar), ejabberd está diseñado como un conjunto de procesos erlang (que pueden distribuirse en varios servidores):

  • proceso de conexión del cliente
  • proceso de enrutador
  • proceso de chat
  • procesos de servidor a servidor

Todos ellos intercambiando mensajes.

enrutar mensajes dados algunos aspectos del mensaje

Otra característica muy amable de erlang es la coincidencia de patrones . Se utiliza en todo el idioma.

Por ejemplo, en lo siguiente:

access(moderator, _Config)-> rw; access(participant, _Config)-> rw; access(visitor, #config{type="public"})-> r; access(visitor, #config{type="public_rw"})-> rw; access(_User,_Config)-> none.

Eso es 5 versiones diferentes de la función de access . Erlang seleccionará la versión más adecuada dados los argumentos recibidos. ( Config es una estructura de tipo #config que tiene un atributo de type ).

Eso significa que es muy fácil y mucho más claro que encadenar if/else o switch/case para establecer reglas de negocios.

Para concluir

Escribir servidores escalables, eso es todo el punto de erlang. Todo está diseñado haciendo esto fácil. En las dos características anteriores, agregaría:

  • actualización de código caliente
  • mnesia , base de datos relacional distribuida (incluida en la distribución base)
  • mochiweb , en el que la mayoría de los servidores http erlang están construidos en
  • Soporte binario (descifrando y codificando el protocolo binario más fácil que nunca)
  • una gran comunidad con grandes proyectos de código abierto ( ejabberd , couchdb pero también webmachine , riak y una gran cantidad de bibliotecas muy fáciles de incrustar)

Menos LOCs

También hay este artículo de Richard Jones. Reescribió una aplicación de C ++ a erlang: 75% menos líneas en erlang.