 CurveFS方案设计增加快照部分 2021-04-13 李小翠、陈威 补充元数据数据结构 2021-04-19 李小翠、吴汉卿、许超杰等 补充文件空间分配,讨论与确认 背景 调研 开源fs 性能对比 可行性分析 方案对比 对比结论 架构设计 卷和文件系统 元数据架构 文件系统快照 方案一:文件/目录级别快照 方案二:文件系统快照 关键点 元数据设计 数据结构 索引设计 文件空间管理 开发计划及安排 背景 近期要能支持mysql所要接口,长期需要支持通用文件接口。 kv 虽然改造简单,短期内对基本功能的支持没有问题,但这个架构不利于 Curve 长期的规划和演进,因此选择通用的 dentry,inode 两层映射的元数据结构。对于 fs© XXX Page 4 of 14 的场景,元数据的量比块存储场景会多很多,长期看元数据节点的设计也是需要满足高可用、高可扩、高可靠的。 因此对元数据节点的要求总结为:高可用、高可扩、高可靠、高性能。 inode 和 dentry 的数据结构( inode 和 dentry 两个结构描述 还是 由一个dentry描述所有信息) inode 和 dentry 的索引设计(btree / skiplist / hashmap ?) 元数据的持久化(以 kv 的方式存入文件?存储 rocksdb ?) 元数据节点的高可用 元数据分片策略(哪些范围的元数据存储在哪些复制组上) 数据结构 在元数据设计上,扁平化元数据(用0 码力 | 14 页 | 619.32 KB | 6 月前3 CurveFS方案设计增加快照部分 2021-04-13 李小翠、陈威 补充元数据数据结构 2021-04-19 李小翠、吴汉卿、许超杰等 补充文件空间分配,讨论与确认 背景 调研 开源fs 性能对比 可行性分析 方案对比 对比结论 架构设计 卷和文件系统 元数据架构 文件系统快照 方案一:文件/目录级别快照 方案二:文件系统快照 关键点 元数据设计 数据结构 索引设计 文件空间管理 开发计划及安排 背景 近期要能支持mysql所要接口,长期需要支持通用文件接口。 kv 虽然改造简单,短期内对基本功能的支持没有问题,但这个架构不利于 Curve 长期的规划和演进,因此选择通用的 dentry,inode 两层映射的元数据结构。对于 fs© XXX Page 4 of 14 的场景,元数据的量比块存储场景会多很多,长期看元数据节点的设计也是需要满足高可用、高可扩、高可靠的。 因此对元数据节点的要求总结为:高可用、高可扩、高可靠、高性能。 inode 和 dentry 的数据结构( inode 和 dentry 两个结构描述 还是 由一个dentry描述所有信息) inode 和 dentry 的索引设计(btree / skiplist / hashmap ?) 元数据的持久化(以 kv 的方式存入文件?存储 rocksdb ?) 元数据节点的高可用 元数据分片策略(哪些范围的元数据存储在哪些复制组上) 数据结构 在元数据设计上,扁平化元数据(用0 码力 | 14 页 | 619.32 KB | 6 月前3
 CurveFS对接S3方案设计修订人 修订内容 2021-05-20 胡遥 初稿 2021-07-20 胡遥 细化write和read流程 整体架构 整体思路 接口和关键数据结构 mds.proto client端数据结构 metaserver.proto space相关数据结构和proto 关键流程 init流程 write流程 read流程 整体架构 S3ClientAdaptor模块:负责将文件数据进行ch ,每个block最大4M,每个block对应s3上一个object。 s3上对象已chunkid_indexblock_version进行命名,元数据则已S3ChunkInfo(见数据结构)的方式存储在inode中。对于文件顺序写场景,文件0~4M的s3对象必然为chunkid_0_0,4M~8M为chunkid_1_0,以此类推, 还有一种情况是文件先写了0~2M,然后在写2M~ 对version进 行++,比如覆盖写了0~4M,则数据会写到chunkid_0_1的对象,则元数据包含了2个S3Chunkinfo{2,0,0,8M}和{2,1,0,4M}。 接口和关键数据结构 common.proto enum FSType { TYPE_VOLUME = 1; TYPE_S3 = 2; } message S3Info { required0 码力 | 11 页 | 145.77 KB | 6 月前3 CurveFS对接S3方案设计修订人 修订内容 2021-05-20 胡遥 初稿 2021-07-20 胡遥 细化write和read流程 整体架构 整体思路 接口和关键数据结构 mds.proto client端数据结构 metaserver.proto space相关数据结构和proto 关键流程 init流程 write流程 read流程 整体架构 S3ClientAdaptor模块:负责将文件数据进行ch ,每个block最大4M,每个block对应s3上一个object。 s3上对象已chunkid_indexblock_version进行命名,元数据则已S3ChunkInfo(见数据结构)的方式存储在inode中。对于文件顺序写场景,文件0~4M的s3对象必然为chunkid_0_0,4M~8M为chunkid_1_0,以此类推, 还有一种情况是文件先写了0~2M,然后在写2M~ 对version进 行++,比如覆盖写了0~4M,则数据会写到chunkid_0_1的对象,则元数据包含了2个S3Chunkinfo{2,0,0,8M}和{2,1,0,4M}。 接口和关键数据结构 common.proto enum FSType { TYPE_VOLUME = 1; TYPE_S3 = 2; } message S3Info { required0 码力 | 11 页 | 145.77 KB | 6 月前3
 Zabbix 7.0 中文手册agent(主动检查)接口的主机。还增加了一种可用性状态,即 Mixed 状态,它对应于至少一 个接口不可用,和至少一个接口可用或未知的情况。此外,还引入了仅查看主机总数(不按接口细分)的功能。 图形部件中的图例大小可变 图形部件现在支持配置可变数量的图例行,具体数量由已配置的监控项数量确定。 每个标准监控项的文档链接 现在,每个标准监控项在前端都直接链接到其文档页面。 这些链接位于问号图标下方,从监控项配置表单打开监控项帮助窗口时(点击监控项键旁边的 - now) / 1000); 函数返回的值:44380233。 示例 6:移除 JSON 属性 通过删除具有键为"data_size" 或"index_size" 的属性来修改 JSON 数据结构。 var obj=JSON.parse(value); for (i = 0; i < Object.keys(obj).length; i++) { delete obj[i]["data_size"]; 为了允许批量收集指标并在几个相关监控项中同时使用,Zabbix 支持依赖监控项。依赖监控项依赖于主监控项,该主监控项会同时收集 它们的数据,仅需一次查询。主监控项的新值会自动填充依赖监控项的值。依赖监控项与主监控项更新间隔相同且不可变。 可以使用 Zabbix 预处理选项从主监控项数据中提取出依赖监控项所需的部分。 302 预处理由 预处理管理器进程管理,以及执行预处理步骤的工作线程。所有来自不同数据收集器的值(不管是否有预处理步骤),在添加到0 码力 | 1951 页 | 33.43 MB | 1 年前3 Zabbix 7.0 中文手册agent(主动检查)接口的主机。还增加了一种可用性状态,即 Mixed 状态,它对应于至少一 个接口不可用,和至少一个接口可用或未知的情况。此外,还引入了仅查看主机总数(不按接口细分)的功能。 图形部件中的图例大小可变 图形部件现在支持配置可变数量的图例行,具体数量由已配置的监控项数量确定。 每个标准监控项的文档链接 现在,每个标准监控项在前端都直接链接到其文档页面。 这些链接位于问号图标下方,从监控项配置表单打开监控项帮助窗口时(点击监控项键旁边的 - now) / 1000); 函数返回的值:44380233。 示例 6:移除 JSON 属性 通过删除具有键为"data_size" 或"index_size" 的属性来修改 JSON 数据结构。 var obj=JSON.parse(value); for (i = 0; i < Object.keys(obj).length; i++) { delete obj[i]["data_size"]; 为了允许批量收集指标并在几个相关监控项中同时使用,Zabbix 支持依赖监控项。依赖监控项依赖于主监控项,该主监控项会同时收集 它们的数据,仅需一次查询。主监控项的新值会自动填充依赖监控项的值。依赖监控项与主监控项更新间隔相同且不可变。 可以使用 Zabbix 预处理选项从主监控项数据中提取出依赖监控项所需的部分。 302 预处理由 预处理管理器进程管理,以及执行预处理步骤的工作线程。所有来自不同数据收集器的值(不管是否有预处理步骤),在添加到0 码力 | 1951 页 | 33.43 MB | 1 年前3
 Curve文件系统元数据持久化方案设计参考 前言 根据之前讨论的结果,元数据节点的架构如下图所示,这里涉及到两部分需要持久化/编码的内容: Raft Log:记录 operator log Raft Snapshot:将内存中的数据结构以特定格式 dump 到文件进行持久化© XXX Page 3 of 12 Raft Log +------+------------+-----+----------------+---------+----------+ vs 自己实现? 结论:从目前元数据持久化的需要来看,更倾向于自己实现,理由如下: redis 目前不支持单独持久化 redis 中的某个 DB (一个 redis 实例可包含多个 DB) 或数据结构,这对于在要使用 multiraft 的场景下,每个 raft 实例需要独立的快照并不合适 如果改造 redis,初步评估了下,其工作量要比自己实现持久化的逻辑要大一些,改造主要是为了让 redis 如果自己实现,只是一个简单的 sava/load 逻辑,比较清晰 redis 中有许多数据结构可供使用,如 (哈希、列表、set、sort_set),但对于目前的需求来说,我们内存数据结构使用的是 C++ STL 中的哈希表(unsorted_map),之后有可能根据需求换成 B+ 树或跳表,但是 redis 中的这些数据结构我们是不需要的 另外,如果 C++ 中的哈希表在后期使用中发现性能不达标的话(特别是在0 码力 | 12 页 | 384.47 KB | 6 月前3 Curve文件系统元数据持久化方案设计参考 前言 根据之前讨论的结果,元数据节点的架构如下图所示,这里涉及到两部分需要持久化/编码的内容: Raft Log:记录 operator log Raft Snapshot:将内存中的数据结构以特定格式 dump 到文件进行持久化© XXX Page 3 of 12 Raft Log +------+------------+-----+----------------+---------+----------+ vs 自己实现? 结论:从目前元数据持久化的需要来看,更倾向于自己实现,理由如下: redis 目前不支持单独持久化 redis 中的某个 DB (一个 redis 实例可包含多个 DB) 或数据结构,这对于在要使用 multiraft 的场景下,每个 raft 实例需要独立的快照并不合适 如果改造 redis,初步评估了下,其工作量要比自己实现持久化的逻辑要大一些,改造主要是为了让 redis 如果自己实现,只是一个简单的 sava/load 逻辑,比较清晰 redis 中有许多数据结构可供使用,如 (哈希、列表、set、sort_set),但对于目前的需求来说,我们内存数据结构使用的是 C++ STL 中的哈希表(unsorted_map),之后有可能根据需求换成 B+ 树或跳表,但是 redis 中的这些数据结构我们是不需要的 另外,如果 C++ 中的哈希表在后期使用中发现性能不达标的话(特别是在0 码力 | 12 页 | 384.47 KB | 6 月前3
 Linux命令大全搜索工具 v1.8SharedMemoryID 有关联的共享内 存段以及数据结构都会在最后一次拆离操作后删除。 2. -M SharedMemoryKey 删除用关键字 SharedMemoryKey 创建的共享内存标识。与其相关的共享内存 段和数据结构段都将在最后一次拆离操作后删除。 3. -q MessageID 删除消息队列标识 MessageID 和与其相关的消息队列和数据结构。 4. -Q MessageKey 删除由关键字 MessageKey 创建的消息队列标识和与其相关的消息队列和数据结构。 5. -s SemaphoreID 删除信号量标识 SemaphoreID 和与其相关的信号量集及数据结构。 6. -S SemaphoreKey 删除由关键字 SemaphoreKey 创建的信号标识和与其相关的信号量集和数据结构。 msgctl、shmctl 和 semctl 子例程提供了删除操作的细节。标识和关键字可以用 不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编 号,如硬盘的主设备号是3。 Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和 write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations结构体中的0 码力 | 1347 页 | 8.79 MB | 1 年前3 Linux命令大全搜索工具 v1.8SharedMemoryID 有关联的共享内 存段以及数据结构都会在最后一次拆离操作后删除。 2. -M SharedMemoryKey 删除用关键字 SharedMemoryKey 创建的共享内存标识。与其相关的共享内存 段和数据结构段都将在最后一次拆离操作后删除。 3. -q MessageID 删除消息队列标识 MessageID 和与其相关的消息队列和数据结构。 4. -Q MessageKey 删除由关键字 MessageKey 创建的消息队列标识和与其相关的消息队列和数据结构。 5. -s SemaphoreID 删除信号量标识 SemaphoreID 和与其相关的信号量集及数据结构。 6. -S SemaphoreKey 删除由关键字 SemaphoreKey 创建的信号标识和与其相关的信号量集和数据结构。 msgctl、shmctl 和 semctl 子例程提供了删除操作的细节。标识和关键字可以用 不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编 号,如硬盘的主设备号是3。 Linux为所有的设备文件都提供了统一的操作函数接口,方法是使用数据结构struct file_operations。这个数据结构中包括许多操作函数的指针,如open()、close()、read()和 write()等,但由于外设 的种类较多,操作方式各不相同。Struct file_operations结构体中的0 码力 | 1347 页 | 8.79 MB | 1 年前3
 CurveFS S3本地缓存盘方案© XXX Page 1 of 9 Curvefs-S3 本地写缓存盘方案© XXX Page 2 of 9 背景 方案设计 主要数据结构定义 方案设计思考 POC验证 背景 当前,s3客户端在写底层存储的时候是直接写入远端对象存储,由于写远端时延相对会较高,所以为了提升性能,引入了写本地缓存盘方案。也即要写底层存储时,先把数据写到本地缓存硬盘,然后再把本地缓存 硬盘中的数据异步上传到远端对象存储。 地写缓存目录中的对应文件。 同时,缓存清理模块会定时检查本地硬盘缓存目录容量情况,如果容量已经达到阈值了,则进行文件的清理工作。 另外,异常管理模块处理客户端挂掉后的文件重新上传问题。 主要数据结构定义 class DiskCacheManagerImpl : public DiskCacheManager{ public: DiskCacheManagerImpl();0 码力 | 9 页 | 150.46 KB | 6 月前3 CurveFS S3本地缓存盘方案© XXX Page 1 of 9 Curvefs-S3 本地写缓存盘方案© XXX Page 2 of 9 背景 方案设计 主要数据结构定义 方案设计思考 POC验证 背景 当前,s3客户端在写底层存储的时候是直接写入远端对象存储,由于写远端时延相对会较高,所以为了提升性能,引入了写本地缓存盘方案。也即要写底层存储时,先把数据写到本地缓存硬盘,然后再把本地缓存 硬盘中的数据异步上传到远端对象存储。 地写缓存目录中的对应文件。 同时,缓存清理模块会定时检查本地硬盘缓存目录容量情况,如果容量已经达到阈值了,则进行文件的清理工作。 另外,异常管理模块处理客户端挂掉后的文件重新上传问题。 主要数据结构定义 class DiskCacheManagerImpl : public DiskCacheManager{ public: DiskCacheManagerImpl();0 码力 | 9 页 | 150.46 KB | 6 月前3
 基于 APM 的智能运维体系在京东物流的落地和实践-付正全ew Relic、云智慧、 OneAPM、AppDyn、Amics 京东物流Jtrace分布式跟踪系统 延展性 应用级透明 低消耗 智能分析 定义了四个具体的设计目标 JTrace数据结构 核心数据结构由Span, Trace, 和 TraceId组成: • Trace: 多个Span的集合; • Span: RPC跟踪的基本单元; • SpanEvent:内部方法调用基本单元 • TraceId:0 码力 | 41 页 | 3.52 MB | 1 年前3 基于 APM 的智能运维体系在京东物流的落地和实践-付正全ew Relic、云智慧、 OneAPM、AppDyn、Amics 京东物流Jtrace分布式跟踪系统 延展性 应用级透明 低消耗 智能分析 定义了四个具体的设计目标 JTrace数据结构 核心数据结构由Span, Trace, 和 TraceId组成: • Trace: 多个Span的集合; • Span: RPC跟踪的基本单元; • SpanEvent:内部方法调用基本单元 • TraceId:0 码力 | 41 页 | 3.52 MB | 1 年前3
 Curve支持S3 数据缓存方案修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 Flush流程 FsSync流程 后台流程 poc测试验证 背景 基于s3的daemon版本基于基本的性能测试发现性能非常差。具体数据如下: 3InfoList。具体细节见 本地磁盘缓存 如果有配置writeBack dev,则会调用diskStroage进行本地磁盘write,最终写到s3则由diskStroage模块决定。 关键数据结构 message S3ChunkInfo { required uint64 chunkId = 1; required uint64 compaction = 2; required0 码力 | 9 页 | 179.72 KB | 6 月前3 Curve支持S3 数据缓存方案修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程 Flush流程 FsSync流程 后台流程 poc测试验证 背景 基于s3的daemon版本基于基本的性能测试发现性能非常差。具体数据如下: 3InfoList。具体细节见 本地磁盘缓存 如果有配置writeBack dev,则会调用diskStroage进行本地磁盘write,最终写到s3则由diskStroage模块决定。 关键数据结构 message S3ChunkInfo { required uint64 chunkId = 1; required uint64 compaction = 2; required0 码力 | 9 页 | 179.72 KB | 6 月前3
 openEuler 21.09 技术白皮书consistent buckets mutually reachable 1. 哈希表目录 : 采用哈希表来管理目录项,提高线性查找效率,减少伪共享。 2. 统一的分配器:数据结构使用统一的分配器,这样可以打破不同数据结构之间的界限,使得内存管理更加地简单 与灵活。 3. 采用软更新技术,简化了实现复杂度:软更新 (Soft Update) 是一种轻量级的保证文件系统一致性的技术。 4.0 码力 | 35 页 | 3.72 MB | 1 年前3 openEuler 21.09 技术白皮书consistent buckets mutually reachable 1. 哈希表目录 : 采用哈希表来管理目录项,提高线性查找效率,减少伪共享。 2. 统一的分配器:数据结构使用统一的分配器,这样可以打破不同数据结构之间的界限,使得内存管理更加地简单 与灵活。 3. 采用软更新技术,简化了实现复杂度:软更新 (Soft Update) 是一种轻量级的保证文件系统一致性的技术。 4.0 码力 | 35 页 | 3.72 MB | 1 年前3
 鸟哥的Linux私房菜:基础学习篇 第四版基本上,传统 BIOS 与 UEFI 的差异可以用T客帮杂志汇整的表格来说明: 比较项目 传统 BIOS UEFI 使用程序语言 组合语言 C 语言 硬件资源控制 使用中断 (IRQ) 管理 不可变的内存存取 不可变得输入/输 出存取 使用驱动程序与协 定 处理器运行环境 16 位 CPU 保护模式 扩充方式 通过 IRQ 链接 直接载入驱动程序 第三方厂商支持 较差 较佳且可支持多平 台 图形化能力 而且万一你的使用者的密码被其他不明人士取得的话,只要他登陆你的系统就 可以轻而易举的执行一些root的工作! 可怕吧!因此,在你修改你的linux文件与目录的属性之前,一定要先搞清楚, 什么数据是可变的,什么是不可变 的!千万注意啰!接下来我们来处理一下文件属性与权限的变更吧! 我们现在知道文件权限对于一个系统的安全重要性了,也知道文件的权限对于使用者与群组的相关性, 那么如何修改 一个文件的属性 可分享的(shareable) 不可分享的(unshareable) 不变的(static) /usr (软件放置处) /etc (配置文件) /opt (第三方协力软件) /boot (开机与核心档) 可变动的(variable) /var/mail (使用者邮件信箱) /var/run (程序相关) /var/spool/news (新闻群组) /var/lock (程序相关) 上表中的目录就是0 码力 | 1057 页 | 14.60 MB | 1 年前3 鸟哥的Linux私房菜:基础学习篇 第四版基本上,传统 BIOS 与 UEFI 的差异可以用T客帮杂志汇整的表格来说明: 比较项目 传统 BIOS UEFI 使用程序语言 组合语言 C 语言 硬件资源控制 使用中断 (IRQ) 管理 不可变的内存存取 不可变得输入/输 出存取 使用驱动程序与协 定 处理器运行环境 16 位 CPU 保护模式 扩充方式 通过 IRQ 链接 直接载入驱动程序 第三方厂商支持 较差 较佳且可支持多平 台 图形化能力 而且万一你的使用者的密码被其他不明人士取得的话,只要他登陆你的系统就 可以轻而易举的执行一些root的工作! 可怕吧!因此,在你修改你的linux文件与目录的属性之前,一定要先搞清楚, 什么数据是可变的,什么是不可变 的!千万注意啰!接下来我们来处理一下文件属性与权限的变更吧! 我们现在知道文件权限对于一个系统的安全重要性了,也知道文件的权限对于使用者与群组的相关性, 那么如何修改 一个文件的属性 可分享的(shareable) 不可分享的(unshareable) 不变的(static) /usr (软件放置处) /etc (配置文件) /opt (第三方协力软件) /boot (开机与核心档) 可变动的(variable) /var/mail (使用者邮件信箱) /var/run (程序相关) /var/spool/news (新闻群组) /var/lock (程序相关) 上表中的目录就是0 码力 | 1057 页 | 14.60 MB | 1 年前3
共 41 条
- 1
- 2
- 3
- 4
- 5













