【ETCD】【Linearizable Read OR Serializable Read】ETCD 数据读取:强一致性 vs 高性能,选择最适合的读取模式

ETCD 提供了两种不同类型的读取操作方式,分别是 Linearizable Read (线性化读取)和 Serializable Read (可串行化读取)。这两种方式主要区分在读取数据时对一致性的要求不同。

目录

1. Linearizable Read(线性化读取)

线性化读取保证了读取到的数据是 最新的,即保证了对所有客户端的一致性视图。它确保每次读取操作都能返回所有前一个写操作的结果。简单来说,线性化读取保证了客户端读取到的数据至少是写入的数据的"最新值",并且该值是经过共识协议(如 Raft)确认的。

特点:
  • 严格一致性:每次读取的数据都来自一个已经提交的写操作,并且该操作在集群中是被一致认可的。
  • 阻塞读取:在进行线性化读取时,ETCD 会确保客户端从最新的数据源中读取数据,因此可能需要等待 Raft 协议完成数据的一致性同步,导致读取操作可能会有延迟。
优点:
  • 数据一致性:保证读取到的是最新的数据,满足强一致性要求,适用于对数据一致性要求高的场景。
缺点:
  • 性能较低:由于线性化读取需要跨节点的共识来保证数据一致性,可能导致较高的延迟和较低的吞吐量,尤其是在高并发情况下。

2. Serializable Read(可串行化读取)

可串行化读取是一个更宽松的读取模式,它允许读取到的数据在某些情况下可能并不是最新的,但仍然保证读取的数据满足一定的序列化规则。换句话说,ETCD 会确保多个并发的读取操作不会造成数据冲突或不一致,但可能会读取到稍微过时的数据。

特点:
  • 顺序一致性:可串行化读取保证多个操作(无论是写操作还是读操作)是可以按顺序串行化的。即使不同客户端的操作并发发生,也会确保没有冲突。
  • 不需要强一致性:与线性化读取不同,可串行化读取不一定要求读取到最新的数据。它保证数据在逻辑上是顺序一致的。
优点:
  • 较高的性能:由于不要求强一致性,读取操作的延迟较低,性能更好,适合高吞吐量的场景。
  • 支持并发操作:可串行化读取适合对一致性要求较低但对并发性要求高的场景。
缺点:
  • 一致性不强:读取的数据可能是过时的,无法保证读取到最新的数据。适用于对一致性要求不高的场景。

总结:

特性 Linearizable Read (线性化读取) Serializable Read (可串行化读取)
一致性保证 强一致性,读取的数据是最新的 顺序一致性,读取的数据可能稍微过时
性能 性能较低,可能导致较高延迟和吞吐量降低 性能较高,读取操作响应较快
适用场景 对数据一致性要求高的场景(如配置管理、分布式锁) 对并发性能要求高、一致性要求相对较低的场景
数据时效性 保证读取到最新的数据 可能读取到过时的数据
操作复杂度 需要通过 Raft 协议保证一致性,通常需要等待数据同步 不强制要求最新数据,可接受延迟或旧数据
写入延迟影响 写入操作和读取操作紧密相关,写入延迟可能影响读取 写入操作可能不会直接影响读取,系统更容错
Leader 节点的影响 读取操作需要通过 Leader 节点进行,Leader 节点可能成为性能瓶颈,影响整体吞吐量和响应时间 读取操作可以从 Follower 节点进行,减轻了 Leader 节点的负担,提供更好的负载均衡和性能
优点 - 确保读取到的是最新的数据 - 较高的性能,低延迟
- 强一致性,适用于对一致性要求高的场景 - 更适合高并发的场景
缺点 - 性能较低,可能会增加延迟和降低吞吐量 - 读取的数据可能是过时的,不能保证最新数据
- Leader 节点可能成为瓶颈,影响整体性能 - 无法保证数据总是最新的
相关推荐
panxianren4 小时前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
sunshine22 girl6 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs6 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang7 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl7 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat7 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
许彰午8 小时前
01-Oracle数据库简介与版本选择
数据库·oracle
菜鸟~noob2338 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
泡茶喝茶写代码9 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
Seraphina3610 小时前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql