Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Processamento paralelo de mensagens em Elixir

Avatar for erich erich
November 27, 2018

Processamento paralelo de mensagens em Elixir

Avatar for erich

erich

November 27, 2018
Tweet

Other Decks in Programming

Transcript

  1. Quem sou eu? - Erich Rodrigues Ferrares - 23 anos

    - FATEC e UNIFESP - Na Quero há quase 2 anos - #TeamVendas - #TeamRelacionamento - #TeamAdmissoes - Trabalhei com o time de relacionamento a maior parte do tempo
  2. Time Relacionamento - Vencedor por dois anos consecutivos do prêmio

    de melhor atendimento do Brasil - 150+ pessoas
  3. OPA - Sistema utilizado pela nossa equipe de relacionamento (Vendas

    e Pós Vendas) - Usado para fazer e atender ligações - Interações com os alunos - Integrado com Whatsapp - Relatórios dos guias - Informações de todas os alunos, bolsas e faculdades
  4. OPA Ferramentas - Linguagem Elixir (Primeiro serviço na empresa) -

    Framework Phoenix - VueJS / Nuxt - Banco PostgreSQL - Algolia (Serviço de busca)
  5. Whatsapp - API Closed Beta - Entre as duas primeiras

    empresas no Brasil a testar - YCombinator - Vantagem técnica e estratégica
  6. Primeira abordagem Exemplo de códigos - Mensagem chegando - Processando

    a mensagem sincronamente - Vue fazendo polling
  7. Resultado Problemas - Tempo entre a mensagem ser enviada, até

    chegar no guia - Block desnecessário - Tempo de interação - Desperdício de recursos - Limite de conexões com o banco - ok - Limite de concorrência no mesmo processo - ok
  8. Processos em Elixir - Gerenciados pela VM ao invés do

    SO - Leves e rápidas de se criar - Utiliza pouca memória, por isso pode criar quantos processos precisar - Erlang cria um schedule por core do processador, que cuida da execução - Erlang consegue fazer um load balancing dos schedulers
  9. Processos em Elixir - Não compartilham memória, só funcionam por

    passagem de mensagens - Assim não precisa tratar locks ou bugs por acessos simultâneos
  10. Spawn - Mecanismo básico para se criar um novo processo

    - Recebe uma função que será executada em outro processo
  11. Genserver - Módulo para implementar o lado server de uma

    relação client-server - Mantém estado - Executa código assíncrono
  12. Channels - Torna possível a comunicação entre milhões de processos

    - Alguns casos de exemplo: - Notícias em tempo real - Rastreamento - Eventos em jogos multiplayer - Monitoramento de sensores - Salas de Chat
  13. Segunda abordagem - Tempo entre a mensagem ser enviada, até

    chegar no guia - Ok - Block desnecessário - Ok - Tempo de interação - Ok - Desperdício de recursos - Ok - Limite de conexões com o banco - Ok - Limite de concorrência no mesmo processo - Ok
  14. Referências - Elixir - https://elixir-lang.org/docs.html - Phoenix - https://phoenixframework.org/ -

    Nuxt - https://nuxtjs.org/ - Poolboy - https://elixirschool.com/pt/lessons/libraries/poolboy/ - Algolia - https://www.algolia.com