Apache Mesos para operar grandes sistemas e
(micro)serviços
Diego de Oliveira
Sobre mim
Diego de Oliveira, desenvolvedor, pai,
professor, viajante, motoqueiro...
O PagSeguro é uma solução de
intermediação de pagamentos através da
internet e seus leitores de cartão.
Sobre o PagSeguro
ADs/Devs/Qas/Webs/etc ≃ 300
Requisições por dia ≃ 22 milhões
Spoiler
O servidor está morrendo
...bem vindo novo servidor
docker/docker-squash/docker-slim
O que já sabemos
A alocação de recursos on premise tende ao
desperdício, virtualização melhora, mas cobra seu preço em performance.
Com 16 CPUs esse percentual poderia chegar à 1600%, o máximo utilizado em um ano foi 200%
O que já sabemos
Sistemas monolíticos podem reduzir a performance do time, a confiança na entrega, a capacidade de experimentar, entre outros problemas.
bash$> time mvn install -2TC … ###### a lot of logs real 6m10.058s user 9m29.628s sys 0m29.476s bash$> du -c -h **/target/. ###### a lot of logs 3.5G total
Gráfico de dependências de entidades
O que já sabemos
Entregas muito grande em sistemas 24x7 podem ser assustadoras.
OpenSSL bugs, tamanho do projeto: 442.895 linhas de código
Correção do Heartbleed
O que já sabemos
Micros Serviços permite escalabilidade, domínio melhor definido, mas é necessário gerenciá-los.
Estrela da morte
Apache Mesos
Program against your datacenter like it’s a single pool
of resources
Apache Mesos abstracts CPU, memory, storage, and other compute resources away from machines (physical or virtual), enabling fault-tolerant and elastic distributed systems to easily be built and run effectively.
“Apache Mesos é o n1 automatizado”
Apache Mesos - Arquitetura
Apache Mesos - Disponibilidade
Um único pool de servidores, sendo usado para executar várias tasks, melhor
aproveitamento.
Caso um servidor falhe, as tasks são migradas automaticamente para servidores saudáveis.
Visão de implantação/operações
Antes
Apache Mesos - Frameworks
Existem vários frameworks desenvolvidos, tanto para soluções conhecidas quando projetos de nicho.
Apache Mesos - Frameworks Marathon/Chronos
A fault tolerant job scheduler for Mesos which handles dependencies and ISO8601 based schedules
A cluster-wide init and control system for services in cgroups or Docker containers
Visão de implantação/operações/devs
Descreva a necessidade da sua aplicação em um json, envie ao Marathon para executar um serviço persistente ou
Apache Mesos - Frameworks Marathon/Chronos
Arquitetura de alta disponibilidade
Sempre tenha mais de uma instância para garantir comportamento ininterrupto
Isolamento via cgroups/docker/lxc
bash$> echo ' package main import ( "io" "os" "net/http" )
func hello(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world!")
}
func main() {
port := os.Args[1]
http.HandleFunc("/", hello)
http.ListenAndServe(":" + port, nil) }' > sample.go
bash$> go build sample.go
bash$> curl -sSL https://minimesos.org/install | sh
bash$> export PATH=$PATH:$HOME/.minimesos/bin
bash$> minimesos up --num-agents 6
Apache Mesos - Demo
Instalação do mesos para testes
bash$> export IP=`ip route get 8.8.8.8 | awk 'NR==1 {print $NF}'` bash$> echo " { \"id\": \"/sample\", \"instances\": 1,
\"cmd\": \"chmod +x sample; ./sample \$PORT0\", \"cpus\": 0.1,
\"mem\": 100, \"disk\": 10,
\"uris\": [ \"http://$IP:9999/sample\" ] }" > sample.json
bash$> python -m SimpleHTTPServer 9999 > /dev/null &
bash$> export MARATHON=http://172.17.0.5:8080/v2/apps
bash$> curl -s -X POST -H 'Content-type: application/json' -d@sample.json $MARATHON
bash$> firefox http://172.17.0.7:8080 > /dev/null &
bash$> firefox http://172.17.0.6:5050 > /dev/null &
bash$> curl -s -X PUT -H 'Content-type: application/json' -d '{ "instances": 2 }' $MARATHON/sample
bash$> minimesos destroy
Apache Mesos - Demo
Descrevendo o deploy
Novas aplicações
Nossa estrela da morte
Os novos projetos, jobs, módulos, serviços ou micro serviços estão sendo publicado nesse ambiente.
Melhor uso dos recursos, sem necessidade de spare frio.
Nível de Maturidade em Nuvem
Sistema
Operação
Entrega
Recurso
Sua base de código é modular; é de fácil manutenção; falhas não se propagam em cascata; há delineamento claro dos domínios; está pouco acoplado;
é fácil ter acesso aos logs; operações não é baba de sistemas; configurações de ACLs e acessos não demoram mais de uma semana; há troca de experiências entre Operações,
implantação e desenvolvimento;
fácil, não precisa de coordenação entre vários times; aprovação fácil, sem burocracia; novos códigos demoram menos de um mês para entrar em produção; é sempre tranquila
demora menos de uma semana para adicionar um novo servidor/serviço; fácil fazer upgrade de hardware; um novo domínio demora menos de um mês; fácil adicionar espaço em disco
Nível de Maturidade em Nuvem
Avalie os pontos de maturidade e observes os pontos que podem ser melhorados.