Erlang e Elixir por uma web mais feliz
-
Upload
bruno-henrique-garu -
Category
Technology
-
view
1.521 -
download
0
Transcript of Erlang e Elixir por uma web mais feliz
Erlang e Elixir
Por uma web mais feliz
Bruno Henrique - Garu
https://www.facebook.com/groups/natalonrails
https://www.facebook.com/wdevtips
Motivação
Necessidade de aprender coisas novas
Estudar o paradigma funcional
Criar um sistema Realtime para atender milhares de usuários
Mas, entre todas as linguagens funcionais,
porque Erlang?
Um pouco de história...
Por que uma nova linguagem?
Contexto no qual Erlang foi criada
Switch
Nenhuma linguagem atendia a todos os
requisitos ...
... alta concorrência
... tolerância a falhas
... alta disponibilidade
Isso nos anos 80 ...
... então por que usar agora?
Nosso contexto
Server
Fazendo a coisa certa em um contexto diferente.
Entendendo suas features na prática
Como atender uma grande quantidade
usuários ?
Podemos escalar na horizontal ?
Podemos ...
... mas existe um limite tanto físico quanto
financeiro
Fazer isso nem sempre é uma coisa simples
Load balanceetc.
cacheSlave
MasterProxy
E dependendo da tecnologia escolhida
pode haver desperdício.
Exemplo
https://speakerdeck.com/plataformatec/elixir
Erlang - Distributed
https://speakerdeck.com/plataformatec/elixir
Como manter um número elevado de usuários
simultâneos?
Agora começa a concorrência.
Mas o que é concorrência?
Two queues and one coffee machine.
Joe Armstronghttp://joearms.github.io/2013/04/05/concurrent-and-parallel-programming.html
Ruby, Python, Java, PHP, C# - O que elas possuem
em comum?
Orientação a Objeto
E um forte conceito de estado mutável.
Estado e concorrência não funcionam muito bem
juntos.
Como lidamos com concorrência?
Podemos usar threads
O que é uma thread?
Temos algum problema com thread?
Sim, estado compartilhado é um
grande problema.
Soluções?
locks
transactional memory
message-passing
E é assim que Erlang funciona.
Quando não temos estado compartilhado fica mais
fácil
Exemplo
https://gist.github.com/brunohenrique/5428281#file-no_side_effects-rb
Elixir
O poder da Erlang VM com uma bela sintaxe.
Sintaxe
Erlang
https://speakerdeck.com/plataformatec/elixir
Elixir
https://speakerdeck.com/plataformatec/elixir
Protocol
http://elixir-lang.org/getting_started/4.html
Macros
http://elixir-lang.org/getting_started/5.html
Referências
Asynchronous to Real-time Web Programming - http://www.infoq.com/presentations/Asynchronous-Web-Programming
Erlang - software for a concurrent world - http://www.infoq.com/presentations/erlang-software-for-a-concurrent-world
A True Conversational Web - http://www.infoq.com/presentations/A-True-Conversational-Web
1000 Year-old Design Patterns - http://www.infoq.com/presentations/1000-Year-old-Design-Patterns
Erlang, the Language from the Future? - http://www.infoq.com/presentations/Erlang-Pros-Cons
Elixir: Modern Programming for the Erlang VM - http://www.infoq.com/presentations/Elixir-Erlang-VM
Let It Crash ... Except When You Shouldn't - http://www.infoq.com/presentations/Let-It-Crash
Message Passing Concurrency in Erlang - http://www.infoq.com/presentations/Message-Passing-Concurrency
Referências
Death by Accidental Complexity - http://www.infoq.com/presentations/Death-by-Accidental-Complexity
Systems that Never Stop (and Erlang) - http://www.infoq.com/presentations/Systems-that-Never-Stop-Joe-Armstrong
Multicore Programming in Erlang - http://www.infoq.com/presentations/wiger-multicore-erlang
Concurrency: Past and Present - http://www.infoq.com/presentations/goetz-concurrency-past-present
Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages - http://pragprog.com/book/btlang/seven-languages-in-seven-weeks
Programming Erlang: Software for a Concurrent World - http://pragprog.com/book/jaerlang/programming-erlang
Elixir language - http://elixir-lang.org/getting_started/1.html