保护私人版权,尊重他人版权。转载请注明出处并附带页面链接
服务发现
传统的单体架构不够灵活不能很好的适应变化,从而向微服务架构进行转换。服务注册、服务发现作为构建微服务架构得基础设施环节,重要性不言而喻。在当下,比较热门用于做服务注册和发现的开源项目包括zookeeper、etcd、euerka和consul。
consul简介
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。Consul是分布式的、高可用的、 可横向扩展的。它具备以下特性:
- 服务发现: Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些外部的服务通过Consul很容易的找到它所依赖的服务。
- 健康检测: Consul的Client提供了健康检查的机制,可以通过用来避免流量被转发到有故障的服务上。
- Key/Value存储: 应用程序可以根据自己的需要使用Consul提供的Key/Value存储。 Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能。
- 多数据中心: Consul支持开箱即用的多数据中心. 这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。
consul架构图
实践
启动consul集群
1 | 启动第1个Server节点,集群要求要有3个Server,将容器8500端口映射到主机8900端口,同时开启管理界面 |
可以通过访问***:8900查看页面:
服务注册
进入容器中。
1 | docker exec -it consul1 /bin/sh |
编写/consul/config/services.json。
1 | { |
重新加载concul。
1 | consul reload |
之后编写Web 服务器。
然后这个服务就注册成功了。可以将这个服务部署到多个节点,比如部署到 consul1 和 consul4,并同时运行。
服务发现
服务注册成功以后,调用方获取相应服务地址的过程就是服务发现。Consul 提供了多种方式。
HTTP API 方式
curl http://127.0.0.1:8900/v1/health/service/hello?passing=true
DNS 方式
上面注册服务的域名是:test.service.dc1.consul,后边的 service 代表服务,固定;dc1 是数据中心的名字,可以配置;最后的 consul 也可以配置。
然后执行 dig 命令:
1 | dig @127.0.0.1 -p 8600 test.service.dc1.consul. ANY |