微服务的注册发现
前言
服务注册发现是分布式服务中定位服务使用服务的重要机制,也是服务集群中的重要机制。在我们之前了解的微服务架构中,服务的注册发现同样有着重要的作用。
服务注册、服务发现
注册发现机制主要是在分布式集群中给服务提供的服务定位定位和服务负载均衡机制,自身有两个有用的步骤。
服务注册——该步骤存储的信息至少包括正在运行的服务的主机和端口信息。
服务发现——该步骤允许其他用户可以发现在服务注册阶段存储的信息。常规的服务发现机制有两种一种是客户端服务发现(client-side discovery)如rocketMQ,客户端主动询问NameServer发现可用的broker,一种是服务端服务发现(server-side discovery),如dubbo,nginx服务端将客户端请求分配到具体的服务上。
常见的服务注册发现组件
registrator
registrator 通过检查容器在线或者停止运行状态自动注册和发现服务,它目前支持 etcd、consul、zookeeper 和 SkyDNS 2。链接传送。它通常会和下面的工具配合使用,实现自动化服务注册功能。可以理解为真正的具有自动注册发现功能的组件,其他的etcd,consul,zookeeper和sykDNS,只能用来维护和同步服务注册信息是构建服务发现系统的组件。
zookeeper
zookeeper是Hadoop和Hbase的重要组件,它非常成熟、稳定,有比较多的大公司在使用一个高性能、分布式应用程序协调服务,是Google的Chubby一个开源的实现。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等,因为能够维护完整一直的服务注册信息,可用于构建服务发现系统。
etcd
etcd 是一个采用 HTTP 协议的健/值对存储系统,它是一个分布式和功能层次配置系统,可用于构建服务发现系统。其很容易部署、安装和使用,提供了可靠的数据持久化特性。它是安全的并且文档也十分齐全。它需要搭配一些第三方工具才可以提供服务发现功能。
consul
Consul 是强一致性的数据存储,使用 gossip 形成动态集群。它提供分级键/值存储方式,不仅可以存储数据,而且可以用于注册器件事各种任务,从发送数据改变通知到运行健康检查和自定义命令,具体如何取决于它们的输出。consul web 界面,用户可以查看所有的服务和节点、监控健康检查状态以及通过切换数据中心读取设置键/值对数据。
一种微服务的注册发现架构
Docker+Consul+Nginx+Registrator实现服务注册与发现
Docker用于容器的创建,Nginx通过监控Consul templete来发现服务,Registrator用于暴露端口IP和端口给consul,Consul agent 用于监控节点变化,Consul集群用于维护IP端口注册表,并给Nginx提供服务的发现机制。
1、Consul agent server作为高可用通过Consul Template实时监测Node的变化。
2、Node如果变化就触发渲染模板动作,执行相应命令。
3、如图 如果Node01 docker创建了一个nginx web容器随机暴露了一个24123端口,Registrator会监听到这个事件之后,会将宿主级IP与暴露的端口注册到本地的Consul agent client。
4、Consul agent Clinet 再将这个请求转发到 Consul agent service中。
5、Nginx读取 Consul templete 为请求分配对于的服务节点。
总结:总的来说,服务的注册发现也不是什么新鲜事物,基本上分为三个部分,服务的暴露,同步到注册中心,读取配置中心的信息。我们在挑选服务注册发布组件的时候更多的是考虑,服务的健康检查,灾备,断流,扩容等。我们可以考虑一下像rocketMQ或者tomcat这样不需要zk之列的同步组件,但是自身提供了注册中心和服务探活,也是可以完美实现服务注册发现。