Raft在Curve存储中的工程实践Curve是一个 高性能、更稳定、易运维 的 云原生 分布式存储系统,支持 块存储 和 文件存储 2018~2021 Curve块存储 2021~2022 Curve文件存储 • 基于Openstack构建云计算平台 • 底层存储使用Ceph块存储 • 稳定性挑战 • 算力平台kubernetes的迅速发展 • AI/大数据业务的快速增长 • 存储使用Ceph文件存储/HDFS • 成本/性能挑战 等类 型的持久化存储卷 • 对接PolarFS作为云原生数据库的高性能存储 底座,完美支持云原生数据库的存算分离架 构 • Curve作为云存储中间件使用S3兼容的对象 存储作为数据存储引擎,为公有云用户提供 高性价比的共享文件存储 • 支持在物理机上挂载使用块设备或FUSE文件 系统开源社区 社区运营 生态共建 开源共建 源码兜底 技术领先 目标 方法 影响力 降本 获客 基于rocksdb的存储引擎 • 要求存储的元数据的大小不超过内存的大小 • raft apply的请求,数据都在内存,直接修改 内存中的数据 • raft snapshot,为避免快照对正常操作的影 响,利用操作系统的内存写时复制技术, fork一个进程创建完整的状态机的内存快照, 后台遍历内存,把内存的数据持久化到本地 磁盘 基于memory的存储引擎 • 存储元数据量不受内存大小限制0 码力 | 29 页 | 2.20 MB | 6 月前3
PFS SPDK: Storage Performance Development Kit1 基于SPDK的CurveBS PFS存储引擎10/17/22 2 Why ●为了减少使用cpu做内存copy,减少系统调用 ●发挥某些被操作系统屏蔽的功能,例如nvme write zero ●根据阿里《When Cloud Storage Meets RDMA》的说法 ●在100Gbps网络带宽时,内存带宽成为瓶颈 ●Intel Memory Latency Checker (MLC)测试得到的CPU内存带宽是 磁盘的读写 ●基于EXT4的存储引擎,依然需要通过系统调用来回切换 ●读写都需要CPU拷贝数据 ●不能发挥某些NVME的功能,例如write zero10/17/22 5 为什么用PFS ●对代码比较熟悉 ●找一个能管理裸盘,具有产品级可靠性的代码挺难的 ●PFS支持类POSIX文件的接口,与使用EXT4的存储引擎代码很像, 所以容易移植现有代码到PFS存储引擎 ●CurveBS对文件系0 码力 | 23 页 | 4.21 MB | 6 月前3
Curve 分布式存储设计主要挑战和支持场景Curve Roadmap 1. 架构 1. 文件存储支持分布式缓存、完善冷热数据分层存储能力 2. 完善混合云、公有云上部署架构 3. 完善高性能3副本存储引擎,支持混合盘 4. 文件存储支持数据存储到HDFS、rados等引擎 2. 性能 1. 完善RDMA/SPDK方案,发布稳定版本 2. 更高性能硬件选型、适配及性能调优 3. 大文件读写性能优化,RAFT优化,降低写放大 30 码力 | 20 页 | 4.13 MB | 6 月前3
BRPC与UCX集成指南–速度最快,被brpc使用作为消息传递 –消息通过回调函数接收 –消息异步发送 ●Tag –MPI使用 ●Stream –官方不推荐30 WORKER ●worker是UCX通讯中的核心概念,它是一个进度引擎(progress engine) ●worker既不是协程也不是线程,而是一个状态机,可以通过不停地调用 ucp_worker_progress(worker)完成功能。如果你用过libuv或者0 码力 | 66 页 | 16.29 MB | 6 月前3
Curve支持S3 数据缓存方案nager,解锁,调用fileCacheManager的Write函数。 2.考虑到同一个client同一个文件同时只能一个线程进行文件写,所以在Write函数中加写锁。 3.根据请求offset,计算出对应的chunk index和chunkPos。将请求拆分成多个chunk的WriteChunk调用。 4.在WriteChunk内,根据index找到对应的ChunkCacheManager,根 即可写。 4.2 同时计算后续的多个DataCache是否和chunkPos~len有交集,如果有则一并获取 5. 如果有可写的DataCache,则调用Write接口将数据合并到DataCache中; ,加入到ChunkCacheManager的Map中。 如果没有可写的DataCache则new一个 5.完成后返回成功。 Read流程 1.根据请求offset,计算出对应的chunk i0 码力 | 9 页 | 179.72 KB | 6 月前3
Curve核心组件之mds – 网易数帆有配置变更任务执行,如果有任务则下发。 任务计算: 任务计算模块包含了多个定时任务 和 触 发任务。 • 定时任务由调度模块定时触发。 • 触发任务由外部触发,管理员通过工具触发。 • TopoAdapter 用于获取Topology中调度需要使用的数据。 • Common Strategy 是通用的副本添加和移除策略。 任务管理: 任务管理模块用于管理计算模块产生的任务。 • operatorController0 码力 | 23 页 | 1.74 MB | 6 月前3
CurveFS Copyset与FS对应关系选取占用空间更多的S3ChunkInfo。按照一台metaserver 256GB内存容量全部用来保存空间分配计算。可以的保存chunkinfo 条数 = 256GB / 64B = 4G。可以保存的文件的大小为4G * 4KB = 64TB的空间。 inode和dentry按照1:1估算,dentry按照name使用最大字节,选择占用空间更多的s3来计算。 文件大小 dentry大小 inode大小 可以保存inode和dentry数0 码力 | 19 页 | 383.29 KB | 6 月前3
Curve文件系统元数据管理有元数据服务器 inode和dentry放一个结构体。 inode → hashtable(key是ino,全局) dentry → skip list (key是name,每个目录下一个) 计算出来的 binlog,随时间会越来越大 差 DG Master/Slave glusterfs 无中心化服务器 dht算法 hash 扩展时大量迁移 client缓存 inode→ block这种,剩下的比如inode,dentry这种,按需加载,而且使用淘汰机制,内存中不常用的元数据可以淘汰出去。这种方式,扩展性好,元数据服务的扩展性不受限于内存,服务上的内存只有几百GB,而硬盘空 间按照20块1.6TB的盘来计算,一个服务器上可以有32TB的空间,硬盘的空间比内存到100多倍。但是这种方式,由于数据不能去全部缓存到内存,在查询元数据的时候,需要去盘上读数据,而且在文件系统这种使 用场景下,一次对文件的查找,需要在磁盘上读取多次。0 码力 | 24 页 | 204.67 KB | 6 月前3
BazelCurve 编译 Curve bazel 编译分享 程义 - 存储计算部 2022 年 11 月 11 日 C ur v e1 升级 bazel 到 4.2.2 2 支持 Debian9 、 Debian10 、 Debian11 3 支持 gcc clang 更新内容 Curve1 编译 Debian11-Dockerfile .bazelrc0 码力 | 6 页 | 4.69 MB | 6 月前3
MySQL 兼容性可以做到什么程度Oracle根据双十一350的交易量, 反推出了天价账单也谈所谓的“中间件” 中间件只是起点,PolarDB-X 可能是离终点最近的那个 对近十年的探索以及五年的上云 经验进行重新思考,面向未来设 从运维视角实现计算存储一体化 计新架构 产品形态 基于MySQL XA实现分布式事务 基于外部组件进行扩容 支持扩容 分布式事务 一体化尝试 Review 2.0 开源 2016 2017 2018 20190 码力 | 18 页 | 3.02 MB | 6 月前3
共 14 条
- 1
- 2













