Spring Cloud学习--服务注册与发现

1.服务注册与服务发现       

        在一个由众多微服务构成的大型应用系统中,各微服务相互之间存在着复杂的业务依赖关系,如何更好地管理这些微服务?如何更好地提升服务架构的可扩展性能?如何实现对服务的有效划分和路由?面对上述诸多问题,服务治理理念应运而生。服务治理主要包括服务注册与发现、负载均衡、限流、熔断、超时、重试、服务追踪等流程,考虑到篇幅及学习进度,本篇主要对服务注册与发现进行学习。在技术实现层面,服务注册与发现可被抽象为服务发布与订阅、以及实现该机制的服务注册中心。各个微服务通过服务治理实现自动化的注册(Registration)和发现(Discovery)。

1.1 角色一:服务注册中心

        服务注册中心充当着服务提供者和服务消费者交互媒介的作用,记录了服务和服务地址的映射关系。服务提供者通过注册中心客户端向注册中心注册自身提供的服务,服务消费者通过注册中心客户端从注册中心订阅自己所需的服务并周期性的刷新服务状态。同时,当注册中心服务定义发生变化时,也会触发各个客户端监听器中的回调函数主动推送变更到订阅该服务的服务消费者,服务消费者借以更新本地的缓存列表。当服务中心不可用时,服务消费者可通过本地缓存列表,实现对现有服务的可靠调用。因为,消费者和提供者都依赖于注册中心,所以注册中心一般需通过集群部署来实现高可用。同时还需要保证数据的一致性,使消费者和提供者看到的永远都是同一份数据。

       综上,注册中心一般会包含如下几个功能:

       (一)服务发现

  • 服务注册/反注册:服务提供者通过注册中心提供的注册/反注册接口,实现服务的注册和注销;

  • 服务订阅/取消订阅:服务消费者通过调用调用服务订阅接口完成服务订阅,获取可用的服务提供者节点列表;

  • 服务路由(可选):具有筛选整合服务提供者的能力(负载均衡或本地路由优先等策略)。

(二)服务配置

  • 配置订阅:服务提供者和服务调用者订阅微服务相关的配置;

  • 配置下发(可选):主动将配置推送给服务提供者和服务调用者;

(三)服务监测

  •         服务提供者通过例如心跳消息等机制告知注册中心自己是否存活,注册中心通过一定机制通信监测服务提供者的健康情况。

1.2 角色二:服务提供者

      服务提供者通过调用注册中心提供的接口向注册中心注册服务,将服务实现类以服务接口的形式提供出去,供服务消费者从注册中心查阅并调用服务。概括来说,服务提供者应具备如下三种功能:

  • 服务注册:微服务在启动时,将自己的信息(名称、IP、端口等)注册到注册中心的过程;

  • 服务续约:向注册中心定期发送心跳信息,告知注册中心自己的运行状态,注册中心以某个时间段有没有接收到上报信息,来决定是否下线某服务实例;

  • 服务下线:当服务发生变动,通过调用注册中心提供的反注册接口实现服务的注销下线。

1.3 角色三:服务消费者

       服务消费者从注册中心获取服务提供者的地址,并通过地址和基于特定的方式调用服务提供者的接口。概括来说,服务消费者应具备如下三种功能:

  • 服务订阅:通过调用接口从注册中心拉取服务信息

  • 服务缓存: 维持已订阅的服务信息缓存,并通过主动拉取或被动通知方式,即使进行本地缓存的更新;

  • 负载均衡和路由(可选):从拉取的服务列表中,在面对某个服务多实例部署的情况下,通过设定的负载均衡或路由策略,选择某个具体服务实例进行调用。

上面对服务注册与发现的所包含的角色及其功能进行了大概的描述,下面挑选出目前业界使用比较多的两种服务注册中心:Eureka和Nacos,进行更进一步的学习。

2.Eureka

2.1 基本结构及关键概念

      Eureka是Netflix开源的一套服务注册发现组件,基于REST服务,主要包含三种角色(服务提供者、服务消费者、注册中心),基本架构图如下:

  1. Eureka Server: 提供服务注册和发现;
  2. Service Provider: 服务提供者,将自身服务注册到Eureka,从而使服务消费方能够找到;
  3. Service Consumer:服务消费者,从Eureka获取注册服务列表,从而能够消费服务。

     Eureka有以下几个概念与服务治理直接相关:

  • Register

 服务注册,当Eureka客户端向Eureka Server注册时,提供自身的元数据信息,包括IP、端口、运行配置等。

  • Renew

 服务续约,Eureka客户端每隔一定的时间会发送一次心跳消息给Eureka Server进行服务续约。通过续约来告知Eureka Server自己依旧存活,保证Eureka Server不剔除自己。

  • Cancel

 服务下限,Eureka 客户端在自身程序关闭时,会向Eureka Server发送取消请求,Eureka接收到请求后,会将该客户端实例信息从服务器端注册列表中删除。

  • Eviction

 服务剔除,在默认情况下,如果Eureka Server连续90秒没有收到来自某个Eureka客户端的心跳信息,将会将该服务实例从服务注册列表中删除。

  • Fetch Registries

 获取服务注册列表信息,Eureka客户端从Eureka Server获取服务注册列表信息,并将其缓存在本地,该注册列表信息每隔30秒钟进行定期更新,客户端依据该注册列表信息发起远程服务调用。

  • Eureka高可用

Eureka实现高可用实际上是将自己作为一个服务向其他服务注册中心注册,形成一组互相注册的注册中心,从而实现服务列表的互相同步,达到高可用的效果。

  • RegionZone

Region可抽象表示为地理位置,一个Region包含多个Zone,各个Region之间相互隔离。这里可将Zone理解为机房,Region理解为Eureka集群。

 

完整的搭建并使用Eureka的实例参见https://www.cnblogs.com/fengzheng/p/10603672.html,当然网上还有很多别的使用案例,均可根据自己喜好进行检索尝试。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值