博客
关于我
你了解自己的业务IO么?
阅读量:605 次
发布时间:2019-03-12

本文共 1503 字,大约阅读时间需要 5 分钟。

我们为什么要关注业务的IO行为或IO访问模型呢?简单来说,任何系统都需要集中关注自身服务的对象,而在分布式文件存储中,上层应用正是我们需要关注的核心对象。存储系统的设计和架构是多种因素综合权衡的结果,一旦存储性能达到极限,无论是开发者还是使用者,都希望了解具体的IO表现,以便找到瓶颈和进行优化。

常见业务类型的IO特点

让我们以几个典型业务场景为例,分析其IO模型特点:

1. 记录日志

日志文件通常是追加写入模式。每次写入前,需要调用statfs获取文件大小,计算写入位置(pos),因此write和statfs请求比例为1:1。在监控客户端请求时,如果发现write/stat比例接近1:1,可以推断该业务主要是日志追加写。如果日志类型IO占存储访问比例很高,建议扩大日志写入缓冲区,减少write/stat请求,提升性能。

2. 系统命令:du/ls

操作系统命令对分布式文件存储友好与否直接影响性能。特别是du和ls命令,会多次调用readdir和statfs,不仅对单目录统计来说,甚至是递归多目录,此时MDS负载往往很高。ls命令同样依赖readdir和stat,但只处理单一目录。监测到某MDS负载异常时,可分析是否受到这些命令的频繁调用。如果确定具体客户端和业务,可根据IP追踪到具体业务。

3. 数据库

数据库的读写比例一般为20%写、80%读。写操作往往伴随fsync和fdatasync,用于保证数据持久化。但这些FileSync开销较大,影响性能。建议使用direct IO方式,绕过缓存。对于MySQL,设置innodb_flush_method为O_DIRECT_NO_FSYNC可抵消fsync元数据更新,不影响数据完整性。注意:MySQL 8.0.14及更新版本在文件操作时仍需自动调用fsync。

4. AI训练

AI训练的IO特点明显:90%以上数据为读操作,且多是小文件或大文件的随机读。数据集不修改,元数据操作集中在open/closequiring等,data操作仅read。此特点可启用POSIX语义弱化,降低一致性,如弱化读缓存,大幅提升训练效率。

分析业务IO模型的方法

分析业务IO模型有两种方式:阅读源码或使用存储系统工具。阅读源码通常不现实且过于繁琐,因此实际应用中更多依赖于存储系统提供的分析工具。

在大规模分布式文件存储中,分析复杂且多样化。尤其需要监控和分析多种IO操作类型,尤其是元数据和数据IO情况。元数据操作包括open/close/mkdir/rmdir/stat/unlink等,数据IO则包括read/write,核心考察IOPS和吞吐量。现有产品提供的工具有限,增加自有功能至关重要。

我们是怎么做的

为了帮助管理员深入理解业务IO特点,YRCloudFile开发了一套IO统计框架,可实时监控和分析各类业务操作:

功能亮点:

  • 元数据请求监控:覆盖35项元数据操作类型(如open、close等)。
  • 文件数据请求监控:覆盖17项文件数据操作类型(如read/write)。
  • 灵活设置:可根据实际情况设置关注点,更高效分析。
  • 可视化报告:提供实时统计、按时间平均分析,并支持导出,为管理决策提供数据支撑。

客户端监控功能

连接YRCloudFile客户端后,自动模块化监控元数据和文件数据行为,并通过直观界面展示操作分布和趋势。支持按天、周平均分析和排序,便于资源调配和系统优化。

作为技术团队,基于IO特点分析可为用户提供针对性优化建议,提升业务性能和稳定性。

这种做法使YRCloudFile在存储性能和业务优化方面更具竞争力。

转载地址:http://qjcxz.baihongyu.com/

你可能感兴趣的文章
MySQL处理千万级数据分页查询的优化方案
查看>>
mysql备份
查看>>
mysql备份与恢复
查看>>
mysql备份工具xtrabackup
查看>>
mysql备份恢复出错_尝试备份/恢复mysql数据库时出错
查看>>
mysql复制内容到一张新表
查看>>
mysql复制表结构和数据
查看>>
mysql复杂查询,优质题目
查看>>
MySQL外键约束
查看>>
MySQL多表关联on和where速度对比实测谁更快
查看>>
MySQL多表左右连接查询
查看>>
mysql大批量删除(修改)The total number of locks exceeds the lock table size 错误的解决办法
查看>>
mysql如何做到存在就更新不存就插入_MySQL 索引及优化实战(二)
查看>>
mysql如何删除数据表,被关联的数据表如何删除呢
查看>>
MySQL如何实现ACID ?
查看>>
mysql如何记录数据库响应时间
查看>>
MySQL子查询
查看>>
Mysql字段、索引操作
查看>>
mysql字段的细节(查询自定义的字段[意义-行列转置];UNION ALL;case-when)
查看>>
mysql字段类型不一致导致的索引失效
查看>>