文档章节

etcd 与 Consul 的一致性读对比

爱可生开源社区
 爱可生开源社区
发布于 2023/12/06 15:58
字数 1126
阅读 13
收藏 0

本文分享和对比了 etcd 和 Consul 这两个存储的一致性读的实现。

作者:戴岳兵,爱可生研发中心工程师,负责项目的需求开发与维护工作。

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 900 字,预计阅读需要 3 分钟。

etcdConsul 是现在比较流行的分布式一致性 KV 存储,本文就来分享和对比一下这两个存储的一致性读的实现。

Consul 一致性读的实现

Consul 有三种读模式:

  1. default
  2. consistent
  3. stale

其中 stale 是非一致性的读模式,而 default 和 consistent 是一致性的。

consistent 和 default 的区别在于 consistent 在读之前还会向各个节点确认自己是否还是 Leader,以防止在读之前的一瞬间变为 Follower,导致读取到旧值。

接下来我们看看具体实现的代码:

Get 方法的一开始 Consul 就调用了 ForwardRPC 方法来转发 RPC 请求,如果转发请求成功就直接返回。

如果转发请求没完成,就会取调用 blockingQuery 来查询本地的存储返回结果。

我们再来看一下 ForwardRPC 内部的实现。

可以看到 ForwardRPC 方法内部主要做了三件事情:

  1. 如果需要,转发请求给其他 DC
  2. 判断当前节点是否能处理这个读请求
  3. 如果不能处理,转发请求给 Leader

我们再来看看第 2 步 Consul 是如何判断的。

其中 info.IsRead 用来判断是不是一个读请求,info.AllowStaleRead 判断 HTTP 请求参数中的 AllowStale,为 false 时即为一致性的读请求,而最后判断是否已经跟 Leader 交互过。

所以当一个请求是一致性读请求时就会走到第 3 步将请求转发到 Leader 上。

而在转发 Leader 时会判断自身是不是 Leader,如果不是才会转发。

小结

从这几段逻辑可以看出,Consul 的一致性读是通过转发读请求给 Leader 来实现的。

etcd 一致性读的实现

etcd 的读分为串行读(Serialize)和线性读(Linearizable)两种模式。其中线性读是一致性的读模式。

同样的我们来看下一致性读的实现:

可以看到串行读和线性读的区别只是在串行读之前调用了 linearizableReadNotify 方法。

linearizableReadNotify 中也只是简单的给 s.readwaitc 发信号然后等待结果。

这个信号将会在 linearizableReadLoop 方法中处理。

可以看到 linearizableReadLoop 方法中通过 requestCurrentIndex 方法获得了一个叫做 confirmedIndexindex

requestCurrentIndex 会向 Leader 节点发送 MsgReadIndex 消息,以获取 Leader 节点当前提交的最新的 index。然后再用本地的 appliedIndexconfirmedIndex 进行对比,如果本地已应用的 index 小于 confirmedIndex 则进行等待,直到追上 confirmedIndex 才会调用 nr.notify 发送通知信号解除 linearizableReadNotify 的等待进行后续的串行读操作。

也就是说 etcd 在做一致性读时,会先从 Leader 节点获取 Leader 节点当前最新的 commited index,然后和本地的 applied index 进行对比,等到本地应用的日志追上 Leader 时,才进行后续的串行读操作。

总结

从实现上来说 Consul 的一致性读的实现更加简单直接,但是可能会对 Leader 节点的性能造成一些影响。

而相对来说 etcd 的实现更加复杂但是讨巧,也充分利用到了每个节点的资源。

更多技术文章,请访问:https://opensource.actionsky.com/

关于 SQLE

SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。

SQLE 获取

类型 地址
版本库 https://github.com/actiontech/sqle
文档 https://actiontech.github.io/sqle-docs/
发布信息 https://github.com/actiontech/sqle/releases
数据审核插件开发文档 https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse
爱可生开源社区

爱可生开源社区

粉丝 169
博文 1615
码字总数 2193831
作品 3
闵行
私信 提问
加载中
点击引领话题?
AI云增强升级!还原生动人像,拍出质感照片

近期不少细心用户发现,在用HUAWEI Mate 60 Pro手机拍照后,使用相册中的AI云增强功能,照片变得更加细腻有质感。这是因为AI云增强升级并更新支持了人像模式拍摄的照片,高清自然的人像细节还...

HarmonyOS SDK
今天
8
0
云计算 - 以阿里云为例,企业上云策略全览与最佳实践

云采用框架(Cloud Adoption Framework,简称CAF)为企业上云提供策略和技术的指导原则和最佳实践,帮助企业上好云、用好云、管好云,并成功实现业务目标。本云采用框架是基于服务大量企业客...

techlead_krischang
今天
5
0
动手实践丨轻量级目标检测与分割算法开发和部署(RK3568)

本文分享自华为云社区《自动驾驶(AIOT) - 轻量级目标检测与分割算法开发和部署(RK3568)【玩转华为云】》,作者:HouYanSong。 本文将在ModelArts平台上开发轻量级目标检测与分割算法,并使用...

华为云开发者联盟
今天
75
0
大模型如何助力开发者打造新质生产力

在当今的AI编程时代,大模型已经成为了推动技术进步和产业变革的重要力量。大模型,即大型神经网络,具有海量的参数和复杂的结构,能够处理更广泛、更复杂的任务。随着数据集的扩大和计算能力...

百度开发者中心
今天
8
0
2024首场沙龙|上海 · 得物技术沙龙-「稳定生产」专场报名开启!

在互联网业界,伴随业务需求更新、用户流量增长、创新技术迭代,稳定性一直是十分复杂且极具挑战性的课题。近年业界发生较多Bad case,得物技术团队迎难而上,通过制定年度全局目标、持续技术...

得物技术
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

{{formatHtml(o.title)}}

{{i}}-{{formatHtml(o.content)}}

{{o.author.name}}
{{o.pubDate | formatDate}}
{{o.viewCount | bigNumberTransform}}
{{o.replyCount | bigNumberTransform}}

暂无文章

便宜云服务器
登录后可查看更多优质内容
返回顶部
顶部
http://www.vxiaotou.com