Alura > Cursos de Programação > Cursos de Elixir > Conteúdos de Elixir > Primeiras aulas do curso Elixir Parte 3: Conhecendo o ecossistema Elixir

Elixir Parte 3: Conhecendo o ecossistema Elixir

Ecossistema - Apresentação

Sejam muito bem-vindos à Alura. Eu sou o Vinicius Dias e vou guiar vocês nesse treinamento onde vamos criar uma aplicação com Elixir.

Já adquirimos certo conhecimento com Elixir, já sabemos um pouco da sintaxe básica, já aprendemos sobre pattern matching, bastante sobre recursão e até formas de execução do código Elixir.

Mas nesse treinamento vamos criar uma aplicação real. Inclusive eu tenho um gerenciador de tarefas da Erlang, rodando e mostrando os processos que vamos criar.

Teremos um agendador de tarefas que de minuto em minuto vai enviar uma mensagem para um outro processo, que é um servidor que criamos. Essa mensagem será recebida e um número aleatório será escrito no arquivo. Ou seja, de minuto em minuto o número vai mudar.

Claro que essa aplicação parece simples, mas para isso teremos que aprender bastante coisa interessante.

Começaremos falando do ecossistema do Elixir, como funciona se um processo morrer, como buscar dependências externas e como unir isso tudo.

Depois daremos um passo atrás e entenderemos o que é esse conceito de processos, que é diferente no sistema operacional e na Erlang, e, por consequência, no Elixir. Então falaremos bastante sobre processos, comunicação entre eles e abstrações.

Depois disso estaremos prontos para criar uma tarefa utilizando o Mix, que é uma ferramenta bastante interessante. A partir disso poderemos criar uma aplicação real. E essa aplicação vai gerenciar esses dois processos diferentes se comunicando.

No final de tudo conseguiremos executar testes. Então não só nós vamos executar os testes que já vêm por padrão, mas vamos entender o que é o tal do doctest, criar testes nossos até utilizando Mox e recursos da própria Erlang.

Então vale muito a pena acompanhar esse treinamento, e se em algum momento você tiver alguma dúvida, não hesite. Existe um fórum para alunos e você pode abrir sua dúvida lá.

Eu tento responder pessoalmente sempre que possível, mas quando eu não consigo, temos uma comunidade de alunos, de moderadores e instrutores muito solícita, e com certeza alguém vai conseguir te ajudar.

Agora chega de falar sobre o que veremos e vamos começar a ver. No próximo vídeo já começamos a entender um pouco sobre o ecossistema do Elixir.

Ecossistema - Conhecendo o Hex

Bem-vindos de volta. Como eu comentei na introdução, antes de entrarmos em código, antes de escrevermos alguma coisa, vamos conhecer o ecossistema de Elixir.

O que fizemos até agora nos treinamentos anteriores foi escrever código em Elixir, chegamos a compilar um módulo em Elixir, mas ainda não criamos uma aplicação em si. E antes de criarmos uma aplicação existem alguns conhecimentos que precisamos para entender como tudo funciona e como tudo se une.

Então uma das primeiras coisas que falaremos é sobre gerenciamento de dependências. Não é comum escrevermos todo o código necessário para fazer tudo na nossa aplicação. Por exemplo, se precisamos realizar log de alguma coisa, com certeza alguém já criou um código que é especializado em fazer log. Se eu preciso me autenticar com Facebook, alguém já criou um código assim.

Então existem muitos códigos já criados pela comunidade, por outros desenvolvedores que podemos utilizar na nossa aplicação.

E assim como JavaScript tem o npm, o PHP tem Composer, o C Sharp tem o NuGet, cada linguagem tem um gerenciador de dependências, com Elixir isso não é diferente: temos o Hex.

Dando uma olhada na minha tela, se eu entrar no site hex.pm vemos o site do package manager para o ecossistema de Erlang. Repara que ele não diz que é um package manager para Elixir. Ele é pra o ecossistema de Erlang.

Então nós encontraremos dependências que funcionam na máquina virtual do Erlang. E como já comentamos, Elixir roda nessa máquina virtual.

Vamos imaginar que eu queira pesquisar os pacotes, então vou entrar em “Packages”, e vou ordenar pelo número total de downloads. Vamos ver quais pacotes têm mais downloads. Repara que esse tal de “Jason” é uma forma de você parsear e gerar JSON utilizando Elixir.

Então ele tem uma lista de vários pacotes e podemos pesquisar alguma coisa. Por exemplo, se eu pesquisar “web” vamos ver o que aparece.

Ele mostra algumas coisas relacionadas a web, inclusive um framework de desenvolvimento web.

Nós não vamos utilizá-lo nesse treinamento, mas ele é o framework mais comum de desenvolvimento web utilizando Elixir. Então vale a pena dar uma olhada depois que terminarmos esse treinamento.

Continuando, conseguimos pesquisar dependências. E quando clicamos em alguma dessas dependências existem várias informações.

No lado direito da tela conseguimos ver como utilizar essa dependência, e veremos na prática mais para frente, mas temos alguns links. Temos um link para uma documentação e um link para o GitHub. Vou abrir ambos numa nova aba.

Repara que todos, ou pelo menos a maioria dos pacotes, são públicos, estão no GitHub. Existe a possibilidade de você disponibilizar, existe a possibilidade de você ter pacotes em repositórios privados, mas a maioria deles estará em repositórios públicos, pelo menos os que estão nessa busca pública.

Então conseguimos, além de conferir o código, dar uma olhada na documentação e tudo que está no repositório dele propriamente dito.

Mas além do repositório, como eu disse, existe um link para uma documentação online. Isso é outra coisa interessante do ecossistema de Elixir. Muito do que escrevemos é passível de ser documentado diretamente no código.

De novo, esse é outro assunto que não entraremos a fundo nesse treinamento, mas é possível que no código você gere algo como essa documentação.

Então é muito comum que as bibliotecas sejam muito bem documentadas e que exista esse padrão de como você tem uma introdução, seu pacote, depois todas as funções e etc.

Mas enfim, já falamos bastante sobre o Hex, que é o package manager do Elixir, só que ainda não sabemos como uma aplicação pode ficar rodando. Então vamos entender um pouco melhor sobre outra parte do ecossistema do Elixir no próximo vídeo.

Ecossistema - Supervisor

Em treinamentos anteriores eu comentei que Elixir é muito utilizado quando você precisa de uma aplicação que será tolerante a falha. Um exemplo de aplicação que roda utilizando a máquina virtual do Erlang é o WhatsApp, que é muito utilizado no Brasil.

Imagina se um processo do WhatsApp sai do ar. É necessário que alguma ação seja tomada para que esse processo seja iniciado de novo.

Então é muito incomum que o WhatsApp por si só saia do ar. Quando acontece uma indisponibilidade vários servidores do Facebook caíram.

Outra coisa que eu já comentei que roda utilizando Erlang é a telefonia. É muito provável que quando você faz uma ligação esses dados estejam sendo trafegados através de um sistema utilizando Erlang.

Repare que aplicações muito críticas utilizam essa máquina virtual, essa forma de rodar código. E por que será que isso acontece? Existem algumas formas de monitorarmos nossa aplicação e garantir que ela funcione.

Mas imagina que você está executando um processo, você está gerenciando um servidor web. Você subiu o seu Nginx e você recebeu uma notificação que o processo do NginX morreu.

Então você vai entrar no servidor e iniciar de novo esse processo para que as requisições continuem chegando. Nesse caso o seu papel está sendo de supervisor do processo do seu servidor web.

Você fica observando se o processo está ok e se acontecer alguma coisa e esse processo não estiver mais ok, você o inicia de novo.

Isso funciona, só que funciona mal. Imagina que o processo cai de madrugada e você não está monitorando, porque você é uma pessoa.

Então a Erlang já fornece uma forma de você ter isso automaticamente, sem você precisar instalar nada a mais. E o nome disso é Supervisor, ou seja, supervisor. Vamos dar uma olhada nesta imagem.

Podemos criar o que é conhecido como uma árvore de supervisores, ou Supervision Tree. Normalmente a nossa aplicação terá um processo supervisor como início, como a raiz dessa árvore.

Esse supervisor pode ter processos filhos. Então podemos ter que um outro supervisor e mais um supervisor. Esses processos filhos podem ser também supervisores. E embaixo desse supervisores temos processos executando alguma coisa.

Imagina que um dos processos é um servidor web. Ele está ouvindo conexões. E quando chega uma conexão esse processo se comunica com outro, que vai gerenciar, processar essa requisição.

Só que esse processo precisa se comunicar com um banco de dados. Então ele pode se comunicar com outro processo que acessa o banco de dados.

Repara que se alguma coisa cair, um supervisor já vai levantar isso de novo, mas uma outra parte da minha aplicação não é afetada. Por essa natureza de como o Erlang roda temos aplicações muito tolerantes a falhas.

E também, em cima disso, repara que isso pode ser muito performático. Porque de novo, eu tenho um processo o meu servidor web; outro processo processando essa requisição; outro que vai realizar uma conexão com banco de dados; talvez um outro para ler arquivos; outro ainda para fazer requisições HTTP.

Então eu posso separar todas as responsabilidades do meu sistema em processos. E talvez você esteja pensando que você vai estourar o número de processadores que você tem, o número de núcleos do processador. Mas sobre isso falaremos um pouco mais para frente.

A ideia é entender que conseguimos ter cada parte da nossa aplicação isolada, executando de forma isolada das outras, e podendo realizar tarefas que inclusive venham a falhar. E se falhar tudo bem, porque tem um supervisor que vai levantar esse processo de novo.

Então só para vermos um exemplo do que é possível, mas não é o que vamos implementar nesse curso, podemos ter uma aplicação inteira rodando com vários processos.

![])(https://caelum-online-public.s3.amazonaws.com/2323+elixir+part+3/Transcri%C3%A7%C3%A3o+/Aula1_video3_imagem2.png)

Repara que eu tenho um processo de servidor web; eu tenho outro processo para gerenciar sessões; eu tenho outro processo que gerencia armazenamento de dados e dentro desse armazenamento eu posso ter um pool de conexões, talvez algum banco de dados, por exemplo. E tem um outro processo para cuidar de cache.

Então repara que eu posso ter vários processos com responsabilidades muito bem definidas. E essa é uma das belezas de se trabalhar com Elixir, conseguimos atingir esse tipo de aplicação.

De novo, nesse treinamento não vamos chegar em algo tão complexo. Mas vamos utilizar um pouco desse conceito de supervisão.

Só que para conseguirmos ter uma aplicação completa ainda precisamos de uma outra ferramenta. Já falamos sobre o gerenciador de dependências, o Hex, e falamos sobre o supervisor da Erlang.

Só que para que isso tudo funcione nós precisamos criar um projeto. Então no próximo vídeo vamos conversar um pouco sobre o projeto.

Sobre o curso Elixir Parte 3: Conhecendo o ecossistema Elixir

O curso Elixir Parte 3: Conhecendo o ecossistema Elixir possui 108 minutos de vídeos, em um total de 45 atividades. Gostou? Conheça nossos outros cursos de Elixir em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Elixir acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas