(micro)serviços Apache Mesos para operar grandes sistemas e · configurações de ACLs e acessos...

Preview:

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...

doliveira@uolinc.com

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' -d@sample.json $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?

doliveira@uolinc.com

Recommended