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).
erlang
case-study
Roberto Aloi
fuente
fuente
Respuestas:
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.
fuente
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:
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):
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:
Eso son 5 versiones diferentes de la
access
función. Erlang seleccionará la versión más apropiada dados los argumentos recibidos. (Config
es una estructura de tipo#config
que tiene untype
atributo).Eso significa que es muy fácil y mucho más claro que encadenar
if/else
oswitch/case
hacer 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:
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 erlangejabberd
,couchdb
sino tambiénwebmachine
,riak
y 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.
fuente
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.
fuente
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):
fuente
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.
fuente
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.
fuente
Aparentemente, Yahoo usó Erlang para hacer algo que llama Harvester. Artículo al respecto aquí: http://www.ddj.com/architect/220600332
fuente
¿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.
fuente
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.
fuente
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.
fuente
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.
fuente