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核心组件之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核心组件之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:提供接口,记录已挂载卷 未能返回。所以,在这种情况下,重试请求会将RPC超时时间进行增加。CURVE基本架构 01 02 03 04 Client总体介绍 热升级NEBD总体介绍 新版本Client/NEBD性能优化NEBD 整体介绍 热升级之前,QEMU是直接链接curve-client, 所以client版本需要升级时,需要对QEMU进 程进行重启。NEBD 整体介绍 在QEMU和Curve Client中间加入热升级模块,避 免直接依赖0 码力 | 27 页 | 1.57 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
Open Flags 调研linux 2.6.39) #define O_TMPFILE 020000000|O_DIRECTORY #define O_NDELAY O_NONBLOCK(O_NDELAY是在System V的早期版本引入的,后改进为O_NONBLOCK) flags中必须access mode:O_RDONLY, O_WRONLY, O_RDWR其中之一;© XXX Page 4 of 23 文件创建标志只影响打开操作 待文件属性更新(在linux 2.6.33之前只有O_SYNC flag, 但是在绝大多数文件系统中对O_SYNC的实现都是O_DSYNC的含义,在2.6.33版本支持了O_DSYNC flag,且值使用原O_SYNC的值,但为了兼容老版本的O_SYNC,现在O_SYNC=O_DSYNC|04000000)。 FASYNC: 异步的,启用signal-driven I/O。 : 直接I/O,执行0 码力 | 23 页 | 524.47 KB | 6 月前3
Curve支持S3 数据缓存方案© XXX Page 1 of 9 Curve支持S3 数据缓存方案© XXX Page 2 of 9 版本 时间 修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 ReleaseCache流程 Flush流程 FsSync流程 后台流程 poc测试验证 背景 基于s3的daemon版本基于基本的性能测试发现性能非常差。具体数据如下: 通过日志初步分析有2点原因© XXX Page 3 of 9 1.append接口目前采用先从s3 get,在内存中合并完后再put的方式,对s3操作过多 2.对于4k 小io每次都要和s3交互,导致性能非常差。 因此需要通过Cache模块解决以上2个问题。0 码力 | 9 页 | 179.72 KB | 6 月前3
共 19 条
- 1
- 2













