FAQ Elixir: o que você precisa saber para fazer a escolha certa

Mesmo depois de anos de mercado utilizando o Elixir em produção, várias questões ainda são levantadas sobre essa linguagem de programação. Neste artigo vamos responder todas as dúvidas para te ajudar a entender se Elixir é a escolha certa para o seu projeto.
Peterson F. dos Santos | 2 de junho de 2020

Ao iniciar o desenvolvimento de um novo produto digital, os primeiros questionamentos que nos vêm à mente são: qual tecnologia escolher? E essa tecnologia atenderá a todos os requisitos necessários? Pensando nisso, criamos uma série de artigos aqui no blog, para explorar as linguagens e frameworks que conhecemos e utilizamos aqui na ateliware. Assim, podemos compartilhar a nossa experiência para te ajudar na hora de tomar uma decisão de escolha como essa. Este artigo é o primeiro da série e para começar falaremos sobre os diferenciais do Elixir.

Resolvi então compilar neste texto os principais questionamentos que já percebi sobre essa linguagem ao longo de mais de 3 anos trabalhando com ela.

1. O que é Elixir?

O Elixir é uma linguagem de programação dinâmica que utiliza o paradigma funcional, concorrente por padrão e é executada na máquina virtual do Erlang (BEAM).

Criada em 2011, em um projeto de pesquisa do brasileiro José Valim, atualmente está na versão 1.10. O foco principal da linguagem é fornecer, de forma produtiva, ferramentas para construir aplicações distribuídas e de fácil manutenção.

2. Quais os principais benefícios do Elixir?

Não podemos falar sobre os benefícios dessa linguagem, sem antes explicar o que é a BEAM, também conhecida como máquina virtual do Erlang.

Ela faz parte do core do OTP (erlang open telecom platform) e é responsável por executar o código compilado do Erlang e do Elixir que, em conjunto do runtime do erlang, trazem alguns benefícios como padrão para a linguagem:

Execução distribuída

O código Elixir é executado em pequenas threads, chamadas de processos. Esses processos e são totalmente isolados e trocam informações através de mensagens:

current_process = self()
# Spawn an Elixir process (not an operating system one!)
spawn_link(fn ->
  send(current_process, {:msg, 'hello world'})
end)
# Block until the message is received
receive do
  {:msg, contents} -> IO.puts(contents)
end

Tolerante a falhas

Na comunidade erlang existe um conceito chamado ‘let it crash’ ou, em português, ‘deixe falhar’. A única certeza que temos de um código que é executado em produção é que as coisas podem dar errado. Para isso, o Elixir implementa uma feature de supervisão do código que está sendo executado:

children = [
  TCP.Pool,
  {TCP.Acceptor, port: 4040}
]
Supervisor.start_link(children, strategy: :one_for_one)

Ferramentas para desenvolvimento

Além das ótimas funcionalidades que a linguagem traz por padrão, por se aproveitar da BEAM, vale destacar também a quantidade de ferramentas que fazem parte do dia a dia de desenvolvimento:

  • Mix - Ferramenta de build;

  • Hex - Gerenciador de pacotes;

  • Iex - Execução interativa do elixir;

  • ex_doc - Geração de documentação;

  • Phoenix - Framework de desenvolvimento web;

  • Ecto - Interação com banco de dados.

2. Para que necessidades essa linguagem se destaca?

Existem alguns pontos e diferenciais que fazem com que o Elixir se destaque frente a outras linguagens de programação e ganhe cada vez mais espaço em aplicações que precisam de:

  • Crescimento e escala - Se a sua aplicação será acessada por milhares ou milhões de usuários você pode se aproveitar dos benefícios de confiabilidade e escalabilidade da BEAM;

  • Gerenciamento de grande quantidade de requisições simultâneas - Se você não tem milhões de usuários, mas tem um número menor que faz uso intenso do seu produto, você precisa de um sistema que suporte concorrência;

  • Mantenabilidade do código - Uma das vantagens ao escrever código em Elixir é conseguir manter o código simples. O resultado disso é que muitas empresas escolhem a linguagem brasileira pela possibilidade de ter um codebase de fácil manutenção, desde a correção de bugs até o desenvolvimento de novas funcionalidades.

Outro ponto positivo, por coincidência ou não, é que todas as vantagens do Elixir citadas na lista acima se encaixam perfeitamente em aplicações web ou api’s.

É claro, existem também outras ferramentas muito robustas para o desenvolvimento web. Mas isso é tópico para outro artigo!

3. É fácil escalar aplicações utilizando Elixir?

Particularmente eu não acredito que aplicação alguma seja fácil de escalar. Mas com o Elixir conhecemos alguns casos de uso que nos indicam que escalar é, sim, possível.

O primeiro é o caso da Bleacher Report, uma empresa de notícias esportivas que serve mais de 1,5 bilhões de páginas por mês e reduziu de 150 servidores para apenas 5 utilizando o Elixir. O segundo caso é do Discord, um aplicativo de chat para gamers que, com o Elixir no seu cinto de ferramentas, tem a capacidade de gerenciar mais de 11 milhões de usuários simultâneos.

Além disso, recomendo este vídeo em que o criador do Phoenix Framework explica como mantém mais de 1 milhão de requisições simultâneas utilizando o Elixir.

4. Quem está usando o Elixir?

Várias empresas ao redor do mundo já adotaram o Elixir para melhorar sua produtividade ao construir aplicações distribuídas. Alguns exemplos são:

  • Pinterest - Suporte a mais de 30k de eventos por segundo e mais de 200 milhões de usuários por mês;

  • PepsiCo - Desenvolvimento da plataforma de e-commerce;

  • Moz - Diminuíram o tempo de resposta de mais de 800 ms para menos de 50 ms.

Ficou interessado? Você pode conferir uma lista com mais de 400 empresas que utilizam o Elixir em produção.

5. Qual a popularidade entre os desenvolvedores?

Pode se dizer que o Elixir está no mainstream das tecnologias, justamente pela quantidade de features que são oferecidas por padrão. Outros pontos positivos são o paradigma funcional da linguagem, os conceitos de imutabilidade e a programação mais declarativa. Todos eles trazem mais clareza na hora de ler um código escrito.

Além disso, a comunidade é muito ativa e dificilmente você ficará na mão na hora de resolver um problema.

Trago como dica um padrão que eu mesmo sigo: antes de procurar no Stackoverflow faço minhas buscas no Fórum do Elixir e geralmente encontro mais rápido a solução para os meus problemas.

Outra questão bastante positiva é que, pelo Elixir ter uma inspiração no Ruby, muitos desenvolvedores que programam nessa linguagem têm buscado aprender o Elixir também.

A cada dia que passa, a adoção dessa linguagem aumenta mais.

6. Quando Elixir não é a melhor opção?

Assim como todas as linguagens o Elixir não é bala de prata. Ela não foi feita para cobrir todos os casos de uso possíveis, por mais que possa parecer. Existem, principalmente, algumas situações em que o uso do Elixir não é o ideal:

  • Processamento computacional pesado - Não é algo que o core team do Erlang/Elixir está muito preocupado. Além disso, já existem ótimas ferramentas utilizando Python, Matlab ou R;

  • Deep Learning - Existem algumas ferramentas rodando em Elixir, mas existem ferramentas de Deep Learning mais robustas e validadas em Python, por exemplo;

  • Mobile apps - Hoje o Elixir não é uma linguagem viável para desenvolvimento mobile. Seria muito legal utilizar o Elixir para desenvolver aplicativos! Quem sabe no futuro?

Espero ter conseguido compartilhar com você um pouco do que aprendi ao longo dos anos trabalhando com Elixir e ter esclarecido dúvidas que surgem no momento da decisão de tecnologia em um novo projeto.

Aproveito e deixo a indicação de alguns livros que usei no processo de aprendizagem que são ótimos para aprofundar o conhecimento:

Se você ficou com alguma dúvida mesmo após a leitura, entre em contato com a gente.

Até a próxima!

la_ateliware_banner-vaga_870x200.png

Peterson F. dos Santos
Founder at ateliware | Artesão de software, interessado em programação, open source, produtos digitais e internet.