Curve 分布式存储设计Curve 分布式存储设计 程义 — Curve Maintainer XAgenda 第二 第三 第四 第一 Curve的由来 Curve的设计目标 Curve块存储 和 Curve文件存储 Curve社区Curve的由来 1. 代码复杂/代码量大 2. 运维难度高 3. 无法满足高的性能需求Curve的设计目标 1. Curve云原生软件定义存储 2. Curve块存储 Curve块存储 3. Curve文件存储 4. 高性能,易运维,云原生Curve块存储 1. 高性能分布式共享数据库场景 2. Curve块存储提供底层分布式共享存储 3. Polardb for PostgreSQL提供上层高性能数 据库服务 4. 性能测试 1. benchmarkSQL 每分钟事务数提升39% 2. pgbench 延迟降低21% TPS提升26% 研究现状Curve块存储 研究现状Curve块存储 1. 分布式块存储服务 2. KVM块存储服务 3. iSCSI协议 4. 容器云块存储(CSI) 应用场景Curve块存储 1. 高可用性/高可靠性 (易运维) 2. RAFT一致性协议 3. CopySet分配算法 4. 拓扑结构 5. 高性能 6. chunkfilepool (降低写放大) 7. data stripe (增大并发) 8. zerocopy0 码力 | 20 页 | 4.13 MB | 6 月前3
Raft在Curve存储中的工程实践分布式存储系统,支持 块存储 和 文件存储 2018~2021 Curve块存储 2021~2022 Curve文件存储 • 基于Openstack构建云计算平台 • 底层存储使用Ceph块存储 • 稳定性挑战 • 算力平台kubernetes的迅速发展 • AI/大数据业务的快速增长 • 存储使用Ceph文件存储/HDFS • 成本/性能挑战 Curve块存储和文件存储均采用raft协议整体架构 对接OpenStack平台为云主机提供高性能块 存储服务 • 对接Kubernetes为其提供RWO、RWX等类 型的持久化存储卷 • 对接PolarFS作为云原生数据库的高性能存储 底座,完美支持云原生数据库的存算分离架 构 • Curve作为云存储中间件使用S3兼容的对象 存储作为数据存储引擎,为公有云用户提供 高性价比的共享文件存储 • 支持在物理机上挂载使用块设备或FUSE文件 致已经被提交,系统切换到新的配置(new)。RAFT协议简介 日志压缩 • 日志会不断增长,占用空间 • 采用快照的方式压缩日志 • 在某个时间点,整个系统的状态都以快照的形式写入 到稳定的持久化存储中 • 完成一次快照之后,删除时间点之前的所有日志和快 照。BRAFT简介 • raft协议提出之后,涌现出了非常多的实现,比如etcd,braft,tikv等。 • braft是raft的一0 码力 | 29 页 | 2.20 MB | 6 月前3
新一代云原生分布式存储新一代云原生分布式存储—Curve 上 李小翠 网易数帆存储团队分布式存储介绍 01 存储的发展 | 分布式存储的分类 | 分布式存储的要素 02 03 04 Ceph 架构简介 | 场景介绍 | 使用中的问题 Curve 架构简介 | 数据对比 | 应用情况 FAQ 答疑存储的发展 互联网时代,数据大爆炸 大型主机 成本高 单点问题 扩容困难 各存储设备通过网络互联 各存储设备通过网络互联 大规模 弹性扩容 底层构建在分布式存储之上 云的概念 成本:共用基础设施 弹性:随意扩缩容 速度:更快的构建发布业务 底层构建在分布式存储之上 云原生的概念: 易用性:跨平台,超融合,弹性 小型主机 容量有限分布式存储的分类 按照各种应用场景所需的存储接口分类 对象 存储 文件 存储 块存储 接口为简单的 Get、PUT、DEL 和其他扩展 通常意义是支持 对指定地址空间进行随机读写 传统意义的块存储:磁盘分布式存储的要素 如何构建分布式文件系统? 以分布式块存储为例。 •提供大容量的块设备 •可以在指定地址空间内随机读写 write(offset, len) •服务质量要求:数据不能丢、服务随时可用、弹性扩缩容 要什么 •成百上千台存储节点 •磁盘故障、机器故障、网络故障概率性发生 有什么 分布式存储系统需要满足接口需求,并且有持续监控、错误检测、容错与自动恢复的能力0 码力 | 29 页 | 2.46 MB | 6 月前3
廖雪峰JavaScript教程[[1, 2, 3], [400, 500, 600], '-']; 3. 4. var x = ??; 5. 6. alert(x); // x应该为500 Array 提供了一种顺序存储一组元素的功能,并可以按索引来读写。 练习:在新生欢迎会上,你已经拿到了新同学的名单,请排序后显示: 欢迎XXX,XXX,XXX和XXX同 学! : 1. 'use strict'; 2. 2. m.set('Adam', 67); 3. m.set('Adam', 88); 4. m.get('Adam'); // 88 Set 和 Map 类似,也是一组key的集合,但不存储value。由于key不能重复,所以, 在 Set 中,没有重复的key。 要创建一个 Set ,需要提供一个 Array 作为输入,或者直接创建一个空 Set : 1. var s1 ie给浏 览器,例如 user=ABC123XYZ(加密的字符串)… ,此后,浏览器访问该网站时,会在请求头附上这个 Cookie,服务器根据Cookie即可区分出用户。 Cookie还可以存储网站的一些设置,例如,页面显示的语言等等。 JavaScript可以通过 document.cookie 读取到当前页面的Cookie: 1. document.cookie; // 'v=123;0 码力 | 264 页 | 2.81 MB | 10 月前3
Python 标准库参考指南 3.13 False: >>> (-2.0).is_integer() True >>> (3.2).is_integer() False 两个方法均支持与十六进制数字符串之间的转换。由于 Python 浮点数在内部存储为二进制数,因此浮点 数与 十进制数字符串之间的转换往往会导致微小的舍入错误。而十六进制数字符串却允许精确地表示和 描述浮点数。这在进行调试和数值工作时非常有用。 float.hex() 以十六 头。 4.7.2 不可变序列类型 不可变序列类型普遍实现而可变序列类型未实现的唯一操作就是对hash() 内置函数的支持。 这种支持允许不可变类型,例如tuple 实例被用作dict 键,以及存储在set 和frozenset 实例中。 尝试对包含有不可哈希值的不可变序列进行哈希运算将会导致TypeError。 4.7.3 可变序列类型 以下表格中的操作是在可变序列类型上定义的。collections 发ValueError。 4.7.5 元组 元组是不可变序列,通常用于储存异构数据的多项集(例如由enumerate() 内置函数所产生的二元组)。 元组也被用于需要同构数据的不可变序列的情况(例如允许存储到set 或dict 的实例)。 class tuple([iterable]) 可以用多种方式构建元组: • 使用一对圆括号来表示空元组: () • 使用一个后缀的逗号来表示单元组: a,0 码力 | 2246 页 | 11.74 MB | 10 月前3
Python 标准库参考指南 3.13 False: >>> (-2.0).is_integer() True >>> (3.2).is_integer() False 两个方法均支持与十六进制数字符串之间的转换。由于 Python 浮点数在内部存储为二进制数,因此浮点 数与 十进制数字符串之间的转换往往会导致微小的舍入错误。而十六进制数字符串却允许精确地表示和 描述浮点数。这在进行调试和数值工作时非常有用。 float.hex() 以十六 头。 4.7.2 不可变序列类型 不可变序列类型普遍实现而可变序列类型未实现的唯一操作就是对hash() 内置函数的支持。 这种支持允许不可变类型,例如tuple 实例被用作dict 键,以及存储在set 和frozenset 实例中。 尝试对包含有不可哈希值的不可变序列进行哈希运算将会导致TypeError。 4.7.3 可变序列类型 以下表格中的操作是在可变序列类型上定义的。collections 发ValueError。 4.7.5 元组 元组是不可变序列,通常用于储存异构数据的多项集(例如由enumerate() 内置函数所产生的二元组)。 元组也被用于需要同构数据的不可变序列的情况(例如允许存储到set 或dict 的实例)。 class tuple([iterable]) 可以用多种方式构建元组: • 使用一对圆括号来表示空元组: () • 使用一个后缀的逗号来表示单元组: a,0 码力 | 2242 页 | 11.73 MB | 10 月前3
Python 标准库参考指南 3.8.20 False: >>> (-2.0).is_integer() True >>> (3.2).is_integer() False 两个方法均支持与十六进制数字符串之间的转换。由于 Python 浮点数在内部存储为二进制数,因此浮点 数与 十进制数字符串之间的转换往往会导致微小的舍入错误。而十六进制数字符串却允许精确地表示和 描述浮点数。这在进行调试和数值工作时非常有用。 float.hex() 以十六 头。 4.6.2 不可变序列类型 不可变序列类型普遍实现而可变序列类型未实现的唯一操作就是对hash() 内置函数的支持。 这种支持允许不可变类型,例如tuple 实例被用作dict 键,以及存储在set 和frozenset 实例中。 尝试对包含有不可哈希值的不可变序列进行哈希运算将会导致TypeError。 4.6.3 可变序列类型 以下表格中的操作是在可变序列类型上定义的。collections 发布 3.8.20 4.6.5 元组 元组是不可变序列,通常用于储存异构数据的多项集(例如由enumerate() 内置函数所产生的二元组)。 元组也被用于需要同构数据的不可变序列的情况(例如允许存储到set 或dict 的实例)。 class tuple([iterable]) 可以用多种方式构建元组: • 使用一对圆括号来表示空元组: () • 使用一个后缀的逗号来表示单元组: a,0 码力 | 1927 页 | 9.69 MB | 10 月前3
Python 标准库参考指南 3.8.20 False: >>> (-2.0).is_integer() True >>> (3.2).is_integer() False 两个方法均支持与十六进制数字符串之间的转换。由于 Python 浮点数在内部存储为二进制数,因此浮点 数与 十进制数字符串之间的转换往往会导致微小的舍入错误。而十六进制数字符串却允许精确地表示和 描述浮点数。这在进行调试和数值工作时非常有用。 float.hex() 以十六 头。 4.6.2 不可变序列类型 不可变序列类型普遍实现而可变序列类型未实现的唯一操作就是对hash() 内置函数的支持。 这种支持允许不可变类型,例如tuple 实例被用作dict 键,以及存储在set 和frozenset 实例中。 尝试对包含有不可哈希值的不可变序列进行哈希运算将会导致TypeError。 4.6.3 可变序列类型 以下表格中的操作是在可变序列类型上定义的。collections 发布 3.8.20 4.6.5 元组 元组是不可变序列,通常用于储存异构数据的多项集(例如由enumerate() 内置函数所产生的二元组)。 元组也被用于需要同构数据的不可变序列的情况(例如允许存储到set 或dict 的实例)。 class tuple([iterable]) 可以用多种方式构建元组: • 使用一对圆括号来表示空元组: () • 使用一个后缀的逗号来表示单元组: a,0 码力 | 1927 页 | 9.69 MB | 10 月前3
Python 标准库参考指南 3.8.20 False: >>> (-2.0).is_integer() True >>> (3.2).is_integer() False 两个方法均支持与十六进制数字符串之间的转换。由于 Python 浮点数在内部存储为二进制数,因此浮点数 与 十进制数字符串之间的转换往往会导致微小的舍入错误。而十六进制数字符串却允许精确地表示和描述 浮点数。这在进行调试和数值工作时非常有用。 float.hex() 以十六 20 4.6.2 不可变序列类型 不可变序列类型普遍实现而可变序列类型未实现的唯一操作就是对hash() 内置函数的支持。 这种支持允许不可变类型,例如tuple 实例被用作dict 键,以及存储在set 和frozenset 实例中。 尝试对包含有不可哈希值的不可变序列进行哈希运算将会导致TypeError。 4.6.3 可变序列类型 以下表格中的操作是在可变序列类型上定义的。collections 发ValueError。 4.6.5 元组 元组是不可变序列,通常用于储存异构数据的多项集(例如由enumerate() 内置函数所产生的二元组)。元 组也被用于需要同构数据的不可变序列的情况(例如允许存储到set 或dict 的实例)。 class tuple([iterable]) 可以用多种方式构建元组: • 使用一对圆括号来表示空元组: () • 使用一个后缀的逗号来表示单元组: a,0 码力 | 2052 页 | 9.74 MB | 10 月前3
Python 标准库参考指南 3.10.15 False: >>> (-2.0).is_integer() True >>> (3.2).is_integer() False 两个方法均支持与十六进制数字符串之间的转换。由于 Python 浮点数在内部存储为二进制数,因此浮点 数与 十进制数字符串之间的转换往往会导致微小的舍入错误。而十六进制数字符串却允许精确地表示和 描述浮点数。这在进行调试和数值工作时非常有用。 float.hex() 以十六 头。 4.6.2 不可变序列类型 不可变序列类型普遍实现而可变序列类型未实现的唯一操作就是对hash() 内置函数的支持。 这种支持允许不可变类型,例如tuple 实例被用作dict 键,以及存储在set 和frozenset 实例中。 尝试对包含有不可哈希值的不可变序列进行哈希运算将会导致TypeError。 38 Chapter 4. 内置类型 The Python Library 发ValueError。 4.6.5 元组 元组是不可变序列,通常用于储存异构数据的多项集(例如由enumerate() 内置函数所产生的二元组)。 元组也被用于需要同构数据的不可变序列的情况(例如允许存储到set 或dict 的实例)。 class tuple([iterable]) 可以用多种方式构建元组: • 使用一对圆括号来表示空元组: () • 使用一个后缀的逗号来表示单元组: a,0 码力 | 2072 页 | 10.39 MB | 10 月前3
共 131 条
- 1
- 2
- 3
- 4
- 5
- 6
- 14













