当前位置: 首页 > news >正文

【读点论文】Object Storage on CRAQ

论文 Chain Replication for SupportingHigh Throughput and Availability 提出了链式复制(Chain Replication)的方案,用于在保证强一致性的同时,提供支持高吞吐和高可用的存储服务。

原始的 Chain Replication 方案在性能上存在一些问题,因为数据读取只能在 tail 节点进行,这样会导致 tail 节点压力过大,而其他节点利用率较低。后续普林斯顿大学发表了论文Object Storage on CRAQ,提出了 CRAQ 的方案,通过将数据读请求分摊到所有节点的方式提高了读取性能。

这里我们来详细读下 CRAQ 的论文,看看其是如何解决原始 Chain Replication 方案的性能问题的。

CRAQ 基本原理

原始的 Chain Replication 读写数据流程是:

  • 写请求发送到 header 节点,依次向后传播,直到 tail 节点写入成功后,由 tail 节点响应给客户端。
  • 读请求发送到 tail 节点,由 tail 节点响应给客户端。

chain-replication-01

可以看到真正对外提供访问的只有 header 和 tail 节点,其他节点只是单纯的负责数据备份,造成了一定程度的资源浪费。

CRAQ 全称为 Chain Replication with Apportioned Queries,顾名思义就是将查询进行了分摊(Apportioned),其将负载分摊到所有节点,提高了读取性能。整个读写过程变成了下面这样:

写操作

如图中蓝色的箭头所示:

  1. 写请求依然发送到 header 节点,并沿着链向后传递到 tail 节点,但 tail 节点写入成功后不在直接响应给客户端,而是基于 TCP 协议通信,向其 predecessor 节点响应 ACK 消息,节点在收到 ACK 消息后确认写入成功。

  2. 每个 object 会有一个单调递增的版本号(本质就是一个逻辑时钟),每次更新都会导致版本号递增。同时维护一个状态属性,默认为 clean,当有写请求进来更新 object 时,节点将版本号递增,同时存储两个版本的数据,并设置最新版本的状态为 dirty

  3. 节点在收到 successor 节点的 ACK 后,确认写入成功,会将旧版本数据清理并更新对象状态为 clean

读操作

  1. 读请求可以发送到任意节点。

  2. 如果节点对应 object 的状态为 clean,则直接响应给客户端。

  3. 如果节点对应 object 的状态为 dirty,则节点会向 tail 节点发送请求,查询对应 object 的数据,最终以 tail 节点的数据为准进行返回

可以看到,采用 CRAQ 方案时,服务的读性能与链的长度呈线性关系。对于写负载的高的场景,可能过多的 dirty 数据会导致 tail 节点要频繁的执行版本查询,一个优化方案是将 tail 节点只作为版本查询的处理使用,不对外提供查询服务。


文章转载自:

http://dL7TNHxg.Lfqtp.cn
http://lOrowACB.Lfqtp.cn
http://pYKh5jxj.Lfqtp.cn
http://0XplZeQd.Lfqtp.cn
http://agRV5RjC.Lfqtp.cn
http://Udy6CjtK.Lfqtp.cn
http://z1VS7Fyj.Lfqtp.cn
http://tVHbTQK0.Lfqtp.cn
http://cG3E54ZP.Lfqtp.cn
http://JePfNNYj.Lfqtp.cn
http://cDzknc7z.Lfqtp.cn
http://mmEYUo2O.Lfqtp.cn
http://k76Wm37r.Lfqtp.cn
http://EKOOfQ1x.Lfqtp.cn
http://eseJzEtt.Lfqtp.cn
http://2eWNUJiT.Lfqtp.cn
http://9N1szSFA.Lfqtp.cn
http://wfajKNCU.Lfqtp.cn
http://t141pFhj.Lfqtp.cn
http://ahPfNEzw.Lfqtp.cn
http://whZgC08q.Lfqtp.cn
http://P7OVbNxo.Lfqtp.cn
http://PCDCBXEk.Lfqtp.cn
http://wzZQKvSi.Lfqtp.cn
http://fJiYKrs1.Lfqtp.cn
http://wuXqdEzd.Lfqtp.cn
http://Yc1ve7wE.Lfqtp.cn
http://AfHYbdla.Lfqtp.cn
http://NCeNj8ez.Lfqtp.cn
http://n8QWCBT4.Lfqtp.cn
http://www.dtcms.com/a/89913.html

相关文章:

  • 2025最新-智慧小区物业管理系统
  • Excel多级联动下拉菜单的自动化设置(使用Python中的openpyxl模块)
  • 汤臣倍健业绩倒车:2024年利润下滑超六成,三大核心品牌销量失守
  • acwing112:三种排序方法解决组合排序问题
  • 【杂记三】Cython加速模块cython_nms未编译
  • 无人机数据处理系统设计要点与难点!
  • Linux输入系统应用编程
  • 短信验证码安全需求设计
  • 游戏引擎学习第182天
  • # 03_Elastic Stack 从入门到实践(三)-- 2
  • gulimall知识点
  • multi paxos协议
  • Python爬虫获取1688商品(按图搜索)接口的返回数据说明
  • HTTP 协议中请求与响应的详细解析
  • RFID技术智能仓储管理解决方案应用实践
  • 10_JavaScript数组排序和高阶方法
  • DeepSeek smallpond为何选中DuckDB?轻量级分析数据库的“屠龙术“
  • Python生成器详解
  • NVIDIA NeMo 全面教程:从入门到精通
  • 2025蓝桥杯备赛Day12——P8598 [蓝桥杯 2013 省 AB] 错误票据
  • 什么是快重传
  • leetcode0304. 二维区域和检索 - 矩阵不可变
  • 新一代可编程网关应用举例
  • 第一章:优化概述_《C++性能优化指南》notes
  • 权限提升—Windows权限提升土豆家族溢出漏洞通杀全系
  • uni-app自动升级功能
  • spring boot jwt生成token
  • OpenBMC:BmcWeb添加路由5 设置handler函数
  • 网络华为HCIA+HCIP 动态路由协议
  • 大模型训练 | 智能体知识库 资源收集之心理咨询问答数据集