¿Dónde se usa Erlang y por qué? [cerrado]

258

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

También sería muy apreciado explicar por qué se utiliza en una solución específica en lugar de otros lenguajes de programación.

También sería interesante enumerar los estudios de caso de BAD Erlang (casos en los que se usa incorrectamente Erlang).

Roberto Aloi
fuente
13
El problema con los estudios de caso MALOS es que realmente no se hacen famosos ni ven la luz del día.
Eric
2
¡WHATSAPP usa Erlang! Google para más detalles
Muzaaya Joshua
18
¿Por qué está cerrado esto? Busqué en Google la pregunta exacta y me llevaron aquí.
canhazbits
EMqtt es un corredor de MQTT muy popular y hoy en día se está utilizando mucho en IoT, desarrollado en erlang con 1 millón de usuarios sostenibles.
LAMRIN TAWSRAS

Respuestas:

214

Desde la programación de Erlang :

texto alternativo http://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4WEZjdE2yFFvvg

Muchas compañías 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 tiene más de 5 millones de usuarios y 150 millones de URL marcadas.

Facebook usa Erlang para impulsar 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 usa Erlang en sus sistemas de autenticación y SMS.

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

Ericsson utiliza Erlang en sus nodos de soporte, utilizado 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 el Protocolo de Presencia Extensible y Presencia (XMPP).

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

• La biblioteca MochiWeb que brinda soporte para construir servidores HTTP livianos. Se utiliza para impulsar servicios como MochiBot y MochiAds, que sirven contenido generado dinámicamente a millones de espectadores diariamente.

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

JRL
fuente
27
Ramiz Uddin: ¿de qué nuevo sistema estás hablando cuando dices "No, no lo es?"
Great Turtle el
10
@RamizUddin ¿de qué nuevo sistema estás hablando cuando dices "No, no lo es?" (Solo estoy repitiendo una pregunta de Great Turtle, quien hace un par de años olvidó la @ delante de su nombre, creo que merece una respuesta)
Walter Tross
44
Facebook cambió de erlang: facebook.com/notes/facebook-engineering/… y quora.com/…
A. Binzxxxxxx
Facebook arruinó la simplicidad y el rendimiento de WhatsApp.
Krishnadas PC
¿Puedes actualizar el enlace roto para el libro?
pradyumnad
83

ejabberd es una de las aplicaciones de 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 se preocupen, todavía hay un tesoro de 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.

Entonces tenemos 2 características:

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

Estos son ejemplos donde erlang brilla.

manejar muchas conexiones

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

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

Todos ellos intercambian mensajes.

enrutar mensajes dados algunos aspectos del mensaje

Otra característica muy adorable de erlang es la coincidencia de patrones . Se usa 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 son 5 versiones diferentes de la accessfunción. Erlang seleccionará la versión más apropiada dados los argumentos recibidos. ( Configes una estructura de tipo #configque tiene un typeatributo).

Eso significa que es muy fácil y mucho más claro que encadenar if/elseo switch/casehacer reglas comerciales.

Para concluir

Escribir servidores escalables, ese es el objetivo de erlang. Todo está diseñado para que sea fácil. En las dos características anteriores, agregaría:

  • actualización de código activo
  • mnesia, base de datos relacional distribuida (incluida en la distribución base)
  • mochiweb, en el que se basan la mayoría de los servidores http erlang
  • soporte binario (decodificar y codificar el protocolo binario es más fácil que nunca)
  • una gran comunidad con grandes proyectos de código abierto ( ejabberd, couchdbsino también webmachine, riaky un montón de biblioteca muy fácil de encajar)

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.

Eric
fuente
66
Para ser justos, casi cualquier código C ++ reescrito en un lenguaje moderno reduciría el LOC.
Zack el
52

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

La razón por la que se usa en estas aplicaciones proviene de la fortaleza central de Erlang: la administración de la disponibilidad de la aplicación .

Erlang se creó desde cero para el entorno de telecomunicaciones que requiere que los sistemas cumplan al menos la disponibilidad de 5x9 (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 fluidas dentro y entre máquinas) La base de datos integrada (Mnesia) también se distribuye por naturaleza.

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

  • Code Hot-Swapping : 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 se creó 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 del proceso con estrategias de reinicio, umbrales, etc. Ayuda a recuperarse de los casos de esquina / sobrecarga con mayor facilidad mientras mantiene los rastros de los problemas para su posterior resolució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 una escala O (1).

  • Depuración en vivo : la capacidad de "iniciar sesión" en los 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 integradas de informe de errores son muy útiles (pero a veces algo incómodas 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 "efectos secundarios" y reduce la necesidad de costosos mecanismos de sincronización.

Supongo que todas estas características ayudan a extender un caso para usar Erlang en aplicaciones críticas de negocios.

Una cosa en la que Erlang no es realmente bueno : procesar grandes bloques de datos.

jldupont
fuente
44
¿Podría explicar lo siguiente: "Una cosa en la que Erlang no es realmente bueno: procesar grandes bloques de datos".
Kirill Trofimov
9
Se refiere a cosas como decodificar datos mpeg. Hay demasiados cálculos numéricos para los que Erlang no está optimizado. Si el procesamiento solo implica barajar grandes bloques de datos de un lugar a otro, entonces Erlang es bastante bueno en eso. (Archivos a TPC Sockets, etc.)
Christian
44
No puede actualizar bloques de datos compartidos (no hay punteros en Erlang) y, por lo tanto, los datos deben transferirse a través de procesos que a su vez se traducen en ineficiencias.
jldupont
Como comentario, Ericsson, creo, dijo que Erlang logró la disponibilidad de 9x9.
Jono
Estamos contemplando mejorar la debilidad de Erlang citada aquí.
Shelby Moore III
19

Erlang proviene de Ericsson y se usa dentro de 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 que Erlang? Desde el resumen (vale la pena leer en su totalidad):

El documento, la vista, los modelos de seguridad y replicación, el lenguaje de consulta de propósito especial, el diseño eficiente y robusto del disco y la naturaleza concurrente y confiable de la plataforma Erlang están cuidadosamente integrados para un sistema confiable y eficiente.

Brian Agnew
fuente
1
Para algunos de sus sistemas de telecomunicaciones.
jldupont
1
CouchDB no es una base de datos OO, es una base de datos orientada a documentos.
DOY TERRIBLE ASESORAMIENTO
55
@ Doy consejos terribles - sí, por supuesto. Corregido Me gustaría cambiar su apodo :-)
Brian Agnew
Hubo un lenguaje de concurrencia anterior utilizado por Ericsson llamado PLEX (Lenguaje de programación para intercambios), que ejecutaba intercambios telefónicos digitales a finales de los años 80 hasta ahora. Creo que erlang es una versión refinada de PLEX.
user50619
19

Construimos un intercambio de apuestas (también conocido como mercado de predicción) usando Erlang. Elegimos Erlang sobre algunos de los lenguajes financieros más tradicionales (C ++, Java, etc.) debido a la concurrencia integrada. Los mercados funcionan de manera muy similar a los intercambios de telefonía. 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.

Jason Trost
fuente
10
Solo una nota, el enlace a su charla ahora es privado.
JDong
15

Me encontré con que esto está en 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 utilizar Erlang para el seguimiento de rayos acústicos. Descubrieron que, si bien era más fácil escribir el programa, tenía menos errores, etc. Se escalaba peor y funcionaba 10 veces más lento que un programa C comparable. Entonces, un lugar donde puede no ser adecuado es escenarios de uso intensivo de la CPU.

Sin embargo, tenga en cuenta que las personas que escribieron el documento se encontraban en las etapas de aprender Erlang por primera vez, y pueden no haber conocido los procedimientos de desarrollo adecuados para Erlang intensivo en CPU.

CoderTao
fuente
2
El artículo es una lectura interesante. No hace directamente esa generalización sobre la idoneidad, indica que consideraron que Erlang no es adecuado si está tratando de implementarlo en un procesador IBM Cell BE, que se encuentra en Playstation 3. También indica que no tienen experiencia con Erlang. Con más experiencia y hardware adecuado, pueden haber llegado a una conclusión diferente. Tengo la impresión de que su código puede haber incluido el uso de funciones no recursivas de cola; Si es así, puede ser útil para explicar sus problemas de memoria, recolección de basura, fallas y rendimiento.
Tim
3
Creo que leíste mal el artículo. La incapacidad de ejecutar en un procesador Cell fue desafortunada, pero fue solo una nota al margen. La diferencia de rendimiento 12x entre una implementación de C ++ y Erlang que se ejecuta en una plataforma x86 fue el verdadero problema, combinado con el hecho de que no se escalaba linealmente. Dicho esto, eran nuevos en el lenguaje y pueden haber tomado algunas rutas de código imprudentes ... así es la vida. Sin embargo, tengo curiosidad acerca de la escala no lineal.
CoderTao
44
Estoy corregido en el problema de rendimiento 12x con respecto a Intel versus Cell, pero mantengo que Erlang puede ser adecuado para escenarios desafiantes de CPU. Eso no quiere decir que no estén bien: esto realmente podría ser un problema en el que una buena solución de C ++ siempre superará a una buena solución de Erlang. Quizás esto sirva para recordarles a algunas personas que Erlang, como cualquier otra tecnología, no es una bala de plata y solo brillará cuando se use de la manera correcta en el lugar correcto.
Tim
14

Aparentemente, Yahoo usó Erlang para hacer algo que llama Harvester. Artículo al respecto aquí: http://www.ddj.com/architect/220600332

daños
fuente
44
Lectura del artículo: "Si bien Harvester se escribió originalmente en Perl, las construcciones de concurrencia de alto nivel de Erlang, junto con los principios de diseño de OTP, lo convierten en una plataforma ideal para crear aplicaciones confiables, tolerantes a fallas y escalables como Harvester. El servicio resultante es más escalable, disponible, confiable y capaz de cumplir con acuerdos de nivel de servicio (SLA) más estrictos sobre una base de código más ligera y esfuerzos de desarrollo menos costosos ". Muchas gracias :)
Roberto Aloi
11

¿Para qué sirve 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 bibliotecas estándar de VM (BEAM, hipe) (más módulos en github, CEAN, etc.) y el entorno de desarrollo se actualizan / amplían / ​​mejoran constantemente. Por ejemplo, recuerdo haber leído que el rendimiento de coma 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 al respecto:

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

Hace un par de años, la publicidad Wide Finder de Tim Bray y todas las personas que comienzan a hacer marcos de aplicaciones web y servidores HTTP conducen (al menos en parte) a un mejor manejo de expresiones regulares y binarios. Y está todo el trabajo que integra HiPE y SMP, el proyecto de dializador, pruebas de unidades múltiples y la creación de libs que brotan, ...

Por lo tanto, su punto óptimo se está expandiendo. Lo difícil es que los documentos oficiales no pueden mantenerse muy bien, y la lista de correo y el volumen de la blogosfera erlang están creciendo rápidamente.

Gene T
fuente
10

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. Utilizamos técnicas puras de JS y COMET en su lugar. Y Erlang es compatible con la "verdadera actualidad" de Pixza.

ErJab
fuente
10

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

Creo que realmente brilla en las tareas relacionadas con la red y hace que sea un poco 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 una infraestructura de producción crítica. Entonces no es como "la nueva tecnología de la cadera 0.0.2 alpha".

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

John-Paul Bader
fuente
6

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

emb
fuente