Raft在Curve存储中的工程实践
r a f t 在 C u r v e 存 储 中 的 工 程 实 践 陈威Curve介绍 01 02 raft和braft 03 raft在Curve中的应用 05 Q&A 04 Curve对raft的优化项目背景 Curve是一个 高性能、更稳定、易运维 的 云原生 分布式存储系统,支持 块存储 和 文件存储 2018~2021 Curve块存储 2021~2022 Curve文件存储 • 稳定性挑战 • 算力平台kubernetes的迅速发展 • AI/大数据业务的快速增长 • 存储使用Ceph文件存储/HDFS • 成本/性能挑战 Curve块存储和文件存储均采用raft协议整体架构 • 对接OpenStack平台为云主机提供高性能块 存储服务 • 对接Kubernetes为其提供RWO、RWX等类 型的持久化存储卷 • 对接PolarFS作为云原生数据库的高性能存储 开发者 操作系统 芯片 数据库 云原生 AI训练 大数据 社区生态Curve介绍 01 02 raft和braft 03 raft在Curve中的应用 05 Q&A 04 Curve对raft的优化RAFT协议简介 什么是raft • raft 是一种新型易于理解的分布式一致性复制协议,由斯坦福大学的Diego Ongaro和John Ousterhout提出,《In Search0 码力 | 29 页 | 2.20 MB | 5 月前3SOFAMesh的通用协议扩展
SOFA MESH 的通用协议扩展 Service Mesh Meetup #3 深圳站 邵俊雄(熊啸) 2018.08.25AGENDA • SOFA MESH 介绍 • SERVICE MESH 落地的问题 • SOFA MESH 的通用落地方案 • DNS 服务寻址方案 • X-PROTOCOL 通用协议 • 问答SOFA MESH • 从 ISTIO 克隆并保持同步更新 • 使用 使用 Controller Pattern 通过 CRD 扩展新的能力 • …MESH 落地碰到的问题 • 客户端服务发现与负载均衡无法与 ISTIO 一起工作 • ENVOY 不支持微服务使用的通信协议 • RPC 服务使用的接口,方法,参数语义无法匹配 ISTIO 的路由模 型 • 一个应用上部署了多个 RPC 服务,每个服务有自己的版本 • …ISTIO 控制平面路由的抽象模型 INBOUND DUBBO 服务的路由规则 XDS 适配 • 开发 DUBBO 协议支持SOFA MESH 的统一解决方案 • 采用 Kubernetes Native 方式落地微服务应用 • 使用 INTERFACE 作为 DNS 来寻址服务 • 开发一个通用协议处理框架 • 避免为不同的微服务框架修改 PILOT 代码 • 通过插件的方式按需支持新的协议 • 对应用代码无侵入性 • 为微服务框架提供轻量化客户端落地一个微服务框架需要的工作0 码力 | 28 页 | 4.73 MB | 5 月前313 Istio 流量管理原理与协议扩展 赵化冰
Istio 流量管理原理与协议扩展 赵化冰 赵化冰 腾讯云 服务网格团队 https://zhaohuabing.com Service Mesh Service Mesh Layer 处理服务间通信(主要是七层通信)的云原生基础设施层: Service Mesh 将各个服务中原来使用 SDK 实现的七层通信相关功能抽象 出来,使用一个专用层次来实现,Service Mesh 对应用透明,因此应用 通信安全: 服务身份认证、访问鉴权、通信加密 Proxy Application Layer Service 1 Istio 流量管理 – 概览 • 控制面下发流量规则: Pilot • 数据面标准协议:xDS • 集群内Pod流量出入: Sidecar Proxy • 集群外部流量入口:Ingress Gateway • 集群外部流量出口:Egress Gateway(可选,在一个集中点对外部访问进行控制) Service CLB 对外请求 对外请求(Passthrough/ServiceEntry) 缺省路由 (服务名) 5 Istio 流量管理 – 数据面 – Envoy配置模型和xDS协议 ADS Server LDS RDS CDS EDS Envoy 配置模型的主要概念: • Downstream:连接到 Envoy 的下游 Host,发送请求并接收响应。 • Upstream:0 码力 | 20 页 | 11.31 MB | 5 月前3TiDB中文技术文档
的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。 分布式事务 TiDB 100% 支持标准的 ACID 事务。 真正金融级高可用 相比于传统主从 (M-S) 复制方案,基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保 证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复 (auto-failover),无需人工介入。 一站式 HTAP 解决方案 TiDB 作为典型的 Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个: 一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁 移等);三是分配全局唯一且递增的事务 ID。 PD 是一个集群,需要部署奇数个节点,一般线上推荐至少部署 3 个节点。 TiKV Server 负责存储数据,从外部看 (从 StartKey 到 EndKey 的左闭右开区间)的 数据,每个 TiKV 节点会负责多个 Region 。TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之 间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。 TiDB Server0 码力 | 444 页 | 4.89 MB | 5 月前3PingCAP TiDB&TiKV Introduction OLTP
新一代NewSQL分布式关系型数据库 Ti Project (TiDB + TiKV) ● 基于 2013 年 Google Spanner / F1 论文 ● 基于 2014 年 Stanford 工业级分布式一致性协议实现 Raft 论文 概括: 无限水平线性扩展、高并发高吞吐、跨数据中心多活、MySQL 兼容的真正意义上的分布式数据库 ● 我们是全球仅有的在该领域进行技术创新的两家公司之一(对标美国 CockroachDB) 通过简单的增加节点,提供无上限的、线性扩展的的高并发、高吞吐的处理能力 ,卓越的集群处理能力。同时提供跨行事务处理能力。 我们的数据库能解决什么问题 - 2 ● 高可用、跨数据中心多活 分布式算法 Raft 自动完成多副本写入、数据分片(region)的拆分、聚合、重分布 ,从而保证数据高可用,天然支持跨数据中心多活且可配置。 ● 底层数据打通,集中管控 通过增加节点即可获得无限数据存储能力,从架构层面轻松支持多个业务系统 JDBC) TiDB TiKV RPC MySQL Protocol F1 Spanner Applications TiDB ● 开源 F1 实现 ● 无状态的分布式 SQL 层 ● MySQL 协议兼容 ● 针对分布式场景的执行计划,优化器 ○ Push-down / MPP ● Online DDL ○ 业务不中断,进行表结构变更 TiDB 逻辑架构 ● 支持关系型的表结构 ● 全局一致索引0 码力 | 21 页 | 613.54 KB | 5 月前3Curve 分布式存储设计
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与 性能 1. 完善RDMA/SPDK方案,发布稳定版本 2. 更高性能硬件选型、适配及性能调优 3. 大文件读写性能优化,RAFT优化,降低写放大 3. 功能 1. 文件存储支持回收站/生命周期管理/配额/用户权限等 2. 支持NFS、CIFS/SMB、HDFS等协议 3. 块存储支持按存储池创建卷Curve 社区介绍 1. Curve的成长离不开社区贡献者的支持和参与。非常欢迎广大0 码力 | 20 页 | 4.13 MB | 5 月前3分布式NewSQL数据库TiDB
UCloud 优刻得 10/120 什么是 什么是TiDB TiDB 是 PingCAP 公司研发的开源分布式关系型数据库。定位于在线事务处理、在线分析处理 HTAP 的融合型数据库产品。兼容 MySQL 协议,⽀持⽔平伸缩,具备强⼀致性和⾼可⽤性。 UCloud 基于PingCAP的TiDB,实现TiDB在公有云的产品化,给⽤⼾提供两种形态产品。TiDB:按⽤⼾指定节点规格⼀键部署,灵活集群管理,接⼊⽅便的⾼性能数据;TiDB 分布式NewSQL数据库 TiDB Copyright © 2012-2021 UCloud 优刻得 12/120 真正⾦融级⾼可⽤ 真正⾦融级⾼可⽤ 相⽐于传统主从 (M-S) 复制⽅案,基于 Raft 的多数派选举协议可以提供⾦融级的 100% 数据强⼀致性保证,且在不丢失⼤多数副本的前提下,可以实现故障的⾃动恢复 (auto- failover),⽆需⼈⼯介⼊。 产品优势 分布式NewSQL数据库 TiDB 在以下缺点:资源利⽤率低、维护成本⾼、RTO (Recovery Time Objective) 及 RPO (Recovery Point Objective) ⽆法真实达到企业所期望的值。TiDB 采⽤多副本 + Multi-Raft 协议 的⽅式将数据调度到不同的机房、机架、机器,当部分机器出现故障时系统可⾃动进⾏切换,确保系统的 RTO <= 30s 及 RPO = 0。 对存储容量、可扩展性、并发要求较⾼的海量数据及⾼并发的0 码力 | 120 页 | 7.42 MB | 5 月前3Curve核心组件之chunkserver
新版本ChunkServer性能优化CURVE基本架构 • 元数据节点 MDS • 管理和存储元数据信息 • 感知集群状态,合理调度 • 数据节点 Chunkserver • 数据存储 • 副本一致性,raft • 客户端 Client • 对元数据增删改查 • 对数据增删改查 • 快照克隆服务器CURVE基本架构 01 02 03 04 ChunkServer架构 ChunkServer核心模块 括读写socket,rpc协议解析等。 ChunkServer架构RPC Service层是对外提供的一些RPC服 务的接口。包含的RPC服务有: • ChunkService。IO相关操作 • CliService。成员变更相关操作 • CopySetService。创建copyset等操 作 • RaftService。Braft内置的service, 完成raft成员之间的选举,日志复制, 实现了braft的状态机,完成与raft的交 互。详细交互流程后面展开。 CopysetNodeManager负责管理 CopysetNode的创建、初始化、删除等 ChunkServer架构心跳模块有两方面的职责: 1、向MDS节点上报心跳,心跳中包括 ChunkServer本身的一些统计信息 2、解析MDS的心跳response中的raft 成员变更信息,向CopysetNode发起变0 码力 | 29 页 | 1.61 MB | 5 月前3TiDB 原理与实战
. Google Spanner Google F1 TiDB RDBMS NoSQL NewSQL TiDB and TiKV TiDB 执行流程: TiDB 支持 MySQL 协议 ○ 用户从 MySQL 的相关解决方案迁移 过来时几乎没迁移成本。 ○ 目前还有少量函数或功能未 实现 Plan optimization 逻辑优化 ● 主要依据关系代数的等价交 换做一些逻辑变换 2PC(二阶段提交),参考 Google percolator 的论文 ○ MVCC ○ 隔离级别 (SI + 乐观锁) ○ 引擎 RocksDB ● 水平扩容/缩容 ○ raft 协议 + PlacementDriver ● 容错 TiKV Store4 Raft groups RPC RPC Client Store1 TiKV Node1 Region 1 Region 3 ... Store2 TiKV Node20 码力 | 23 页 | 496.41 KB | 5 月前3Curve文件系统元数据管理
这个在inode的ExtentsTree字段 meta partition(raft group) Btree、B+ tree 好 有 tiny extent,多个文件共用 normal extent,属于一个文件 partition append→ master slave协议 overwrite → raft 更适合大文件顺序写 fastcfs 有元数据服务器 inode和dentry放一个结构体。 parent inode + name) segment kv → hashtable(key inode + offset) etcd 差 块设备,最小10GB segment + chunk raft 块设备的元数据管理 cephfs 3、各内存结构体 时间复杂度 空间复杂度 特点 可用实现 Btree 一个节点上保存多条数据,减少 系统加载的时候从持久化介质中进行加载,需要把一条条持久化的记录加载到内存里。实现把string转化为inode结构体,再插入内存结构中。 场景二:业务运行过程中,元数据的增删改查。 如果采用raft的方式对元数据持久化进行保证,所有元数据的处理都是先写WAL,再修改内存结构。那么任何对元数据的增删改查,对应着一条记录,根据记录去修改内存数据。 按照之前的讨论,curve文件系统的元数据管理0 码力 | 24 页 | 204.67 KB | 5 月前3
共 61 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7