分享

高并发架构系列:服务注册与发现的来源、实现方式、及优劣势比较

 汉无为 2019-01-01

服务注册与发现的来源

首先,服务注册与发现是来自于微服务架构的产物。

在传统的服务架构中,服务的规模处于运维人员的可控范围内。当部署服务的多个节点时,一般使用静态配置的方式实现服务信息的设定。而在微服务应用中,服务实例的数量和网络地址都是动态变化的,这对系统运维提出了巨大的挑战。

而且服务集群的跨度很大、数量很多(数以百计甚至更多),为保障系统的正常运行,必然需要有一个中心化的组件完成对各个服务的整合,即将分散于各处的服务进行汇总,汇总的信息可以是服务器的名称、地址、数量等,并且这些服务器组件还拥有被监听功能等(服务发现)。

这就是服务注册与发现的来源,在微服务架构中,服务注册与发现组件是必不可少的,常用的服务协调器有:zookeeper,dubbo、ANS、etcd,eureka等。

下面我分别从:服务注册发现主要解决的问题、特点、原理和Zookeeper的实现方式四个维度详细介绍。

高并发架构系列:服务注册与发现的来源、实现方式、及优劣势比较

服务注册与发现主要解决的问题

在一个分布式系统中,服务注册与发现组件主要解决两个问题:服务注册和服务发现

1.服务注册

服务实例将自身服务信息注册到注册中心。这部分服务信息包括服务所在主机IP和提供服务的Port,以及暴露服务自身状态以及访问协议等信息。

2.服务发现

服务实例请求注册中心获取所依赖服务信息。服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。

除此之外,服务注册与发现需要关注监控服务实例运行状态等问题。

3.监控

微服务应用中,服务处于动态变化的情况,需要一定机制处理无效的服务实例。一般来讲,服务实例与注册中心在注册后通过心跳的方式维系联系,一旦心跳缺少,对应的服务实例会被注册中心剔除。

服务注册与发现的特点

1.高可用

由多个服务节点构成,就算有些节点挂掉也不影响正常运行,避免了单点故障。

2.方便配置

本身是一个分布式,一致性的 k-v 存储系统。提供方启动的时候将自身配置信息向协调器中进行注册,提供方下线的时候向协调器进行反注册。

3.可监控

提供心跳机制,如果对方程序意外挂掉,没有进行反注册,协调器也会超时剔除不可用的提供方。

服务注册与发现的实现比较

我从服务注册发现实现的早期到现在主流的Zookpeer介绍,这样可以更加直观的了解到对应的优劣势,更有利于今后的选型升级。

高并发架构系列:服务注册与发现的来源、实现方式、及优劣势比较

1. DNS(早期)

DNS作为服务注册发现的一种方案,它比较简单。只要在DNS服务上,配置一个DNS名称与IP对应关系即可。定位一个服务只需要连接到DNS服务器上,随机返回一个IP地址即可。由于存在DNS缓存,所以DNS服务器本身不会成为一个瓶颈。

这种基于Pull的方式不能及时获取服务的状态的更新(例如:服务的IP更新等)。

如果服务的提供者出现故障,由于DNS缓存的存在,服务的调用方会仍然将请求转发给出现故障的服务提供方。

2.Dubbo(中期)

Dubbo是阿里巴巴推出的分布式服务框架,致力于解决服务的注册与发现,编排,治理。

优点:

1. 功能全面,易于扩展

2. 支持各种串行化协议(JSON,Hession,java串行化等)

3. 支持各种RPC协议(HTTP,Java RMI,Dubbo自身的RPC协议等)

4. 支持多种负载均衡算法

5. 其他高级特性:服务编排,服务治理,服务监控等

缺点:

1) 只支持Java。

2) 虽然已经开源,但是没有成熟的社区来运营和维护,未来升级可能是个麻烦。

3)重量级的解决方案带来新的复杂性。

3.Zookeeper(首选)

Zookeeper是开源的在Java语言上实现的分布式协调服务,是Hadoop和Hbase的重要组件,提供了数据/发布订阅、负载均衡、分布式同步等功能。

Zookeeper也是基于主从架构,搭建了一个可高扩展的服务集群,其服务架构如下:

高并发架构系列:服务注册与发现的来源、实现方式、及优劣势比较

  • Leader-Server:Leader负责进行投票的发起和决议,更新系统中的数据状态
  • Server:Server中存在两种类型:Follower和Observer。其中Follower接受客户端的请求并返回结果(事务请求将转发给Leader处理),并在选举过程中参与投票;Observer与Follower功能一致,但是不参与投票过程,它的存在是为了提高系统的读取速度
  • Client:请求发起方,Server和Client之间可以通过长连接的方式进行交互。如发起注册或者请求集群信息等。

Zookeeper作为服务注册与发现的解决方案的优点:

1. 它提供的简单API

2. 已验证:大量互联网公司公司使用它来进行服务注册与发现

3. 支持多语言的客户端

4. 通过Watcher机制实现Push模型,服务注册信息的变更能够及时通知服务消费方。

缺点:

1. 引入新的Zookeeper组件,带来新的复杂性和运维问题

2. 需自己通过它提供的API来实现服务注册与发现逻辑(Java版本等)

Zookeeper的服务注册与发现

高并发架构系列:服务注册与发现的来源、实现方式、及优劣势比较

主要就是三类角色:服务提供者,服务注册中心,服务消费者。

1.服务提供者

服务信息包含:

▪ 哪个系统

▪ 服务的IP与端口

▪ 服务的请求URL

▪ 服务的权重等等

2.服务注册中心

服务注册中心主要提供所有服务注册信息的中心存储,同时负责将服务注册信息的更新通知实时的Push给服务消费者(主要是通过Zookeeper的Watcher机制来实现的)。

3.服务消费者

主要从以下几个方面:

1. 服务消费者在启动时从服务注册中心获取需要的服务注册信息

2. 将服务注册信息缓存在本地

3. 监听服务注册信息的变更,如接收到服务注册中心的服务变更通知,则在本地缓存中更新服务的注册信息

4. 根据本地缓存中的服务注册信息构建服务调用请求,并根据负载均衡策略(随机负载均衡,Round-Robin负载均衡等)来转发请求

5. 对服务提供方的存活进行检测,如果出现服务不可用的服务提供方,将从本地缓存中剔除

服务消费者只在自己初始化以及服务变更时会依赖服务注册中心,在此阶段的单点故障通过Zookeeper集群来进行保障。


以上就是微服务之服务注册与发现的详细介绍,以下是高并发架构专题系列。

高并发架构专题系列

高并发架构系列:服务注册与发现的来源、实现方式、及优劣势比较

获取方式

关注+转发后,私信关键词 【高并发】即可获取!

重要的话讲两遍,转发、转发后再发私信,才可以拿到哦!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多