Este documento apresenta sobre escalabilidade em Elixir usando OTP. Resume os principais conceitos de Elixir, como processos e linguagem funcional. Explora os componentes OTP como GenServer, Supervisor e Application que permitem construir aplicações tolerantes a falhas e escaláveis.
38. OTP
GenServer
defmodule MyServer do
use GenServer
def handle_call({:pop, _from, [item | state]}) do
{:reply, item, state}
End
def handle_cast({:push, item}, state) do
{:noreply, [item | state]}
End
def handle_info(:log, state) do
IO.puts("State of server is #{inspect(state)}")
{:noreply, state}
end
end
39. OTP
GenServer
defmodule MyServer do
use GenServer
def handle_call({:pop, _from, [item | state]}) do
{:reply, item, state}
End
def handle_cast({:push, item}, state) do
{:noreply, [item | state]}
End
def handle_info(:log, state) do
IO.puts("State of server is #{inspect(state)}")
{:noreply, state}
end
end
Sincronos
Assíncronos
Mensagem
40. OTP
Supervisor
Supervisor
S1 S2 S3
● Olha se o filho está vivo.
● Gerencia filhos a partir de um
comportamento e estratégia
● :one_for_one, :rest_for_all, :
rest_for_one
44. OTP
Supervisor
defmodule MyServer.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, [])
end
def init([]) do
children = [
worker(MyServer, []),
worker(MyServer2, [])
]
supervise(children, strategy: :one_for_one)
end
end
45. OTP
Applicaton
Application é aonde todos
os supervisors se
inicializam.
● Código pequeno
● Inicializa os Supervisors
que vivem “pra sempre”