Bate papo sobre ElixirConf 2015

Esse ano o Marlus Saraiva participou da ElixirConf, que é uma conferência criada para promover educação, networking e colaboração dentro das comunidades Elixir / Erlang. Segue um bate papo com o Marlus sobre o evento:

Evento: www.elixirconf.eu
Data: 23 e 24 de abril, 2015
Local: Cracóvia, Polônia

Qual a principal diferença entre esse evento e os eventos nacionais?
A presença dos principais nomes relacionados ao ecossistema Elixir/Erlang. Desde o criador do Erlang, Joe Armstrong até o criador do Elixir, José Valim. Outra presença ilustre foi de Chris McCord, criador do Phoenix Framework.

O que é Elixir?
É uma linguagem de programação escrita em cima da VM (máquina virtual) do Erlang que trabalha com o conceito de processos concorrentes. Ela foi criada por um brasileiro, chamado José Valim, que era um dos principais mantenedores do Ruby on Rails.

Quais as vantagens das linguagens desse tipo?
Desenvolvido pela Ericsson ainda na década de 80, o Erlang é uma linguagem funcional concebida inicialmente para aplicações voltadas para a área de telefonia. Após mais de duas décadas, sistemas desenvolvidos em Erlang conquistaram fama por serem extremamente estáveis e escaláveis. Apesar disso, seu uso se manteve, quase sempre, restrito à área de telecomunicações.
Nos últimos anos, entretanto, temos visto a migração cada vez maior de sistemas, inicialmente monolíticos, em sistemas altamente distribuídos. Com isso, grande parte da comunidade de software tem buscado soluções mais adequadas para este novo cenário. Características como facilidade de distribuição, alta concorrência e tolerância a falhas, simplesmente não estavam presentes nas linguagens orientadas à objetos utilizadas em larga escala. Desde então, o que tem-se visto, é uma corrida para adequar estas soluções às novas necessidades. Ao mesmo tempo, muitos observaram que tais adequações simplesmente não eram viáveis e começaram a buscar soluções fora do paradigma OO.
Neste cenário, um dos commiters mais importantes do mundo Ruby on Rails, José Valim, iniciou também sua busca por uma solução que consolidasse as características deste novo mundo distribuído com uma linguagem moderna e de alta produtividade. Surgiu assim o Elixir. Programas escritos em Elixir “rodam” na mesma máquina virtual do Erlang e, por consequência, herdam todas suas características semânticas.

Porque as soluções tradicionais não são mais adequadas?
A evolução tecnológica do hardware sempre impactou diretamente na maneira que desenvolvemos software. Antes da metade da década de 2000, tinhamos um cenário onde os fabricantes de processadores conseguiam praticamente dobrar a capacidade de processamento de um único core a cada dois anos. Por consequência, era possível melhorar a performance da maioria dos softwares existentes simplesmente trocando o servidor por uma máquina mais moderna.
A partir da segunda metade da mesma década, a capacidade dos fabricantes de aumentar a quantidade de transistors em um único core chegou ao seu ponto de saturação. A partir daí, para conseguir aumentar a quantidade total de transistors em um processador, passou-se a aumentar a quantidade de cores. Esse novo modelo multi-core trouxe novos desafios para os desenvolvedores de software. O que era conhecido como “single-threaded free lunch” havia acabado. Agora, para usufruir da capacidade total de processamento disponível, era necessário adequar grande parte do código, antes single-threaded para multi-threaded.
Infelizmente, trabalhar com threads aumenta bastante a complexidade do código. Condições de corrida (race conditions) e deadlocks são apenas alguns dos problemas que surgem quando se começa a trabalhar com várias linhas de execução.

Como Erlang/Elixir resolvem esses problemas?
Um dos maiores problemas quando se trabalha com threads é o compartilhamento global de memória. Neste modelo, que é o padrão na maiorias das linguagens imperativas, incluindo linguagens OO, a sincronização de operações de escrita se tornam um verdadeiro pesadelo. A solução, normalmente, se dá através do uso de monitores e semáforos, algo que aumenta a complexidade do sistema. O ideal é utilizar algum tipo de abstração que “esconda” esta complexidade do programador. Uma destas abstrações é conhecida como “Actor Model”. Este é o modelo utilizado em Erlang/Elixir. Outra linguagem que utiliza este modelo é a linguagem Scala, através do toolkit Akka.

Entendi. Mas se eu não quiser me preocupar com isso e simplesmente mover o meu sistema para “Nuvem”, não resolve?
Em parte. Hoje, é possivel provisionar um cluster de 10, 20 ou até 100 servidores em questão de minutos. Converter toda essa capacidade de processamento em benefício para o usuário nem sempre é tarefa fácil. Desenvolver softwares distribuídos e altamente concorrentes não é trivial e as soluções orientadas a objetos tem quase sempre sua viabilidade questionada. Na maioria dos casos, acaba-se recorrendo, prematuramente, a soluções externas ao ambiente da aplicação. Servidores Web mais otimizados, ferramentas para cache e fila de mensagens são apenas algumas. Estas soluções, apesar de resolverem parte do problema, aumentam consideravelmente a complexidade do sistema, tanto a nível de arquitetura como de configuração.

Cite um case de sucesso da programação funcional, qual problema encontrado em outros paradigmas ele solucionou?
Em se tratando de Erlang, o case mais conhecido é o do Whatsapp. Em janeiro de 2015, o famoso aplicativo de troca de mensagens atingiu a incrível marca de 500.000.000,00 (meio bilhão) de usuários. Ainda em 2012 a empresa já havia divulgado em seu blog que conseguia manter até 2 milhões de conexões TCP em um único servidor. Isso, por incrível que pareça, sem sobrecarregar a máquina.

Mais informações:
http://elixir-lang.org/
http://www.infoq.com/br/interviews/erlang-jose-valim
https://www.eventials.com/locaweb/elixir-uma-aproximacao-pragmatica-e-concorrente-a-programacao/

Anúncios

2 comentários sobre “Bate papo sobre ElixirConf 2015

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s