 OID CND Asia Slide: CurveFSHangzhou Research InstituteAgenda � Why develop storage Design objectives Achievements in CURVE Key designs used by CURVE CURVE Roadmap CURVE Community You can take awayWhy develop Storage requirements requirements cannot be metAgenda Why develop storage � Design objectives Achievements in CURVE Key designs used by CURVE CURVE Roadmap CURVE Community You can take awayDesign objectives App scenario maintenance ● Cloud NativeAgenda Why develop storage Design objectives � Achievements in CURVE Key designs used by CURVE CURVE Roadmap CURVE Community You can take awayPerformance in database scenario0 码力 | 24 页 | 3.47 MB | 6 月前3 OID CND Asia Slide: CurveFSHangzhou Research InstituteAgenda � Why develop storage Design objectives Achievements in CURVE Key designs used by CURVE CURVE Roadmap CURVE Community You can take awayWhy develop Storage requirements requirements cannot be metAgenda Why develop storage � Design objectives Achievements in CURVE Key designs used by CURVE CURVE Roadmap CURVE Community You can take awayDesign objectives App scenario maintenance ● Cloud NativeAgenda Why develop storage Design objectives � Achievements in CURVE Key designs used by CURVE CURVE Roadmap CURVE Community You can take awayPerformance in database scenario0 码力 | 24 页 | 3.47 MB | 6 月前3
 Curve for CNCF MainDistributed storage system https://www.opencurve.io/Agenda • What is Curve • Use Cases • CurveBS • Key Features • Comparing to Ceph • CurveFS • Comparing to Ceph • Current Status • RoadmapWhat long NETWORK LATENCY 50MS 1s frequently 7s recentlyStorage Engine Comparison (vs. Ceph) META MANAGEMENT CURVE CHUNK SERVER BLUESTORE META Precreate Chunk File Pool on ext4 RocksDB META OVERHEAD CurveFS • support operator capability level 2: automated application provisioning and configuration management and patch and minor version upgrads supported • File meta data preallocate • RAFT optimization0 码力 | 21 页 | 4.56 MB | 6 月前3 Curve for CNCF MainDistributed storage system https://www.opencurve.io/Agenda • What is Curve • Use Cases • CurveBS • Key Features • Comparing to Ceph • CurveFS • Comparing to Ceph • Current Status • RoadmapWhat long NETWORK LATENCY 50MS 1s frequently 7s recentlyStorage Engine Comparison (vs. Ceph) META MANAGEMENT CURVE CHUNK SERVER BLUESTORE META Precreate Chunk File Pool on ext4 RocksDB META OVERHEAD CurveFS • support operator capability level 2: automated application provisioning and configuration management and patch and minor version upgrads supported • File meta data preallocate • RAFT optimization0 码力 | 21 页 | 4.56 MB | 6 月前3
 Curve Cloud NativeCURVE COMMENT BASIC INSTALL Y (by Helm) automated application provisioning and configuration management SEAMLESS UPGRADES Y (by Helm) patch and minor version upgrads supported FULL LIFECYCLE Plan0 码力 | 9 页 | 2.85 MB | 6 月前3 Curve Cloud NativeCURVE COMMENT BASIC INSTALL Y (by Helm) automated application provisioning and configuration management SEAMLESS UPGRADES Y (by Helm) patch and minor version upgrads supported FULL LIFECYCLE Plan0 码力 | 9 页 | 2.85 MB | 6 月前3
 Curve元数据节点高可用使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期后key会被自动删掉。这在很多分布式锁的实现上都会用到,可以保证锁的实时性和有效性。CAS(Atomic Compare-and-Swap)指的是在对key进行赋值的时候,客户端需要提供一些条件,当这些条件满足后才能赋值成功。 3. etcd clientv3的concurrency介绍 Election提供的方法如下:© XXX Page 4 of 30 1. // Campaign puts a value as eligible for the election on the prefix // key. // Multiple sessions can participate in the election for the // same prefix, but only one can be the func (e *Election) Resign(ctx context.Context) (err error) // leaderkeyleader func (e *Election) Key() string // leaderkeyrevision func (e *Election) Rev() int64 // response header func (e *Election)0 码力 | 30 页 | 2.42 MB | 6 月前3 Curve元数据节点高可用使用etcd实现元数据节点的leader主要依赖于它的两个核心机制: TTL和CAS。TTL(time to live)指的是给一个key设置一个有效期,到期后key会被自动删掉。这在很多分布式锁的实现上都会用到,可以保证锁的实时性和有效性。CAS(Atomic Compare-and-Swap)指的是在对key进行赋值的时候,客户端需要提供一些条件,当这些条件满足后才能赋值成功。 3. etcd clientv3的concurrency介绍 Election提供的方法如下:© XXX Page 4 of 30 1. // Campaign puts a value as eligible for the election on the prefix // key. // Multiple sessions can participate in the election for the // same prefix, but only one can be the func (e *Election) Resign(ctx context.Context) (err error) // leaderkeyleader func (e *Election) Key() string // leaderkeyrevision func (e *Election) Rev() int64 // response header func (e *Election)0 码力 | 30 页 | 2.42 MB | 6 月前3
 Curve文件系统元数据持久化方案设计© XXX Page 1 of 12 元数据持久化© XXX Page 2 of 12 前言 Raft Log Raft Snapshot 持久化文件 key_value_pairs 其他说明 实现 1、inode、entry 的编码 2、KVStore Q&A 单靠 redis 的 AOF 机制能否保证数据不丢失? redis 的高可用、高可扩方案? redis + muliraft of 12 Raft Log +------+------------+-----+----------------+---------+----------+ | type | key_length | key | [value_length] | [value] | checksum | +------+------------+-----+----------------+---------+----------+ (0X01):ADD 和 UPDATE 都可以转换成 SET 操作 DEL (0X02):当为 DEL 操作时,value_length 和 value 则为空 key_length 4 key 长度 key $key_length 编码后的 key [value_length] 4 value 长度 [value] $value_length 编码后的 value checksum 8 前面0 码力 | 12 页 | 384.47 KB | 6 月前3 Curve文件系统元数据持久化方案设计© XXX Page 1 of 12 元数据持久化© XXX Page 2 of 12 前言 Raft Log Raft Snapshot 持久化文件 key_value_pairs 其他说明 实现 1、inode、entry 的编码 2、KVStore Q&A 单靠 redis 的 AOF 机制能否保证数据不丢失? redis 的高可用、高可扩方案? redis + muliraft of 12 Raft Log +------+------------+-----+----------------+---------+----------+ | type | key_length | key | [value_length] | [value] | checksum | +------+------------+-----+----------------+---------+----------+ (0X01):ADD 和 UPDATE 都可以转换成 SET 操作 DEL (0X02):当为 DEL 操作时,value_length 和 value 则为空 key_length 4 key 长度 key $key_length 编码后的 key [value_length] 4 value 长度 [value] $value_length 编码后的 value checksum 8 前面0 码力 | 12 页 | 384.47 KB | 6 月前3
 Curve文件系统元数据管理dump record 差 否 chunk 链式多副本 overwirte有数据不一致风险 chubaofs(cfs) 有元数据服务器 inode → b tree(key ino) dentry → b tree (key parentIno + name) extent → B+ tree 这个在inode的ExtentsTree字段 meta partition(raft group) overwrite → raft 更适合大文件顺序写 fastcfs 有元数据服务器 inode和dentry放一个结构体。 inode → hashtable(key是ino,全局) dentry → skip list (key是name,每个目录下一个) 计算出来的 binlog,随时间会越来越大 差 DG Master/Slave glusterfs 无中心化服务器 dht算法 和写数据一样 好 写多份 overwirte有数据不一致风险 curve 有元数据服务器 lru cache缓存 kv → hashtable(key parent inode + name) segment kv → hashtable(key inode + offset) etcd 差 块设备,最小10GB segment + chunk raft 块设备的元数据管理 cephfs0 码力 | 24 页 | 204.67 KB | 6 月前3 Curve文件系统元数据管理dump record 差 否 chunk 链式多副本 overwirte有数据不一致风险 chubaofs(cfs) 有元数据服务器 inode → b tree(key ino) dentry → b tree (key parentIno + name) extent → B+ tree 这个在inode的ExtentsTree字段 meta partition(raft group) overwrite → raft 更适合大文件顺序写 fastcfs 有元数据服务器 inode和dentry放一个结构体。 inode → hashtable(key是ino,全局) dentry → skip list (key是name,每个目录下一个) 计算出来的 binlog,随时间会越来越大 差 DG Master/Slave glusterfs 无中心化服务器 dht算法 和写数据一样 好 写多份 overwirte有数据不一致风险 curve 有元数据服务器 lru cache缓存 kv → hashtable(key parent inode + name) segment kv → hashtable(key inode + offset) etcd 差 块设备,最小10GB segment + chunk raft 块设备的元数据管理 cephfs0 码力 | 24 页 | 204.67 KB | 6 月前3
 NJSD eBPF 技术文档 - 0924版本FUSE_SETATTR / • map 结构 • dentry map BPF_MAP_TYPE_HASH • key (inode id, node name) • value inode id • inode map BPF_MAP_TYPE_HASH • key inode id • value fuse_attr (⽂件属性)基于data cache部分 • bpf程序类型 WriteCache map BPF_MAP_TYPE_HASH • key inodeid • value CacheStatus, blocklist[ ] {fd, chunk, size, kernel file, ver} • ReadCache map BPF_MAP_TYPE_HASH • key inodeid • value CacheStatus, filemap[0 码力 | 20 页 | 7.40 MB | 6 月前3 NJSD eBPF 技术文档 - 0924版本FUSE_SETATTR / • map 结构 • dentry map BPF_MAP_TYPE_HASH • key (inode id, node name) • value inode id • inode map BPF_MAP_TYPE_HASH • key inode id • value fuse_attr (⽂件属性)基于data cache部分 • bpf程序类型 WriteCache map BPF_MAP_TYPE_HASH • key inodeid • value CacheStatus, blocklist[ ] {fd, chunk, size, kernel file, ver} • ReadCache map BPF_MAP_TYPE_HASH • key inodeid • value CacheStatus, filemap[0 码力 | 20 页 | 7.40 MB | 6 月前3
 Curve文件系统空间分配方案所对应的一块空间(以4MiB为例,具体大小可配置)是否分配出去。 第二层为free extent list,表示每个已分配的块,哪些仍然是空闲的(offset, length),以offset为key进行排序(这里可以用map或者btree对所有的free extent进行管理)。 当前设计不考虑持久化问题,空间分配器只作为内存结构,负责空间的分配与回收。在初始化时,扫描文件系统所有inode中已使用的空间。 时,需要附带上file1最后一个字节数据在底层存储的位置,再加1(期望申请的地址空间起始offset)。以图中为例,则附带的值为30MiB。 这次的空间申请,直接从level2中以30MiB作为key进行查找,找到后,进行空间分配。分配之后,相关信息如下图所示: 之前剩余的 30MiB ~ 2MiB 的extent完全分配出去,所以从level2中的list中删除。 文件inode中的ext0 码力 | 11 页 | 159.17 KB | 6 月前3 Curve文件系统空间分配方案所对应的一块空间(以4MiB为例,具体大小可配置)是否分配出去。 第二层为free extent list,表示每个已分配的块,哪些仍然是空闲的(offset, length),以offset为key进行排序(这里可以用map或者btree对所有的free extent进行管理)。 当前设计不考虑持久化问题,空间分配器只作为内存结构,负责空间的分配与回收。在初始化时,扫描文件系统所有inode中已使用的空间。 时,需要附带上file1最后一个字节数据在底层存储的位置,再加1(期望申请的地址空间起始offset)。以图中为例,则附带的值为30MiB。 这次的空间申请,直接从level2中以30MiB作为key进行查找,找到后,进行空间分配。分配之后,相关信息如下图所示: 之前剩余的 30MiB ~ 2MiB 的extent完全分配出去,所以从level2中的list中删除。 文件inode中的ext0 码力 | 11 页 | 159.17 KB | 6 月前3
 CurveFS ChunkID持久化返回一个新的chunkid 方案 class ChunkIDGenerator { client_; // etcd chunkIdStoreKey_; // chunkid 存储在etcd上的 key nextId_; // 下一个可分配的 chunkID lastId_; // 当前chunkID bundle 内最后一个可分配的chunkID bundleSize_;// chunkId池子的大小0 码力 | 3 页 | 79.38 KB | 6 月前3 CurveFS ChunkID持久化返回一个新的chunkid 方案 class ChunkIDGenerator { client_; // etcd chunkIdStoreKey_; // chunkid 存储在etcd上的 key nextId_; // 下一个可分配的 chunkID lastId_; // 当前chunkID bundle 内最后一个可分配的chunkID bundleSize_;// chunkId池子的大小0 码力 | 3 页 | 79.38 KB | 6 月前3
 新一代云原生分布式存储节点故障(DiskNums)变更会涉及其他数据的迁移 有中心节点:持久化对应关系 • 需要将数据分布(元数据)持久化 • 中心节点感知集群的信息,进行资源实时调度 • 节点故障不会涉及其他的数据迁移 KEY (Offset, Len) VALUE (DiskID) (0, 4MB) 70 (4MB, 8MB) 60 (8MB, 16MB) 50分布式存储的要素 — 一致性协议 多副本: 写三次?0 码力 | 29 页 | 2.46 MB | 6 月前3 新一代云原生分布式存储节点故障(DiskNums)变更会涉及其他数据的迁移 有中心节点:持久化对应关系 • 需要将数据分布(元数据)持久化 • 中心节点感知集群的信息,进行资源实时调度 • 节点故障不会涉及其他的数据迁移 KEY (Offset, Len) VALUE (DiskID) (0, 4MB) 70 (4MB, 8MB) 60 (8MB, 16MB) 50分布式存储的要素 — 一致性协议 多副本: 写三次?0 码力 | 29 页 | 2.46 MB | 6 月前3
共 13 条
- 1
- 2













