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?

Duncan
fonte
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.

Jimmy Hoffa
fonte
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.

pap
fonte
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.

Garry Hodgson
fonte