-
Notifications
You must be signed in to change notification settings - Fork 297
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Persistent Cache #1249
Comments
LGTM! |
|
LGTM |
这两个写反了吧?dfpcache的元数据需要redis持久化,dfcache可以不做持久化,只存内存就可以。但是dfcache的元数据最好可选用redis持久化,但是dfdaemon侧的dfcache缓存一定不能依赖redis,让dfdaemon storageManager自己管理,以减少延迟。 |
dfpcache 不做临时 cache,只跟 backend 一致, 所以元数据跟之前一样存内存临时就可以。dfcache 选用 redis 持久化就可以。 |
结论:
|
需求P1: 提供读能力。 注意:
文件系统
提供对象存储
时序图CreateAsync ModeSync ModeGetHit Local CacheHit Peer CacheHit Backend |
结论:
|
背景
Dragonfly 现阶段是针对只读数据进行 P2P 分发。通过改造 Dragonfly 让它支持写入操作,就能扩展出更多应用场景。
需求
设计
Command
新增命令行工具
dfpcache
(Dragonfly Persistent Cache)dfpcache get
:dfpcache create
:dfpcache delete
:Configuration
dfpcache
支持配置如下:Interface
Matedata
TaskTypeDfpcache
。Sequence Diagram
Get
默认 Backend 配置
自定义 Backend 配置
SignURL
Create
默认 Bucket 配置
自定义 Backend 配置
Update
默认 Backend 配置
自定义 Backend 配置
Delete
默认 Backend 配置
自定义 Backend 配置
注意
Endpoint
、Region
、Bucket
、Key
以及MD5
做 SHA256。S3 HeadObject
或OSS GetObjectMeta
来校验 AK 、判断文件是否存在并且获取 MD5。其他
Dragonfly 文件系统
现在最终数据信息是以 OSS 为准。当然还有另一套方案就是存储所有数据元信息以 Dragonfly 为准,不需要前置访问 OSS,数据元信息存储到 Redis 里,增删改查最终参考 Redis 内元信息。OSS 只做一个稳定的副本,这种方案需要:
a. 实现一套类阿里云 or AWS 的 AK 管理。
b. 实现一套 S3 or OSS 的 AK 认证逻辑。包括 SignURL 生成认证等逻辑。
c. 实现一套访问控制(RAM),抽象 AK 和 Path 对应权限。
Region
、Bucket
以及Key
逻辑。设计
Namespace
和Application
,AK 关联具体Namespace
和Application
的读写权限。存储路径抽象
分为
Namespace
、Application
以及Key
, OSS 存储路径${Namespace}/${Application}/${Key}
。Task ID 生成逻辑
使用
Namespace
、Application
以及Key
做 SHA256。调度器副本相关
Configuration
通过 Manager 配置文件配置 Backend 信息。Manager 认证和鉴权做完后,生成 SignURL 提供给 Dfpcache 进行下载(当然是没有命中的 peer 副本时需要到 Backend 下载才会用到)。
Metadata
折中方案
也可以有一种折中的方案基于 OSS 做访问控制,Dragonfly 来保证存储所有数据元信息。问题在于需要前置访问 OSS 做校验,存储也必须按照 OSS 定义的
Endpoint
、Region
、Bucket
以及Key
来做。参考
The text was updated successfully, but these errors were encountered: