eureka服务注册与发现 - 整理学习

1. 为什么使用注册中心

存放和调度服务,实现服务和注册中心,服务和服务之间的相互通讯。

类似于通讯录,记录了服务和服务的地址映射关系。

分布式架构中,服务被注册到这里,然后当某个服务需要调用其他服务时,就到这里找到服务的地址,进行调用

2. 注册中心原理

主要包括三个角色:服务提供者,服务消费者,注册中心。

运行原理:

    1. 微服务启动时,将自己网络地址等信息注册到注册中心,注册中心存储这些
    1. 服务消费者从注册中心查询服务提供者地址,并通过该地址调用服务这的接口
    1. 各个微服务与注册中心使用一种协议通信(例如心跳)。如果注册中心与某个微服务长时间无法通信,会注销该服务。
    1. 微服务网络地址发生变化(例如实力增加或ip变动)时,会重新注册到注册中心。这样,微服务就无需人工修改网络地址了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EuaDfAy3-1632585630819)(assets/image-20210925195541-ieitqk80522p(verassets/image-20210925195541-ieitqk8.png)]

Eureka Server,多个eureka server组成同一个高可用的eureka集群,集群内的eureka节点之间同步复制的方式更新注册信息,保持服务一致性。

Service Provider:服务提供方,将自身服务注册到Eureka,从而能被服务消费方找到

Service Consumer:服务消费方,获取注册服务列表,从而能够消费服务

实际上Java代码中,eureka的消费者和提供者可以互换的,也可以同时具备两种属性。
请添加图片描述
eureka基本流程:

  1. 实例化服务
  2. 服务注册到注册中心
  3. 注册中心获取服务
  4. 负载均衡器从地址列表选择一个服务进行服务调度
  5. 定期发送心跳
  6. 检查没有定期发送心跳的服务网并定期剔除服务地址列表

3. eureka自我保护机制

主要在Eureka Client和Eureka之间存在网络分区的情况下发生保护作用。

假设在某种特定的情况下,Eureka client和Eureka server 无法通信,此时Eureka client无法像server发起注册续约请求,Eureka server就可能因注册表中的服务实例租约大量过期,而有面临剔除的风险(这实际场景中是不合理的),但是client此时确实健康状态(可以正常响应),自我保护机制被触发后,Eureka不在移除这些过期服务,仍能查询服务信息并且接受新的服务注册请求。

换句话说,当euraka X节点触发自我保护机制过程中,有心服务注册了后网络恢复后,其他节点Y又开始收到了X节点的新服务信息,数据同步到Y过程中,是有网络异常重试的。这也就是说eureka能保证最终一致性。AP

4. Eureka提供的功能

服务注册,接受服务心跳,服务剔除,服务下线等。
注册:服务提供者想Eureka Server注册自身的元数据供服务发现
续约:发送心跳到Server维持和更新注册表中服务实例元数据的有效性。在一定时长内,Server没有收到Client的心跳数据,默认下线,从注册表中删除
下线:服务提供方在关闭之前通知服务,向服务发送注销服务实例元数据,server会将服务数据从注册表中删除
获取注册表:服务消费者Client向Server请求注册表信息,用于服务发现,用于发起远程服务调用

在这里插入图片描述

东抄西抄的有点乱
++++++++++++++++++++++++++++++
Eureka Server
提供服务注册: 微服务启动时,会通过Eureka Client向Eureka Server进行注册子的的服务信息,Server会存储该服务器信息
提供服务管理:通过Eureka Client的Cancel,心跳监控,renew等方式来维护该服务提供的信息确保该服务可用以及服务的更新
信息同步:每个Eureka Server同时也是Eureka Client,多个Eureka Server之间通过P2P服务之方式完成服务注册表同步。但与此同时,被同步信息不会被同步。每个可用去有一个Eureka 集群,并且每个可用区至少有以一个Eureka服务器来处理区内故障,为了实现高可用,一般一个可用去由三个Eureka Server组成
Eureka Client
是一个java客户端,用于简化与Eureka的交互,并管理当前微服务,同时为当前微服务提供 该服务的服务提供者信息
Eureka Client会拉取,更新和缓存Eurkeka Server中的信息。即使所有的Eureka Server节点都宕调,服务消费者依然可以使用缓存中的信息找到服务提供者的地址(看起来对于服务少,更新不频繁的系统体验比较好)
Eureka Client在服务启动后,会向Eureka Server发送心跳(默认为30秒)以及续约信息。如果Server在一定时间内没有接收某个微服务节点的心跳,Server会注销该微服务节点(默认90秒)。

Eureka Client包含服务Application Service和服务消费者Application Client

Application Service:服务提供给个别调用。
Application Client:服务消费者,调用个别提供的服务。(大多数服务本身既是服务提供者,也是服务消费者。)
其他:
Register:服务注册
当Eureka Client向Eureka Server注册时,提供自身的数据参数,比如IP地址,端口,运行状况指示符URL,主页等。
Renew:服务续约-------Eureka客户端从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而远程调用。而注册信息定期(默认30秒)更新一次。每次返回注册列表信息可能与Eureka客户端缓存信息不同,Eureka客户端自动处理。如果由于某些原因导致注册表信息不能即使匹配,Eureka Client会重新获取整个注册表信息。 Eureka Server缓存注册表信息,整个注册表以及每个应用程序的信息进行了压缩。Eureka 客户端和Eureka服务器可以使用JSON / XML格式进行通讯。默认使用json压缩来获取注册列表信息。

Cancel:服务下线------- Eureka Client 在程序关闭时向Eureka Server发送取消请求。发送请求后,客户端实例信息从服务器实例注册表中删除。
需要主动调用以下函数:

DiscoveryManager.getInstance().shutdownComponent();

Eviction:服务剔除--------连续超过90s没有向Eureka Server发送续约服务,Eureka Server会将该服务实例从服务列表删除,既服务剔除。

源码参考这里,我觉得真的nb。服务注册和发现之Eureka原理篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值