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
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: 13 anos atrás
Slide 38
Slide 38 text
https://news.ycombinator.com/item?id=10096100
2015: 3 anos atrás
Slide 39
Slide 39 text
https://news.ycombinator.com/item?id=10096100
2015: 3 anos atrás
Slide 40
Slide 40 text
Quanto do código que você escreve hoje
é concorrente?
2018: 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 - 2018
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
2018 Hoje
Nosso primeiro cliente de Elixir!
Como está o
ecossistema de Elixir
hoje?
2016
2016
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
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
6400+ 190+ 25+ 15+
Conferências
O ecossistema Elixir em 2018
Slide 105
Slide 105 text
O Elixir é maior
que a Plataformatec
Começamos a comunidade.
Não somos donos 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
Switch
Switch
Slide 110
Slide 110 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 111
Slide 111 text
Concurrency is about a
great deal more than just
exploiting parallelism
“
”
Slide 112
Slide 112 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 113
Slide 113 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 114
Slide 114 text
O Elixir/OTP suporta
o “reactive manifesto” de
forma nativa
Elastic Message Driven
Resilient
Responsive
Slide 115
Slide 115 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 116
Slide 116 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 117
Slide 117 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 118
Slide 118 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 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
No Elixir, message-passing é o modelo
padrão de comunicação entre
processos. É o “actor model”.
Slide 120
Slide 120 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 121
Slide 121 text
Concorrência ajuda em development
não apenas em production
Slide 122
Slide 122 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.
“
http://blog.plataformatec.com.br/2017/07/the-fallacies-of-web-application-performance/
Slide 123
Slide 123 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 124
Slide 124 text
Real-time web
Slide 125
Slide 125 text
Aplicações com UI rica e
real-time estão aumentando
a expectativa dos usuários
Slide 126
Slide 126 text
IoT
traz a necessidade
de monitoramento
real-time de múltiplos
devices
Slide 127
Slide 127 text
Channels
allow us to easily add soft-realtime features to our applications
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/Services, backend
for mobile and IoT devices
Embedded software
Data ingestion and data
processing (“medium data”)
GenStage
Flow
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
55