Presentation I gave at Nextbuild 2016. Gives an overview of how Consul can be used in microservice architecture. Accompanying examples and demo can be found here: https://github.com/josdirksen/next-build-consul
2. Who Am I
Currently doing Devops, Scala stu
At Equeris, lean startup within Equens
Docker, Consul, Scala, Cloud and other buzzwords.
Email me at:
I write at:
Twitter:
jos.dirksen@gmail.com
http://www.smartjava.org
@josdirksen
5. What are microservices?
Small, ne-grained easy to replace components.
Organized around capabilities.
Di erent languages and backends (whatever ts best).
Fault tolerant, resiliant, automated deployements.
"Small Autonomous services that work together",
Sam Newman
7. Running Microservices is hard
Where is my other service or database?
Am I healthy, is the other one healthy?
Where do I store con guration?
How do I handle redundancy and failover?
...
, says everyone"Distributed systems are hard"
12. Consul
"Consul [..] provides an opinionated framework for
service discovery and eliminates the guess-work
and development e ort. Clients simply register
services and then perform discovery using a DNS
or HTTP interface. Other systems require a home-
rolled solution." - consul.io
13. Main Features
Service discovery through REST and DNS
Simple registration using REST API
Distributed KV store for con guration
Provides extensive health checking
All in one package
16. Service Registration Flow
1. Servicecalls Consul Agentwith registration message:
.
2. Agentcommunicates registration with Consul Server
3. Agentchecks health of Service.
4. If check succeeds mark as Healthy, if not mark as Unhealthy,
communicate results with Server
5. When a lookup for Serviceoccurs, only return Healthyservices
http://agent_host/v1/agent/service/register
18. Sample: DNS Lookup
$dig @nb-consul.local backend-service.service.consul
; <<>> DiG 9.8.3-P1 <<>> @nb-consul.local backend-service.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27716
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;backend-service.service.consul. IN A
;; ANSWER SECTION:
backend-service.service.consul. 0 IN A 10.0.9.3
backend-service.service.consul. 0 IN A 10.0.9.2
backend-service.service.consul. 0 IN A 10.0.9.4
Consul provides a DNS Server
Works great with Docker ( : will show in Demo)teaser
23. Consul template
Render template based on Consul state
Setup reverse proxy: Nginx, Apache, haproxy
global
daemon
maxconn {{key "service/haproxy/maxconn"}}
defaults
mode {{key "service/haproxy/mode"}}{{range ls "service/haproxy/timeouts"}}
timeout {{.Key}} {{.Value}}{{end}}
listen http-in
bind *:8000{{range service "release.web"}}
server {{.Node}} {{.Address}}:{{.Port}}{{end}}
25. Envconsul
"III. Con g Store con g in the environment",
http://12factor.net/
More settings >More complexity
$ envconsul
-consul demo.consul.io
-prefix redis/config
redis-server [opts...]
Vault: help in managing secrets
29. More information
links:
This presentation, sources and docker stu :
https://www.consul.io/
https://github.com/hashicorp/consul-template
https://github.com/hashicorp/envconsul
https://github.com/josdirksen/next-build-consul