Escala: Puma horizontal
O curso trata de dimensionar e operar uma aplicação Rails no Puma, primeiro numa máquina e depois em várias. Ele explica workers e threads, a GVL e como núcleos, memória e conexões de banco limitam o número de workers. Aborda pools de conexões e PgBouncer, preload_app! e copy-on-write, vazamento de memória e fragmentação, e os tipos de restart do Puma. Depois passa por ausência de estado, roteamento e health checks do balanceador, e fecha com uma configuração completa para um host de 4 núcleos e 8GB.
O que você vai aprender
- ✓A diferença entre workers e threads do Puma e o efeito da GVL em cada um
- ✓Como escolher workers e threads a partir de núcleos, memória, conexões e tempo de fila
- ✓Como calcular conexões de banco entre hosts, workers e pools
- ✓O efeito de preload_app!, copy-on-write e ajustes do alocador na memória
- ✓Hot restart, phased restart, drenagem com SIGTERM e worker_timeout
- ✓O que uma aplicação precisa para rodar em mais de uma máquina
Os dois botões: workers e threads
Abra o config/puma.rb deste repositório. Os comentários dele já explicam o modelo, e o arquivo é curto o bastante para ler inteiro:
Ler a aula completa grátis →Currículo
7 aulasOs dois botões: workers e threads
Explica workers do Puma como processos e threads dentro deles, e por que a GVL limita o ganho das threads.
Dimensionando workers e threads
Escolhe workers pelo mínimo entre núcleos, memória e conexões, e threads pela fatia de I/O das requisições.
O pool de conexões, e outros pools
Mostra que o pool é por processo, como as conexões se multiplicam entre hosts e quando usar o PgBouncer.
Preload, copy-on-write e memória
Trata de copy-on-write, preload_app! e sua troca, vazamento versus fragmentação, jemalloc e worker killers.
Restarts no nível do processo
Compara hot restart, phased restart e refork, e explica drenagem com SIGTERM, períodos de graça e worker_timeout.
Horizontal: além de uma máquina
Lista o estado compartilhado que uma segunda máquina exige, os problemas da afinidade de sessão e o roteamento.
Juntando tudo: uma configuração
Monta uma configuração completa de Puma e Kamal para três hosts de 4 núcleos e explica cada valor.