近年来,软件定义存储技术快速发展和应用,Ceph迎来了新的发展机遇,从社区走向商用,一次次的实践在证明:Ceph已完全适用于大规模的企业应用和政务应用。此次大会上,杉岩数据统一存储产品总监花瑞应邀出席并带来了主题分享《基于Ceph BlueStore的杉岩智能缓存技术 AgileCache》,接下来详细为大家揭秘SandStone AgileCache。
为什么要推出SandStone AgileCache
传统高性能SSD Cache方案大多基于内核态实现,著名的方案有bcache、dm-cache、flashcache等,这些缓存技术通常对工作在用户态的应用程序暴露出的是通用块设备,应用程序只能通过标准的file operation访问混合盘块设备,缓存策略方面只能从数据的冷热程度这一个维度去实现。
在Ceph中如何更加高效合理地利用SSD缓存资源是一个很值得探讨的问题,大部分场景下,在OSD层给ObjectStore做加速是业界普遍采用的方案,即将OSD直接创建在经过内核Cache软件虚拟化出来的块设备混合盘上。用户态与内核态的天然屏障使得工作于内核态的Cache模块无法感知工作在用户态的OSD各种IO,比如:副本数据写IO、集群恢复流量的写IO、不同RBD卷的IO,也就无法做比较细粒度的缓存资源管理与控制。
技术创新的背后经历了什么
针对上面提到的问题,杉岩研发团队一开始评估过在最新的BlueStore中开发一个用户态的SSD Cache来解决,但是通过分析发现,这个工作量并不小,而且在已经比较复杂的BlueStore的IO路径上增加一个支持WriteBack模式的Cache功能,严重增加了BlueStore的复杂度,在代码可维护性及功能稳定性方面都是一个比较大的挑战,更重要的是,这样开发出来的带有Cache功能的ObjectStore与Ceph社区的方向是背道而驰的,社区之所以在设计BlueStore之初不考虑加入SSD Cache功能,其中一个原因就是混合存储毕竟只是一个过渡,全闪存会成为未来的主流。
那么怎样以经济高效的方式实现一个能够感知Ceph集群内部各种数据类型的SSD Cache呢?杉岩的AgileCache给出了完美的答案。SandStone AgileCache是一个Cache框架,兼容主流的内核态Cache,在Cache模块之上,引入了杉岩自研的内核态direct-io模块,负责将用户态的数据类型标记下传到内核Cache层,这种从用户态往内核态Cache传递IO标记的方法我们称之为“cadvise”。
SandStone AgileCache技术实现架构图
有了“cadvise”标记,我们就打通了Cache的“任督二脉”,使得Cache可根据标记完全区分OSD的各种数据类型,比如BlueFS下来的数据,我们统一标记成BlueStore的METADATA,优先缓存;集群内部的恢复流量,我们可标记成DONTNEED,提示Cache模块不缓存直接写到后端HDD盘,预留出宝贵的SSD资源。
SandStone AgileCache为企业用户带来的价值
SandStone AgileCache技术打破了用户态与内核态的之间的天然屏障,不仅拥有传统SSD Cache的所有优点,还可以感知分布式存储集群内部各种数据类型,并针对不同的数据类型采用不同的脏数据刷盘策略,以及不同的缓存数据回收策略,从而实现对缓存资源更细粒度的利用,降低企业用户TCO。
此外,杉岩还开发了基于AgileCache智能缓存的卷优先级管理功能,针对不同的卷可以设置高、中、低三个优先级,高优先级的卷全部缓存在SSD中,中优先级的卷只有部分热点数据缓存在SSD,较冷的数据保存在HDD中,低优先级的巻则不缓存,数据全部保存在HDD。企业用户只需搭建一套混合集群,就能拥有全闪、混合、全HDD三种性能模式的卷,自动切换,保障业务的服务质量。目前,SandStone AgileCache已经应用于杉岩数据软件定义存储全线产品,服务于各种规模的存储集群。