注册中心
文章平均质量分 90
Nacos,Eureka,Consul,Zookeeper对比和详解
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
SPI 机制实现JDK/Dubbo/Spring
SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 有什么用?举个栗子,现在我们设计了一款全新的日志框架:super-logger。默认以XML文件作为我们这款日志的配置文件,并设计了一个配置文件解析的接口:packagecom.git...原创 2021-05-16 17:14:54 · 136 阅读 · 0 评论 -
Eureka高可用之Eureka Server复制机制:PeerAwareInstanceRegistryImpl
还是先提出几个疑问,看本篇文章前最好看过Eureka高可用之Client重试机制:RetryableEurekaHttpClient,要知道Eureka Client只会向一个Server节点进行注册(心跳、状态改变等类似),注册失败时才会尝试下一个server节点。当然正是由于这种机制,才会有Eureka Server的复制行为,个人认为,Eureka Client向每个Eureka Server都发送注册、心跳等事件,会更好的保证一致性1、如果有4个Eureka Server集群节点,一个Clien原创 2020-06-26 15:03:47 · 349 阅读 · 0 评论 -
Eureka高可用之Client重试机制:RetryableEurekaHttpClient
下面有几个疑问是我看源码时问自己的,先提出来,希望看这篇文章的人带着疑问去读,然后初步介绍下EurekaHttpClient体系,后面会详细讲RetryableEurekaHttpClient1、Eureka Client如何向Eureka Server集群注册?如果我的Client端的ServiceUrl配置了多个Eureka Service地址,那么Client是否会向每一个Server发起注册?2、Eureka Server具有复制行为,即向其他Eureka Server节点复制自身的实例信原创 2020-06-26 14:33:28 · 1016 阅读 · 0 评论 -
Spring Cloud 注册中心 Consul 入门
1. 概述在《Consul 极简入门》文章中,我们一起完成了 Consul 的学习,并完成了 Consul 服务器的搭建。本文我们来学习Spring Cloud Consul提供的spring-cloud-consul-discovery组件,基于 Spring Cloud 的编程模型,接入 Consul 作为注册中心,实现服务的注册与发现。2. 注册中心原理在开始搭建 Consul Discovery 的示例之前,我们先来简单了解下注册中心的原理。在使用注册中心时,一共有三种角...原创 2020-06-25 19:01:58 · 255 阅读 · 0 评论 -
Consul 极简入门
1. 概述Consul是由 HashiCorp 基于 Go 语言实现的开源项目,可用于分布式系统的注册中心和配置中心的功能。旁白君:Consul 目前已经提供完整的Service Mesh 服务网格的能力,不过我们可以暂时先忽略。更多的关注,将 Consul 作为注册中心和配置中心。1.1 核心功能对应官方文档地址:https://www.consul.io/introConsul 的核心功能如下:①服务发现(Service Discovery):Consul 提供了...原创 2020-06-25 18:39:31 · 625 阅读 · 0 评论 -
Spring Cloud 注册中心 ZooKeeper 入门
1. 概述在《ZooKeeper 极简入门》文章中,我们一起完成了 ZooKeeper 的学习,并完成了 ZooKeeper 服务器的搭建。本文我们来学习Spring Cloud ZooKeeper提供的spring-cloud-zookeeper-discovery组件,基于 Spring Cloud 的编程模型,接入 ZooKeeper 作为注册中心,实现服务的注册与发现。2. 注册中心原理在开始搭建 ZooKeeper Discovery 的示例之前,我们先来简单了解下注册中心...原创 2020-06-20 22:07:58 · 725 阅读 · 0 评论 -
Zookeeper 极简入门
1. 概述ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。Zookeeper 具有如下特性:① 顺序一致性(有序性)从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到原创 2020-06-20 22:01:26 · 291 阅读 · 0 评论 -
Spring Cloud Alibaba 注册中心 Nacos 入门
1. 概述本文我们来学习Spring Cloud Alibaba提供的Spring Cloud Alibaba Nacos Discovery组件,基于 Spring Cloud 的编程模型,接入 Nacos 作为注册中心,实现服务的注册与发现。服务注册/发现: Nacos Discovery服务发现是微服务架构体系中最关键的组件之一。如果尝试着用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于服务的动态扩缩容。Nacos Discovery...原创 2020-06-03 02:20:41 · 299 阅读 · 0 评论 -
Eureka 源码解析 —— StringCache
1. 概述本文主要分享Eureka 自己实现的 StringCache。先一起来看下美团点评技术团队对String#intern(...)的分享:FROM《深入解析String#intern》「 引言 」在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个 JAVA 系统级别提供的缓存。8 种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用...原创 2020-06-10 00:29:44 · 135 阅读 · 0 评论 -
Eureka 源码解析 —— 基于令牌桶算法的 RateLimiter
1. 概述本文主要分享RateLimiter 的代码实现和 RateLimiter 在 Eureka 中的应用。推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Docker微服务架构实战》 两书齐买,京东包邮。2. RateLimitercom.netflix.discovery.util.RateLimiter,基于Token Bucket...原创 2020-06-10 00:27:41 · 488 阅读 · 0 评论 -
Eureka 源码解析 —— Eureka-Server 集群同步
1. 概述本文主要分享Eureka-Server 集群同步注册信息。Eureka-Server 集群如下图:Eureka-Server 集群不区分主从节点或者Primary & Secondary 节点,所有节点相同角色( 也就是没有角色 ),完全对等。 Eureka-Client 可以向任意Eureka-Client 发起任意读写操作,Eureka-Server 将操作复制到另外的 Eureka-Server 以达到最终一致性。注意,Eureka-Server 是选择了 A...原创 2020-06-10 00:15:26 · 430 阅读 · 0 评论 -
Eureka 源码解析 —— 网络通信
1. 概述本文主要分享Eureka 的网络通信部分。在不考虑 Eureka 2.x 的兼容的情况下,Eureka 1.x 主要两部分的网络通信:Eureka-Client 请求 Eureka-Server 的网络通信 Eureka-Server 集群内,Eureka-Server 请求其它的Eureka-Server的网络通信本文涉及类在com.netflix.discovery.shared.transport包下,涉及到主体类的类图如下(打开大图):粉色部分 —— Eu...原创 2020-06-10 00:05:40 · 652 阅读 · 0 评论 -
Eureka 源码解析 —— EndPoint 与 解析器
1. 概述本文主要分享EndPoint 与 解析器。EndPoint ,服务端点。例如,Eureka-Server 的访问地址。 EndPoint 解析器,将配置的 Eureka-Server 的访问地址解析成 EndPoint 。目前有多种 Eureka-Server 访问地址的配置方式,本文只分享 Eureka 1.x 的配置,不包含 Eureka 1.x 对 Eureka 2.x 的兼容配置:第一种,直接配置实际访问地址。例如,eureka.serviceUrl.defaultZon.原创 2020-06-10 00:05:24 · 1172 阅读 · 0 评论 -
Eureka 源码解析 —— 任务批处理
1. 概述本文主要分享任务批处理。Eureka-Server 集群通过任务批处理同步应用实例注册实例,所以本文也是为 Eureka-Server 集群同步的分享做铺垫。本文涉及类在com.netflix.eureka.util.batcher包下,涉及到主体类的类图如下(打开大图):紫色部分 —— 任务分发器 蓝色部分 —— 任务接收器 红色部分 —— 任务执行器 绿色部分 —— 任务处理器 黄色部分 —— 任务持有者( 任务 )推荐 Spring Cloud 书籍:...原创 2020-06-10 00:05:13 · 596 阅读 · 0 评论 -
Eureka 源码解析 —— Eureka源码解析 —— 应用实例注册发现 (九)之读写锁
1. 概述本文主要分享Eureka 注册中心的那把读写锁,让我瘙痒难耐,却不得其解。在某次意外的抠脚的一刻( 笔者不抽烟,如果抽烟的话,此处应该就不是抠脚了 ),突然顿悟,爽,这好比... 比喻有点猥琐,笔者就省略 100 字。不瞎比比,上代码:public abstract class AbstractInstanceRegistry implements InstanceRegistry { private final ReentrantReadWriteLock readWr.原创 2020-06-09 00:13:21 · 397 阅读 · 2 评论 -
Eureka 源码解析 —— 应用实例注册发现(八)之覆盖状态
1. 概述本文主要分享应用实例的覆盖状态属性。这里要注意下,不是应用实例的状态(status),而是覆盖状态(overridestatus) 。代码如下:public class InstanceInfo { private volatile InstanceStatus overriddenstatus = InstanceStatus.UNKNOWN; // ... 省略属性和方法}调用 Eureka-Server HTTP Restful 接...原创 2020-06-09 00:10:50 · 405 阅读 · 0 评论 -
Eureka 源码解析 —— 应用实例注册发现(七)之增量获取
1. 概述本文主要分享Eureka-Client 向 Eureka-Server 获取增量注册信息的过程。前置阅读:《Eureka 源码解析 —— 应用实例注册发现(六)之全量获取》FROM《深度剖析服务发现组件Netflix Eureka》Eureka-Client 获取注册信息,分成全量获取和增量获取。默认配置下,Eureka-Client 启动时,首先执行一次全量获取进行本地缓存注册信息,而后每30秒增量获取刷新本地缓存( 非“正常”情况下会是全量获取 )。本文重点在于...原创 2020-06-09 00:10:34 · 538 阅读 · 0 评论 -
Eureka 源码解析 —— 应用实例注册发现(六)之全量获取
1. 概述本文主要分享Eureka-Client 向 Eureka-Server 获取全量注册信息的过程。FROM《深度剖析服务发现组件Netflix Eureka》Eureka-Client 获取注册信息,分成全量获取和增量获取。默认配置下,Eureka-Client 启动时,首先执行一次全量获取进行本地缓存注册信息,而后每30秒增量获取刷新本地缓存( 非“正常”情况下会是全量获取 )。本文重点在于全量获取。推荐 Spring Cloud 书籍:请支持正版。下载盗版,等...原创 2020-06-09 00:10:18 · 423 阅读 · 0 评论 -
Eureka 源码解析 —— 应用实例注册发现(五)之过期
1. 概述本文主要分享Eureka-Server 过期超时续租的租约。FROM《深度剖析服务发现组件Netflix Eureka》推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Docker微服务架构实战》 两书齐买,京东包邮。2. 为什么需要过期正常情况下,应用实例下线时候会主动向 Eureka-Server 发起下线请求。但实际情...原创 2020-06-09 00:10:04 · 447 阅读 · 0 评论 -
Eureka 源码解析 —— 应用实例注册发现(四)之自我保护机制
1. 概述本文主要分享自我保护机制,为应用实例过期下线做铺垫。推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Docker微服务架构实战》2. 定义自我保护机制定义如下:FROM周立 —— 《理解Eureka的自我保护模式》当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护...原创 2020-06-09 00:09:52 · 166 阅读 · 0 评论 -
Eureka 源码解析 —— 应用实例注册发现(三)之下线
1. 概述本文主要分享Eureka-Client 向 Eureka-Server 下线应用实例的过程。FROM《深度剖析服务发现组件Netflix Eureka》二次编辑蓝框部分,为本文重点。 非蓝框部分,Eureka-Server 集群间复制注册的应用实例信息,不在本文内容范畴。推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Dock...原创 2020-06-09 00:09:38 · 173 阅读 · 0 评论 -
Eureka 源码解析 —— 应用实例注册发现(二)之续租
1. 概述本文主要分享Eureka-Client 向 Eureka-Server 续租应用实例的过程。FROM《深度剖析服务发现组件Netflix Eureka》二次编辑蓝框部分,为本文重点。 非蓝框部分,Eureka-Server 集群间复制注册的应用实例信息,不在本文内容范畴。推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Dock...原创 2020-06-09 00:09:25 · 421 阅读 · 0 评论 -
Eureka 源码解析 —— 应用实例注册发现(一)之注册
1. 概述本文主要分享Eureka-Client 向 Eureka-Server 注册应用实例的过程。FROM《深度剖析服务发现组件Netflix Eureka》二次编辑蓝框部分,为本文重点。 非蓝框部分,Eureka-Server 集群间复制注册的应用实例信息,不在本文内容范畴。推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Dock...原创 2020-06-09 00:09:11 · 399 阅读 · 0 评论 -
Eureka 源码解析 —— 注册表 InstanceRegistry 类关系
1. 概述本文主要简介注册表 InstanceRegistry 的类关系,为后文的应用实例注册发现、Eureka-Server 集群复制做整体的铺垫。推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Docker微服务架构实战》 两书齐买,京东包邮。2. 类图com.netflix.eureka.registry.AwsInstanceReg...原创 2020-06-09 00:08:48 · 253 阅读 · 0 评论 -
Eureka 源码解析 —— Eureka-Server 启动(二)之 EurekaBootStrap
1. 概述本文接《Eureka 源码解析 —— Eureka-Server 启动(一)之 EurekaServerConfig》,主要分享Eureka-Server 启动的过程的第二部分 ——EurekaBootStrap。考虑到整个初始化的过程中涉及的代码特别多,拆分成两两篇文章:ServerConfig 【本文】EurekaBootStrap推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服...原创 2020-06-08 00:53:25 · 433 阅读 · 0 评论 -
Eureka 源码解析 —— Eureka-Server 启动(一)之 ServerConfig
1. 概述本文主要分享Eureka-Server 启动的过程。考虑到整个初始化的过程中涉及的代码特别多,拆分成两两篇文章:【本文】ServerConfig EurekaBootStrap推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Docker微服务架构实战》 两书齐买,京东包邮。2. EurekaServerConfigcom.ne...原创 2020-06-08 00:27:23 · 574 阅读 · 0 评论 -
Eureka 源码解析 —— Eureka-Client 初始化(三)之 EurekaClient
1. 概述本文接《Eureka 源码解析 —— Eureka-Client 初始化(二)之 EurekaClientConfig》,主要分享Eureka-Client 自身初始化的过程的第三部分 ——EurekaClient,不包含 Eureka-Client 向 Eureka-Server 的注册过程( ????后面会另外文章分享 )。Eureka-Client 自身初始化过程中,涉及到主要对象如下图:创建EurekaInstanceConfig对象 使用 EurekaInstanceC原创 2020-06-08 00:23:57 · 301 阅读 · 0 评论 -
Eureka 源码解析 —— Eureka-Client 初始化(二)之 EurekaClientConfig
1. 概述本文接《Eureka 源码解析 —— Eureka-Client 初始化(一)之 EurekaInstanceConfig》,主要分享Eureka-Client 自身初始化的过程的第二部分 ——EurekaClientConfig,不包含 Eureka-Client 向 Eureka-Server 的注册过程( ????后面会另外文章分享 )。Eureka-Client 自身初始化过程中,涉及到主要对象如下图:创建EurekaInstanceConfig对象 使用 EurekaI原创 2020-06-08 00:11:55 · 290 阅读 · 0 评论 -
Eureka 源码解析 —— Eureka-Client 初始化(一)之 EurekaInstanceConfig
1. 概述本文主要分享Eureka-Client 自身初始化的过程,不包含 Eureka-Client 向 Eureka-Server 的注册过程( ????后面会另外文章分享 )。Eureka-Client 自身初始化过程中,涉及到主要对象如下图:创建EurekaInstanceConfig对象 使用 EurekaInstanceConfig对象创建InstanceInfo对象 使用 EurekaInstanceConfig对象 + InstanceInfo对象创建Applica...原创 2020-06-08 00:08:20 · 394 阅读 · 0 评论 -
Eureka 源码解析 —— 调试环境搭建
1. 依赖工具Gradle JDK IntelliJ IDEA推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Docker微服务架构实战》 两书齐买,京东包邮。2. 源码拉取从官方仓库https://github.com/Netflix/eureka.gitFork出属于自己的仓库。为什么要Fork?既然开始阅读、调试源码,我们可能会...原创 2020-06-08 00:01:27 · 818 阅读 · 0 评论 -
Eureka 源码解析 —— 项目结构简介
1. 概述本文主要分享Eureka 的项目结构,附带部分简介和原理。Eureka 项目地址:https://github.com/Netflix/eureka请注意下,不是spring-cloud-netflix-eureka-client/spring-cloud-netflix-eureka-server。 笔者 Fork 的代码仓库https://github.com/YunaiV/eureka,会随着这个系列的文章逐渐增加中文注释,可以先 Star 一下。推荐 Sprin...原创 2020-06-08 00:01:12 · 210 阅读 · 0 评论 -
Spring Cloud Netflix 注册中心 Eureka 入门
1. 概述本文我们来学习Spring Cloud Netflix提供的spring-cloud-netflix-eureka-server和spring-cloud-netflix-eureka-server组件,基于 Spring Cloud 的编程模型,接入Eureka作为注册中心,实现服务的注册与发现。旁白君:下面我们先来科普 Eureka 和注册中心的概念,保持耐心,嘿嘿~2. Eureka 简介Eureka 是 Netflix 开源的注册中心组件,分成 Eure...原创 2020-06-08 00:00:58 · 684 阅读 · 0 评论 -
为什么不用 ZooKeeper 做服务发现?
站在未来的路口,回望历史的迷途,常常会很有意思,因为我们会不经意地兴起疯狂的念头,例如如果当年某事提前发生了,而另外一件事又没有发生会怎样?一如当年的奥匈帝国皇位继承人斐迪南大公夫妇如果没有被塞尔维亚族热血青年普林西普枪杀会怎样,又如若当年的丘老道没有经过牛家村会怎样?2007年底,淘宝开启一个叫做“五彩石”的内部重构项目,这个项目后来成为了淘宝服务化、面向分布式走自研之路,走出了互联网中间件体系之始,而淘宝服务注册中心ConfigServer于同年诞生。2008年前后,Yahoo 这个曾经的互联网原创 2020-06-05 17:02:50 · 432 阅读 · 0 评论 -
如何将注册中心从 Consul 平滑的迁移到 Nacos
近日,国外的商业软件公司HashiCorp在官网宣布:不允许中国境内使用、部署和安装该企业旗下的【企业版】产品和软件。PLEASE NOTE THAT THE SOFTWARE MAY NOT BE USED, DEPLOYED OR INSTALLED IN THE PEOPLE’S REPUBLIC OF CHINA.HashiCorp旗下的知名的开源软件有 Consul、Vagrant、Terraform等,虽然在最后官方立马对文章进行了修改和解释,指出只是因为国内管制,不允许使用其公原创 2020-06-05 16:28:38 · 416 阅读 · 0 评论 -
Nacos 极简入门
1. 概述Nacos 是什么?其官方文档自我介绍如下:FROMhttps://nacos.io/zh-cn/docs/what-is-nacos.htmlNacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。看起来介绍看起来有点高大.原创 2020-06-03 01:30:12 · 975 阅读 · 0 评论 -
Nacos——如何下线被 kill -9 的实例
上文说到了服务实例的正常上下线,都是实例主动调接口完成的。但是如果实例被kill -9呢,就不会主动通知下线了。如何处理这种情况,这个才是服务发现的重点了。解决的办法就是 心跳+定时任务去判断,不过这里定时任务的分配也是有讲究了。1 心跳nacos源码分析——如何做心跳续约 中说到了,服务实例的心跳调用/clientBeat接口,会更新lastBeat为当前时间。但是这个lastBeat时间要如何用起来呢?2 定时任务VirtualClusterDomain 会起个定时任务原创 2020-05-24 13:36:28 · 2709 阅读 · 0 评论 -
Nacos—— 如何实现注册发现
注册一个服务如果这个服务之前没有,第一次注册,构建这个服务信息如果服务有了,就增加这个服务的实例ip这个步骤就是和增加实例ip的接口是一样的逻辑了增加实例ip的接口这个真的是有点绕啊,终于来到真正处理的onAddIP4Dom了这里的重点就newIPs了,就是更新后的ip列表ipAddressMap.values() 其实就是旧的ip加上newIPspublic static final String IPADDRESS_DATA_ID_原创 2020-05-24 13:33:21 · 833 阅读 · 1 评论 -
Nacos——Raft 如何保证内容一致
其实是通过心跳来保证的leader发送心跳的时候会带上所有的key和key对应的时间戳,follower发现key不存在或者时间戳比较小,就发送请求给leader拿这些key的数据,最终达到数据一致。发送心跳带上所有的key这些数据会有点大,所以做了gzip压缩follower收到心跳的时候,判断key的存在和时间戳,和leader对不上的,发起请求拿最新的不一致的key可能比较多,所以批量去拿,每次拿50个key。数据差距可能比较大,一直循环拿的话对leader的压力会原创 2020-05-24 13:30:52 · 611 阅读 · 0 评论 -
Nacos—— Raft 如何发布内容
在上一篇介绍如何选举后,发布内容就相对简单很多了。发布内容的入口signalPublish 的很简单如果自己不是leader就转发给leader如果自己是leader,就向所有节点发送onPublish请求,注意这里是所有的节点,包括自己。所以其实还是看onPublish的逻辑了onPublish可以当做是一次心跳了,更新选举检查时间,然后一个重点就是term增加100了。当然还是就是更新内容了,先写文件,再更新内存缓存。可以看到写文件的时候,一个key就原创 2020-05-24 13:26:42 · 314 阅读 · 0 评论 -
Nacos——Raft 如何选举
发起请求:public static final String API_VOTE = UtilsAndCommons.NACOS_NAMING_CONTEXT + “/raft/vote”;其他节点收到选举请求收到请求的处理过程是:如果对方的term比自己小,voteFor为自己,然后返回结果。意思是我自己更适合做leader,这一票我投给自己。如果对方的term比自己大,设置voteFor为对方,然后返回结果,意思是就按你说的做,这一票就投给你了。发起投票的节点收集到回原创 2020-05-24 13:22:51 · 776 阅读 · 0 评论
分享