fastblock:基于 SPDK 与 Multi-Raft 的全闪存分布式块存储
fastblock基于 SPDK 与 Multi-Raft 的全闪存分布式块存储【免费下载链接】fastblockA distributed block storage system that uses mature Raft protocol and is designed for all-flash scenarios项目地址: https://gitcode.com/openeuler/fastblockfastblock 是 openEuler 社区开源的分布式块存储系统使用 SPDK 用户态框架构建数据复制依赖成熟的 Raft 协议面向全闪存NVMe 磁盘 RDMA 网络场景设计。本文回答几个实际问题它的组件如何分工、PG 对应的多 Raft 复制与心跳合并是怎么做的、没有 RDMA 网卡时如何先跑通最小集群以及不同副本配置下如何解读 IOPS 与延迟指标。fastblock 要解决什么问题传统块存储的五个短板fastblock 的定位来自对 Ceph 等主流分布式块存储在全闪存场景下五类短板的针对性改进来自项目 README 的归纳维度现有体系中的问题CPU 经济性NVMe SSD 集群中 CPU 成为瓶颈消耗偏高可用性主从强同步复制下集群抖动时 IO 会被挂起单卷性能对接 QEMU 时进一步下降需要多个卷才能跑满集群单卷延迟未能发挥 NVMe 低延迟特性RBD 块设备常处于毫秒级并发总量IOPS 与吞吐距硬件可提供的水平差距较大对应的四条设计选择是用 SPDK 的用户态 NVMe 驱动与无锁队列缩短 IO 路径引入 RDMA 网卡做零拷贝、内核旁路、不需要 CPU 干预的网络通信采用 multi-raft 做数据复制每个 PG放置组对应一个独立 Raft 组元数据管理保持简单、可靠、可定制。 ## 如何理解 fastblock 的三层分工从 Compute 到 localstore整体架构沿用了 Monitor、OSD、PG 这类 Ceph 概念降低已有背景读者的理解成本。系统分为计算接入、Monitor 集群、存储集群三层数据与元数据走不同的链路。Monitor为什么元数据用 Golang 和 etcdMonitor 集群维护 OSDMap、PGMap、Pool 与 Image 信息处理节点加入/删除、卷元数据、创建 pool 以及按拓扑在 OSD 上均匀放置 Raft 组。它不存用户数据、不追求极致性能所以用 Golang 实现并用 etcd 做多副本存储。客户端和每个 OSD 启动后都会开启定时器周期性向 Monitor 拉取 osdmap/pgmap因此所有节点看到的是同一份集群视图客户端 IO 只看到 PG 这一层对特定 PG 的写入不会落到错误的位置。OSD数据面与元数据面分离OSDObject Storage Daemon是存储核心每个 Storage Node 上运行多个 OSD 实例。OSD 内部又分为 RPC 子系统、Raft 子系统、本地存储引擎localstore和 kv 子系统。RPC 子系统按异构网络思路设计三类消息走两套传输RPC 类型路径与用途传输方式Control RPC客户端/OSD 与 Monitor 之间传 osdmap、pgmap、image 信息TCP socketData RPC客户端与 OSD 之间传对象数据与结果protobuf RDMARaft RPCOSD 之间传 Raft 协议消息内含对象数据protobuf RDMA元数据量小、频率低socket 足够对象数据量大、频率高交给 RDMA 异步语义RDMA write承载。 ## Multi-Raft 的心跳合并复制多了为什么不卡每个 PG 对应一个 Raft 组集群中大量 Raft 组并存。每个组的 leader 都要向 follower 发心跳组数一多心跳包就会挤占带宽和 CPU。fastblock 的合并机制是同一对 leader/follower 之间属于多个 PG 的心跳合并成一个包再发。例如 pg1 和 pg2 都包含 osd1、osd2、osd3 且 osd1 是 leader未合并时 osd1 要分别向 osd2、osd3 发两次心跳合并后只需各发一次携带 (pg1, pg2) 的心跳。Raft 子系统整体还包含Raft 组的创建/修改/删除、选举与选举超时处理、log 的缓存/落盘/复制到 follower、数据 state machine 落盘、快照管理与 log 恢复、成员变更管理参考了 willemt 的 C 语言 Raft 实现并扩展出 multi-raft。本地存储引擎 localstore 基于 SPDK Blobstore分三个模块disk_log存 Raft log一个 PG一个 Raft 组对应一个 SPDK Blobobject_store存对象数据一个对象对应一个 Blobkv_store每个 CPU 核一个 Blob存放该核上需要持久化的 kv 数据。配套的 kv 子系统用于存 Raft 元数据和系统自身数据数据量不大内存 hash map 即可容纳全部数据对外提供 put、remove、get 接口每 10ms 把变更写盘。客户端接入方式怎么选vhost、NBD、CSI客户端负责创建、修改、删除 image把用户对 image 的操作转换为对 objectOSD 处理的基本数据单元的操作封装成 Data RPC 发给对应 PG 的 leader OSD再处理返回的响应。接入方式有三种SPDK vhost面向虚拟机QEMUNBD面向裸金属服务器CSI面向容器环境。三种模式最终都经由 libfastblock 库完成 image 到 object 的转换并与 OSD 通信。以 vhost 为例流程是启动 fastblock-vhost一个 SPDK 应用内置定时器周期性向 Monitor 拉取 osdmap/pgmap/image 信息→ 用 SPDK 的 rpc.py 发送 bdev_fastblock_create 请求创建 image 与 bdev 设备 → 再发 vhost_create_blk_controller 请求打开设备并注册 vhost 驱动创建可供 QEMU 连接的 socket → QEMU 通过 vhost-user-blk 设备挂接后数据请求即由 libfastblock 路由到 leader OSD。 ## 没有 RDMA 网卡时如何先跑通最小集群源码可通过git clone https://gitcode.com/openeuler/fastblock获取。编译侧需要安装依赖后分别构建 Monitor 与 OSD./install-deps.sh./build.sh -t Release -c monitor与./build.sh -t Release -c osd再到 build 目录make install。跑测试环境不强制依赖真实 RDMA 网卡和 NVMe 盘vstart.sh 的 dev 模式会利用内核模块 rdma_rxe 创建虚拟 RDMA 网卡、用本地文件做 OSD 后端在单机搭出 3 个 OSD、三副本的集群并自动创建默认 pool。命令只需一行./vstart.sh -m dev -c 3 -r 3 -C 2其中-C指定每个 OSD 占用的核数建集群时指定后不可再改运行前需要预留足够的 hugepage。拉起后建议先做状态验证fastblock-client -opstatus后续排查 PG 映射、OSD 状态、建池可用-opgetpgmap、-opgetosdmap、-opcreatepool等参数。多机生产部署则切换 pro 模式分别指定 Monitor IP、RDMA 网卡名与 NVMe 盘具体参数以 vstart.sh 脚本头部的注释说明为准。 ## 三副本配置下如何看 IOPS 与延迟指标项目 2024-12 的性能测试报告使用 Kunpeng-920 96 核、100Gb/s 网卡、4K 写、队列深度 32且所有副本都在同一台测试机上。素材给出的代表数据场景工具IOPSp999 延迟1 个 OSD、单副本block_bench约 35.8 万约 419us4 个 OSD、单副本block_bench约 81.6 万约 353us4 个 OSD、三副本同机block_bench约 35 万约 446us同一报告中还有几条对判断路径损耗有用的对比虚拟机路径vhost 虚机内 fio在单副本下约 32.1 万 IOPS与 block_bench 差距不大损耗主要在虚机内部 IO 与 vhost 通信NVMe-oF 导出在四 OSD 单副本下RDMA 传输约 78.4 万与 block_bench 接近而 TCP 传输损耗明显更大。报告同时提示三副本全部压在同一台服务器上受本机资源限制若分布到三台服务器 IOPS 会显著提高——所以读结果时应先看拓扑再对比数字报告里也同步记录了网卡与磁盘的利用率截图作为佐证。 ## 需要留意的边界与演进方向当前主线是 CMake SPDK 用户态客户端仓库顶层另有一个 kfastblock 内核态块客户端定位是研发验证版已具备 attach、元数据拉取、对象级读写和最小块设备 smoke 闭环但尚不适合生产级稳定性与性能验收关注内核态接入路径的读者可以留意其 TASKS.md 中的后续计划。尚未完成或仍在演进的能力来自项目 README包括卷快照与快照组、卷 QoS、OSD 与客户端的多核性能优化、DPU 卸载 vhost、卷加解密与卷共享。已完成的部分则涵盖 CI 接入、Monitor 的 PG 分配插件化、Raft 成员变更与 PG 分配联调、监控数据导出与运行时数据展示等完整的性能与故障恢复数据可参考 docs/ 目录下的测试报告。【免费下载链接】fastblockA distributed block storage system that uses mature Raft protocol and is designed for all-flash scenarios项目地址: https://gitcode.com/openeuler/fastblock创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

霞鹜文楷:3 分钟免费装好一款开源中文字体,新手完整指南

霞鹜文楷:3 分钟免费装好一款开源中文字体,新手完整指南

霞鹜文楷:3 分钟免费装好一款开源中文字体,新手完整指南 【免费下载链接】LxgwWenKai An open-source Chinese font derived from Fontworks Klee One. 一款开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。 项目地址: https://gitc…

2026/8/24 16:13:04 阅读更多 →
3 步装好猫抓(Cat Catch):免费开源的浏览器资源嗅探与 M3U8 下载完整指南

3 步装好猫抓(Cat Catch):免费开源的浏览器资源嗅探与 M3U8 下载完整指南

3 步装好猫抓(Cat Catch):免费开源的浏览器资源嗅探与 M3U8 下载完整指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-c…

2026/8/23 14:03:33 阅读更多 →
RedisDesktopManager 连接错误与响应慢:三层定位法 5 分钟找到原因

RedisDesktopManager 连接错误与响应慢:三层定位法 5 分钟找到原因

RedisDesktopManager 连接错误与响应慢:三层定位法 5 分钟找到原因 【免费下载链接】RedisDesktopManager RedisInsight/RedisDesktopManager: RedisDesktopManager 是一个用于 Redis 数据库管理的桌面应用程序,可以用于连接和操作 Redis 数据库&#xf…

2026/8/24 15:57:28 阅读更多 →

最新新闻

从央视WRC直播拆解:大型活动直播技术架构与实战搭建指南

从央视WRC直播拆解:大型活动直播技术架构与实战搭建指南

1. 先搞清楚这场直播的技术看点:不只是“看个热闹” 看到“央视首场WRC2026现场直播,镜头直达帕西尼ONE FOR ALL展区”这个标题,很多人的第一反应可能是“哦,一场展会直播”。但如果你是一个关注音视频技术、直播架构或者想了解大…

2026/8/24 16:15:37 阅读更多 →
[C++]Qt网络请求:一个函数搞定GET/POST

[C++]Qt网络请求:一个函数搞定GET/POST

本文给出从前端拿取数据的办法&#xff0c;下面为C代码#include <QCoreApplication> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> #include <QUrl> #include <QJsonDocument> #include <QJ…

2026/8/24 16:15:37 阅读更多 →
GoldenDict-ng:免费词典查询工具,从装好到查出第一个词的 3 分钟攻略

GoldenDict-ng:免费词典查询工具,从装好到查出第一个词的 3 分钟攻略

GoldenDict-ng&#xff1a;免费词典查询工具&#xff0c;从装好到查出第一个词的 3 分钟攻略 【免费下载链接】goldendict-ng The Next Generation GoldenDict 项目地址: https://gitcode.com/gh_mirrors/go/goldendict-ng GoldenDict-ng 是免费开源的离线词典查询工具&…

2026/8/24 16:15:37 阅读更多 →
[CMD]bat脚本实用笔记:命令详解与进程管理

[CMD]bat脚本实用笔记:命令详解与进程管理

引言通过CMD集成指令&#xff0c;开发bat脚本为windows进阶操作。Everything_Win#切换终端目录 至根目录底层cd C:\ #如果当前目录在其他盘的话C:# CMD一键搜g.exedir C:g.exe /s /b dir D:g.exe /s /b dir E:g.exe /s /b#设置环境变量set PATHC:/bin;%PATH%CMD_所有文件拷贝当…

2026/8/24 16:15:37 阅读更多 →
[html]HTML标签速查:从骨架到表单的常用标签清单与实例

[html]HTML标签速查:从骨架到表单的常用标签清单与实例

引言HTML换行标签 <br/> &#xff0c;是用来在网页里换行的。文本涉及最常用、最实用、最容易记的 HTML 标签清单&#xff08;日常写网页、前端、小程序、简历网页都高频用到&#xff09;&#xff0c;接下来一块了解HTML特殊标签&#xff0c;理解F12才能运用F12。html结…

2026/8/24 16:15:37 阅读更多 →
5 分钟上手 Snap.Hutao 胡桃工具箱:免费开源原神工具箱使用指南

5 分钟上手 Snap.Hutao 胡桃工具箱:免费开源原神工具箱使用指南

5 分钟上手 Snap.Hutao 胡桃工具箱&#xff1a;免费开源原神工具箱使用指南 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 &#x1f9f0; / Multifunctional Open-Source Genshin Impact Toolkit &#x1f9f0; 项目地址: https://gitcode.com/GitHub_Trending/sn…

2026/8/24 16:14:35 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力&#xff1b;确需渲染 HTML 时&#xff0c;先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述&#xff1a;Windows登录密码的“黑匣子”每次你按下CtrlAltDel&#xff0c;输入密码&#xff0c;然后看到那个熟悉的桌面&#xff0c;这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者&#xff0c;我经常被问到&#xff1a;“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述&#xff1a;AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时&#xff0c;遇到一个典型案例&#xff1a;候选人在视频面试中无意提到竞争对手产品名称&#xff0c;系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →