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

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

Palestra apresentada na QCon São Paulo 2018

7c12adb8b5521c060ab4630360a4fa27?s=128

Plataformatec

May 11, 2018
Tweet

Transcript

  1. 1.

    O case da Plataformatec com o Elixir como uma empresa

    brasileira criou uma linguagem que é usada no mundo inteiro
  2. 8.
  3. 10.
  4. 19.

    The free lunch is over “The biggest sea change in

    software development since the OO revolution is knocking at the door”
  5. 22.

    E daí? Performance free lunch Por muitos anos, o avanço

    nas CPUs fazia nosso software ficar mais rápido sem fazermos nada”
  6. 23.

    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.
  7. 25.

    Agora, as CPUs evoluem de um modo diferente Passado Presente

    e futuro Clock speed Hyperthreading Execution optimization Multicore Cache Cache
  8. 26.

    Agora, as CPUs evoluem de um modo diferente Passado Presente

    e futuro Clock speed Hyperthreading Execution optimization Multicore Cache Cache
  9. 27.

    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 “
  10. 29.

    Lei de Amdahl Quanto menos concorrente for seu código, menos

    velocidade ele vai ganhar com mais cores
  11. 30.

    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?
  12. 31.

    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?
  13. 37.

    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: 13 anos atrás
  14. 42.

    Seu código Runtime da linguagem Sistema operacional CPU Thread Thread

    é uma abstração de baixo nível Você está aqui
  15. 43.

    Seu código Runtime da linguagem Sistema operacional CPU Abstração nova

    de concorrência Precisamos de uma nova abstração Você está aqui
  16. 45.
  17. 47.

    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
  18. 48.

    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
  19. 49.

    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
  20. 50.

    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 {
  21. 51.

    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 {
  22. 53.

    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 { {
  23. 58.

    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
  24. 62.
  25. 63.

    Direcionadores do Elixir Repensando para onde o design da linguagem

    deveria ir Produtividade Extensibilidade Compatibilidade
  26. 74.

    E daí que acho que a gente deveria investir meu

    tempo full time nisso 2011 2012
  27. 77.
  28. 79.
  29. 86.

    Signatário do manifesto ágil Fundador da Pragmatic Programmers Escreveu o

    primeiro livro em inglês sobre Ruby Dave thomas
  30. 87.

    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)
  31. 89.

    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
  32. 90.

    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
  33. 91.

    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
  34. 92.

    2013 Criador do Erlang publica que ficou animado com Elixir

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

    2013 O’Reilly anuncia criação de livro sobre Elixir 2014 Phoenix

    Primeira ElixirConf 2014 Phoenix, web framework for the new web
  36. 95.

    Phoenix 2016 GenStage e Flow Nerves 2014 Data ingestion and

    data processing with: 2015 Streaming Concurrency Back-pressure
  37. 96.

    Nerves 2016 Nosso primeiro cliente de Elixir! GenStage e Flow

    2015 1º retorno financeiro para Plataformatec 2016 t 2012 2013 2014 2015 2016 $$ $$ $$ $$ $$ $
  38. 97.

    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
  39. 98.

    GenStage e Flow 2018 Hoje Nosso primeiro cliente de Elixir!

    Como está o ecossistema de Elixir hoje? 2016 2016
  40. 104.

    O poder do open source Bibliotecas Meetups Livros 6400+ 190+

    25+ 15+ Conferências O ecossistema Elixir em 2018
  41. 105.

    O Elixir é maior que a Plataformatec Começamos a comunidade.

    Não somos donos dela. Plataformatec ⊂ Elixir
  42. 107.

    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
  43. 108.

    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
  44. 110.

    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
  45. 112.

    RESPONSIVO DISTRIBUÍDO RESILIENTE Usada de modo correto, concorrência te ajuda

    a fazer software: Concorrência vai além de paralelismo com multicore { {
  46. 113.

    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/
  47. 115.

    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
  48. 116.

    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
  49. 117.

    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
  50. 118.

    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
  51. 119.

    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”.
  52. 120.

    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
  53. 122.

    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. “ http://blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/
  54. 123.

    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
  55. 131.
  56. 132.
  57. 140.

    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
  58. 141.

    O Elixir tem ferramental para diferentes domínios técnicos Web apps/Services,

    backend for mobile and IoT devices Embedded software Data ingestion and data processing (“medium data”) GenStage Flow
  59. 144.

    Entendi, concorrência é bom para fazer software reativo, com alta

    performance, escalável, distribuído, que não cai etc. - Alguém “
  60. 145.

    Mas minha app é muito simples. Não preciso de tudo

    isso. Não preciso de concorrência. - Alguém “
  61. 148.

    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ã?
  62. 149.

    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
  63. 150.

    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”
  64. 151.

    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
  65. 152.

    Você não precisa ser grande para causar um grande impacto

    na indústria de software 134k 180k 10k 55
  66. 153.