新一代云原生分布式存储易用性:跨平台,超融合,弹性 小型主机 容量有限分布式存储的分类 按照各种应用场景所需的存储接口分类 对象 存储 文件 存储 块存储 接口为简单的 Get、PUT、DEL 和其他扩展 通常意义是支持 POSIX 接口 传统意义的文件系统: Ext4 对指定地址空间进行随机读写 传统意义的块存储:磁盘分布式存储的要素 如何构建分布式文件系统? 以分布式块存储为例。 •提供大容量的块设备 地址空间的每段数据会分布在不同机器的磁盘上,如 何找到这些数据? 可靠性 & 可用性 —— 多副本/EC 服务不可用时 间 数据一致性 —— 一致性协议 如何保证数据不丢?如何保证各种硬件故障的时候读 写都正常? 可扩展性 —— 和数据分布的方式相关 所用容量都用完后,可以新增机器扩展容量分布式存储的要素 — 数据分布 无中心节点:哈希算法 INPUT (Offset, Len) HASH HASH mod KEY (Offset, Len) VALUE (DiskID) (0, 4MB) 70 (4MB, 8MB) 60 (8MB, 16MB) 50分布式存储的要素 — 一致性协议 多副本: 写三次? 一致性协议 一致性:WARO(Write-all-read-one)、Quorum WARO • 所有副本写成功 • 读可用性高:可以读任一副本 • 写可用性较低,任一副本异常写失败0 码力 | 29 页 | 2.46 MB | 6 月前3
Curve 分布式存储设计pgbench 延迟降低21% TPS提升26% 研究现状Curve块存储 1. 分布式块存储服务 2. KVM块存储服务 3. iSCSI协议 4. 容器云块存储(CSI) 应用场景Curve块存储 1. 高可用性/高可靠性 (易运维) 2. RAFT一致性协议 3. CopySet分配算法 4. 拓扑结构 5. 高性能 6. chunkfilepool (降低写放大) 7. data chunkserver按照故障域分组 4. copyset中的节点属于不同的 故障域 数据组织Curve块存储 IO流程Curve块存储 1. chunkserver负责数据的存储 2. RAFT协议保持数据的一致 性 3. chunkfile pool降低元数据开 销 Chunkserver服务Curve块存储 性能设计Curve块存储 在线升级设计 1. 客户端分成NebdClient与 NebdServer实现大部分的客 户端逻辑Curve块存储 故障对I/O抖动延迟的影响 FAULTS CASE CURVE I/O 抖动Curve文件存储 1. 元数据服务 2. 高性能 3. 可扩展易运维 4. 云原生 设计目标Curve文件存储 1. 兼顾性能与容量的机器学习 场景 2. 快速跨云弹性发布的业务 3. 低成本大容量需求的业务 4. 中间件冷热数据自动分离 5.0 码力 | 20 页 | 4.13 MB | 6 月前3
TGT服务器的优化TGT 服务器的优化块设备协议 • NBD • Linux专有块设备协议 • iSCSI • 广泛支持的外部设备协议(块,磁带等)Curve云原生存储支持块设备 • 通过NBD,只支持Linux • 通过SDK API,目前只支持Linux • PFS • 扩大使用范围 • 通过iSCSI支持更多系统,例如Windows, 类UNIX系统等,使用两项基础 技术 • TCP/IP target服务器 • LINUX LILO • 一般用于输出内核本地块设备 • TCMU • 作为LILO支持用户态的接口 • 如何评价LILO • 输出内核块设备I/O效率高 • 不利于把复杂的存储协议代码搬进内核,例如(curve, brpc, c++, protobuf 等) • TCMU多了一层转接,配置过程复杂,业界踩的坑不够多。 • TCMU的用户态代码会受到框架约束,不够灵活。iSCSI • 纯用户态,不与内核绑定 • 支持复杂的存储系统,例如ceph rbd, sheepdog, glfs • 纯C代码,外加一些脚本 • 完整的源代码和维护工具、手册 • 编写IO驱动比较容易,容易扩展支持新的存储系统 • 代码独立,容易编译、调试、修改,适应性强让TGT支持curve • 编写curve驱动,底层异步提交I/O,pipeline • 利用NEBD PART 1接口,需要与nebdserver运行在同一台机器0 码力 | 15 页 | 637.11 KB | 6 月前3
Curve文件系统元数据管理inode+dentry方式?当前curve块存储的kv方式? 是否有单独的元数据管理服务器? 2、其他文件系统的调研总结 fs 中心化元数据 内存namespace元数据 内存空间分配元数据 元数据持久化 元数据扩展 小文件优化 空间管理单位 数据持久化 其他© XXX Page 3 of 24 moosefs(mfs) 有元数据服务器 全内存 fsnode → hashtable(inode id) fsedge group) Btree、B+ tree 好 有 tiny extent,多个文件共用 normal extent,属于一个文件 partition append→ master slave协议 overwrite → raft 更适合大文件顺序写 fastcfs 有元数据服务器 inode和dentry放一个结构体。 inode → hashtable(key是ino,全局) dentry binlog,随时间会越来越大 差 DG Master/Slave glusterfs 无中心化服务器 dht算法 hash 扩展时大量迁移 client缓存 inode→ hashtable(gfid) dentry→ hashtable(name) inode扩展属性字段 和写数据一样 好 写多份 overwirte有数据不一致风险 curve 有元数据服务器 lru cache缓存0 码力 | 24 页 | 204.67 KB | 6 月前3
MySQL 兼容性可以做到什么程度业务驱动下的分布式技术实践之路 5月17日,支付宝最后一台小型 机下线标志去IOE落下帷幕 首次双十一大考卡顿半分钟后稳 定度过 7月,TDDL+AliSQL首次验证支 持核心库 无法弹性扩展 成本高 去 IOE 商品库去O TDDL首次双十一 “去IOE完成” 天价账单 上云 2009 2011 2012 2013 2013 2015 TDDL 以中间件形态在阿里云上 发布: • 与 MySQL Binlog 完全一致体验 • 文件格式兼容:Binlog v4 row-based • SQL 指令兼容:show binary logs… • MySQL DUMP 协议 • 保证分布式事务完整性与顺序 • 同一连接串 已验证工具或系统 • MySQL Slave(change master) • DTS • Canal/CloudCanal • Maxwell0 码力 | 18 页 | 3.02 MB | 6 月前3
Curve核心组件之chunkserverCurve核心组件之ChunkServer 查日苏CURVE CURVE是高性能、高可用、高可靠的分布式存储系统 • 高性能、低延迟存储底座 • 可扩展存储场景:块存储、对象存储、云原生数据库、EC等 • 当前实现了高性能块存储,对接 openstack 和 k8s 网易内部线上无故障稳定运行500+天 • 已开源 • github主页: https://opencurve.github 作实际的磁盘。 ChunkServer架构ChunkServer通过RPC网络层与client, MDS,其他ChunkServer通信。RPC 网络层是由brpc框架去完成的。包 括读写socket,rpc协议解析等。 ChunkServer架构RPC Service层是对外提供的一些RPC服 务的接口。包含的RPC服务有: • ChunkService。IO相关操作 • CliService。成员变更相关操作0 码力 | 29 页 | 1.61 MB | 6 月前3
CurveFS Copyset与FS对应关系一台机器上能存放多少个inode和dentry 8.2 一台机器上建议的copyset数量 8.3 每个copyset建议管理存储容量的大小 1、背景 curvefs使用raft作为元数据一致性的保证。为了提高元数据的可扩展性和并发处理能力,采用元数据分片的方式管理inode和dentry的元数据。inode的分片依据是fsid + inodeid,dentry的分片依据是fsid + parentinodeid。借鉴 3、定期向mds上报心跳,并根据心跳结果执行配置变更 metaserver 子模块拆分 metaserver service:接受rpc请求 copyset:负责对元数据的持久化,主要是一致性协议raft的处理© XXX Page 18 of 19 metastore:负责元数据的内存部分的管理,负责选partition partition:负责元数据的一段分片,每个元数据一定有对应的partition进行处理0 码力 | 19 页 | 383.29 KB | 6 月前3
Raft在Curve存储中的工程实践稳定性挑战 • 算力平台kubernetes的迅速发展 • AI/大数据业务的快速增长 • 存储使用Ceph文件存储/HDFS • 成本/性能挑战 Curve块存储和文件存储均采用raft协议整体架构 • 对接OpenStack平台为云主机提供高性能块 存储服务 • 对接Kubernetes为其提供RWO、RWX等类 型的持久化存储卷 • 对接PolarFS作为云原生数据库的高性能存储 社区生态Curve介绍 01 02 raft和braft 03 raft在Curve中的应用 05 Q&A 04 Curve对raft的优化RAFT协议简介 什么是raft • raft 是一种新型易于理解的分布式一致性复制协议,由斯坦福大学的Diego Ongaro和John Ousterhout提出,《In Search of an Understandable Consensus Version)》 • raft 是一种Leader-Based的Multi-Paxos变种,提供了更完整更清晰的协议描述,更容易理解和实现。 • raft可以解决分布式理论中的CP,即一致性和分区容忍性 • 大多数副本成功即可返回成功 • 速度取决于写的较快的大多数RAFT协议简介 • Leader:负责从客户端接受日志,把日志复制到其 他服务器,当保证安全性的时候告诉其他服务器应用 日志条目到他们的状态机中。0 码力 | 29 页 | 2.20 MB | 6 月前3
Curve核心组件之snapshotcloneChunkId + “_snap_”+ seqNum的形式,以区别于 ChunkFile。CHUNKSERVER端快照实现-SNAPFILE 字段 类型 说明 version uint8_t 文件格式协议 版本号 demaged bool 损坏标记 sn uint64_t 快照版本号 bits uint32_t 位图的位数 bitmap char[] 位图 crc uint32_t 上述字段的crc 无额外接口: 无需Flatten接口。 适用场景: 适用于从云主机或快照创建镜像CHUNKSERVER端克隆实现-CHUNKFILE 字段 类型 说明 version uint8_t 文件格式协议版本号 sn uint64_t chunk文件的版本号 correntSn uint64_t chunk的修正版本号 locationSi ze size_t 可缺省,当前为CloneChunk时表示 Read & Merge, • 同时生成PasteChunkRequest 不需要从源chunk读取: • 异步完成,不在IO主路径 • 类似与发起一个写请求,经CopysetNode走一致性协议 完成 • 完成写入后,并标记bitmap,如果全部写过,则取消 clone chunk标记。 异步完成源chunk读到的数据写入到本地 chunk :欢 迎 大 家 参 与 C U R V0 码力 | 23 页 | 1.32 MB | 6 月前3
BRPC与UCX集成指南–C++ –TCP传输 –bthread协程(m:n调度,减少基于内核的下文切换 ,减少cache miss) ●多协议支持 –baidu_std,http,grpc… ●protobuf3 BRPC简介 ●Client/Server架构 ●使用Protobuf定义协议文件 –例如: echo.proto:4 BRPC简介 client server EchoRequest EchoResponse50 码力 | 66 页 | 16.29 MB | 6 月前3
共 18 条
- 1
- 2













