微服务注册和发现组件Eureka

    在大型系统架构中,会拆分多个子系统。以大型电商系统为例,一般拆分为以下几个核心模块:会员中心、商品中心、订单中心、库存中心、支付系统、积分系统等。这些系统实现的功能包括:调用外部接口、提供接口给外部调用、自身的业务逻辑。如何管理这些大量的接口服务,这些服务元信息如何共享给所有的调用者,这时需要一个中心化的服务元信息管理平台。而作为SpringCloud生态圈中的核心组件,注册中心Eureka即担当服务注册和发现的职责。

     Eureka 是 Netflix 开源的服务注册发现组件,服务端通过 REST 协议暴露服务,提供应用服务的注册和发现的功能。服务有以下特性:

      1、服务需要一个服务名称,接口调用时方能识别出各个接口。并且服务需要将其注册到Eureka Server中,其他服务调用该接口时,也是根据这个服务名称来获取。

      2、由于服务高可用的集群化部署,一个服务会对应有多个服务运行实例,每个实例也有一个自己的唯一实例ID,每个运行实例运行在不同的IP上。所以它们的信息也需要注册到Eureka Server中,其他服务调用它们的服务接口时,可以根据该服务的全量实例列表,根据负载策略算法筛选某个实例,调用者根据该服务实例元信息发起远程调用。

至于Eureka的大致原理,我们结合官网提供的架构图了解下他的设计思想:

其中的us-east-1c us-east-1d us-east-1e,这个概念来自AWS的云平台概念。AWS为了把云平台方便管理,对数据中心从更高层面做了抽象和解耦的设计,提出Region和zone概念。us-east-1c us-east-1d us-east-1e分别代表美国东部地区一个数据中心,共计三个数据中心,每个数据中心内部部署Eureka集群服务器实例。而这三个数据中心之间高速内网联网,保障数据同步的低延迟。

   从上图中可以看到Eureka包括服务端和客户端:Eureka Server和Eureka Client。

其中 Eureka Server的功能包括以下几个方面:

服务注册:各个微服务启动时,会通过Eureka Client向Eureka Server进行注册自己的ServiceMeta信息,Eureka Server会存储该信息.

服务元信息管理:通过Eureka Client的Cancel、hearbeat、renew等方式维护该服务提供的元信息以确保该服务元信息准确和及时更新。

拉取服务提供者信息:消费者在调用服务时,本地缓存没有服务元信息的情况下,会通过Eureka Client到Eureka Server拉取服务提供者信息

集群注册数据同步:每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过复制的方式完成服务注册表的同步。Eureka并不追求很强的一致性,而是认为A(可用性)和P(分区容错性)更重要。即数据同步到其他节点前,

借用AWS的概念,每个zone(即可用区域或简单理解为数据中心)

Eureka Client

Eureka Client是一个Java客户端,封装与Eureka Server的交互细节,并缓存服务提供者信息在本地,为服务调用时的负载均衡提供服务提供者信息。Eureka Client会拉取、更新和缓存Eureka Server中的服务提供者信息。即使Eureka Server节点都宕掉,服务消费者依然可用利用本地缓存做负载均衡,发起远程调用。当服务提供者变化,比如停服宕机或新增服务节点,本地缓存就无法获取这些信息,一定程度上影响负载均衡。所以Eureka Server还是以高可用标准部署,一般情况下一个zone部署至少三台server节点。Eureka Client在微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以Renew自己的元信息。如果Eureka Server在一定时间内没有接收到某个微服务节点的心跳,Eureka Server将会Eviction 该微服务节点(默认90秒)。

 Eureka Client作为组件一般会植入Application Service 和 Application Client。Application Service是服务提供者,通过Eureka Client组件向Eureka Server 注册自己的服务信息。Application Client通过Eureka Client组件向Eureka Server 拉取订阅的服务提供者信息。但有的服务既是提供者又是消费者,此时Eureka Client既向Eureka Server注册服务信息,又拉取订阅服务信息。

关于服务管理,Eureka Client和Eureka Server之间的关系是通过以下动作完成:

Register:当Eureka客户端向Eureka Server注册时,它提供自身的元数据信息,比如IP地址、端口。

Renew:Eureka Client在微服务启动后,会周期性地向Eureka Server发送心跳(默认周期为30秒)以续约自己的元信息。

Fetch Registries:获取注册列表信息

Cancel:Application Service关闭进程或注销服务时,会通过Eureka Client向Eureka Server发送取消注册请求。如果是Eureka Client客户端,可以通过调用以下代码通知注册中心下线:

DiscoveryManager.getInstance().shutdownComponent();

Eviction:如果Eureka Server在一定时间内没有接收到某个微服务节点的心跳,Eureka Server将会Eviction该微服务节点(默认90秒),该时间可以通过参数LeaseExpirationDurationInSeconds来修改默认值,该时间参数值应该大于LeaseRenewalIntervalInSeconds值,否则会引起频繁的Register和Eviction!

 

你可能感兴趣的:(技术,微服务,架构)