美文网首页
Eureka线程模型

Eureka线程模型

作者: 超人也害羞 | 来源:发表于2020-09-13 16:10 被阅读0次

服务端线程

线程
Eureka-DeltaRetentionTimer 清除注册表中recentlyChangedQueue(最近更新的信息)过期的信息,用作增量更新注册表信息。
Eureka-EvictionTimer eureka回收过期实例线程
Eureka-MeasureRateTimer 最近1分钟续约的次数记录
TaskBatchingWorker/TaskNonBatchingWorker 集群同步节点线程
ReplicaAwareInstanceRegistry - RenewalThresholdUpdater 自动计算自我保护阀值,为了自动保护机制提供参考数据
Eureka-PeerNodesUpdater 定时从配置文件中更新集群节点信息

客户端线程

线程 线程作用
cacheRefresh 全量或增量同步注册表
heartbeat 服务注册与心跳续约
InstanceInfoReplicator 同步客户端节点

Eureka线程模型

eureka server线程模型.jpg

关键业务对象

租约对象

/**
 * 租约
 */
public class Lease<T> {   
    public static final int DEFAULT_DURATION_IN_SECS = 90;
    // 句柄
    private T holder;
    // 取消注册时间戳    
    private long evictionTimestamp;
    // 注册时间戳  
    private long registrationTimestamp;
    // 开始服务时间戳
    private long serviceUpTimestamp;
    // 最后更新时间戳
    private volatile long lastUpdateTimestamp;
    // 租约持续时长,单位:毫秒
    private long duration;
}

Instance(实例)

public class InstanceInfo {
    private static final String VERSION_UNKNOWN = "unknown";
    private static final Logger logger = LoggerFactory.getLogger(InstanceInfo.class);
    public static final int DEFAULT_PORT = 7001;
    public static final int DEFAULT_SECURE_PORT = 7002;
    public static final int DEFAULT_COUNTRY_ID = 1;
    /*实例Id。在同一个应用appName中必须是唯一的*/
    /*常见的在Spring Cloud的配置是:eureka.instance.instance-id = ${spring.cloud.client.ipAddress}:${spring.application.name}:${server.port}:@project.version@*/
    private volatile String instanceId;
    /*应用名*/
    private volatile String appName;
    @Auto
    private volatile String appGroupName;
    /*本实例IP地址*/
    private volatile String ipAddr;
    private static final String SID_DEFAULT = "na";
    /** @deprecated */
    @Deprecated
    /*已过期,请忽略*/
    private volatile String sid;
    /*端口号*/
    private volatile int port;
    /*securePort 安全端口号*/
    private volatile int securePort;
    @Auto
    /*主页*/
    private volatile String homePageUrl;
    @Auto
    /*状态页*/
    private volatile String statusPageUrl;
    @Auto
    /*健康检查的health*/
    private volatile String healthCheckUrl;
    @Auto
    private volatile String secureHealthCheckUrl;
    @Auto
    private volatile String vipAddress;
    @Auto
    private volatile String secureVipAddress;
    @XStreamOmitField
    private String statusPageRelativeUrl;
    @XStreamOmitField
    private String statusPageExplicitUrl;
    @XStreamOmitField
    private String healthCheckRelativeUrl;
    @XStreamOmitField
    private String healthCheckSecureExplicitUrl;
    @XStreamOmitField
    private String vipAddressUnresolved;
    @XStreamOmitField
    private String secureVipAddressUnresolved;
    @XStreamOmitField
    private String healthCheckExplicitUrl;
    /** @deprecated */
    @Deprecated
    private volatile int countryId;
    private volatile boolean isSecurePortEnabled;
    private volatile boolean isUnsecurePortEnabled;
    private volatile DataCenterInfo dataCenterInfo;
    /*主机名*/
    private volatile String hostName;
    /** 
     * 实例状态。默认值是InstanceStatus.UP
     * starting: 实例初始化状态
     * down: 当健康检查失败时,实例的状态转变到down
     * up: 正常服务状态
     * out_of_service: 不参与接受服务。但是服务正常。
     * unknown: 未知状态
     */
    private volatile InstanceInfo.InstanceStatus status;
    // 对外界展示的实例状态,优先级高于status,可通过restful接口设置,可用于中断部分机器的流量
    // 用于升级或排查问题比较方便
    private volatile InstanceInfo.InstanceStatus overriddenStatus;
    @XStreamOmitField
    private volatile boolean isInstanceInfoDirty;
    /**
     * 租约信息
     */
    private volatile LeaseInfo leaseInfo;
    @Auto
    private volatile Boolean isCoordinatingDiscoveryServer;
    /**
     * 自定义元数据,可以是任意k-v  
     */
    @XStreamAlias("metadata")
    private volatile Map<String, String> metadata;
    /**
     * 上次修改时间
     */
    @Auto
    private volatile Long lastUpdatedTimestamp;
    @Auto
    private volatile Long lastDirtyTimestamp;
    /**
     * 动作类型。如ADDED/MODIFIED/DELETED
     */
    @Auto
    private volatile InstanceInfo.ActionType actionType;
    @Auto
    private volatile String asgName;
    private String version;
}

相关文章

  • Eureka线程模型

    服务端线程 线程Eureka-DeltaRetentionTimer清除注册表中recentlyChangedQu...

  • Reactor线程模型及其在Netty中的应用

    什么是Reactor线程模型 Java中线程模型大致可以分为: 单线程模型 多线程模型 线程池模型(executo...

  • SQLite 线程安全和并发

    SQLite 与线程 SQLite是线程安全的。 线程模型 SQLite支持如下三种线程模型 单线程模型这种模型下...

  • Reactor线程模型【原理笔记】

    前言 Reactor模型是基于事件驱动的线程模型,可以分为Reactor单线程模型、Reactor多线程模型、主从...

  • Netty 线程模型

    线程模型: 单线程模型:该Server线程要处理读请求,写请求,全部在一个线程中. Reactor线程模型[htt...

  • Netty篇:Reactor线程模型和NioEventLoop,

    Reactor线程模型 Reactor模式是一种典型的事件驱动的编程模型,主要有单线程模型,多线程模型以及主从线程...

  • Tomcat NIO 线程模型分析

    Tomcat7线程模型 tomcat 的nio 线程模型也是reactor 模型,由accept 线程负责接受连接...

  • 线程模型的3种实现

    线程的实现模型主要有3种:内核级线程模型、用户级线程模型和混合型线程模型。它们之间最大的区别在于线程与内核调度实体...

  • 一文搞懂Go 的并发调度模型

    线程模型 在细说 Go 的调度模型之前,先来说说一般意义的线程模型。线程模型一般分三种,由用户级线程和 OS 线程...

  • 线程池

    线程是调度CPU资源的最小单位,线程模型分为KLT模型和ULT模型,Java采用的是KLT模型,java线程与OS...

网友评论

      本文标题:Eureka线程模型

      本文链接:https://www.haomeiwen.com/subject/qdvtjktx.html