Willian Molinari (a.k.a PotHix)
Apache Mesos,
abstraindo o datacenter
Plaev.github.io
❏ O que é o Apache Mesos
❏ Como funciona?
❏ Que problema resolve?
❏ Como usar?
Agenda
O que é o Mesos?
❏ Criado em Berkeley
❏ Trabalho de PhD
❏ 1º apresentação em 2009
❏ Twitter começa a usar em 2010
O que é o Mesos?
Nota: Não foi só isso, mas ajudou bastante :)
Empresas que usam
#MesosCon
#MesosCon 2014
mais de 250+ participantes
#MesosCon 2015
mais de 700+ participantes
Que problema resolve?
Static Partitioning
n CPUs
n GBs (mem)
n GBs (disco)
atributos
Fairness
Módulo de alocação
DRF por padrão, mas extensível
dados do twitter da apresentação do Chris Aniszczyk
Como funciona?
baseado na comparação do feita pelo David Greenberg
Isolamento
Processos
Containers
Compartilhamento de recursos
Linux Scheduler
DRF
API comum
Syscalls
(open, connect, fork)
Mesos API
(killTask, lanchTasks)
http://mesos.apache.org/documentation/latest/mesos-architecture/
http://mesos.apache.org/documentation/latest/mesos-architecture/
http://mesos.apache.org/documentation/latest/mesos-architecture/
http://mesos.apache.org/documentation/latest/mesos-architecture/
http://mesos.apache.org/documentation/latest/mesos-architecture/
http://mesos.apache.org/documentation/latest/mesos-architecture/
http://mesos.apache.org/documentation/latest/mesos-architecture/
http://mesos.apache.org/documentation/latest/mesos-architecture/
http://mesos.apache.org/documentation/latest/mesos-architecture/
frameworks
http://mesos.apache.org/documentation/latest/mesos-architecture/
high availability
http://mesos.apache.org/documentation/latest/mesos-architecture/
master
election
http://mesos.apache.org/documentation/latest/mesos-architecture/
servidor
processo do mesos
executor
do framework
container
Containerizers
❏ mesos (cgroups)
❏ docker
❏ external
Containerizers
❏ mesos (cgroups)
❏ docker
❏ external
Containerizers
Faça o seu! :P
Como usar?
Frameworks
Vários disponíveis na Doc
Outros frameworks
Outros frameworks
API
vários endpoints, tudo pode ser feito por lá
POST /v2/apps: create and start
{
"cmd": "env && python3 -m http.server $PORT0",
"constraints": [
[
"hostname",
"UNIQUE"
]
],
"container": {
"docker": {
"image": "python:3"
},
"type": "DOCKER"
},
"cpus": 0.25,
"healthChecks": [
{
...
}
],
"id": "my-app",
"instances": 2,
"mem": 50,
"ports": [
0
],
"upgradeStrategy": {
"minimumHealthCapacity": 0.5,
"maximumOverCapacity": 0.5
}
}
apps & cron
http://aurora.apache.org/documentation/latest/user-guide/
aurora update
Preempting
Criação de tasks via Python!
hello_world_proc = Process(
name="hello_process",
cmdline="""
while true; do
echo -n "Hello world! The time is now: " && date
sleep 10
done
""")
hello_world_docker = Task(
name = 'hello docker',
processes = [hello_world_proc],
resources = Resources(cpu = 1, ram = 1*MB, disk=8*MB))
[...]
[...]
jobs = [
Service(cluster = 'devcluster',
environment = 'devel',
role = 'docker-test',
name = 'hello_docker',
task = hello_world_docker,
container = Container(docker = Docker(image =
'python:2.7')))]
Não curtiu esses?
Faça o seu framework! :)
❏ C++
❏ Java
❏ Python
❏ Go
❏ Scala
Vixe, muito trabalho...
Perguntas?
Willian Molinari
@PotHix
pothix@pothix.com
Slides: https://goo.gl/PNJjvR

Mesos