在CDN的服务中,有些内容访问会比较频繁,这种资源在性能更好的SSD中,会带来更好的访问体验。另外一些内容访问较少,作为相对冷的资源,只需要在HDD磁盘获取内容,即可达到较好的性能。这时就需要有策略的实现缓存的冷热迁移。
ats缓存在写入磁盘时,会将内容拆成1兆一个fragment的方式,链式的写入到单个磁盘中。如果某个大文件命中到HDD磁盘,但访问时却只按照Range方式访问了其中一部分,这样只加热了单个文件的某一部分。如果因为单个部分的访问就将全部文件迁入到ssd中,消耗的代价会比较大。但是如果只迁移单个fragment,就会破坏ats原有的单文件单磁盘的访问方式。
在SSD缓存被覆盖前,资源需要被迁入到hdd盘,保证冷资源不会被很快的淘汰。但也是在大文件场景中,如果将完整文件冷迁到HDD盘,那就需要保证在迁移完成后,资源不会被覆盖掉。这样的话,单磁盘的锁被独占,资源写入被搁置,性价比太差。如果只迁移单个fragment,也是相同的原因:破坏了ats原有的单文件单磁盘的访问方式。
基于以上原因,需要对ats的单文件单磁盘模式重新进行设计,实现单个fragment重新做磁盘映射hash,大文件的存储就像Range请求一样,分散在不同的磁盘,迁移不再依赖首片的磁盘索引。