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

O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma linguagem que é usada no mundo inteiro @ Elixir Brasil 2019

O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma linguagem que é usada no mundo inteiro @ Elixir Brasil 2019

Palestra apresentada na Elixir Brasil 2019

Plataformatec

May 25, 2019
Tweet

More Decks by Plataformatec

Other Decks in Programming

Transcript

  1. O case da Plataformatec com o Elixir como uma empresa

    brasileira criou uma linguagem que é usada no mundo inteiro
  2. The free lunch is over “The biggest sea change in

    software development since the OO revolution is knocking at the door”
  3. E daí? Performance free lunch Por muitos anos, o avanço

    nas CPUs fazia nosso software ficar mais rápido sem fazermos nada”
  4. Free lunch is over A partir de ~2003, o clock

    speed parou de crescer como antes. Se não fosse assim, hoje seria normal termos CPUs de 10 GHz.
  5. Agora, as CPUs evoluem de um modo diferente Passado Presente

    e futuro Clock speed Hyperthreading Execution optimization Multicore Cache Cache
  6. Agora, as CPUs evoluem de um modo diferente Passado Presente

    e futuro Clock speed Hyperthreading Execution optimization Multicore Cache Cache
  7. If you want your application to benefit from the continued

    exponential throughput advances in new processors, it will need to be a well-written concurrent (usually multithreaded) application - Herb Sutter “
  8. Lei de Amdahl Quanto menos concorrente for seu código, menos

    velocidade ele vai ganhar com mais cores Checar se faz sentido mudar de “concorrente" para “paralelo"
  9. Tirar mais benefício da evolução de multicore usando mais concorrência?

    Tirar menos benefício da evolução de multicore usando menos concorrência?
  10. Tirar mais benefício da evolução de multicore usando mais concorrência!

    Tirar menos benefício da evolução de multicore usando menos concorrência?
  11. The vast majority of programmers today don’t grok concurrency, just

    as the vast majority of programmers 15 years ago didn’t yet grok objects - Herb Sutter “ 2005: 14 anos atrás
  12. Seu código Runtime da linguagem Sistema operacional CPU Thread Thread

    é uma abstração de baixo nível Você está aqui
  13. Seu código Runtime da linguagem Sistema operacional CPU Abstração nova

    de concorrência Precisamos de uma nova abstração Você está aqui
  14. Funcional Imutabilidade: quando o estado não muda, pode ser acessado

    por várias threads sem a necessidade de locks (concorrência) Clojure Haskell Por que chamaram atenção? Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas máquinas e com alta disponibilidade
  15. Funcional Imutabilidade: quando o estado não muda, pode ser acessado

    por várias threads sem a necessidade de locks (concorrência) Clojure Haskell Por que chamaram atenção? Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas máquinas e com alta disponibilidade
  16. Funcional Imutabilidade: quando o estado não muda, pode ser acessado

    por várias threads sem a necessidade de locks (concorrência) Clojure Haskell Por que chamaram atenção? Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas máquinas e com alta disponibilidade
  17. Funcional Imutabilidade: quando o estado não muda, pode ser acessado

    por várias threads sem a necessidade de locks (concorrência) Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas falhas e alta disponibilidade {
  18. Funcional Imutabilidade: quando o estado não muda, pode ser acessado

    por várias threads sem a necessidade de locks (concorrência) Abordagem moderna Funcionalidades como polimorfismo e meta- programação Distribuição e tolerância a falha Suporte nativo a software rodando em múltiplas falhas e alta disponibilidade {
  19. CONCORRÊNCIA DISTRIBUIÇÃO TOLERÂNCIA A FALHA A Erlang VM foi construída

    pensando em: Concorrência, distribuição e tolerância a falhas são nativas, baseados em primitivas da VM, ao invés de em bibliotecas externas { {
  20. 2011 “Elixir” em abril de 2011 Modelo de “objetos” Tinha

    um modelo de objetos baseado em protypes Lento Muito lento. Eval em todo lugar Quebrando compatibilidade com a VM Quebrou o hot code swapping do Erlang
  21. Direcionadores do Elixir Repensando para onde o design da linguagem

    deveria ir Produtividade Extensibilidade Compatibilidade
  22. E daí que acho que a gente deveria investir meu

    tempo full time nisso 2011 2012
  23. Signatário do manifesto ágil Fundador da Pragmatic Programmers Escreveu o

    primeiro livro em inglês sobre Ruby Dave thomas
  24. Jan/12 Feb/12 M ar/12 Apr/12 M ay/12 Jun/12 Jul/12 Aug/12

    Sep/12 O ct/12 N ov/12 Dec/12 Jan/13 Feb/13 M ar/13 Apr/13 M ay/13 Jun/13 Jul/13 Aug/13 Pageviews do elixir-lang.org (efeito Dave Thomas)
  25. 2012 Lançamento do Elixir Maio 2013 Criador do Erlang publica

    que ficou animado com Elixir Dave Thomas anuncia seu livro sobre Elixir Maio 2013
  26. It didn’t take long, but pretty soon my gut feeling

    kicked in. This is good shit. - Joe Armstrong, creator of Erlang A week with Elixir “ ” https://joearms.github.io/published/2013-05-31-a-week-with-elixir.html
  27. 2013 Dave Thomas anuncia seu livro sobre Elixir Junho 2013

    O’Reilly anuncia criação de livro sobre Elixir Criador do Erlang publica que ficou animado com Elixir 2013
  28. 2013 Criador do Erlang publica que ficou animado com Elixir

    Primeira ElixirConf O’Reilly anuncia criação de livro sobre Elixir 2013 2014
  29. 2013 O’Reilly anuncia criação de livro sobre Elixir 2014 Phoenix

    Primeira ElixirConf 2014 Phoenix, web framework for the new web
  30. Phoenix 2016 GenStage e Flow Nerves 2014 Data ingestion and

    data processing with: 2015 Streaming Concurrency Back-pressure
  31. Nerves 2016 Nosso primeiro cliente de Elixir! GenStage e Flow

    2015 1º retorno financeiro para Plataformatec 2016 t 2012 2013 2014 2015 2016 $$ $$ $$ $$ $$ $
  32. GenStage e Flow 2016 Elixir sai na Gartner Nosso primeiro

    cliente de Elixir! 2016 Elixir sai no mapa de linguagens da Gartner 2016 IT Market Clock for Programming Languages, 2016
  33. GenStage e Flow 2019 Hoje Nosso primeiro cliente de Elixir!

    Como está o ecossistema de Elixir hoje? 2016 2016
  34. O poder do open source Bibliotecas Meetups Livros 8700+ 200+

    30+ 15+ Conferências O ecossistema Elixir em 2019
  35. O Elixir é maior que a Plataformatec Começamos a comunidade.

    Não somos donos dela. Fazemos parte dela. Plataformatec ⊂ Elixir
  36. Por que o Elixir tem crescido? O que tem feito

    os desenvolvedores e empresas adotarem Elixir O futuro é concorrente Te permite pensar diferente Ferramental para diferentes domínios
  37. Concurrency is the next major revolution in how we write

    software - Herb Sutter The Free lunch is over, 2005 “ ” O “futuro de 2005” é hoje A VM do Erlang foi projetada para concorrência O Elixir roda na VM do Erlang
  38. Doing concurrency in Erlang or Elixir versus other languages is

    a bit like doing branches in Git vs Subversion. In subversion it was very complicated to do - and I never did it. In Git it is a lot easier and I do it all the time. - Elixir, The next big language for the web “ http://www.creativedeletion.com/2015/04/19/elixir_next_language.html
  39. RESPONSIVO DISTRIBUÍDO RESILIENTE Usada de modo correto, concorrência te ajuda

    a fazer software: Concorrência vai além de paralelismo com multicore { {
  40. Responsive Elastic Message Driven Resilient Elastic The system stays responsive

    under varying workload Message Driven Reactive Systems rely on asynchronous message-passing to establish a boundary between components that ensures loose coupling, isolation and location transparency Responsive The system responds in a timely manner if at all possible Resilient The system stays responsive in the face of failure Reactive manifesto https://www.reactivemanifesto.org/
  41. Elastic Message Driven Resilient Responsive Responsive systems focus on providing

    rapid and consistent response times “ This is microseconds, a fraction of a milisecond, which is crazy fast.” http://www.akitaonrails.com/2015/10/27/how-fast-is-elixir-phoenix
  42. Elastic Message Driven Resilient Responsive Responsive systems focus on providing

    rapid and consistent response times O preemptive multitasking e o garbage collection por processo do Elixir/OTP permitem a entrega de um response time previsível
  43. Elastic Message Driven Resilient Responsive The system stays responsive in

    the face of failure. (…). Failures are contained within each component, (…) Recovery of each component is delegated to another (external) component (…) Web Stats Supervisor • Em Elixir, todo código roda dentro de processos • Processos são isolados um dos outros • Processos rodam de modo concorrente • Supervisor é um processo que supervisiona outros processos
  44. Elastic Message Driven Resilient Responsive The system stays responsive under

    varying workload. • Phoenix out of the box • 2 milhões de conexões websocket simultâneas • 0 timeouts • 1 segundo para fazer brodcast http://phoenixframework.org/blog/the-road-to-2-million-websocket-connections
  45. Elastic Message Driven Resilient Responsive Reactive Systems rely on asynchronous

    message- passing to establish a boundary between components that ensures loose coupling, isolation and location transparency No Elixir, message-passing é o modelo padrão de comunicação entre processos. É o “actor model”.
  46. Elastic Message Driven Resilient Responsive Reactive Systems rely on asynchronous

    message- passing to establish a boundary between components that ensures loose coupling, isolation and location transparency “When sending a message, it doesn’t matter if the recipient process is on the same node or on another node, the VM will be able to deliver the message in both cases” https://elixir-lang.org/getting-started/mix-otp/distributed-tasks-and-configuration.html
  47. Tudo que você faz na sua máquina deveria usar todos

    os cores. Bootar sua aplicação, compilar código, resolver dependências, rodar os testes etc. Até o seu relógio tem 2 cores. Concorrência não é mais a exceção, é a regra. “ http://blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/
  48. Por que o Elixir tem crescido? O que tem feito

    os desenvolvedores e empresas adotarem Elixir O futuro é concorrente Te permite pensar diferente Ferramental para diferentes domínios
  49. Por que o Elixir tem crescido? O que tem feito

    os desenvolvedores e empresas adotarem Elixir O futuro é concorrente Te permite pensar diferente Ferramental para diferentes domínios
  50. O Elixir tem ferramental para diferentes domínios técnicos Web apps,

    APIs, backend for mobile and IoT devices Embedded software Data ingestion and data processing GenStage Flow Broadway
  51. Entendi, concorrência é bom para fazer software reativo, com alta

    performance, escalável, distribuído, que não cai etc. - Alguém “
  52. Mas minha app é muito simples. Não preciso de tudo

    isso. Não preciso de concorrência. - Alguém “
  53. The free lunch is over O futuro é concorrente Quero

    estar pronto para construir o software do futuro Eu não sei, mas sei que: { { Quais serão os requisitos do software de amanhã?
  54. Pontos-chave Como uma empresa decide criar uma nova linguagem? Como

    sair do nada para uma comunidade mundial? Você não precisa ser grande para causar um grande impacto
  55. O FUTURO É CONCORRENTE “The free lunch is over”. Para

    se beneficiar da evolução das CPUs, você precisa escrever software concorrente. CONCORRÊNCIA DEVERIA SER USUAL Criar uma ferramenta que permita que fazer concorrência seja simples. Que nem o Git fez para branches comparado com SVN. Como uma empresa decide criar uma nova linguagem ALAVANCAR UMA VM FEITA PARA CONCORRÊNCIA A VM do Erlang foi projetada para concorrência e é uma tecnologia madura. Mais pessoas deveriam usá- la. “Connecting the dots”
  56. VISÃO Construir uma ferramenta que esteja alinhada com uma tendência

    mundial: “the free lunch is over” EXECUÇÃO E PERSISTÊNCIA Demorou 5 anos até termos algum retorno financeiro Como sair do nada para uma comunidade mundial? COMUNIDADE OPEN SOURCE Não seria possível para Plataformatec sozinha desenvolver o ecossistema inteiro
  57. Você não precisa ser grande para causar um grande impacto

    na indústria de software 134k 180k 10k 70