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.
erlang
case-study
Roberto Aloi
fonte
fonte
Respostas:
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.
fonte
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:
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):
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:
São 5 versões diferentes da
access
função. Erlang selecionará a versão mais apropriada, considerando os argumentos recebidos. (Config
é uma estrutura do tipo#config
que possui umtype
atributo).Isso significa que é muito fácil e muito mais claro do que encadear
if/else
ouswitch/case
criar 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:
mnesia
, banco de dados relacional distribuído (incluído na distribuição base)mochiweb
, nos quais a maioria dos servidores http erlang são criadosejabberd
,couchdb
mas tambémwebmachine
,riak
e 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.
fonte
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.
fonte
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):
fonte
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.
fonte
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.
fonte
Aparentemente, o Yahoo usou Erlang para fazer algo que chama de Harvester. Artigo sobre o assunto aqui: http://www.ddj.com/architect/220600332
fonte
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
fonte
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.
fonte
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.
fonte
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.
fonte