微服务-Eureka-基础架构、服务注册、续租、下线、获取服务列表、自我保护

接上节微服务-Eureka实战配置

学习思路

  1. Eureka是什么
  2. 为什么要用Eureka
  3. 基础架构
  4. 服务注册、续租、下线、获取服务列表、自我保护

一、Eureka是什么

Eureka is a REST (Representational State Transfer) based service ;

能保证后台服务的集群配置,有非常高的可用性,能动态扩容、缩容,剔除服务

二、为什么选择Eureka

  1. 由完善的服务注册、服务发现功能
  2. 只依赖jar包,可在容器内启动,不需要像zk那样需要单独部署
  3. 源码开源
  4. 和spring-cloud无缝集成,经过了大公司的长期实践

缺点:只有java客户端

三、基础架构

解释

  1. Eureka Server:服务端,支持服务注册、续约、下线、服务获取等功能,可动态水平扩展
  2. Service Provider:服务提供者,向服务端注册服务、发起续约、下线等操作
  3. Service Consumer:服务消费者,向服务端拉取Provider注册的配置,远程调用Provider

看一个集群部署的架构图

跟上面的解释中多了

Server Provider触发注册、续约、下线等操作后Eureka Server先操作本地,然后各个Server之间同步信息,保证了每个Server的配置最终一致

这里提到了最终一致,因为同步的过程中会有实效性,还有异常情况通过心跳补偿等最终达到最终一致,可能出现短时间内配置不一致的情况

四、服务注册、续租、下线、获取服务列表、自我保护

1、注册

解释:

  1.  Client端调用Server端addInstance()方法携带配置信息进行注册,首先进行本地注册
  2. 本地Server注册完之后异步同步到其它Server

携带的配置信息如图,看图领会上篇内容

2、续租

解释:是不是跟上面的注册很像,流程一样,只是触发了不同的动作

  1.  客户端定时(30秒)触发续约操作,避免被剔除,先更新本地
  2. 本地成功后同步其它Server

3、下线

下线跟续约基本一样

触发点:org.springframework.cloud.netflix.eureka.server.InstanceRegistry#cancel

这里给你不同动作的代码自己体会

/**
     * Replicates all instance changes to peer eureka nodes except for
     * replication traffic to this node.
     *
     */
    private void replicateInstanceActionsToPeers(Action action, String appName,
                                                 String id, InstanceInfo info, InstanceStatus newStatus,
                                                 PeerEurekaNode node) {
        try {
            InstanceInfo infoFromRegistry = null;
            CurrentRequestVersion.set(Version.V2);
            switch (action) {
                case Cancel:
                    node.cancel(appName, id);
                    break;
                case Heartbeat:
                    InstanceStatus overriddenStatus = overriddenInstanceStatusMap.get(id);
                    infoFromRegistry = getInstanceByAppAndId(appName, id, false);
                    node.heartbeat(appName, id, infoFromRegistry, overriddenStatus, false);
                    break;
                case Register:
                    node.register(info);
                    break;
                case StatusUpdate:
                    infoFromRegistry = getInstanceByAppAndId(appName, id, false);
                    node.statusUpdate(appName, id, newStatus, infoFromRegistry);
                    break;
                case DeleteStatusOverride:
                    infoFromRegistry = getInstanceByAppAndId(appName, id, false);
                    node.deleteStatusOverride(appName, id, infoFromRegistry);
                    break;
            }
        } catch (Throwable t) {
            logger.error("Cannot replicate information to {} for action {}", node.getServiceUrl(), action.name(), t);
        }
    }

4、获取服务列表

解释:

  1. 为了提高性能,所有服务会在缓存存储一份
  2. 客户端请求回去,从缓存获取后返回

5、自我保护

客户端会每30秒触发续约,如果服务端联系3次也就是90秒未收到续约请求,那么就会认为该客户端已经失效,就要剔除该服务,单未避免网络或其它原因,短时间内大批量服务失效,服务端大量剔除客户端最终导致服务不可用,因此有了自我保护机制:15分钟内低于85%的客户端有效,那么服务端将不再剔除客户端,提高服务可用性即AP原则

公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值