Pensamentos sobre o Elixir: prós e contras da ferramenta mais popular para desenvolvedores de alta carga



Por que o Elixir / Phoenix está alcançando uma taxa tão alta de adoção no setor de desenvolvimento de software? Quais são os melhores casos de uso desse idioma? Existem desvantagens ao usá-lo? Conversamos com Sergiy Kukunin, desenvolvedor full-stack do Spotlight e especialista em Elixir, para encontrar respostas para essas e outras perguntas.

Ivan: por que o Elixir está se tornando tão popular?


Sergey: Elixir apresenta princípios que raramente são encontrados em outros idiomas. Além disso, é baseado em Erlang, usado para a construção de redes de telecomunicações. Como resultado, temos uma ferramenta altamente confiável para projetos de alta carga, comprovada ao longo do tempo.

Isso é essencial, pois nos últimos anos o progresso tecnológico do hardware está diminuindo. O desempenho de um núcleo da CPU atingiu o limite físico de 5 GHz. A única coisa que os fabricantes criaram para aumentar o desempenho do hardware é usar cada vez mais núcleos.

O problema dessa abordagem é que você precisa de um software capaz de trabalhar com vários núcleos em paralelo. As linguagens de programação clássicas são pouco adequadas para essas tarefas. Ao falar sobre multithreading em, digamos, C, sabemos que há memória compartilhada e vários threads que podem competir por recursos. Em tais condições, é difícil criar um código confiável para projetos de alta carga devido a condições aleatórias de corrida e falhas de segmentação.

O Elixir está resolvendo efetivamente esse problema, introduzindo uma nova abordagem para multithreading.

Quais são as principais vantagens desta tecnologia?


A primeira característica essencial da linguagem que vem de sua natureza funcional é a imutabilidade. Depois de criar e carregar a estrutura de dados (não há objetos nas linguagens funcionais), não podemos alterá-la, exceto recriá-la do zero novamente.

Por um lado, essa peculiaridade aumenta o limite de entrada para o uso do Elixir, pois você não pode escolher uma parte de um aplicativo e tentar gravar algo lá repetidamente, e acabar com tudo em funcionamento. Por outro lado, isso faz com que o engenheiro planeje a arquitetura de um aplicativo mais detalhadamente.

A máquina virtual Elixir é literalmente um mini OS, em que cada processo possui seu próprio espaço de memória. Nenhum outro processo pode entrar nele, emprestando seus recursos. Tudo o que um processo pode fazer é enviar uma mensagem para outro processo, sem controle de como ele irá processar a mensagem. Além disso, como é uma linguagem funcional, não há estruturas de dados que não possam ser transmitidas entre processos, mesmo através da rede (diferentemente da abordagem usada nas linguagens orientadas a objetos).

É mais difícil escrever o código Elixir devido às múltiplas restrições que o tempo de execução aplica e leva mais tempo do que escrever algo usando Java. No entanto, a confiabilidade geral de um aplicativo é muito alta.

Existem alternativas ao Elixir?


A abordagem mais semelhante são as corotinas usadas no idioma Go. Além disso, os greenlets e as fibras do Python no Ruby fornecem uma abordagem semelhante, mas não há tempo de execução tão robusto e rápido disponível para executá-los. O desenvolvedor deve decidir como executar essas rotinas, enquanto Erlang lida com isso sozinho.

Qualquer ferramenta tem suas desvantagens. O que são para o Elixir?


O Elixir hoje é uma ferramenta pronta para produção, mas o ecossistema geral de idiomas ainda é um pouco jovem demais. Em particular, isso significa que você não pode simplesmente fazer login no Stack Overflow e encontrar uma resposta para qualquer uma das suas possíveis perguntas, como você pode fazer no Ruby, por exemplo. Sim, existem livros, cursos e alguns blogs, mas você precisará conduzir continuamente suas pesquisas e experiências para resolver muitas tarefas diárias. Esta é a principal desvantagem para mim.

Além disso, é mais difícil testar os aplicativos Elixir, pois os testes de unidade são menos úteis e você precisa se concentrar mais nos de integração. No entanto, você deve se lembrar que quase todas as funções do Elixir são limpas, o que simplifica os testes de unidade: existe uma única saída para cada entrada.

Você poderia descrever o caso ao usar o Elixir para obter o máximo de resultados?


Se você não tem nenhuma necessidade real de oferecer suporte a altas cargas com milhões de solicitações processadas pelo seu aplicativo, o Elixir não é uma ferramenta que você deve se preocupar em usar. No entanto, o Elixir é uma solução perfeita para projetos reais de alta carga. Você pode nem escrever todo o seu aplicativo usando-o, mas usar o Elixir para as partes mais quentes de um sistema sempre será uma boa ideia.

Na era da Internet dinâmica, os usuários esperam velocidades muito altas e uma resposta imediata de qualquer site, especialmente recursos relacionados ao conteúdo. Se, por exemplo, você tem um meio de comunicação on-line com muitas conexões simultâneas de milhares de leitores que desejam receber atualizações de notícias instantaneamente, a mudança para o Elixir tornará sua vida muito mais fácil.

Experiência pessoal: em um projeto, tínhamos um aplicativo da web Node.js. capaz de manter até 20.000 conexões ao mesmo tempo. Depois de se mudar para o Elixir, esse número cresceu para 80.000, sem alterações na lógica de negócios ou em outras áreas. Esse resultado foi possível apenas devido à melhor eficiência do idioma que usamos.

O Elixir permite criar coisas impensáveis ​​há alguns anos, como criar jogos online totalmente renderizados no servidor usando soquetes da web. Existe até um exemplo do jogo de cobra da Web escrito no Elixir sem nenhum código JavaScript.

No entanto, os desenvolvedores devem entender que não há uma bala de prata. O Elixir não pode fornecer mais do que a máquina virtual Erlang tinha inicialmente direito. Ele apenas traduz uma nova sintaxe para que o compilador antigo, porém bom, criado pela Ericsson no final dos anos 90 possa entendê-lo. Este é um exemplo perfeito de como a tecnologia comprovada pelo tempo, combinada com uma nova, pode abrir novas possibilidades para os desenvolvedores, mas sempre existem algumas restrições.

Qual é o seu conselho ao começar a usar o Elixir? Que tecnologia se deve estudar para começar a funcionar mais rapidamente?


Bem, a sintaxe do Elixir tem algumas coisas em comum com o Ruby. Os idiomas são totalmente diferentes, mas é sempre bom ver símbolos e elementos com os quais você está acostumado. O mais simples é usar algumas das novas estruturas de desenvolvimento da Web compatíveis com Elixir. O framework da web mais popular para o Elixir é o Phoenix. Você definitivamente deve experimentá-lo, especialmente se estiver acostumado a usar o Ruby on Rails. Isso simplificará o desenvolvimento, ao mesmo tempo em que torna o aplicativo mais rápido e mais confiável.

Source: https://habr.com/ru/post/pt449522/


All Articles