Slides

Transcrição

Slides
Apache Mesos para operar grandes sistemas e
(micro)serviços
Diego de Oliveira
Março de 2015
Sobre mim
Diego de Oliveira, desenvolvedor, pai,
professor, viajante, motoqueiro...
[email protected]
Sobre o PagSeguro
O PagSeguro é uma solução de
intermediação de pagamentos através da
internet e seus leitores de cartão.
ADs/Devs/Qas/Webs/etc ≃ 300
Requisições por dia ≃ 22 milhões
Codebase ≃ 1.5MLOC
Spoiler
O servidor está morrendo
...bem vindo novo servidor
docker/docker-squash/docker-slim
unikernel(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
###### a lot of
real 6m10.058s
user 9m29.628s
sys 0m29.476s
bash$> du -c -h
###### a lot of
3.5G total
install -2TC …
logs
**/target/.
logs
Tempo de build e espaço em disco
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
Bug na implentação de SSL do OSX
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
Netflix
Twitter
ONDE CHEGAMOS
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”
Acácio
Apache Mesos - Arquitetura
Visão de implantação/operações
Apache Mesos - Disponibilidade
Visão de implantação/operações
Um único pool de servidores, sendo usado
para executar várias tasks, melhor
aproveitamento.
Depois
Antes
Caso um servidor falhe, as tasks são
migradas automaticamente para
servidores saudáveis.
Apache Mesos - Frameworks
Visão de implantação/operações
Existem vários frameworks desenvolvidos, tanto
para soluções conhecidas quando projetos de
nicho.
Apache Mesos - Frameworks Marathon/Chronos
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.
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
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
Apache Mesos - Demo
Instalação do mesos para testes
bash$> curl -sSL https://minimesos.org/install | sh
bash$> export PATH=$PATH:$HOME/.minimesos/bin
bash$> minimesos up --num-agents 6
Uma aplicação para testes
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
Apache Mesos - Demo
Descrevendo o deploy
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
Executando e escalando a aplicação
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' [email protected] $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
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
[email protected]
PERGUNTAS?

Documentos relacionados