Slide 1

Slide 1 text

O case da Plataformatec com o Elixir como uma empresa brasileira criou uma linguagem que é usada no mundo inteiro

Slide 2

Slide 2 text

2010 Thread-safe hell

Slide 3

Slide 3 text

2010 Thread-safe hell 2019 Elixir no mundo inteiro

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

“ Personagens” dessa história

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

RODA NA ERLANG VM OPEN SOURCE FUNCIONAL

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

José Valim Co-fundador da Plataformatec Criador do Elixir

Slide 13

Slide 13 text

Vamos lá?

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

VAMOS LÁ!

Slide 16

Slide 16 text

POR QUE CRIAR UMA LINGUAGEM NOVA? Parte 1

Slide 17

Slide 17 text

2010 Thread-safe hell Ruby on Rails 2.2

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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.

Slide 24

Slide 24 text

As CPUs pararam de evoluir?

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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 “

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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"

Slide 30

Slide 30 text

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?

Slide 31

Slide 31 text

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?

Slide 32

Slide 32 text

2010 Thread-safe hell Ruby on Rails 2.2

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

E se concorrência fosse fácil?

Slide 35

Slide 35 text

A BUSCA POR OUTRAS TECNOLOGIAS Parte 2

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

O problema é o modelo de threads e locks?

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

Vamos pesquisar outras tecnologias

Slide 45

Slide 45 text

No content

Slide 46

Slide 46 text

Tecnologias que chamaram atenção Clojure Haskell

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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 {

Slide 51

Slide 51 text

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 {

Slide 52

Slide 52 text

Por que a Erlang virtual machine?

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

O DESENVOLVIMENTO DO ELIXIR Parte 3

Slide 56

Slide 56 text

2011 O primeiro protótipo

Slide 57

Slide 57 text

2011 Explorando o desenvolvimento de uma nova linguagem Primeiro commit

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

2011 Explorando o desenvolvimento de uma nova linguagem Eu consigo!

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

2011 Estudando… Explorando o desenvolvimento de uma nova linguagem

Slide 65

Slide 65 text

2011 Eureka! Explorando o desenvolvimento de uma nova linguagem

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

2011 2012 Estou brincando em fazer uma nova linguagem

Slide 68

Slide 68 text

Hum… conte-me mais sobre isso… 2011 2012

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

O futuro é programação concorrente! 2011 2012

Slide 72

Slide 72 text

Então decidir tentar fazer uma nova linguagem 2011 2012

Slide 73

Slide 73 text

Da hora! E aí? 2011 2012

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

Oh really? 2011 2012

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

Beleza, vamos nessa! 2011 2012

Slide 81

Slide 81 text

Fevereiro/2012 Criamos o logo e o site da linguagem

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

2012 Lançamento do Elixir 2013 Isso vai funcionar?

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

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)

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

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

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

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

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

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

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

8.700+ bibliotecas https://hex.pm

Slide 100

Slide 100 text

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

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

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

Slide 103

Slide 103 text

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

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

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

Slide 106

Slide 106 text

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

Slide 107

Slide 107 text

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

Slide 108

Slide 108 text

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

Slide 109

Slide 109 text

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

Slide 110

Slide 110 text

Concurrency is about a great deal more than just exploiting parallelism “ ”

Slide 111

Slide 111 text

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

Slide 112

Slide 112 text

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/

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

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

Slide 116

Slide 116 text

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

Slide 117

Slide 117 text

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

Slide 118

Slide 118 text

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

Slide 119

Slide 119 text

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

Slide 120

Slide 120 text

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

Slide 121

Slide 121 text

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/

Slide 122

Slide 122 text

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

Slide 123

Slide 123 text

Real-time web

Slide 124

Slide 124 text

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

Slide 125

Slide 125 text

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

Slide 126

Slide 126 text

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

Slide 127

Slide 127 text

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

Slide 128

Slide 128 text

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

Slide 129

Slide 129 text

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

Slide 130

Slide 130 text

Sequential code elixir

Slide 131

Slide 131 text

elixir

Slide 132

Slide 132 text

elixir

Slide 133

Slide 133 text

Web DB Mailer Stats elixir

Slide 134

Slide 134 text

Web DB Mailer Stats Sup elixir

Slide 135

Slide 135 text

Web DB Mailer Stats Sup App elixir

Slide 136

Slide 136 text

app2@local app1@local elixir

Slide 137

Slide 137 text

app2@10.0.1.2 app1@10.0.1.1 elixir

Slide 138

Slide 138 text

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

Slide 139

Slide 139 text

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

Slide 140

Slide 140 text

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

Slide 141

Slide 141 text

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

Slide 142

Slide 142 text

FINALIZANDO

Slide 143

Slide 143 text

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

Slide 144

Slide 144 text

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

Slide 145

Slide 145 text

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

Slide 146

Slide 146 text

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

Slide 147

Slide 147 text

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

Slide 148

Slide 148 text

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

Slide 149

Slide 149 text

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

Slide 150

Slide 150 text

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”

Slide 151

Slide 151 text

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

Slide 152

Slide 152 text

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

Slide 153

Slide 153 text

OBRIGADO!