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. 配置windows update失败还原更改

    配置windows update失败还原更改_解决方案 解决方法: 方法1:     重启,按F8,选择最后一次正常启动.     如果还是需要等待.可采用方法2: 方法2:     重启,按F8,选 ...

  2. Lazy TLB Mode 的工作原理

    Lazy TLB (Translation Lookaside Buffer) mode 是操作系统和处理器在管理虚拟内存时的一种优化技术,旨在提高处理器的性能.要理解 Lazy TLB mode,需 ...

  3. 深入理解虚拟 物理地址转换,页表--基于ARMV8

    1. 页表转换寄存器描述符 1.1,页表/页目录结构 基于前言中的内核配置,内核采用39位虚拟地址,因此可寻址范围为2^39 = 512G,采用(linux 默认为五级页表,另外还有PUD,P4D,由 ...

  4. C# 的运算符和作用域

    // C# 运算符 // 表达式 表达式有操作数(operand)和运算符(operator)构成: // 常见的运算符 + - * / 和 new // x ?? y 如果x为null, 则计算机过 ...

  5. c#传统读取配置文件

    using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration.Json; namespace C ...

  6. 删除 设置 获取 cookies 的第三方包 js-cookies

    // 第三方包 js-cookies 是一个操作cookies的包 import Cookies from 'js-cookie' // Cookies.set(key,value) 存值 // Co ...

  7. G-数据结构-G

    \[\huge 近日多做数据结构题,或恐后再读不能醒悟,或记其思路,或骂出题人,或不想刷题,虽有此篇. \] \[\] \[\] \[\] \[\] T1 距离 首先这题部分分很多,直接 $ O (n ...

  8. 云原生周刊:OpenTofu Registry 获得用户界面和 API|2024.9.9

    开源项目推荐 kubectl trace kubectl trace 是一个 kubectl 插件,它允许你在 Kubernetes 集群中调度执行 bpftrace 程序. Kondense Kon ...

  9. Analysis I Chapter 2 - By Professor Terence Tao

    目录 2.1 The Peano Axioms 2.2 Addition - Exercises 2.2 - 2.3 Multiplication - Exercises 2.3 - Method o ...

  10. 构建人工智能模型基础:TFDS和Keras的完美搭配

    上一篇:<数据工程师,转型人工智能岗位的理想时空通道> 序言:本节将带您深入探索 TensorFlow 提供的关键工具和方法,涵盖数据集管理和神经网络模型的构建与训练.在现代人工智能框架中 ...