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 统一命名空间 | 加速存储业务访问的更多相关文章

  1. mysql 海量数据的存储和访问解决方案

    第1章  引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互 联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...

  2. 数据存储与访问之——初见SQLite数据库

          本节引言: 本节学习Android数据库存储与访问的第三种方式:SQLite数据库,和其他的SQL数据库不同,我们并不需要在手机上另外安装一个数据库手机软件,Android系统已经集成了这 ...

  3. Laravel 5.1 中 Session 数据存储、访问、删除及一次性Session实例教程

    1.Session的由来及其实现 HTTP协议是无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的.也就是说我们无法在服务器端确认两次请求是否是同一个用户所为,这为我们在一些应用场景中实现 ...

  4. DMA—直接存储区访问

    本章参考资料:< STM32F4xx 中文参考手册> DMA 控制器章节.学习本章时,配合< STM32F4xx 中文参考手册> DMA 控制器章节一起阅读,效果会更佳,特别是 ...

  5. mysql实现海量数据的存储、访问的解决方案

    mysql实现海量数据的存储.访问的解决方案: mysql数据库水平切分的实现原理可分为以下几个:分库,分表,主从,集群,负载均衡器等 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为 ...

  6. 第21章 DMA—直接存储区访问

    本章参考资料:<STM32F76xxx参考手册>DMA控制器章节. 学习本章时,配合<STM32F76xxx参考手册>DMA控制器章节一起阅读,效果会更佳,特别是涉及到寄存器说 ...

  7. 第21章 DMA—直接存储区访问—零死角玩转STM32-F429系列

    第21章     DMA—直接存储区访问 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fi ...

  8. CDN加速静态文件访问

    CDN加速静态文件访问 全局调度 缓存技术 内容分发 带宽优化 CDN是Content Delivery Network的缩写,意思是内容分发网络.CDN的作用是把用户需要的内容分发到离用户近的地方, ...

  9. BCS--设置BDC元数据存储权限--访问被业务数据拒绝

    设置元数据存储权限 http://blog.163.com/liangshan_wei@126/blog/static/8297850320139126930290/

  10. 一场完美的“秒杀”:API加速的业务逻辑

    清晨,我被一个客户电话惊醒,客户异常焦急,寻问CDN能不能帮助他们解决“秒杀”的问题,他们昨天刚刚进行了“整点秒杀活动”,结果并发量过大,导致服务宕机,用户投诉. 为了理清思路,我问了对方三个问题: ...

随机推荐

  1. SQL Server的Descending Indexes降序索引

    SQL Server的Descending Indexes降序索引 背景索引是关系型数据库中优化查询性能的重要手段之一.对于需要处理大量数据的场景,合理的索引策略能够显著减少查询时间. 特别是在涉及多 ...

  2. Linux 防火墙与安全管理工具详解

    Linux 防火墙与安全管理工具详解 1. Iptables 概述 Iptables 是 Linux 系统中用于控制网络流量的工具,通过定义规则来过滤.转发和修改数据包.其规则可以细致地管理进入和离开 ...

  3. 【赵渝强老师】什么是Oracle的数据字典?

    数据字典是oracle存放有关数据库信息的地方,几乎所有的系统信息和对象信息都可在数据字典中进行查询.数据字典是oracle数据库系统的信息核心,它是一组提供有关数据库信息的表和视图的集合,这些表和视 ...

  4. ftrace options 中的irq-info

    /sys/kernel/debug/tracing/options/irq_info 是 ftrace 中的一个选项,用于启用或禁用有关中断的详细信息的跟踪. options/irq_info 的具体 ...

  5. 如何增加kasan 出现问题 重启

    要通过启动参数启用或配置 Kernel Address Sanitizer (KASAN) 并设置相关的行为,你可以在启动 Linux 内核时添加以下参数: 启用 KASAN:使用 kasan=1 来 ...

  6. 1. C#面试题 - Webservice和WebApi的区别

    1. Webservice : 基于SOAP协议的,数据格式时XML,只支持http协议,不是开源的,只能部署在IIS上 2. Webapi 开源的,.net 平台

  7. 56.dom如何映射数据

    所谓的映射机制就是 页面的标签和js中获取的页面标签对象,无论修改哪一个,另一个都会随之更新 : 映射原理:浏览器在渲染页面的时候给每一个元素都设置了很多内置的属性(包含样式的),     当我们在J ...

  8. 鸿蒙 NEXT 如何使用 @Styles 装饰器来优化我的组件代码?

    大家好,我是 V 哥.在鸿蒙 NEXT 开发中,@Styles 装饰器是一种非常有用的方法,用于定义可重用的样式.这使得开发者可以将多条样式设置提炼成一个方法,以便在多个组件中复用,从而提高代码的可维 ...

  9. 云原生周刊:Helm Charts 深入探究 | 2024.3.11

    开源项目推荐 Glasskube Glasskube 提供了一个用于 Kubernetes 的缺失的包管理器.它具有图形用户界面(GUI)和命令行界面(CLI).Glasskube 包是具备依赖感知. ...

  10. 看图认识HTML5

    教程: https://www.w3.org/TR/html52 https://www.w3cschool.cn/html5/ https://www.runoob.com/html/html5-i ...