高性能MySQL:使用Flashcache

作者:港云互联 时间:2019-12-27

        虽然有很多因素需要在闪存、硬盘和RAM之间权衡,在存储层次结构中,这些设备没有被当作一个整体处理。有时可以使用磁盘和内存技术的结合,这就是Flashcache。


        Flasheache是这种技术的一个实现,可以在许多系统上发现类似的使用,例如Oracle数据库、ZFS文件系统,甚至许多现代的硬盘驱动器和RAID控制器。下面讨论的许多东西应用广泛,但我们将只专注于Flasheache,因为它和厂商、文件系统无关。


        Flasbcache是一个Linux内核模块,使用Linux的设备映射器(Devic Mapper)。它在内存和磁盘之间创建了.个中间层。这是Facbook开源和使用的技术之一,可以帮助共优化数据库负载。


        Fashachle 创建了一个块设备, 并且可以被分区,也可以像其他块设备样创建 文件系统,特点是这个块设备是由闪存和磁a共同支撑的。闪存设备用作读取和写人的智能高速缓存。


        虚拟块设备运比闪存设备要大,但是没关系,因为数据最终都在储在磁盘上。内存设备面只是去缓冲写人和缓存读取,有效弥补了服务器内存容量的不足。


        这种性能有多好呢? Flashcache 似乎有相对较高的内核开销。(设 备映射并不总是像看起来那么有效,但我们还没深入调查找出原因。)但是,尽管Flashcache理论上可能更高效,但最终的性能表现并不如底层的闪存存储那么好,不过它仍然比磁盘快很多,所以还是值得考虑的方案。

高性能MySQL:使用Flashcache

        我们用包含数百个基准测试的一系列测试来评估 Flashcache的性能,但是我们发现在人工模拟的工作负载下,测出有意义的数据是非常困难的。于是我们得出结论,虽然并不清楚Flashcache通常对写负载有多大好处,但是对读肯定是有帮助的。于是它适合这样的情况使用:有大量的读I/O,并且工作集比内存大得多。


        除了实验室测试,我们有一些生产环境中应用Flashcache的经验。想到的一个例子是,有个4TB的数据库,这个数据库遇到了很大的复制延迟。我们给系统加了半个TB的Virident PCIe卡作为存储。然后安装了Flashcache, 并且把PCIe卡作为绑定设备的闪存部分,复制速度就翻了一倍。


        当闪存卡用得很满时使用Flashcache是最经济的,因此选择-张写得很满时其性能不会降低多少的卡非常重要。这就是为什么我们选择Virident卡。


        Flashcache就是一个缓存系统,所以就像任何其他缓存一样,它也有预热问题。虽然预热时间可能会非常长。例如,在我们刚才提到的情况下,Flashcache需要一个星期的预热,才能真正对性能产生帮助。


        应该使用Flashcache吗?根据具体情况可能会有所不同,所以我们认为在这一点上,如果你觉得不确定,最好得到专家的意见。理解Flasheache的机制和它们如何影响你的数据库工作集大小是很复杂的,在数据库下层(至少)有三层存储:


        首先,是InnoDB缓冲池,它的大小跟工作集大小一起可以决定缓存的命中率。缓存命中是非常快的,响应时间非常均匀。


        在缓冲池中没有命中,就会到Flashcache设备上去取,这就会产生分布比较复杂的响应时间。Flashcache 的缓存命中率由工作集大小和闪存设备大小决定。从闪存上命中比在磁盘上查找要快得多。


        Flashcache设备缓存也没有命中,那就得到磁盘上找,这也会看到分布相当均匀的比较慢的响应时间。


        有可能还有更多层次:例如,SAN或RAID控制器的缓存。这有一个思维实验,说明这些层是如何交互的。很显然,从Flasheache设备访问的响应时间不会像直接访问闪存设备那么稳定和高速。但是想象一下,假设有ITB的数据,其中100 GB在很长一段时间会承受 99%的I/O操作。也就是说,大部分时候99%的工作集只有100 GB。



        现在,假设有以下的存储设备:一个很大的RAID看,可以执行1 000 IOPS,以及一个可以达到100 000 IOPS的更小的闪存设备。闪存设备不足以存放所有的数据假设只有128 GB——因此单触使用闪存不是种可能的选择。 如果用闪存设备做Flasheache,就可以期望级存命中远远快于磁盘检索,但Flasheache整体比单独使用闪存设备要慢。我们坚持用数字说话,如果90%的请求落到Fasheache设备,相当于达到50 000 lOPS。



这个思维实验的结果是什么呢?有两个要点;



        1.系统使用 Flasheache比不使用的性能要好很多,因为大多数在级冲池未命中的页而访问都被缓存在闪存卡上,相对于磁盘可以提供快得多的访问速度。(9% 的工作集可以完全放在闪存卡上.)



        2. Flashcache 设备上有90%的命中率意味着有10%没有命中。因为底层的磁盘只能提供1 000 IOPS,因此整个Flasheache设备可以支持10 000的IOPS。为了明白为什么是这样的,想象一下如果我们要求不止于此会发生什么: 10%的1/O操作在缓存中没有命中而落到了RAID卷上,则肯定要求RAID卷提供超过1 000 IOPS,很显然是没法处理的。因此,即使Flashcache比闪存卡慢,系统作为一个整体仍然受限于RAID卷,不止是闪存卡或Flashcache。



        归根到底,Flasheache 是否合适是一个复杂的决定,涉及的因素很多。一般情况下,它似乎最适合以读为主的I/O密集型负载,并且工作集太大,用内存优化并不经济的情况。




新人注册,即送价值满880元现金劵

立即注册>>
客服 电话 反馈 活动 回顶部

服务热线

+852-5764-9835

1对1贴心服务,7X24小时热线