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?