Vert.x clustering on Docker, CoreOS and ETCD

16
Tim Nolet [email protected] Vert.X clustering on Docker, CoreOS and ETCD = + { } +

Transcript of Vert.x clustering on Docker, CoreOS and ETCD

Tim Nolet [email protected]

Vert.X  clustering  on  Docker,  CoreOS  and  ETCD

=+{ }+

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

some  code…

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

and  while  that’s  running…

…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

Ques;ons?

we are hirin

g!