微服务架构服务自动伸缩的实现

服务发现与注册 Registrator + Consul

Registrator通过监听host上的docker引擎事件,来获取或更新容器信息,并且注册到指定的服务发现管理端registry(目前支持consul,etcd),registrator服务本身也运行在容器中,每个host上部署一个registrator服务用于管理本host上的服务发现和注册,以下基于ubuntu16.04做一个基本的演示。

  1. 通过docker在本机启动一个consul服务作为服务管理端同时也是服务的registry。
docker rm -f consul
docker run -d --name=consul --net=host gliderlabs/consul-server -bootstrap
  1. 通过容器运行registrator服务,负责host上的所有容器服务的发现和注册,其中--net=host参数指明使用主机网络,以便在真实的网络环境中registrator服务能正常连接到部署在外部主机上的consul服务。
docker rm -f registrator
docker run -d \
--name=registrator \
--net=host \
--volume=/var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
  consul://localhost:8500
  1. 我们在本机启动一些常见的服务用于演示,包括一个redis,三个web服务。
docker rm -f redis web01 web02 web03
docker run -d -p 9000:6379 --name=redis redis
docker run -d -p 9001:80 --name=web01 python/server
docker run -d -p 9002:80 --name=web02 python/server 
docker run -d -p 9003:80 --name=web03 python/server
  1. 我们通过访问consul服务的web接口http://localhost:8500/查看当前服务状态,所有docker启动的服务都自动被registrator注册到consul上了,我们也可以通过命令查看服务,同时如果我们手动关闭了某个服务,registrator也能自动取消注册该服务到对应的registry上。
$ curl localhost:8500/v1/catalog/services
${"consul":[],"consul-53":["udp"],"consul-8500":[],"redis":[],"server":[]}

你可能感兴趣的:(微服务架构服务自动伸缩的实现)