GooseFS 统一命名空间 | 加速存储业务访问
01 前言
GooseFS是 腾讯云存储团队推出的分布式缓存方案,主要针对需要缓存加速的数据湖业务场景,提供基于对象存储COS服务的近计算端数据加速层。
统一命名空间是GooseFS提供的透明命名机制,可以融合多种不同的底层存储系统访问语义,为用户提供了一个统一的数据管理交互视图。简单来说,用户只需要使用GooseFS提供的访问接口协议,就可以访问对象存储、云HDFS、本地HDFS等不同存储系统,并加速这些存储业务的访问。
02 统一命名空间能力概述
越来越多的企业大数据搬到公有云上,企业的存储架构也变得日益复杂。相当多的业务采用 HDFS 和对象存储等不同存储服务构建混合存储架构,将一些冷数据冷备到公有云COS上,仅在需要时读取,热数据则留存在本地 HDFS 进行高性能运算。
在这种混合存储架构模型下需要维护多种不同的存储接口,增加了运维的复杂度。因此,如果有一套存储服务能够对接不同的后端存储系统,为上层计算业务提供一致的访问视图,将能极大地减少业务开发的难度,提升存储服务使用效率。
GooseFS 的统一命名空间能力能够有效缓解这一问题,这一能力可以对接不同的底层存储系统,如本地文件系统、腾讯云对象存储(Cloud Object Storage,COS)、云 HDFS(Cloud HDFS,CHDFS)等,与这些底层存储系统进行通信,并为上层业务提供统一的访问接口和文件协议。业务侧只需使用 GooseFS 的访问接口,即可访问存储在不同底层存储系统中的数据。

用户可以通过 GooseFS 创建命名空间的指令 ns create ,将 COS 和 云 HDFS 的指定文件目录挂载到 GooseFS 中,然后通过 gfs:// 的这一统一的 schema 访问数据。以上图中的例子进行一个说明:
COS 总共有3个存储桶,分别是 bucket-1、bucket-2、bucket-3,其中 bucket-1 有 BU_A 和 BU_B 两个目录,bucket-1 和 bucket-2 均挂载在 GooseFS 中。
云 HDFS 中有 BU_E、BU_F、BU_G 和 BU_H 共 4 个目录,其中除了 BU_H 其余目录均挂载到 GooseFS 上。
在 GooseFS 的文件操作中,如果以 gfs:// 这一统一的 schema 访问 BU_A 和 BU_E 这两个目录,均可正常访问,且文件缓存在 GooseFS 的本地文件系统中。
BU_A 和 BU_E 这两个存储在底层文件系统(COS、云 HDFS)中的目录已经挂载到 GooseFS 中,如果文件已经缓存在 GooseFS 的上,可以通过 gfs:// 这一统一的 schema 访问(例如 hadoop fs ls gfs://BU_A );也可以通过各个远端文件系统的命名空间访问(例如 hadoop fs ls cosn://bucket-1/BU_A )。
如果文件未被缓存在 GooseFS 上,此时通过 gfs:// 这一形式访问则会失败,因为文件未被缓存在本地文件系统中,但仍然可以通过底层存储系统的命名空间访问。
03 使用统一命名空间能力
用户可以通过 ns 操作在 GooseFS 中创建命名空间,并将底层存储系统映射到 GooseFS 上,目前支持的底层存储系统包括 COS、云 HDFS、本地 HDFS 等。创建命名空间的操作与 Linux 文件系统中挂载文件卷盘类似。创建命名空间后,GooseFS 可以为客户端提供一个具有统一访问语义的文件系统。
目前 GooseFS 命名空间的操作指令集如下:
$ goosefs ns
Usage: goosefs ns [generic options]
[create <namespace> <CosN/Chdfs path> <--wPolicy <1-6>> <--rPolicy <1-5>> [--readonly] [--shared] [--secret fs.cosn.userinfo.secretId=<AKIDxxxxxxx>] [--secret fs.cosn.userinfo.secretKey=<xxxxxxxxxx>] [--attribute fs.ofs.userinfo.appid=1200000000][--attribute fs.cosn.bucket.region=<ap-xxx>/fs.cosn.bucket.endpoint_suffix=<cos.ap-xxx.myqcloud.com>]]
[delete <namespace>]
[help [<command>]]
[ls [-r|--sort=option|--timestamp=option]]
[setPolicy [--wPolicy <1-6>] [--rPolicy <1-5>] <namespace>]
[setTtl [--action delete|free] <namespace> <time to live>]
[stat <namespace>]
[unsetPolicy <namespace>]
[unsetTtl <namespace>]
上述指令集中各项指令的能力简述如下:

一.创建和删除命名空间
通过 GooseFS 创建命名空间操作,可以将频繁访问的热数据从远端存储系统缓存到本地高性能存储节点中,为本地计算业务提供高性能的数据访问。如下指令展示了将 COS 中的存储桶 example-bucket、存储桶中的 example-prefix 目录以及云 HDFS 文件系统分别映射到 test_cos、test_cos_prefix 和 test_chdfs 等命名空间下。
# 将 COS 存储桶 example-bucket 映射到 test_cos 命名空间中
$ goosefs ns create test_cos cosn://example-bucket-1250000000/ --wPolicy 1 --rPolicy 1 --secret fs.cosn.userinfo.secretId=AKIDxxxxxxx --secret fs.cosn.userinfo.secretKey=xxxxxxxxxx --attribute fs.cosn.bucket.region=ap-guangzhou --attribute fs.cosn.bucket.endpoint_suffix=cos.ap-guangzhou.myqcloud.com
# 将 COS 存储桶 example-bucket 的 example-prefix 目录映射到 test_cos_prefix 命名空间中
$ goosefs ns create test_cos_prefix cosn://example-bucket-1250000000/example-prefix/ --wPolicy 1 --rPolicy 1 --secret fs.cosn.userinfo.secretId=AKIDxxxxxxx --secret fs.cosn.userinfo.secretKey=xxxxxxxxxx --attribute fs.cosn.bucket.region=ap-guangzhou --attribute fs.cosn.bucket.endpoint_suffix=cos.ap-guangzhou.myqcloud.com
# 将 云HDFS 文件系统 f4ma0l3qabc-Xy3 映射到 test_chdfs 命名空间中
$ goosefs ns create test_chdfs ofs://f4ma0l3qabc-Xy3/ --wPolicy 1 --rPolicy 1 --attribute fs.ofs.userinfo.appid=1250000000
创建成功后,可以通过 goosefs fs ls 指令查看目录详情:
$ goosefs fs ls /test_cos
对于不需要使用的命名空间,可以通过 delete 指令来删除:
$ goosefs ns delete test_cos
Delete the namespace: test_cos
A. 设置缓存策略
对于每一个命名空间,用户可以通过 setPolicy 和 unsetPolicy 设置指定命名空间的缓存策略,指定访问读写的缓存情况,从而提升数据的访问性能。设置缓存策略的指令集如下:
$goosefs ns setPolicy [--wPolicy <1-6>] [--rPolicy <1-5>] <namespace>
其中各项参数的含义如下:
- wPolicy:写缓存策略,支持6种写缓存策略。
- rPolicy:读缓存策略,支持5种读缓存策略。
- namespace:指定的命名空间。
目前 GooseFS 支持的读写缓存策略分别如下:
B. 写缓存策略

说明:
Write_Type:指用户调用 SDK 或者 API 向 GooseFS 中写入数据时指定的文件缓存策略,对单个文件生效。
C. 读缓存策略

说明:
Read_Type:指用户调用 SDK 或者 API 从 GooseFS 中读取数据时指定的文件缓存策略,对单个文件生效。
结合目前大数据的业务实践,我们推荐的读写缓存策略组合主要如下:

如下示例展示了将指定命名空间 test_cos 的读写缓存策略分别设置为 CACHE_THROUGH 和 CACHE_CONSISTENT:
$ goosefs ns setPolicy --wPolicy 3 --rPolicy 5 test_cos
如果需要重置读写缓存策略,可以通过 unsetPolicy 指令实现,如下策略展示了重置 test_cos 命名空间的读写缓存策略:
$ goosefs ns unsetPolicy test_cos
二.设置 TTL
TTL 用于管理缓存在 GooseFS 本地节点的数据,配置 TTL 参数可以让缓存数据在指定的时间后执行指定的操作,例如 delete 或者 free 操作。目前设置 TTL 的操作指令如下:
$ goosefs ns setTtl [--action delete|free] <namespace> <time to live>
其中各项参数的含义如下:
- action:缓存时间到期后执行的操作,目前支持 delete 和 free 两种操作。delete 操作会删除缓存和 UFS 上的数据,free 操作只会删除缓存上的数据。
- namespace:指定的命名空间。
- time to live:数据缓存时间,单位毫秒。
如下示例展示了将指定命名空间 test_cos 的策略设置为60秒到期后删除:
$ goosefs ns setTtl --action free test_cos 60000
04 结语
统一命名空间是GooseFS提供的透明命名机制,为用户提供了一个统一的数据管理交互视图,用户只需要使用GooseFS提供的访问接口协议,就可以访问不同存储系统,并加速这些存储业务的访问。极大地减少业务开发的难度,提升存储服务使用效率。关于更多GooseFS请前往:https://cloud.tencent.com/document/product/436/56412
GooseFS 统一命名空间 | 加速存储业务访问的更多相关文章
- mysql 海量数据的存储和访问解决方案
第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互 联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...
- 数据存储与访问之——初见SQLite数据库
本节引言: 本节学习Android数据库存储与访问的第三种方式:SQLite数据库,和其他的SQL数据库不同,我们并不需要在手机上另外安装一个数据库手机软件,Android系统已经集成了这 ...
- Laravel 5.1 中 Session 数据存储、访问、删除及一次性Session实例教程
1.Session的由来及其实现 HTTP协议是无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的.也就是说我们无法在服务器端确认两次请求是否是同一个用户所为,这为我们在一些应用场景中实现 ...
- DMA—直接存储区访问
本章参考资料:< STM32F4xx 中文参考手册> DMA 控制器章节.学习本章时,配合< STM32F4xx 中文参考手册> DMA 控制器章节一起阅读,效果会更佳,特别是 ...
- mysql实现海量数据的存储、访问的解决方案
mysql实现海量数据的存储.访问的解决方案: mysql数据库水平切分的实现原理可分为以下几个:分库,分表,主从,集群,负载均衡器等 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为 ...
- 第21章 DMA—直接存储区访问
本章参考资料:<STM32F76xxx参考手册>DMA控制器章节. 学习本章时,配合<STM32F76xxx参考手册>DMA控制器章节一起阅读,效果会更佳,特别是涉及到寄存器说 ...
- 第21章 DMA—直接存储区访问—零死角玩转STM32-F429系列
第21章 DMA—直接存储区访问 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...
- CDN加速静态文件访问
CDN加速静态文件访问 全局调度 缓存技术 内容分发 带宽优化 CDN是Content Delivery Network的缩写,意思是内容分发网络.CDN的作用是把用户需要的内容分发到离用户近的地方, ...
- BCS--设置BDC元数据存储权限--访问被业务数据拒绝
设置元数据存储权限 http://blog.163.com/liangshan_wei@126/blog/static/8297850320139126930290/
- 一场完美的“秒杀”:API加速的业务逻辑
清晨,我被一个客户电话惊醒,客户异常焦急,寻问CDN能不能帮助他们解决“秒杀”的问题,他们昨天刚刚进行了“整点秒杀活动”,结果并发量过大,导致服务宕机,用户投诉. 为了理清思路,我问了对方三个问题: ...
随机推荐
- llama.cpp推理流程和常用函数介绍
llama.cpp是一个高性能的CPU/GPU大语言模型推理框架,适用于消费级设备或边缘设备.开发者可以通过工具将各类开源大语言模型转换并量化成gguf格式的文件,然后通过llama.cpp实现本地推 ...
- Laravel视图共享数据
Laravel视图共享数据 最近在用lavavel过程中想实现公共头部尾部需要的配置数据在所有的页面中都可以使用,便查看了官方文档,在此做一个总结: 一. 修改 ComposerServiceProv ...
- USB总线-Linux内核USB3.0 Hub驱动分析(十四)
1.概述 USB Hub提供了连接USB主机和USB设备的电气接口.USB Hub拥有一个上行口,至少一个下行口,上行口连接上一级的Hub的下行口或者USB主机,连接主机的为Root Hub,下行口连 ...
- 一些git使用命令,误删本地分支,如何找回
1.新建仓库 git init 2.如果要本地更改文件,需要更新到远端. git status # 查看当前文件状态 git add -A # "git add -A" 命令用于将 ...
- dotnet的Lambda表达式 委托泛型(2) Action Func
// 总结:// 泛型:把类,方法,属性,字段做到了通用化// 反射:操作dll文件的一个帮助类库// 特性:就是一个特殊的类 自定义标记属性特性 他就是AOP的另一种实现方式 验证属性// 委托:就 ...
- MYSQL存储过程-练习4 loop循环
MYSQL存储过程-练习4 loop循环 创建存储过程 1 DELIMITER $$ 2 3 CREATE PROCEDURE `sp_loop`() 4 BEGIN 5 DECLARE i INT; ...
- docker 靶场 笔记
docker 靶场 笔记 搜索 镜像容器 sudo docker search dvwa 查看所有镜像容器 docker ps -a 下载 指定的 镜像 并在后台启动 docker run -itd ...
- DNShell
DNShell 一款基于DNS C2隧道的反弹shell工具. 支持 功能: 支持DNS-recordA-直连型 的C2隧道. 目标: Windows下基于Powershell的反弹. Linux下基 ...
- KubeSphere Helm 应用仓库源码分析
作者:蔡锡生,LStack 平台研发工程师,近期专注于基于 OAM 的应用托管平台落地. 背景介绍 KubeSphere 应用商店简介 作为一个开源的.以应用为中心的容器平台,KubeSphere 在 ...
- Python 潮流周刊#74:创下吉尼斯世界记录的 Python 编程课(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...