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. kotlin更多语言结构——>空安全

    可空类型与非空类型 Kotlin 的类型系统旨在从我们的代码中消除 NullPointerException .NPE 的唯一可能的原因可能是: -  显式调用 throw NullPointerEx ...

  2. 一些新奇的玩意【php篇--持续更新】

    人不进步就等于退步! 接触越多的人以及事就能学到更多的东西. 以下仅为本人记录的一些新奇的东西,不喜勿喷! 1.??运算符号,在新的项目中突然发现很多红线报错,还以为是错误!看了下,是??运算的问题, ...

  3. 快速部署mysql并开启binlog

    curl -fsSL https://get.docker.com | bash yum -y install docker-ce sudo systemctl start docker sudo s ...

  4. 将NC栅格表示时间维度的数据提取出来的方法

      本文介绍基于Python语言,逐一读取大量.nc格式的多时相栅格文件,导出其中所具有的全部时间信息的方法.   .nc是NetCDF(Network Common Data Form)文件的扩展名 ...

  5. SpringBoot2.0 整合 JWT 框架后台生成token

    一.传统Session认证 1.1.认证过程 1.用户向服务器发送用户名和密码.2.服务器验证后在当前对话(session)保存相关数据.3.服务器向返回sessionId,写入客户端 Cookie. ...

  6. NDT算法(深蓝学院)

  7. linq+lambda+delegate,从list中查找到满足匹配条件的所有数据索引值

    linq的扩展方法中有FindIndex,FindLastIndex两个方法可以查找满足条件的首个和最后一个数据的索引值,利用delegate将匹配条件的方法传入FindAllIndex,查找满足匹配 ...

  8. Selenium实现元素定位

    Selenium提供了定位元素的方法find_element(),该方法被定义在WebDriver类中. 一.参数 1.两个参数,参数1根据不同定位方法确定,定位方法如下: (1)通过id定位:使用参 ...

  9. 为数据集而生的 SQL 控制台

    随着数据集的使用量急剧增加,Hugging Face 社区已经变成了众多数据集默认存放的仓库.每月,海量数据集被上传到社区,这些数据集亟需有效的查询.过滤和发现. 每个月在 Hugging Face ...

  10. Java学习十七—反射机制:解锁代码的无限可能

    Java学习十七-反射机制:解锁代码的无限可能 一.关于反射 1.1 简介 Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性.方法 ...