长期以来,数据都是一种蕴含着价值的商品,不论是在企业内部环境中部署,抑或是放到公有云端去实现,它 都是IT系统的核心所在。自上世纪50年代,磁带和磁盘发明后,我们便产生了在存储介质上持久存放数据的需要。
当然,这种持续的数据存储是要付出代价的。不论是磁盘、磁带或是闪存,存储设备的速度都无法赶上处理器和内存系统的发展。于是,为了得到良好的整体存储性能,我们必须不断尝试各种方式,使得存储介质运转得更快。
我们在外部存储介质中保留数据通常只有两种原因:长期存储和数据保护。
长期存储意味着在应用程序关闭或服务器断电后数据仍然能得以保留。数据无法长期驻留于系统内存(DRAM),所以当服务器或应用程序发生故障时,数据每隔一段时间就要写入到相应的介质之中。
数据保护亦是至关重要的,服务器有时会出现故障,甚至发生一些意想不到的事故灾害,如果不在多个存储介质上创建冗余,保留多个数据副本,我们很容易会遇到麻烦。数据保护机制包含RAID、纠删码和快照等,它们可以用来保护数据免遭物理和逻辑损坏,以及常见的“使用者操作失误”。
存储的性能指标
存储性能的评估通常使用这三种指标。
延迟:用以衡量设备的响应时间。系统内存的延迟通常以纳秒(ns)为单位、闪存以微秒(μs)计,而硬盘驱动器的单位则用毫秒 (ms)。
带宽:表示设备在特定时间段内传输数据的能力,通常以每秒兆比特(Mbps)或每秒千兆比特(Gbps)为单位。
吞吐量:代表了设备传输数据的实际能力,通常以每秒兆字节(MBps)或每秒千兆字节(GBps)为单位。
虽然看似类同,但带宽与吞吐量却有着本质上的差别。例如,硬盘驱动器(HDD)和固态驱动器(SSD)接口的最大带宽相同,但其输入/输出(I / O)顺序或随机、读或写的数据吞吐量却有着天壤之别。
在理想环境中,所有的数据都将存储在系统内存之中,以最快的性能提供访问,但系统内存代价不菲且容易丢失,服务器内又只能配置有限的容量。大多数应用程序不需要一直访问所有的数据,考虑到成本因素,我们访问这些数据的频繁程度和所要求的速度决定了数据最适合的存储位置。
那么,如何才能充分利用存储资源呢?我们可以怎样调优,才能以最低的成本赢得最佳性能?
存储介质性能的比较
在深入探讨之前,我们先来看下可供企业选择的各种存储介质的层次结构。
DRAM:是在性能和延迟方面都表现最佳的存储介质,缺点是所存储的内容并不稳定。DRAM容量扩容并不容易,而且不能在多台服务器之间轻松共享。DRAM可以按字节寻址。
NVDIMM:使用和DIMM相同的外形尺寸,可以像DRAM那样非常快速,并且在断电时可以借助闪存或其它技术来保留内容。其在速度上略逊于DRAM,也有类似的访问性和扩展性问题。NVDIMM通常以字节寻址。
闪存:非常快速的持久存储介质,并具有良好的可扩展性,可作为单台服务器或是存储阵列的组成部分。它比DRAM便宜很多,并按数据块寻址。根据不同价格、性能、成本可以区分出不同的闪存类型,如MLC、TLC等。
硬盘驱动器:一种相对较慢的,用以长期存储数据的介质,现在更多用于归档和备份数据的存放。硬盘驱动器同样是数据块寻址的。
上述这些介质均可单独或混合使用,从而实现了一系列不同存储性能的方案。
服务器内部的存储介质选择
存储可以直接部署在服务器内部,尽可能靠近中央处理器,缩短数据的I/O路径,从而减少延迟。
闪存则必硬盘具有更高的性能水平。根据访问数据的性能需求,可以组合使用不同闪存/硬盘驱动器容量配比的方案,从而在成本和性能之间达成平衡。闪存与系统内存可以用作高速缓存来存放活跃的数据,而同时将相对静止的数据存储到硬盘驱动器上。
这其中涉及到命中率的问题,即活跃数据都存储在缓存中,根据命中率可以推测出I/O性能。如果数据需要从硬盘驱动器而非缓存中读取,那么其访问请求的性能将受到影响。一种方案是将廉价和昂贵的不同闪存类型混合使用,从而实现适合的方案性价比。
服务器中存储的另一项考虑因素是要防止设备故障。假如驱动器发生故障,那么服务器可能要完全宕机才能更换部件,除非该设备支持热插拔。假如服务器发生故障,内部设备上的数据都将无法访问,因此我们需要复制数据。这取决于将一组服务器连接起来的网络的速度,给I/O增加了额外的延迟。
考量存储阵列的性能
共享存储阵列为数据带来了更高的可用性和更好的可访问性,不过由于需要遍历以太网或光纤通道的存储网络,这可能会造成延迟。
目前一些新产品正在上市,提供不同的连接选项(如RDMA,RoCE和NVMe)等解决方案。相比传统的存储网络,这些新技术虽然扩展性较差,但显著降低了延迟。
存储阵列亦可以通过选择不同的存储介质来改善性能。
DRAM缓存能够改进读写性能,而混合系统中的闪存与磁盘驱动器则能实现最好的方案性价比。
同时,与上文中讨论的“缓存未命中”问题的风险相比,全闪存系统能够确保所有数据的I / O性能与延迟。
闪存技术的应用引发了一系列技术的产生,已经不在局限于单纯地提高吞吐量、解决延迟。通常来说,用越多的内存和闪存来取代磁盘,我们就能得到越好的存储性能。
存储网络的性能
当使用外部存储阵列时,我们可以通过调整存储网络以提高整体系统的性能。
最新的主机总线适配器(HBA)带来了非常高的带宽(32Gbps光纤通道、40Gbps和100Gbps以太网),而网络交换机则实现了很低的延迟。通常来说,更快的单个设备都会促使整体系统的性能得以更好地发挥,尽管不断升级交换机的成本或许是不容小觑的。通过添加更多的前端连接(额外的HBA),我们可以将工作负载扩展分配到更多的连接之上,从而提高对存储阵列的吞吐量。
另有一些其它的技术同样可以改善性能:
负载均衡:这项技术能够在尽可能多的设备上平衡资源的利用率。这意味着你可以将数据扩展分布到多块磁盘(闪存或硬盘驱动器),并充分利用所有连接,能够在服务器和存储阵列之间实现宽条带化技术。
负载优化:访问活跃数据会产生较重的工作负载,可以将其迁移到更快速的设备上,例如闪存,由于闪存代价不菲,因此需要尽可能使用在最需要的地方。假如可以克服服务器可用性的问题,那么NVDIMM的应用或许可以大大提高某些工作负载的性能。
缓存:我们已经探讨过存储阵列和服务器上的缓存,其亦可以跨设备使用,即在服务器上使用DRAM和闪存,对来自外部存储的I / O进行缓存,这在读取操作上没有限制,而写出操作则要求一定的弹性以防止数据丢失。
存储网络调优:在更为复杂的存储网络中,共享存储端口和交换机之间的链路或许会变成瓶颈,需要检查队列深度和缓冲区信用阀值等设置,或者利用网络自带的拓扑技术进行优化。
通过上述讨论,我们不难看出:改善性能的前提是具备适合的度量方式。如果缺乏合适的度量工具,量化性能问题、判断问题是否得以解决便无从谈起。
所有存储供应商都会提供衡量其产品性能的工具,甚至还能实现端到端的性能测试,显示出存储对整体应用系统性能的影响。通过这些工具,你还可以看出当前实时的性能和历史的性能数值——这对于持续改进存储系统性能而言亦是至关重要的。
本文转自d1net(转载)