如何根据不同的工作负载调整存储性能

多年来,存储(尤其是共享存储阵列)的性能调优工作一直被认为需要一定程度的技术和经验基础才能做到的艺术。

但伴随着市场与技术的发展变化,现在人们不禁要问是否可以用更简化的操作来满足特定应用程序和应用负载的要求。

不过,存储“调优”仍然是必要的。

本文中,我们会谈到这其中所涉及的些许问题,以及可以如何优化存储硬件和主流应用程序的需求。

外部存储通常被用作应用程序数据的长期存放区域,其存储介质的速度远比主存储器要慢得多。

硬盘驱动器的延迟(响应)时间以毫秒级为单位,并且更适合于顺序而非随机输入/输出(I/O)性能。

NAND闪存带来了更好的随机I/O处理性能,尽管其牺牲了存储介质的使用寿命。闪存存储还有另一个问题,其需要执行诸如垃圾回收类的后台任务,从而延长了响应时间。

DRAM的性能卓越,正如我们即将提到的,是用以改善系统性能的潜在方式。

最后,我们需要记住的是网络是连接着共享阵列、服务器和存储,在基于横向扩展节点的方案中(如超融合基础架构),网络亦是连接各节点,确保数据一致性的关键所在。

上述这些都是我们可以配置、优化的可选项。

数据布局——跨物理介质部署分配数据可以提高I/O性能。单块硬盘或闪存驱动器的I/O性能是有限的,因此跨越多台设备的“条带化”有助于在多并发读写操作时扩展I/O。由于要使用RAID进行数据保护,条带化难以无限扩展,需要在RAID扩展性和RAID组重构时间之间做出权衡。RAID 6牺牲了额外的空间和奇偶校验量换取扩展性。还有一种方式是使用纠删码,但这更适合用于对象类型的数据。

缓存——闪存或DRAM上的缓存数据可以改善I/O延迟,用共享阵列或应用程序主机上的缓存来服务读取请求。写入I/O同样得以加速,不过需要复制写入持久性缓存设备来预防硬件故障。诸如Nimble的Adaptive Flash或HPE 3PAR的Adaptive Flash Cache之类的现代化缓存方案可以优化昂贵资源的使用,并大幅优化性能。

网络调优——在共享存储环境中,可以调整光纤通道和以太网网络来改善性能,即光纤通道中的信用阀值(Buffer Credits,又名流量控制机制)和以太网中的数据包尺寸(Packet Size)。很显然,使用非阻塞型交换机可以确保交换机上每个端口点对点的吞吐量。整体网络设计同样重要。在以前,我们为了节省成本将光纤通道网络设计为拓扑结构。而到了现在,光纤通道和以太网每个端口的速度虽然都并不会趋向饱和,端口共享仍然不是什么大问题,不过假如端口可以专用,那么这将更有助于消除瓶颈。

分层——通常而言,分层的使用目的在于节省成本,但优化性能同样是其目的。根据所要求的I/O性能和存储介质的成本消息将数据部署到最合适的存储层上。分层算法多年来一直在快速发展,从LUN转向基于数据块的分层。正确的分层算法和数据部署可以在不用额外购置硬件的前提下提升性能。

为了得到最佳调优效果,我们首先要知道应用程序的I/O特性。

这在每个具体场景中可能千差万别,但我们仍可以将其归纳为某几种类型。

结构化数据——最有代表性的是SQL(Oracle,SQL Server)和NoSQL(MongoDB,CouchDB)数据库,其具有混合式的I/O属性。所存储的数据通常具备随机的I/O属性(整表扫描除外),而数据写入则多以小型的增量式写入。传统的经验中我们将数据存放在RAID-5存储上并以RAID-10作为日志,但实际上仅有少量的I/O缓存才是相关的。对于现代化的存储阵列,大多数数据库加载(除了密集型)都易于管理,无需手动存放数据;而对于密集型工作负载,将日志存放在高性能存储上会是更好的选择。

虚拟服务器——服务器虚拟化引入了随机与连续I/O工作负载混合的效应。这是因为数据通过多个虚拟机分布在LUN或卷上,每个虚拟机都独立于另一个,生成了随机工作负载的特性。提高虚拟服务器的性能需要部署更快速的存储介质(从而减少每个单独I/O的延迟)或者引入缓存。vSphere(VMware)和Hyper-V(Microsoft)都允许为单个虚拟机配置缓存。还可以在虚拟机管理程序中集成第三方缓存解决方案来提高I/O性能。对于HCI,VMware的Virtual SAN还提供了一个全闪存的选项,使用高性能和大容量闪存组合来优化I/O工作负载。

虚拟桌面——虚拟桌面给I/O性能所带来的挑战与虚拟服务器中的随机访问问题相似,但却具有差异性。首先,大多数台式机都是由某一个镜像制成的,因此在启动大量桌面时存在着大量重复的数据。其次,虚拟桌面经常,甚至每天都会启动,因此读取(启动)和写入(关闭)时间会更多。通过在共享阵列中对桌面镜像使用缓存和重复数据删除,或者使用第三方软件,可以大幅提高桌面性能。非永久性的桌面镜像甚至可以缓存在DRAM中,这样的解决方案比购买昂贵的全闪存要便宜许多。

网络服务器——额外的读取缓存有助于网络和其它读密集型应用程序(如内容管理系统)。这可以部署在共享阵列中,也可以在虚拟机管理程序中用专用缓存。其中的权衡之处在于,网络服务器本身有空余缓存时可以避免后端I/O,但缓存容量毕竟有所限制,在某个时刻仍需将数据存储回外部I/O。

邮件服务器——回顾10至15年之前,Microsoft Exchange等平台上,每个邮箱的I/O需求是相当高的。随着新产品的发布,单个用户的I/O需求下降了15至20倍。Exchange 2016对比2003版,只需要大约5%的IOPS。因此,可以用JBOD而非SAN来部署Exchange。话虽如此,像Exchange这样的电子邮件平台仍可以从日益兴起的缓存和分布式数据部署(如宽条带化)中获益。

分析——许多分析工具在构建数据配置文件时需要反复读取同样的数据。这些工具对延迟相当敏感,并且需要并行执行查询操作,例如Hadoop设计时会分布在多个存储节点上,每个节点配置多块磁盘。因此,提高分析工作负载的性能需要减少I/O读取延迟。我们可以选择使用闪存介质,为运行分析软件的外部存储或主机添置更多缓存。数据的存放并不讲究,因为很难准确预测运行分析时将使用到哪些数据。因此,分析操作中的重点在于平衡好存储和缓存,并可以根据需要增加缓存。

在上述所有的场景中,得到详细的指标来反应出性能和资源使用状况是相当重要的。通过正确的指标数据,我们可以综合考虑购置额外资源的成本,评估、权衡各种业务改变所带来的影响。

本文转自d1net(转载)

上一篇:数据驱动的零售转型实践-联华华商案例分享


下一篇:《大数据存储:MongoDB实战指南》一导读