Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Apache Mesos para operar grandes sistemas e (micro)serviços
Diego de OliveiraMarço de 2015
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 ≃ 300Requisições por dia ≃ 22 milhões
Codebase ≃ 1.5MLOC
Spoiler
O servidor está morrendo
...bem vindo novo servidor
docker/docker-squash/docker-slimunikernel(ClickOS, Osv, MirageOS, etc)
DE VOLTA À LOUSA
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 logsreal 6m10.058suser 9m29.628ssys 0m29.476sbash$> du -c -h **/target/.###### a lot of logs3.5G total
Gráfico de dependências de entidades
Tempo de build e espaço em disco
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
Bug na implentação de SSL do OSX
O que já sabemos
Micros Serviços permite escalabilidade, domínio melhor definido, mas é necessário gerenciá-los.
Estrela da morte
Netflix Twitter
ONDE CHEGAMOS
Apache Mesos
Program against your datacenter like it’s a single pool of resourcesApache 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”Acácio
Apache Mesos - Arquitetura
Visão de implantação/operações
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
Depois
Apache Mesos - Frameworks
Existem vários frameworks desenvolvidos, tanto para soluções conhecidas quando projetos de
nicho.
Visão de implantação/operações
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
ao chronos caso seja um job agendado.
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
DEMO
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.gobash$> go build sample.go
bash$> curl -sSL https://minimesos.org/install | shbash$> export PATH=$PATH:$HOME/.minimesos/binbash$> minimesos up --num-agents 6
Apache Mesos - Demo
Instalação do mesos para testes
Uma aplicação 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/appsbash$> curl -s -X POST -H 'Content-type: application/json' [email protected] $MARATHONbash$> 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
Executando e escalando a aplicação
RESULTADOS
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.
Exemplo de nível de maturidade
PERGUNTAS?