NJSD eBPF 技术文档 - 0924版本基于FUSE的实现 • curve / ceph / gluster • LD_PRELOAD重载⽂件系统系统调⽤ • vpp / f-stack / DirectFUSE • Kernel版本实现 • BentoFS 基于rust的实现采⽤LD_Preload⽅式瓶颈分析 • 环境 • FUSE daemon使⽤ passthrough_ll 调⽤底层ext4 • 进程共享内存通信延迟10us+ 通过贡献代码、丰富⽂档、提交issue、改进⽹站、交流分享等,提⾼⾃⼰专业 能⼒的同时还可以提升个⼈影响⼒、扩展⼈脉。 • 项⽬https://github.com/opencurve/curve • 版本发布周期:每半年⼀个⼤版本,1~2个⽉⼀个⼩版本 • 了解Curve进展:每隔2周的Curve周会说明Curve进展以及讨论相关问题 • 提交bug与建议:http://github.com/opencurve/curve/issues0 码力 | 20 页 | 7.40 MB | 6 月前3
Curve质量监控与运维 - 网易数帆软件质量的定义是:软件与明确地和隐含地定义的需求相一致的程度。 为了确保最终交付的软件满足需求,必须将质量控制贯穿于设计、开发到测试的整个流程中。 设计 设计流程 文档规范 开发 编码规范与提交流程 版本管理 测试 测试方法论 CI与异常测试 6/33设计流程 Curve团队采用敏捷开发模式,负责人在制定迭代计划时,确认哪些任务需要设计 文档: 小需求(改动小)将实现思路记 程度上保证master分支的稳定性。 master 10/33版本管理 Curve版本命名规则是x.y.z{-后缀} x为主版本号,每次发布大版本时递增; 大版本一般半年发布一次。 y为次版本号,每次发布小版本时递增; 小版本一般1~2个月发布一次。 z为修订号,修复一批bug后递增。 后缀表示版本状态,beta表示测试版本,rc 表示发布候选版本,空白表示正式版。 Curve所有功能 Curve所有功能开发均在master分支进行,而版本发布则在相应的release分支进行: 从master拉出一个新分支release-x.y,打beta版标签后,提交QA团队测试 ; beta版的bug修复代码先合入master分支,再cherry-pick到release-x.y分支; beta版bug修复完成后,打rc版标签(可能有多个rc版),上线到测试环境; 经bug修复和长时间0 码力 | 33 页 | 2.64 MB | 6 月前3
Curve核心组件之Client - 网易数帆• github代码仓库: https://github.com/opencurve/curveCURVE基本架构 01 02 03 04 Client总体介绍 热升级NEBD总体介绍 新版本Client/NEBD性能优化CURVE基本架构 • 元数据节点 MDS • 管理和存储元数据信息 • 感知集群状态,合理调度 • 数据节点 Chunkserver • 数据存储 • 副本一致性,raft • 客户端 Client • 对元数据增删改查 • 对数据增删改查 • 快照克隆服务器CURVE基本架构 01 02 03 04 Client总体介绍 热升级NEBD总体介绍 新版本Client/NEBD性能优化 QEMU、Curve-NBD:上层应用 通过链接curve-client使用curve提供的服务 FileManager:提供接口,记录已挂载卷 MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息 CLIENT整体架构QEMU: 实现了QEMU block与Client的对接层 向cinder/glance提供了Python API https://github.com/opencurve/curve-qemu-block-driver NBD: 实现了Curve-NBD,与内核NBD模块进行交互 可以作为容器的数据存储0 码力 | 27 页 | 1.57 MB | 6 月前3
Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 22.5. E - 版本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 本书的英文原版作者为 Steve Klabnik 和 Carol Nichols,并由 Rust 社区补充完善。本简体 中文译本由 Rust 中文社区翻译。 本书的当前版本假设你使用 Rust 1.85.0(2025-02-17 发布)或更高版本并在所有项目的 Cargo.toml 文件中通过 edition = "2024"将其配置为使用 Rust 2024 edition 惯用法。请查 看第一章的 “安装” 即可打开。 本书还有一些社区 翻译版本。(译者注:简体中文译本可以在 https://kaisery.github.io/trpl- zh-cn/ 在线阅读,PDF 版本请下载 Rust 程序设计语言 简体中文版.pdf) 本书也有由 No Starch Press 出版的纸质版和电子版。 🚨 想要具有互动性的学习体验吗?试试 Rust Book 的另一个版本,其中包括测验、 高亮、可视化等功能:https://rust-book0 码力 | 562 页 | 3.23 MB | 23 天前3
Curve核心组件之snapshotclonestring 快照唯一Id user string 所属用户 fileName string 快照目标卷名 snapshotName string 快照名 seqNum uint64_t 快照版本号 chunkSize uint32_t chunk的size segmentSize uint64_t segment的size fileLength uint64_t 卷的大小 time 文件格式协议 版本号 demaged bool 损坏标记 sn uint64_t 快照版本号 bits uint32_t 位图的位数 bitmap char[] 位图 crc uint32_t 上述字段的crc 校验码 padding / 填0,以补足 4KBCHUNKSERVER端快照实现-写时复制原理 写时复制通常使用版本号实现 复制时仅复制元数据,并增加版本号 写 适用于从云主机或快照创建镜像CHUNKSERVER端克隆实现-CHUNKFILE 字段 类型 说明 version uint8_t 文件格式协议版本号 sn uint64_t chunk文件的版本号 correntSn uint64_t chunk的修正版本号 locationSi ze size_t 可缺省,当前为CloneChunk时表示 location占用的字节数 location char[]0 码力 | 23 页 | 1.32 MB | 6 月前3
Curve核心组件之chunkservergithub代码仓库: https://github.com/opencurve/curveCURVE基本架构 01 02 03 04 ChunkServer架构 ChunkServer核心模块 新版本ChunkServer性能优化CURVE基本架构 • 元数据节点 MDS • 管理和存储元数据信息 • 感知集群状态,合理调度 • 数据节点 Chunkserver • 数据存储 • 副本一致性,raft Client • 对元数据增删改查 • 对数据增删改查 • 快照克隆服务器CURVE基本架构 01 02 03 04 ChunkServer架构 ChunkServer核心模块 新版本ChunkServer性能优化Curve ChunkServer是数据节点, 对外提供数据读写和节点管理功 能,底层基于ext4文件系统,操 作实际的磁盘。 ChunkServer架构Chu 盘或者采用其他文件系统,可以在这 层进行适配。 ChunkServer架构CURVE基本架构 01 02 03 04 ChunkServer架构 ChunkServer核心模块 新版本ChunkServer性能优化ChunkServer核心模块-注册和心跳 上报心跳 根据心跳下发raft成员变更 ChunkServer注册:chunkserver第一次启动时,需要向mds注册,mds分配并返回0 码力 | 29 页 | 1.61 MB | 6 月前3
Curve元数据节点高可用程如下: 正常情况: step1: 三个mds向etcdserver写入带有相同前缀的key,etcd会给每个key一个版本号(revision: 是全局递增的)© XXX Page 12 of 30 1. 2. 1. step2: 写入key版本最小的mds当选leader 其余mds对 进行watch。例如MDS2获取到有相同前缀Leader的key为{ [Leader/MDS1 且revision小于自身的key中,revision最大的那个 MDS3获取到有相同前缀Leader的key为{ [Leader/MDS1, revision:2], [Leader/MDS2, revision:3],}, 其中版本号较大的为 [Leader/MDS2, revision:3], 因此watch Leader/MDS2。 step3: MDS1退出后,MDS2收到MDS1的key被删除的消息,Campagin成功© 3.3 Observe的流程© XXX Page 15 of 30 1. 2. observe的功能在上面说过,主要用于监听leader的变化。 获取[指定prefix的key, 创建版本号最小]kv值, 如果不存在,会一直等待到有指定prefix的key创建为止。 如果存在,监听该key值,如果key被删除,回到1的操作。 过程描述如下: 4. MDS使用election模块的功能进行选主©0 码力 | 30 页 | 2.42 MB | 6 月前3
Curve 分布式存储设计2. 完善混合云、公有云上部署架构 3. 完善高性能3副本存储引擎,支持混合盘 4. 文件存储支持数据存储到HDFS、rados等引擎 2. 性能 1. 完善RDMA/SPDK方案,发布稳定版本 2. 更高性能硬件选型、适配及性能调优 3. 大文件读写性能优化,RAFT优化,降低写放大 3. 功能 1. 文件存储支持回收站/生命周期管理/配额/用户权限等 2. 支持NFS、CIFS/SMB、HDFS等协议 社区成员组成: 网易杭研、网易云音乐、腾讯、zstack、西安邮电大学生等等 3. 项目 https://github.com/opencurve/curve 4. 版本发布周期:每半年一个大版本,1~2个月一个小版本 5. 了解Curve进展:每隔2周的Curve周会说明Curve进展以及讨论 相关问题 6. 提交bug与建议:https://github.com/openCURVE/CURVE/issues0 码力 | 20 页 | 4.13 MB | 6 月前3
CurveFS方案设计1. 2. 3. 4. 5. 由于元数据使用raft, apply的时候是以kv的方式写入到文件,因此可以复用这个逻辑。 客户端感知文件版本号。如果版本号变更,就触发raft的sanpshot,并且只apply小于版本号的部分 这种方式相当于每次都是全量缓存当前元数据,不做增量快照,考虑到转储逻辑,这也是可以接受的 对比这两种方案,第一种方案对于copy场景是友好的,0 码力 | 14 页 | 619.32 KB | 6 月前3
CurveFS rename 接口实现方案方案实现 方案一:chubaofs 从以上的分析来看,chubaofs 的方案是可行的,参照其实现就行 方案二:事务方案 前言(关于 MVCC): MVCC ( ) ,即多版本并发控制,主要解决的是并发读写时的冲突问题,利用该机制在读写时候可以去除锁机制 Multi-version Concurrency Controller (备注:我认为利用 MVCC 可以保证事务 srcDentry, dstDentry 所在 copyset 的 txid 都加 1(这一步是通过 etcd 的事务保证的),如果上一步或这一步失败,因为 txid 不变,原始数据版本也在,还是保证原子性(其实就是一个 txid 对应一个版本的数据)© XXX Page 8 of 15 下次访问的时候,带上对应 copyset 的最新 txid (copyset_txid),判断 PendingTx,如果 (copyset_txid0 码力 | 15 页 | 555.93 KB | 6 月前3
共 41 条
- 1
- 2
- 3
- 4
- 5













