Onde o Erlang é usado e por quê? [fechadas]

258

Gostaria de saber uma lista dos aplicativos / sites / soluções mais comuns em que o Erlang é usado, com ou sem êxito .

Explicar por que é usado em uma solução específica em vez de outras linguagens de programação também seria muito apreciado.

Listar os estudos de caso BAD Erlang (casos em que Erlang é mal utilizado) também seria interessante.

Roberto Aloi
fonte
13
O problema com os estudos de caso do BAD é que eles realmente não ficam famosos ou vêem a luz do dia.
Eric
2
O WHATSAPP usa Erlang!
Pesquise no
18
Por que isso está fechado? Pesquisei a pergunta exata no Google e fui levado para cá.
canhazbits
O EMqtt é um broker MQTT muito popular e hoje em dia está se acostumando tanto na IoT, desenvolvido em erlang com 1 milhão de sustentabilidade do usuário.
LAMRIN TAWSRAS

Respostas:

214

Na Programação Erlang :

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

Muitas empresas estão usando Erlang em seus sistemas de produção:

• A Amazon usa Erlang para implementar o SimpleDB, fornecendo serviços de banco de dados como parte do Amazon Elastic Compute Cloud (EC2).

Yahoo! usa-o em seu serviço de favoritos sociais, Delicious, que tem mais de 5 milhões de usuários e 150 milhões de URLs favoritos.

• O Facebook usa o Erlang para alimentar o back-end de seu serviço de bate-papo, gerenciando mais de 100 milhões de usuários ativos.

• O WhatsApp usa o Erlang para executar servidores de mensagens, alcançando até 2 milhões de usuários conectados por servidor.

• A T-Mobile usa Erlang em seus sistemas de SMS e autenticação.

• A Motorola está usando Erlang em produtos de processamento de chamadas no setor de segurança pública.

• A Ericsson usa Erlang em seus nós de suporte, usados ​​em redes móveis GPRS e 3G em todo o mundo.


Os aplicativos Erlang de código aberto mais populares incluem o seguinte:

• O modelador de subdivisão 3D Wings 3D , usado para modelar e texturar malhas poligonais.

• O sistema Ejabberd , que fornece um servidor de aplicativos de mensagens instantâneas (IM) com base em protocolo extensível de mensagens e presença (XMPP).

• O banco de dados orientado a documentos do CouchDB “sem esquema”, fornecendo escalabilidade entre clusters multicore e multiserver.

• A biblioteca MochiWeb que fornece suporte para a criação de servidores HTTP leves. É usado para alimentar serviços como o MochiBot e o MochiAds, que oferecem conteúdo gerado dinamicamente a milhões de espectadores diariamente.

RabbitMQ , uma implementação de protocolo de mensagens AMQP. O AMQP é um padrão emergente para mensagens corporativas de alto desempenho.

JRL
fonte
27
Ramiz Uddin - de qual novo sistema você está falando quando diz "Não, não é?"
Great Turtle
10
@RamizUddin, de que novo sistema você está falando quando diz "Não, não é?" (Estou apenas repetindo uma pergunta pelo Great Turtle que um par de anos atrás esqueceu o @ na frente do seu nome - Eu acho que ele merece uma resposta, no entanto)
Walter Tross
4
facebook comutada longe de erlang: facebook.com/notes/facebook-engineering/... e quora.com/...
A. Binzxxxxxx
O Facebook arruinou a simplicidade e o desempenho do WhatsApp.
Krishnadas PC
Você pode atualizar o link quebrado para o livro?
pradyumnad 29/01
83

O ejabberd é um dos aplicativos erlang mais conhecidos e com o qual aprendi erlang.

Eu acho que é o projeto mais interessante para aprender erlang, porque está realmente construindo a força de erlang. (No entanto, alguns argumentam que não é OTP, mas não se preocupe, ainda há um grande número de códigos dentro ...)

Por quê ?

Um servidor XMPP (como o ejabberd) pode ser visto como um roteador de alto nível, roteando mensagens entre usuários finais. Claro que existem outros recursos, mas esse é o aspecto mais importante de um servidor de mensagens instantâneas. Ele precisa rotear muitas mensagens simultaneamente e lidar com muitas conexões TCP / IP.

Portanto, temos 2 recursos:

  • lidar com muitas conexões
  • encaminhar mensagens devido a alguns aspectos da mensagem

Estes são exemplos em que erlang brilha.

lidar com muitas conexões

É muito fácil criar servidores TCP / IP escaláveis ​​e sem bloqueio com erlang. De fato, ele foi projetado para resolver esse problema. E, como pode gerar centenas de milhares de processos (e não threads , é uma abordagem de compartilhamento-nada, que é mais simples de projetar), o ejabberd foi projetado como um conjunto de processos erlang (que podem ser distribuídos por vários servidores):

  • processo de conexão do cliente
  • processo roteador
  • processo de sala de chat
  • processos de servidor para servidor

Todos eles trocando mensagens.

encaminhar mensagens devido a alguns aspectos da mensagem

Outra característica muito adorável do erlang é a correspondência de padrões . É usado em todo o idioma.

Por exemplo, no seguinte:

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.

São 5 versões diferentes da accessfunção. Erlang selecionará a versão mais apropriada, considerando os argumentos recebidos. ( Configé uma estrutura do tipo #configque possui um typeatributo).

Isso significa que é muito fácil e muito mais claro do que encadear if/elseou switch/casecriar regras de negócios.

Para finalizar

Escrevendo servidores escaláveis, esse é o objetivo de erlang. Tudo foi projetado para facilitar as coisas. Nos dois recursos anteriores, eu acrescentaria:

  • atualização de código quente
  • mnesia, banco de dados relacional distribuído (incluído na distribuição base)
  • mochiweb, nos quais a maioria dos servidores http erlang são criados
  • suporte binário (decodificar e codificar o protocolo binário mais fácil do que nunca)
  • uma ótima comunidade com ótimos projetos de código aberto ( ejabberd, couchdbmas também webmachine, riake uma grande quantidade de bibliotecas muito fáceis de incorporar)

Menos LOCs

Há também este artigo de Richard Jones. Ele reescreveu um aplicativo de C ++ para erlang: 75% menos linhas em erlang.

Eric
fonte
6
Para ser justo, quase qualquer código C ++ reescrito em uma linguagem moderna reduziria o LOC.
Zack
52

A lista dos aplicativos mais comuns para o Erlang foi abordada (CouchDb, ejabberd, RabbitMQ etc.), mas gostaria de contribuir com o seguinte.

A razão pela qual é usada nesses aplicativos vem da força principal do Erlang: gerenciar a disponibilidade do aplicativo .

O Erlang foi desenvolvido desde o início para o ambiente de telecomunicações, exigindo que os sistemas atendam ao menos a disponibilidade de 5x9 (99,999% de tempo de atividade anual). Este número não deixa muito espaço para inatividade durante um ano! Por esse motivo, principalmente, o Erlang vem carregado com os seguintes recursos (não exaustivos):

  • Escalabilidade horizontal (capacidade de distribuir tarefas através dos limites da máquina facilmente através de comunicações intra e inter-máquina). O banco de dados interno (Mnesia) também é distribuído por natureza.

  • Escalabilidade vertical (capacidade de distribuir tarefas pelos recursos de processamento na mesma máquina): o SMP é tratado de forma nativa.

  • Troca a quente de código : a capacidade de atualizar / atualizar o código ao vivo durante as operações

  • Assíncrono : o mundo real é assíncrono, então Erlang foi construído para dar conta dessa natureza básica. Um recurso que contribui para esse requisito: os processos "gratuitos" de Erlang (> 32000 podem ser executados simultaneamente).

  • Supervisão : muitas estratégias diferentes para supervisão de processos com estratégias de reinicialização, limites etc. Ajuda a recuperar de casos extremos / sobrecargas com mais facilidade, mantendo os traços dos problemas para posterior resolução de problemas, análise post-mortem etc.

  • Gerenciamento de recursos : estratégias de planejamento, monitoramento de recursos etc. Observe que o planejador de processos padrão opera com a escala O (1).

  • Depuração ao vivo : a capacidade de "logar" nos nós ao vivo à vontade ajuda a solucionar problemas. A depuração pode ser realizada ao vivo com acesso total ao estado de execução de qualquer processo. Além disso, as ferramentas internas de relatório de erros são muito úteis (mas às vezes um pouco difíceis de usar).

É claro que eu poderia falar sobre suas raízes funcionais, mas esse aspecto é um pouco ortogonal ao objetivo principal (alta disponibilidade). O principal componente da natureza funcional que contribui generosamente para o objetivo de destino é IMO: "share nothing". Essa característica ajuda a conter "efeitos colaterais" e reduz a necessidade de mecanismos de sincronização dispendiosos.

Acho que todas essas características ajudam a estender o argumento do uso do Erlang em aplicativos críticos para os negócios.

Uma coisa que Erlang não é realmente bom : processar grandes blocos de dados.

jldupont
fonte
4
Você poderia explicar o seguinte: "Uma coisa que Erlang não é realmente bom: processar grandes blocos de dados".
224 Kirill Trofimov
9
Ele quer dizer coisas como decodificar dados mpeg. Há muita computação numérica para a qual Erlang não é otimizado. Se o processamento envolve apenas o embaralhamento de grandes blocos de dados de um lugar para outro, Erlang é muito bom nisso. (Arquivos para soquetes TPC, etc) #
Christian
4
Você não pode atualizar blocos de dados compartilhados (não há ponteiros em Erlang) e, portanto, os dados devem ser transferidos entre processos que, por sua vez, se traduzem em ineficiências.
jldupont
Como um aparte, a Ericsson, acredito, disse que Erlang alcançou a disponibilidade do 9x9.
Jono
Estamos pensando em melhorar a fraqueza de Erlang citada aqui.
Shelby Moore III
19

Erlang é da Ericsson e é usado em alguns de seus sistemas de telecomunicações.

Fora das telecomunicações, o CouchDb (um banco de dados orientado a documentos) é possivelmente o aplicativo Erlang mais conhecido até o momento.

Por que Erlang? Da visão geral (vale a pena ler na íntegra):

Os modelos de documento, visualização, segurança e replicação, a linguagem de consulta para fins especiais, o layout eficiente e robusto do disco e a natureza simultânea e confiável da plataforma Erlang são todos cuidadosamente integrados para um sistema confiável e eficiente.

Brian Agnew
fonte
1
Para alguns de seus sistemas de telecomunicações.
jldupont
1
O CouchDB não é um banco de dados OO, é um banco de dados orientado a documentos.
EU CONSIGO TERRÍVEL CONSELHOS
5
@EU CONSELHO TERRÍVEL - sim, é claro. Corrigido. Eu iria mudar o seu apelido :-)
Brian Agnew
Havia uma linguagem de concorrência anterior usada pela Ericsson chamada PLEX (Linguagem de programação para trocas), que executava trocas de telefone digital no final dos anos 80 até agora. Eu acho que erlang é uma versão refinada do PLEX.
user50619
19

Construímos uma troca de apostas (também conhecido como mercado de previsões) usando Erlang. Escolhemos o Erlang em vez de algumas das linguagens financeiras mais tradicionais (C ++, Java etc.) devido à simultaneidade incorporada. Os mercados funcionam de maneira muito semelhante às trocas de telefonia. Nosso CTO falou sobre o uso de Erlang na conversa sobre CTO .

Também usamos CouchDB e RabbitMQ como parte de nossa pilha.

Jason Trost
fonte
10
Apenas uma observação, o link para sua palestra agora é privado.
JDong
15

Me deparei com isso está no processo de escrever um relatório: Erlang no Acoustic Ray Tracing .

É um relatório de experiência sobre a tentativa de um grupo de pesquisa de usar o Erlang para o rastreamento acústico de raios. Eles descobriram que, embora fosse mais fácil escrever o programa, menos buggy etc. Ele se reduzia e apresentava um desempenho 10 vezes mais lento que um programa C comparável. Portanto, um ponto em que pode não ser adequado é o uso intensivo de CPU.

Observe, porém, que as pessoas que escreveram o artigo estavam nos estágios do aprendizado inicial de Erlang e podem não conhecer os procedimentos de desenvolvimento adequados para o Erlang com uso intensivo de CPU.

CoderTao
fonte
2
O artigo é uma leitura interessante. Ele não faz essa generalização diretamente sobre a adequação, indica que eles consideraram Erlang inadequado se você estiver tentando implantar em um processador IBM Cell BE, encontrado no Playstation 3. Ele também afirma que eles não têm experiência com Erlang. Com mais experiência e hardware adequado, eles podem ter chegado a uma conclusão diferente. Tenho a impressão de que o código deles pode ter incluído o uso de funções recursivas não-cauda; Nesse caso, isso pode ajudar a explicar seus problemas de memória, coleta de lixo, falhas e desempenho.
Tim
3
Eu acho que você leu errado o artigo. A incapacidade de rodar em um processador Cell foi lamentável, mas foi apenas uma observação. A diferença de desempenho de 12x entre uma implementação C ++ e Erlang em execução em uma plataforma x86 era o problema real, combinado com o fato de não ter uma escala linear. Dito isto, eles eram novos na linguagem e podem ter tomado alguns caminhos de código imprudentes ... assim é a vida. Estou curioso sobre o dimensionamento não linear.
CoderTao 28/10/09
4
Sou corrigido no problema de desempenho 12x em relação à Intel versus Cell, mas sustento que Erlang pode ser bem adequado para cenários desafiadores de CPU. Isso não quer dizer que eles não estejam certos: isso realmente pode ser um problema em que uma boa solução C ++ sempre supera uma boa solução Erlang. Talvez isso sirva de lembrete para algumas pessoas de que Erlang, como qualquer outra tecnologia, não é uma bala de prata e só brilha quando usado da maneira certa no lugar certo.
Tim
14

Aparentemente, o Yahoo usou Erlang para fazer algo que chama de Harvester. Artigo sobre o assunto aqui: http://www.ddj.com/architect/220600332

prejudica
fonte
4
Lendo o artigo: "Enquanto a Harvester foi originalmente escrita em Perl, as construções de simultaneidade de alto nível da Erlang - juntamente com os princípios de design da OTP - a tornam uma plataforma ideal para a criação de aplicativos confiáveis, tolerantes a falhas e escaláveis, como a Harvester. é mais escalável, disponível, confiável e capaz de obedecer a SLA (acordos de nível de serviço mais restritos) em uma base de código mais leve e a esforços de desenvolvimento mais baratos ". Muito obrigado :)
Roberto Aloi
11

Para que serve o 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/ (resposta de jerf)

É importante perceber que as 4 partes de Erlang: a própria linguagem, as libs padrão das VMs (BEAM, hipe) (além de módulos no github, CEAN etc.) e o ambiente de desenvolvimento estão sendo constantemente atualizados / expandidos / aprimorados. Por exemplo, lembro-me de ler que o desempenho do ponto flutuante melhorou quando o autor do Wings3d percebeu que precisava melhorar (não consigo encontrar uma fonte para isso). E esse cara acabou de escrever sobre isso:

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

Há alguns anos, a publicidade do Wide Finder de Tim Bray e todas as pessoas que começaram a criar estruturas de aplicativos da web e servidores HTTP levam (pelo menos em parte) a um melhor processamento de regex e binários. E há todo o trabalho que integra o HiPE e o SMP, o projeto do dializador, vários testes de unidade e compilação de bibliotecas surgindo ..

Portanto, o ponto ideal está se expandindo. O difícil é que os documentos oficiais não possam acompanhar muito bem, e a lista de discussão e o volume da blogosfera erlang estão crescendo rapidamente

Gene T
fonte
10

Estamos usando o Erlang para fornecer a força muscular de back-end para o nosso jogo multijogador em tempo real Pixza, baseado em navegador . Não usamos Flash ou outros plugins de terceiros, embora o jogo seja para vários jogadores em tempo real. Em vez disso, usamos técnicas JS e COMET puras. E Erlang apóia a "realmente atualidade" do Pixza.

ErJab
fonte
10

Estou trabalhando para a wooga, uma empresa de jogos sociais e usamos o Erlang para alguns de nossos back-ends de jogos (basicamente http apis para milhões de usuários diários) e serviços auxiliares, como provedor de notificação push do ios, pagamento etc.

Eu acho que realmente brilha em tarefas relacionadas à rede e torna mais fácil estruturar e implementar serviços de rede simples e complexos. É fácil obter distribuição, tolerância a falhas e desempenho, porque a Erlang já possui alguns dos principais ingredientes incorporados e eles estão sendo usados ​​há muito tempo em uma infraestrutura de produção crítica. Portanto, não é como "a nova tecnologia da anca 0.0.2 alfa".

Eu sei que outras empresas de jogos também usam Erlang. Você deve encontrar apresentações no slideshare sobre isso.

John-Paul Bader
fonte
6

Erlang se esforça por ser uma linguagem funcional sem memória compartilhada. Portanto, o IMO, Erlang não será adequado para aplicativos que exigem manipulações de memória no local. Edição de imagem, por exemplo.

emb
fonte