1.4.7 版本正式发布

最近更新时间:2024-08-15 15:10:42

我的收藏
腾讯云对象存储团队正式发布了 GooseFS 1.4.7 版本,该版本针对低延迟数据仓库以及 OLAP 场景提供了全新的数据存储模型,同时针对故障容错与降级做了统一的优化和重构。

重要更新点一:Page Store 存储模型

在以 ORC / Parquet 格式文件构建的数据仓库以及其他 OLAP 数据库的应用场景中,大量的随机读 IO 会带来数据缓存的放大问题:
数据以 Block 形式缓存时,即使只需要 Block 中一小段的热数据,也会对 UFS 产生整个 Block 级别的读取带宽放大,对响应延迟有极大地影响;
包含热点数据区段的 Block 都会被缓存到 GooseFS 中,GooseFS 的缓存空间被明显放大,导致缓存空间利用率降低。
上述问题尤其是在数据文件本身比较大,但是随机 IO 却相对比较小数据查询分析场景中,尤为凸显。

因此,GooseFS 在 1.4.7 版本中全新引入了 Page Store 的存储模型设计,在不增加 Master 节点的元数据管理负担的前提下,允许 GooseFS 的数据节点以 Page 这种更小粒度存储单元来缓存数据,极大地缓解了海量随机访问场景下的数据放大问题,下图是原有 Block Store 与新的 Page Store 的设计对比。





在引入了 PageStore 的设计以后,对于存放在 COS/CHDFS 等 UFS 上的数据,我们都可以按需请求与缓存。同时,在 Page Store 的设计中实现了单数据节点的缓存击穿优化,即使多个请求同时访问了一个热点数据区段,也能够有效地降低对 COS/CHDFS 的带宽访问冲击,提升了整个存算分离架构的稳定性。

重点更新点二:统一故障降级能力

GooseFS 在 v1.4.7 版本中增强了全场景读写流的容灾能力,GooseFS 客户端会持续观测读写流状态,在状态异常时自动将流切到 Under FileSystem (一般为 COS/CHDFS), 同时在 GooseFS 状态恢复后自动切回来。

参考下图,写 GooseFS 过程中如果出现异常,客户端写流会自动触发降级写,最终只要 COS/CHDFS 能够写成功,整体写流就认为成功。GooseFS 不会缓存异常点之后的数据,初次读时会从 COS/CHDFS 重新 Load。





参考下图,读 GooseFS 过程中读流如果出现异常,GooseFSClient 会重新建立 COS/CHDFS 的读流,并从故障 Position 位置续读,同时会启动异步线程监听 GooseFSStore 状态,故障恢复时会自动升级。




读写降级能力对客户屏蔽了 GooseFS 的故障情况,极大提高了 GooseFS 的容灾能力。


新增配置项说明

以下是在 GooseFS 1.4.7 版本中新增的一些配置项。
参数
默认值
描述
goosefs.worker.block.store.type
FILE
指定 Worker 上的存储类型,可选项为 FILE 和 PAGE。
默认为 FILE,即传统的 Block 存储模式,指定 PAGE 则为 Page 存储模式。
goosefs.worker.page.store.page.size
1MB
指定每个 Page 页的大小。默认大小为 1MB,这里可以按需指定,例如 128KB 或 256KB 亦可。
goosefs.worker.page.store.dirs
/tmp/goosefs-cache
指定 Page Store 的数据目录。例如:/data/goosefs-data/paged-block
goosefs.worker.page.store.size
512MB
指定 Page Store 的数据目录的大小,默认为 512MB,如果超出了容量限制,则会触发 Page 粒度的淘汰。
goosefs.worker.cache.request.pending.timeout
500ms
用来优化高并发冷读场景下的缓存击穿问题的超时等待选项,默认是 500 毫秒。
如果在同一 Worker 节点上发生了缓存击穿的并发读取,则后到的请求会尝试等待 500ms,以便于直接从缓存中直接返回数据,而不是穿透到底层存储。
若等待超时,才会从底层存储读取并返回。
当该值设置为小于等于 0 的值时候,则相当于关闭了缓存击穿优化。
goosefs.worker.page.store.overhead
0.1
Page 存储空间的预留分位。默认值为 0.1,表示会预留百分之十的空间作为保留空间。达到水位以后,开始触发淘汰动作。
goosefs.worker.page.store.evictor.class
com.qcloud.cos.goosefs.client.file.cache.evictor.LRUCacheEvictor
Page 存储的淘汰算法,支持的选项为:
com.qcloud.cos.goosefs.client.file.cache.evictor.LRUCacheEvictor;
com.qcloud.cos.goosefs.client.file.cache.evictor.LFUCacheEvictor。
goosefs.worker.page.store.eviction.retries
10
最大淘汰尝试次数,默认为 10 次。
goosefs.worker.page.store.evictor.lfu.logbase
2.0
指定 LFU 淘汰算法的 LogBase。
goosefs.worker.page.store.local.store.file.buckets
1000
存放 Paged Block 目录的 Hash 桶数目,默认为 1000。