Estive olhando para akka recentemente e é bastante impressionante. Parece que tem a maioria dos recursos matadores do erlang - transparência de localização, hierarquias de supervisão e muito mais. Há algum recurso que erlang tem que akka não tem?
Estive olhando para akka recentemente e é bastante impressionante. Parece que tem a maioria dos recursos matadores do erlang - transparência de localização, hierarquias de supervisão e muito mais. Há algum recurso que erlang tem que akka não tem?
Respostas:
Isenção de responsabilidade: eu sou o PO para Akka
Esses são os do topo da minha cabeça.
Por outro lado, usar Akka significa que você pode usar Scala, Java, Groovy ou JRuby para escrever seus aplicativos.
Em Erlang, os processos são comutados aproximadamente a cada 1000 reduções. Em uma estrutura ingênua como o agente Scala / Akka, o agente possui um agendador até terminar o trabalho no recebimento. Xeque-mate. Fim de jogo. Hasta la vista :) Gente, não perca tempo com pseudo-técnicos. Fiquei chocado que os caras aqui comparassem Scala com Erlang.
Também existem muitos outros chamados "recursos matadores", mas aqui está o meu conselho, não pense em termos de recursos, pense em expressões idiomáticas que permitem uma linguagem específica. Scala rouba os "melhores recursos", Erlang permite / implementa você com os idiomas certos para construir sistemas de forma confiável, com uma linguagem de alto nível que se baseia nos idiomas certos. Quando você aprende Erlang, está reconstruindo sua mente, sua maneira de pensar sobre um sistema confiável distribuído, Erlang ensina e atualiza você. Scala é apenas mais uma linguagem imperativa (oh, desculpe, palavra engraçada, multiparadigmal) que tenta roubar boas características de outras línguas.
Quase ninguém menciona o isolamento do processo. Sem garantias de "sua discussão não pode mexer com meu lixo", os sistemas distribuídos são muito mais difíceis de raciocinar. (Eles já são difíceis o suficiente com os processos de Erlang.)
AFAIK (que não está longe, dada minha experiência direta limitada com a JVM), apenas Erlang consegue realmente isolar o processo "certo" na JVM. O Sr. Google pode dar algumas dicas sobre onde encontrar pesquisas de Fox e Candea (?) Sobre sistemas de pesquisa que usam uma técnica de "micro-reinicialização" ("computação orientada para recuperação"). Um desenvolvedor Erlang lê essa pesquisa e diz algumas coisas:
Para mim, a troca de código a quente em um cluster Erlang inteiro sem tempo de inatividade (por exemplo make:all([netload]
:) é um dos recursos matadores do Erlang.
Mas vamos reverter sua pergunta: O que akka tem que Erlang não tem? Claro que você pode adicionar dezenas de extensões e bibliotecas (scala, akka, spring, osgi, ...) ao Java para tentar chegar perto de Erlang. Mas onde está o ponto? Em suma, todas essas extensões são muito mais complexas do que aprender a linguagem Erlang simples, que já provou por mais de 2 décadas que pode fazer o trabalho oferecendo escalabilidade superior com tempo de inatividade zero.
Provavelmente Erlang é melhor para sistemas distribuídos maiores (seguindo a resposta de vjache), mas para um servidor normal, quando você apenas deseja usar todo o poder de várias CPUs, o Akka é uma boa escolha - fornece boa abstração, desempenho e integração com o ecossistema Java.