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

    View full-size slide

  2. 2010 Thread-safe hell

    View full-size slide

  3. 2010 Thread-safe hell
    2019 Elixir no mundo inteiro

    View full-size slide

  4. Por que fazer uma
    linguagem nova?
    2010
    2019
    Thread-safe hell
    Elixir no mundo inteiro

    View full-size slide

  5. Como tomamos essa
    decisão?
    2010
    2019
    Thread-safe hell
    Elixir no mundo inteiro

    View full-size slide

  6. Como open source
    ajudou?
    2010
    2019
    Thread-safe hell
    Elixir no mundo inteiro

    View full-size slide

  7. “ Personagens”
    dessa história

    View full-size slide

  8. RODA NA ERLANG VM
    OPEN SOURCE
    FUNCIONAL

    View full-size slide

  9. Desenvolvimento, consultoria e treinamento
    para startups e empresas digitais
    Elixir
    Especializada em
    Ruby Agile

    View full-size slide

  10. José Valim
    Co-fundador da Plataformatec
    Criador do Elixir

    View full-size slide

  11. Hugo Baraúna
    Co-fundador da Plataformatec
    Engenheiro de computação
    @hugobarauna

    View full-size slide

  12. POR QUE CRIAR UMA
    LINGUAGEM NOVA?
    Parte 1

    View full-size slide

  13. 2010 Thread-safe hell
    Ruby on Rails 2.2

    View full-size slide

  14. Por que thread-safe?
    Algo maior
    por trás

    View full-size slide

  15. The free lunch is over
    “The biggest sea change in software development since the OO revolution is knocking at the door”

    View full-size slide

  16. http://www.gotw.ca/publications/concurrency-ddj.htm

    View full-size slide

  17. Lei de Moore
    “O número de transistors
    em um chip dobra
    a cada 2 anos”

    View full-size slide

  18. E daí?
    Performance free lunch
    Por muitos anos, o avanço nas CPUs fazia
    nosso software ficar mais rápido sem
    fazermos nada”

    View full-size slide

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

    View full-size slide

  20. As CPUs pararam de evoluir?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  24. Concurrency is the next major revolution in how we
    write software
    - Herb Sutter

    View full-size slide

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

    View full-size slide

  26. 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?

    View full-size slide

  27. 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?

    View full-size slide

  28. 2010 Thread-safe hell
    Ruby on Rails 2.2

    View full-size slide

  29. Probably, the greatest cost of concurrency is that
    concurrency really is hard
    - Herb Sutter

    View full-size slide

  30. E se concorrência fosse
    fácil?

    View full-size slide

  31. A BUSCA POR OUTRAS
    TECNOLOGIAS
    Parte 2

    View full-size slide

  32. Todo mundo fala
    Todo mundo faz
    Concorrência
    deveria ser mais fácil

    View full-size slide

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

    View full-size slide

  34. https://news.ycombinator.com/item?id=10096100
    2015: 4 anos atrás

    View full-size slide

  35. https://news.ycombinator.com/item?id=10096100
    2015: 4 anos atrás

    View full-size slide

  36. Quanto do código que você escreve hoje
    é concorrente?
    2019: hoje

    View full-size slide

  37. O problema é o modelo de
    threads e locks?

    View full-size slide

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

    View full-size slide

  39. Seu código
    Runtime da
    linguagem
    Sistema
    operacional
    CPU
    Abstração nova
    de concorrência
    Precisamos de uma
    nova abstração
    Você está aqui

    View full-size slide

  40. Vamos pesquisar outras tecnologias

    View full-size slide

  41. Tecnologias que chamaram atenção
    Clojure Haskell

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  46. 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
    {

    View full-size slide

  47. Por que a Erlang virtual machine?

    View full-size slide

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

    View full-size slide

  49. 30+ anos de desenvolvimento
    A Erlang VM é battle-tested

    View full-size slide

  50. O DESENVOLVIMENTO
    DO ELIXIR
    Parte 3

    View full-size slide

  51. 2011
    O primeiro protótipo

    View full-size slide

  52. 2011
    Explorando o desenvolvimento de uma nova linguagem
    Primeiro commit

    View full-size slide

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

    View full-size slide

  54. 2011
    Explorando o desenvolvimento de uma nova linguagem
    Vale da
    desilusão

    View full-size slide

  55. 2011
    Explorando o desenvolvimento de uma nova linguagem
    Eu consigo!

    View full-size slide

  56. 2011
    Explorando o desenvolvimento de uma nova linguagem
    Não consigo :(

    View full-size slide

  57. Direcionadores
    do Elixir
    Repensando para onde o design da
    linguagem deveria ir
    Produtividade
    Extensibilidade
    Compatibilidade

    View full-size slide

  58. 2011
    Estudando…
    Explorando o desenvolvimento de uma nova linguagem

    View full-size slide

  59. 2011
    Eureka!
    Explorando o desenvolvimento de uma nova linguagem

    View full-size slide

  60. 2012
    A decisão de investimento
    e o lançamento do Elixir

    View full-size slide

  61. 2011
    2012
    Estou brincando em fazer
    uma nova linguagem

    View full-size slide

  62. Hum… conte-me mais
    sobre isso…
    2011
    2012

    View full-size slide

  63. Estava bem difícil ficar
    corrigindo problemas de
    concorrência no Rails
    2011
    2012

    View full-size slide

  64. E existe esse negócio, o
    “free lunch is over”
    2011
    2012

    View full-size slide

  65. O futuro é programação
    concorrente!
    2011
    2012

    View full-size slide

  66. Então decidir tentar fazer
    uma nova linguagem
    2011
    2012

    View full-size slide

  67. Da hora! E aí?
    2011
    2012

    View full-size slide

  68. E daí que acho que a
    gente deveria investir meu
    tempo full time nisso
    2011
    2012

    View full-size slide

  69. Oh really?
    2011
    2012

    View full-size slide

  70. E não tem outra
    linguagem que faz o que tu
    queres?
    2011
    2012

    View full-size slide

  71. A que chega mais perto
    do que pensei é Clojure. Ela
    roda na JVM.
    2011
    2012

    View full-size slide

  72. Acho que seria
    bom ter uma opção de
    linguagem em uma VM
    diferente
    2011
    2012

    View full-size slide

  73. E a VM do Erlang é
    perfeita pro que imagino
    para o futuro
    2011
    2012

    View full-size slide

  74. Beleza, vamos nessa!
    2011
    2012

    View full-size slide

  75. Fevereiro/2012
    Criamos o logo e o site da linguagem

    View full-size slide

  76. 2012 - 2013
    A incerteza e
    o ponto de inflexão

    View full-size slide

  77. 2012 Lançamento do Elixir
    2013 Isso vai funcionar?

    View full-size slide

  78. 2012 Lançamento do Elixir
    Maio
    2013
    Dave Thomas anuncia seu livro
    sobre Elixir

    View full-size slide

  79. Ponto de inflexão
    Dave Thomas começa a evangelizar Elixir

    View full-size slide

  80. Signatário do manifesto
    ágil
    Fundador da Pragmatic
    Programmers
    Escreveu o primeiro livro
    em inglês sobre Ruby
    Dave thomas

    View full-size slide

  81. 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)

    View full-size slide

  82. 2013 - 2019
    Do ponto de inflexão até hoje

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  87. 2013 O’Reilly anuncia criação de livro
    sobre Elixir
    2014 Phoenix
    Primeira ElixirConf
    2014
    Phoenix,
    web framework
    for the new web

    View full-size slide

  88. Primeira ElixirConf
    ~2015 Nerves
    Phoenix
    2014
    Software embarcado
    com Elixir
    2014

    View full-size slide

  89. Phoenix
    2016 GenStage e Flow
    Nerves
    2014
    Data ingestion and
    data processing with:
    2015
    Streaming
    Concurrency
    Back-pressure

    View full-size slide

  90. Nerves
    2016 Nosso primeiro cliente de Elixir!
    GenStage e Flow
    2015
    1º retorno financeiro
    para Plataformatec
    2016
    t
    2012 2013 2014 2015 2016
    $$ $$ $$ $$ $$
    $

    View full-size slide

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

    View full-size slide

  92. GenStage e Flow
    2019 Hoje
    Nosso primeiro cliente de Elixir!
    Como está o
    ecossistema de Elixir
    hoje?
    2016
    2016

    View full-size slide

  93. 8.700+ bibliotecas
    https://hex.pm

    View full-size slide

  94. 30+ livros
    https://github.com/sger/ElixirBooks#books

    View full-size slide

  95. 15+ conferências, 200+ meetups
    https://www.meetup.com/topics/elixir-programming/
    https://elixirforum.com/t/elixir-events-conferences-in-2018/11245
    ElixirConf USA
    ElixirConf Europe
    Elixir Brasil
    Etc …
    Conferências Meetups

    View full-size slide

  96. Vagas de trabalho no mundo inteiro
    http://plataformatec.com.br/elixir-radar/jobs

    View full-size slide

  97. Empresas usando no mundo inteiro
    https://elixir-companies.com

    View full-size slide

  98. O poder do open source
    Bibliotecas Meetups Livros
    8700+ 200+ 30+ 15+
    Conferências
    O ecossistema Elixir em 2019

    View full-size slide

  99. O Elixir é maior
    que a Plataformatec
    Começamos a comunidade.
    Não somos donos dela.
    Fazemos parte dela.
    Plataformatec
    ⊂ Elixir

    View full-size slide

  100. POR QUE O ELIXIR
    TEM CRESCIDO?
    Parte 4
    Na opinião do Hugo Baraúna

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  104. Concurrency is about a
    great deal more than just
    exploiting parallelism


    View full-size slide

  105. RESPONSIVO
    DISTRIBUÍDO
    RESILIENTE
    Usada de modo correto,
    concorrência te ajuda a
    fazer software:
    Concorrência vai além de
    paralelismo com multicore
    {
    {

    View full-size slide

  106. 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/

    View full-size slide

  107. O Elixir/OTP suporta
    o “reactive manifesto” de
    forma nativa
    Elastic Message Driven
    Resilient
    Responsive

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  114. Concorrência ajuda em development
    não apenas em production

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  117. Real-time web

    View full-size slide

  118. Aplicações com UI rica e
    real-time estão aumentando
    a expectativa dos usuários

    View full-size slide

  119. IoT
    traz a necessidade
    de monitoramento
    real-time de múltiplos
    devices

    View full-size slide

  120. Channels
    allow us to easily add soft-realtime features to our applications

    View full-size slide

  121. LiveView
    allow us to easily add soft-realtime features to our applications

    View full-size slide

  122. https://medium.com/qixxit-development/swapping-react-for-phoenix-liveview-db6581f27a14

    View full-size slide

  123. “Nanoservices” architecture
    De “monolito concorrente” a sistema distribuído

    View full-size slide

  124. Sequential
    code
    elixir

    View full-size slide

  125. Web
    DB Mailer
    Stats
    elixir

    View full-size slide

  126. Web
    DB Mailer
    Stats
    Sup
    elixir

    View full-size slide

  127. Web
    DB Mailer
    Stats
    Sup
    App elixir

    View full-size slide

  128. app2@local
    app1@local
    elixir

    View full-size slide

  129. http://blog.plataformatec.com.br/2015/06/elixir-in-times-of-microservices/

    View full-size slide

  130. http://tjheeta.github.io/2016/12/16/dawn-of-the-microlith-monoservices-microservices-with-elixir

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  133. Concurrency is the next major revolution in how we
    write software
    - Herb Sutter

    View full-size slide

  134. Entendi, concorrência é bom para fazer software
    reativo, com alta performance, escalável, distribuído,
    que não cai etc.
    - Alguém

    View full-size slide

  135. Mas minha app é muito simples. Não preciso de tudo
    isso. Não preciso de concorrência.
    - Alguém

    View full-size slide

  136. Sua app de hoje é muito
    simples. E a app de amanhã?

    View full-size slide

  137. Quais serão os requisitos da
    app de amanhã?

    View full-size slide

  138. 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ã?

    View full-size slide

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

    View full-size slide

  140. 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”

    View full-size slide

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

    View full-size slide

  142. Você não precisa ser
    grande para causar
    um grande impacto
    na indústria de
    software
    134k
    180k
    10k
    70

    View full-size slide