vert.x clustering on docker, coreos and etcd
TRANSCRIPT
So what’s magne;c.io?- Next-gen e-commerce platform aimed at the
enterprise market
- Integrate Continuous Delivery from the ground up
- Cocktail of PaaS, containers and micro services
CoreOS- Just a Linux Distro
- Run apps in containers
- On the fly updating
- Fast boot times
- Systemd
images: coreos.com
ETCD- Distributed key/value store
- Like a directory tree
- JSON/REST API
- Uses a Discovery URL
images: coreos.com
Docker- REALLY portable…
- Images/containers
- JSON/REST API
- Emits events! <= important!
images: docker.io
Pre-‐alpha stack
AWS / On premises
CoreOS
ETCD
Docker
CoreOSCoreOS
DockerDocker DockerDockerDocker DockerDockerDocker
Hazelcast
DockerDockerVert.x DockerDockerVert.x DockerDockerVert.x
AWS / Vagrant / Bare Metal
CoreOS Box
Docker
JVM / Vert.x
priv. IP pub. IP
pub. IPpriv. IP
priv. IP pub. IP
bootstrapping the event bus: Russian dolls
Vamp- vamp bootstrap
- vamp controller
- vamp agent
- vamp metrics
- vamp docker
- vamp discovery
- vamp templates
- vamp dashboard
- etc. etc. etc…
Vamp_agent (Vert.x module)cluster_boot.sh
vamp_bootstrap
run
configure!
1
2 5
3
4
Boot
ETCD
get/set pub. IP
SYSTEMD
pub. IP
vamp_bootstrap.java
download!
6expose pub. IP’s to other Vert.x instances
hey presto…!██╗ ██╗ █████╗ ███╗ ███╗██████╗ ██║ ██║██╔══██╗████╗ ████║██╔══██╗ ██║ ██║███████║██╔████╔██║██████╔╝ ╚██╗ ██╔╝██╔══██║██║╚██╔╝██║██╔═══╝ ╚████╔╝ ██║ ██║██║ ╚═╝ ██║██║ ╚═══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ version 1.1 by magnetic.io !==> Starting cluster bootstrap... ==> info: Hazelcast port => 5701 ==> info: Vertx Eventbus port => 5702 ==> info: ETCD host => 10.0.42.1 ==> info: ETCD port => 4001 ==> info: ETCD base path => /vamp/bootstrap ==> info: Public IP => 172.17.8.103 ==> info: Physical hostname => core-03 ==> info: Container hostname => f9dc53532ff4 ==> info: Vertx module to run => vamp-agent-0.1.0 ==> info: Connecting to ETCD ==> info: Connected to ETCD at 10.0.42.1:4001 ==> info: Vamp Bootstrap will try to cluster with started remote host 172.17.8.101 ==> info: Starting Vamp Bootstrap with module vamp-agent-0.1.0 ==> info: Waiting for Vamp Bootstrap to come online... ==> info: Vamp Bootstrap was started with PID 24 and public IP 172.17.8.103
coreos
Let’s boot a cluster on AWS!
vamp_loadbalancer
vamp_agent
coreos
vamp_agentvamp_agent
coreos
vamp_agentvamp_agent
coreos
vamp_agent
autoscale
REST
coreos
vamp_ controller
three AV zones
traffic
…the good parts- Vert.x with Docker/CoreOS/ETCD is cool because:
- Size: in MB’s and in complexity
- Event bus makes distribution easy
- polyglot works nice with the idea of micro services
…the bad parts- Once it becomes complex, boilerplate rises
- ‘Actor-like’ maybe to coarse and without the build in ‘reactive’ stuff which Akka has
- Not enough control / insight over the event bus as a system