$30 off During Our Annual Pro Sale. View Details »

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

Plataformatec

May 11, 2018
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 Slide

  2. 2010 Thread-safe hell

    View Slide

  3. 2010 Thread-safe hell
    2018 Elixir no mundo inteiro
    Elixir meetups

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. “ Personagens”
    dessa história

    View Slide

  8. View Slide

  9. RODA NA ERLANG VM
    OPEN SOURCE
    FUNCIONAL

    View Slide

  10. View Slide

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

    View Slide

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

    View Slide

  13. Vamos lá?

    View Slide

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

    View Slide

  15. VAMOS LÁ!

    View Slide

  16. POR QUE CRIAR UMA
    LINGUAGEM NOVA?
    Parte 1

    View Slide

  17. 2010 Thread-safe hell
    Ruby on Rails 2.2

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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.

    View Slide

  24. As CPUs pararam de evoluir?

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  29. Lei de Amdahl
    Quanto menos concorrente for seu
    código, menos velocidade ele
    vai ganhar com mais cores

    View Slide

  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?

    View Slide

  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?

    View Slide

  32. 2010 Thread-safe hell
    Ruby on Rails 2.2

    View Slide

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

    View Slide

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

    View Slide

  35. A BUSCA POR OUTRAS
    TECNOLOGIAS
    Parte 2

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  40. Quanto do código que você escreve hoje
    é concorrente?
    2018: hoje

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  44. Vamos pesquisar outras tecnologias

    View Slide

  45. View Slide

  46. Tecnologias que chamaram atenção
    Clojure Haskell

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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
    {

    View Slide

  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
    {

    View Slide

  52. Por que a Erlang virtual machine?

    View Slide

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

    View Slide

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

    View Slide

  55. O DESENVOLVIMENTO
    DO ELIXIR
    Parte 3

    View Slide

  56. 2011
    O primeiro protótipo

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  62. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  67. 2011
    2012
    Estou brincando em fazer
    uma nova linguagem

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  73. Da hora! E aí?
    2011
    2012

    View Slide

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

    View Slide

  75. Oh really?
    2011
    2012

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  80. Beleza, vamos nessa!
    2011
    2012

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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)

    View Slide

  88. 2013 - 2018
    Do ponto de inflexão até hoje

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  99. 6.400+ bibliotecas
    https://hex.pm

    View Slide

  100. 25+ livros
    https://github.com/sger/ElixirBooks#books

    View Slide

  101. 15+ conferências, 190+ 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 Slide

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

    View Slide

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

    View Slide

  104. O poder do open source
    Bibliotecas Meetups Livros
    6400+ 190+ 25+ 15+
    Conferências
    O ecossistema Elixir em 2018

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  109. Switch
    Switch

    View Slide

  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

    View Slide

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


    View Slide

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

    View Slide

  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/

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

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

    View Slide

  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/

    View Slide

  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

    View Slide

  124. Real-time web

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  128. https://medium.com/mint-digital/stateful-websockets-with-elixirs-genstage-a29eab420c0d

    View Slide

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

    View Slide

  130. Sequential
    code
    elixir

    View Slide

  131. elixir

    View Slide

  132. elixir

    View Slide

  133. Web
    DB Mailer
    Stats
    elixir

    View Slide

  134. Web
    DB Mailer
    Stats
    Sup
    elixir

    View Slide

  135. Web
    DB Mailer
    Stats
    Sup
    App elixir

    View Slide

  136. app2@local
    app1@local
    elixir

    View Slide

  137. View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  142. FINALIZANDO

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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”

    View Slide

  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

    View Slide

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

    View Slide

  153. OBRIGADO!

    View Slide