O que torna o Erlang adequado para aplicativos em nuvem?


9

Estamos iniciando um novo projeto e implementando a instanciação de nossas empresas de uma nuvem openstack (consulte http://www.openstack.org/ ). O projeto é um conjunto de ferramentas de segurança para nossa corporação. Atualmente, executamos muitas centenas de servidores dedicados para ferramentas de segurança e os estamos movendo para a instanciação do openstack de nossas empresas.

Outros projetos em minha empresa atualmente usam o erlang em vários aplicativos de servidor distribuído, e outro ponto de perguntas e respostas destacam que o erlang é usado em vários serviços populares de nuvem. Estou tentando convencer outras pessoas a considerar onde isso pode ser aplicável em nosso projeto.

Quais são os pontos fortes de erlang para a programação em nuvem? Onde estão as áreas em que é particularmente apropriado usar erlang?


15
Defina "nuvem" e podemos dizer o que você pode querer saber. O termo "nuvem" é falar em marketing e significa algo diferente para cada pessoa que a usa.

Eu pensei que dizer que a nuvem openstack seria suficiente para definir o que estamos implementando. Veja openstack.org . Ou você está solicitando mais informações sobre o projeto? São ferramentas de segurança para nossa corporação. Atualmente, executamos muitas centenas de servidores dedicados para ferramentas de segurança e os estamos movendo para a instanciação do openstack de nossas empresas.
Duncan

Eu editei a pergunta para melhorar e remover a preocupação de 'marketing'. Meu problema é selecionar a melhor ferramenta para o trabalho. Eu sou um novato na stackexchange, então não entendo bem.
Duncan

11
especificamente, o termo "nuvem" é nebuloso e não significa nada específico, é marketing, você ainda não definiu o que realmente qualifica algo como um aplicativo em nuvem . Pessoalmente, sei o que sei o que acho que significa, tenho certeza de que não é o que você pensa que isso significa , dada a pergunta.

"o termo 'nuvem' é nebuloso" - bom! Significa algo virtual e você deve especificar se esse "algo" é software, sistema operacional, uma única máquina, várias máquinas e redes ou outra coisa.
GlenPeterson

Respostas:


8

Além do fato de o Erlang ter sido desenvolvido especificamente para ser executado em situações simultâneas / paralelizadas / distribuídas, as duas principais técnicas empregadas para tornar isso possível são:

Sem efeitos colaterais:

Isso significa que, quando você fornece a uma função um dado para executar, ela não afeta, exceto em casos muito rigorosos, qualquer outra coisa no sistema / processo em execução. Isso significa que se você executar uma função 300 vezes ao mesmo tempo simultaneamente, nenhuma dessas 300 execuções da função afetará nenhuma das outras.

A técnica de implementação para garantir que nenhum efeito colateral seja chamado de "imutabilidade", que significa aproximadamente, não pode ser alterada (alterada). Isso significa que, assim que você cria uma variável, o valor dessa variável não pode ser modificado. Erlang implementa esse comportamento com "atribuição única", portanto, depois de atribuir um valor a uma variável, você não poderá atribuir um valor a ela novamente.

X = 1.
X = 2. // This is not a valid operation

Isso garante que nenhum código possa alterar acidentalmente o valor de X, causando uma condição de corrida; portanto, é inerentemente seguro para threads e o uso simultâneo se torna trivial. Esse é um comportamento muito incomum entre linguagens de software e a maior maneira pela qual Erlang consegue ser tão adequado para execução simultânea.

O modelo do ator:

Essa é uma maneira específica de modelagem que demonstrou tornar a implementação e o gerenciamento do processamento simultâneo muito simples para os desenvolvedores. Direto da wikipedia (http://en.wikipedia.org/wiki/Actor_model):

O modelo de ator adota a filosofia de que tudo é um ator. Isso é semelhante à filosofia de tudo é um objeto usada por algumas linguagens de programação orientada a objetos, mas difere no fato de que o software orientado a objetos geralmente é executado sequencialmente, enquanto o modelo Actor é inerentemente simultâneo. Um ator é uma entidade computacional que, em resposta a uma mensagem que recebe, pode simultaneamente: enviar um número finito de mensagens para outros atores; criar um número finito de novos atores; designar o comportamento a ser usado para a próxima mensagem que receber. Não existe uma sequência assumida para as ações acima e elas podem ser executadas em paralelo. A dissociação do remetente das comunicações enviadas foi um avanço fundamental do modelo do ator, permitindo estruturas de comunicação e controle assíncronas como padrões de transmissão de mensagens.


Sobre os "Sem efeitos colaterais", você diz "Este é um comportamento muito incomum entre as linguagens de software" - estou um pouco surpreso com isso. Java e C # não podem fazer isso hoje? Quais idiomas você conhece que precisam ter efeitos colaterais ao chamar uma função?
NoChance

3
@EmmadKareem Não é uma questão de saber se você pode escrever um programa sem efeitos colaterais; como você observou, você pode fazer isso em Java ou C #. É se o padrão é livre de efeitos colaterais e se há suporte do compilador para isso. Em Java, você não pode, por exemplo, dizer ao compilador "esse método não tem efeitos colaterais". Por sua vez, isso significa que o compilador não pode avisá-lo quando você está violando as regras!
Andres F.12 /

@EmmadKareem Não estou dizendo que é impossível escrever C # ou java sem efeitos colaterais (embora extremamente raro), mas estou dizendo que muito poucas linguagens de programação têm políticas rígidas incorporadas à linguagem que segregam funções com efeitos colaterais daqueles sem.
Jimmy Hoffa

Seria ótimo se o Java tivesse uma anotação @NoSideEffects para aplicar um método para instruir o compilador a impor efeitos colaterais para esse método. No meu próprio código, gosto de pensar que é comum os métodos não terem efeitos colaterais. Certamente, alguns métodos precisam ser mutadores em uma linguagem como Java, mas muitos não. Especialmente se você preferir objetos imutáveis ​​em seus projetos.
GlenPeterson

Jimmy Hoffa e @AndresF., Obrigado por seus esclarecimentos.
NoChance

9

Erlang é particularmente forte na computação simultânea / paralela. De fato, ele foi projetado originalmente para esse fim. Ele não tem nada a ver com nuvem, exceto que, muitas vezes, aplicativos pesados ​​de cálculo paralelizam e implantam em instâncias de "nuvem" para facilitar o aumento / redução da capacidade sob demanda.

O resto é apenas marketing.


7
Erlang foi projetado para computação tolerante a falhas . Só que a computação distribuída é um pré-requisito para isso (como você pode retornar um resultado confiável se alguém acidentalmente derramar café na sua única máquina, você precisa de pelo menos duas máquinas) e a computação paralela e simultânea são apenas casos especiais de computação distribuída, então Erlang também é bom nisso. Mas não foi para isso que foi projetado.
Jörg W Mittag

11
@ JörgWMittag Desde que estejamos dividindo os cabelos ... sim, seu objetivo era alcançar a tolerância a falhas. Ele alcançou isto através de paralelização. Ele foi projetado para implementá- lo no comutador de telefonia digital AX, que carregava dois tubos de cálculo paralelos isolados, com um funcionando como espera quente.
pap

11
Sim, desculpe, eu deveria ter sido mais claro: a computação em nuvem é distribuída praticamente por definição, e é frequentemente (nem sempre, mas geralmente) implementada por grupos de máquinas baratas e, mais importante, não confiáveis , mas projetada para oferecer um serviço confiável. É isso que faz Erlang se encaixar tão bem.
Jörg W Mittag

3

Um aspecto da nuvem diferente das implantações de hardware tradicionais é a facilidade com a qual você pode criar novas instâncias quando necessário. A capacidade de monitorar outros nós e processos em outros nós torna relativamente simples a criação de sistemas altamente dinâmicos que podem adicionar ou remover vms e gerenciá-los conforme necessário.

Isso é particularmente verdade se você estiver construindo seu sistema usando a estrutura OTP (Open Telecom PLatform) da erlang, que fornece estrutura e mecanismos (árvores de supervisor) para dar suporte à construção de coisas bastante sofisticadas com muito menos efrot do que você imagina. Erlang lida com todos os bits complicados para que você não precise.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.