JYCache/doc/cache_framework_design.md

2.5 KiB
Raw Permalink Blame History

缓存系统设计

设计背景

在用户和数据服务器之间构建一套缓存系统该缓存系统可以让用户以本地文件的形式透明且高效地访问数据服务器中的数据。其中数据服务器的类型有对象存储、自建全局缓存等。以数据服务器为对象存储为例用户可以通过fuse以本地文件形式访问存储在远端的对象且远端的对象索引是用户可懂的。

系统定位

该缓存系统支持多种数据源包括S3对象存储、自建全局缓存等故称为HybridCache。同时借助S3FS对fuse的支持以及其在元数据管理方面的能力实现fuse模式下的文件管理操作。HybridCache的定位如下图所示

系统架构

HybridCache架构如下图所示

1.写缓存模块

写缓存模块的定位是本地写缓存写缓存中的key是文件的path不理解远端数据源对象存储和全局缓存等从write->flush的过程由上层去做。

2.读缓存模块

读缓存模块的定位是文件以远端数据源为对象存储为例的只读缓存读缓存中的key是对象的key。读缓存需要用到本地缓存以及远端缓存对象存储和全局缓存等

3.数据源访问组件

数据源访问组件负责和远端数据源进行交互涉及数据的上传下载等。以Adaptor的形式支持多种数据源包括对象存储和全局缓存等。

4.缓存管理组件

内存管理组件管理本地缓存,写缓存模块和读缓存模块中实际的本地缓存就是用的该组件。 在本地缓存中我们直接将文件切分为固定大小的pagepage大小可配置下文以64KB为例并使用CacheLib来维护这些page。page在CacheLib中以KV形式进行存储其存储结构如下

  • key为 cacheKey_pageid。读写模块各自维护自己的本地缓存cacheKey在写缓存模块中就是文件的path在读缓存模块中就是S3上对象的key。pageid即为页号通过offset/64KB计算得来。
  • value的数据结构如下

通过 cacheKey+offset+size 即可接操作指定文件中的特定page。page并发操作的安全性是通过CacheLib自身的机制以及page内的lock和新旧版号位来保证。

5.HybridCache访问组件

HybridCache访问组件定位在胶水层要根据上层调用方的特性定制化实现其内需要理解到上层调用方的逻辑。