Flashcache是Facebook技术团队的又一力作,最初是为加速MySQL设计的。Flashcache是在Linux层面的,所以任何受磁盘IO困绕的软件或应用都可以方便的使用之。
1. Why Flashcache
随着时间的流逝,网站上的数据一直在不停的积累。如果你经营的只是一个博客的话,这不会是问题,因为10G的空间,大概就够你写一辈子了(如果放在硬盘上,其实一辈子很短)。如果你恰巧在一个快速增长的公司,数据会越来越多,从MB,到GB,再到TB。
如果将这些数据全部放在大容量的SATA、SAS盘上时,会发现性能(响应时间)不够;如果全放在SSD上时,又会发现成本很高。即使公司能够大气 到都放到SSD上,你会发现1TB的数据里面可能只有200G是经常被访问的,300G可能偶尔被访问到,最后剩下的500G可能已经成为历史数据了,几 乎不被访问到,如果全部都放在SSD上有略有浪费。于是就有了Flashcache。
Flashcache一个非常不错的软件(准确的说是一个Linux的模块), 可以动态加载。Flashcache通过在文件系统(VFS)和设备驱动之间新增了一次缓存层,来实现对热门的缓存。Flashcache是另一种缓存, 一般用SSD作为介质的缓存(一般的缓存用的是内存),通过将传统硬盘上的热门数据缓存到SSD上,然后利用SSD优秀的读性能,来加速系统。这个方法较 之内存缓存,没有内存快,但是空间可以比内存大很多。
本文是一个关于Flashcache的初步介绍。
数据量很大(例如4TB),热门数据也很大(800GB),不必要或者不舍得全部买内存来缓存。
数据量不大的话,一般Flashcache就没什么用武之地了,内存就可以帮你解决问题了;
不差钱,买内存呗;
另外Flashcache的加入也使得系统的复杂度增加了一层,如果你坚持KISS原则(Keep it simple, Stupid!),也可以弃用之。
上图中,Flashcache将普通的SAS盘(/dev/sda)和一个高速的SSD(/dev/sdb)虚拟成一个带缓存的块设备(/dev/mapper/cachedev)。
Facebook 称,Flashcache是其内部开发用于帮助扩展InnoDB/MySQL数据库,但同时Flashcache也是作为一个通用的缓存模块设计的,因此 能用在任何搭建在块设备之上的应用程序。
对于InnoDB,当工作集不与 InnoDB缓冲池一致,由于更多的工作集缓存在快速的媒介如固态硬盘上,将能显著的改进读取延迟。
利用FlashCache,就可以将MySQL的数据,索引,日志写到FlashCache设备上,并可以将下面参数都特定优化:
日志
1、减少切换次数
innodb_log_file_size=1300m
innodb_log_files_in_group=3
2、独立硬盘
redo log 240G/天
并发线程
innodb_thread_concurrency
IO
innodb_io_capacity
innodb_read_io_threads
innodb_write_io_threads
未定
innodb_change_buffering=none
adaptive_flushing
ssd随机写,不需要顺序化的额外代价