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

7c12adb8b5521c060ab4630360a4fa27?s=128

Plataformatec

May 25, 2019
Tweet

Transcript

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

    brasileira criou uma linguagem que é usada no mundo inteiro
  2. 2010 Thread-safe hell

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

  4. Por que fazer uma linguagem nova? 2010 2019 Thread-safe hell

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

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

    mundo inteiro
  7. “ Personagens” dessa história

  8. None
  9. RODA NA ERLANG VM OPEN SOURCE FUNCIONAL

  10. None
  11. Desenvolvimento, consultoria e treinamento para startups e empresas digitais Elixir

    Especializada em Ruby Agile
  12. José Valim Co-fundador da Plataformatec Criador do Elixir

  13. Vamos lá?

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

  15. VAMOS LÁ!

  16. POR QUE CRIAR UMA LINGUAGEM NOVA? Parte 1

  17. 2010 Thread-safe hell Ruby on Rails 2.2

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

  19. The free lunch is over “The biggest sea change in

    software development since the OO revolution is knocking at the door”
  20. http://www.gotw.ca/publications/concurrency-ddj.htm

  21. Lei de Moore “O número de transistors em um chip

    dobra a cada 2 anos”
  22. E daí? Performance free lunch Por muitos anos, o avanço

    nas CPUs fazia nosso software ficar mais rápido sem fazermos nada”
  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.
  24. As CPUs pararam de evoluir?

  25. Agora, as CPUs evoluem de um modo diferente Passado Presente

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

    e futuro Clock speed Hyperthreading Execution optimization Multicore Cache Cache
  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 “
  28. Concurrency is the next major revolution in how we write

    software - Herb Sutter “
  29. 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"
  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?
  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?
  32. 2010 Thread-safe hell Ruby on Rails 2.2

  33. Probably, the greatest cost of concurrency is that concurrency really

    is hard - Herb Sutter “
  34. E se concorrência fosse fácil?

  35. A BUSCA POR OUTRAS TECNOLOGIAS Parte 2

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

    fácil
  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: 14 anos atrás
  38. https://news.ycombinator.com/item?id=10096100 2015: 4 anos atrás

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

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

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

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

    é uma abstração de baixo nível Você está aqui
  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
  44. Vamos pesquisar outras tecnologias

  45. None
  46. Tecnologias que chamaram atenção Clojure Haskell

  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
  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
  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
  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 {
  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 {
  52. Por que a Erlang virtual machine?

  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 { {
  54. 30+ anos de desenvolvimento A Erlang VM é battle-tested

  55. O DESENVOLVIMENTO DO ELIXIR Parte 3

  56. 2011 O primeiro protótipo

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

  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
  59. 2011 Explorando o desenvolvimento de uma nova linguagem Vale da

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

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

    :(
  62. None
  63. Direcionadores do Elixir Repensando para onde o design da linguagem

    deveria ir Produtividade Extensibilidade Compatibilidade
  64. 2011 Estudando… Explorando o desenvolvimento de uma nova linguagem

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

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

  67. 2011 2012 Estou brincando em fazer uma nova linguagem

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

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

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

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

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

  73. Da hora! E aí? 2011 2012

  74. E daí que acho que a gente deveria investir meu

    tempo full time nisso 2011 2012
  75. Oh really? 2011 2012

  76. E não tem outra linguagem que faz o que tu

    queres? 2011 2012
  77. A que chega mais perto do que pensei é Clojure.

    Ela roda na JVM. 2011 2012
  78. Acho que seria bom ter uma opção de linguagem em

    uma VM diferente 2011 2012
  79. E a VM do Erlang é perfeita pro que imagino

    para o futuro 2011 2012
  80. Beleza, vamos nessa! 2011 2012

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

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

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

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

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

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

    primeiro livro em inglês sobre Ruby Dave thomas
  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)
  88. 2013 - 2019 Do ponto de inflexão até hoje

  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
  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
  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
  92. 2013 Criador do Erlang publica que ficou animado com Elixir

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

    Primeira ElixirConf 2014 Phoenix, web framework for the new web
  94. Primeira ElixirConf ~2015 Nerves Phoenix 2014 Software embarcado com Elixir

    2014
  95. Phoenix 2016 GenStage e Flow Nerves 2014 Data ingestion and

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

    2015 1º retorno financeiro para Plataformatec 2016 t 2012 2013 2014 2015 2016 $$ $$ $$ $$ $$ $
  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
  98. GenStage e Flow 2019 Hoje Nosso primeiro cliente de Elixir!

    Como está o ecossistema de Elixir hoje? 2016 2016
  99. 8.700+ bibliotecas https://hex.pm

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

  101. 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
  102. Vagas de trabalho no mundo inteiro http://plataformatec.com.br/elixir-radar/jobs

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

  104. O poder do open source Bibliotecas Meetups Livros 8700+ 200+

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

    Não somos donos dela. Fazemos parte dela. Plataformatec ⊂ Elixir
  106. POR QUE O ELIXIR TEM CRESCIDO? Parte 4 Na opinião

    do Hugo Baraúna
  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
  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
  109. 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
  110. Concurrency is about a great deal more than just exploiting

    parallelism “ ”
  111. RESPONSIVO DISTRIBUÍDO RESILIENTE Usada de modo correto, concorrência te ajuda

    a fazer software: Concorrência vai além de paralelismo com multicore { {
  112. 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/
  113. O Elixir/OTP suporta o “reactive manifesto” de forma nativa Elastic

    Message Driven Resilient Responsive
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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”.
  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 “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
  120. Concorrência ajuda em development não apenas em production

  121. 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/
  122. 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
  123. Real-time web

  124. Aplicações com UI rica e real-time estão aumentando a expectativa

    dos usuários
  125. IoT traz a necessidade de monitoramento real-time de múltiplos devices

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

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

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

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

  130. Sequential code elixir

  131. elixir

  132. elixir

  133. Web DB Mailer Stats elixir

  134. Web DB Mailer Stats Sup elixir

  135. Web DB Mailer Stats Sup App elixir

  136. app2@local app1@local elixir

  137. app2@10.0.1.2 app1@10.0.1.1 elixir

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

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

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

  143. Concurrency is the next major revolution in how we write

    software - Herb Sutter “
  144. Entendi, concorrência é bom para fazer software reativo, com alta

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

    isso. Não preciso de concorrência. - Alguém “
  146. Sua app de hoje é muito simples. E a app

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

  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ã?
  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
  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”
  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
  152. Você não precisa ser grande para causar um grande impacto

    na indústria de software 134k 180k 10k 70
  153. OBRIGADO!