华为云的OBS介绍:摘自华为云官网:https://support.huaweicloud.com/obs/index.html
华为云的对象存储服务(Object Storage Service,OBS)是一个基于对象的海量存储服务,为客户提供海量、安全、高可靠、低成本的数据存储能力。
OBS系统和单个桶都没有总数据容量和对象/文件数量的限制,为用户提供了超大存储容量的能力,适合存放任意类型的文件,适合普通用户、网站、企业和开发者使用。OBS是一项面向Internet访问的服务,提供了基于HTTP/HTTPS协议的Web服务接口,用户可以随时随地连接到Internet,通过OBS管理控制台或各种OBS工具访问和管理存储在OBS中的数据。此外,OBS支持SDK和OBS API接口,可使用户方便管理自己存储在OBS上的数据,以及开发多种类型的上层业务应用。
OBS的基本组成是桶和对象:
1.桶(Bucket)是OBS中存储对象的容器。对象存储提供了基于桶和对象的扁平化存储方式,桶中的所有对象都处于同一逻辑层级,去除了文件系统中的多层级树形目录结构。用户在互联网上通过桶的访问域名来定位桶。
每个桶都有自己的存储类别、访问权限、所属区域等属性,用户可以在不同区域创建不同存储类别和访问权限的桶,并配置更多高级属性来满足不同场景的存储诉求。
对象存储服务设置有四类桶存储类别,分别为:标准存储、低频访问存储、归档存储、深度归档存储(受限公测中),从而满足客户业务对存储性能、成本的不同诉求。创建桶时可以指定桶的存储类别,桶的存储类别可以修改。
在OBS中,桶名必须是全局唯一的且不能修改,即用户创建的桶不能与自己已创建的其他桶名称相同,也不能与同帐号、其他帐号及帐号下的所有IAM(Identity and Access Management, 统一身份认证服务)用户创建的桶名称相同。桶所属的区域在创建后也不能修改。每个桶在创建时都会生成默认的桶ACL(Access Control List,访问控制列表),桶ACL的每项包含了对被授权用户授予什么样的权限,如读取权限、写入权限等。用户只有对桶有相应的权限,才可以对桶进行操作,如创建、删除、显示、设置桶ACL等。
一个帐号及帐号下的所有IAM用户可创建的桶+并行文件系统的上限为100个。每个桶中存放的对象的数量和大小总和没有限制,用户不需要考虑数据的可扩展性。
由于OBS是基于REST风格HTTP和HTTPS协议的服务,你可以通过URL(Uniform Resource Locator)来定位资源。
2.对象(Object)是OBS中数据存储的基本单位,一个对象实际是一个文件的数据与其相关属性信息(元数据)的集合体。用户上传至OBS的数据都以对象的形式保存在桶中。
对象包括了Key,Metadata,Data三部分:
(1).Key:键值,即对象的名称,为经过UTF-8编码的长度大于0且不超过1024的字符序列。一个桶里的每个对象必须拥有唯一的对象键值。
(2).Metadata:元数据,即对象的描述信息,包括系统元数据和用户元数据,这些元数据以键值对(Key-Value)的形式被上传到OBS中。
系统元数据由OBS自动产生,在处理对象数据时使用,包括Date,Content-length,Last-modify,ETag等。
用户元数据由用户在上传对象时指定,是用户自定义的对象描述信息。
(3).Data:数据,即文件的数据内容。
通常,我们将对象等同于文件来进行管理,但是由于OBS是一种对象存储服务,并没有文件系统中的文件和文件夹概念。为了使用户更方便进行管理数据,OBS提供了一种方式模拟文件夹。通过在对象的名称中增加"/",例如"test/123.jpg"。此时,"test"就被模拟成了一个文夹,"123.jpg"则模拟成"test"文件夹下的文件名了,而实际上,对象名称(Key)仍然是"test/123.jpg"。
上传对象时,可以指定对象的存储类别,若不指定,默认与桶的存储类别一致。上传后,对象的存储类别可以修改。
在OBS管理控制台和客户端上,用户均可直接使用文件夹的功能,符合文件系统下的操作习惯。
对象存储服务提供了多种资源管理工具:用户访问OBS的方式有多种,包括OBS控制台、OBS客户端(OBS Browser+)、OBS命令行工具(obsutil)、API、SDK,无论访问方式封装成何种形式,其本质都是通过OBS提供的REST风格的API接口进行请求。
1.管理控制台:是网页形式的。通过管理控制台,你可以使用直观的界面进行相应的操作。
2.OBS Browser+:是一款运行在Windows系统上的对象存储服务管理工具,OBS Browser+的图形化界面可以非常方便地让用户在本地对OBS进行管理。
3.obsutil:是一款用于访问管理OBS的命令行工具,你可以使用该工具对OBS进行常用的配置管理操作。对于熟悉命令行程序的用户,obsutil是执行批量处理、自动化任务的不错选择。obsutil适用于Windows、Linux和macOS三大主流的操作系统
4.obsfs:是OBS提供的一款基于FUSE的文件系统工具,主要用于将并行文件系统挂载至Linux系统,让用户能够在本地像操作文件系统一样直接使用OBS海量的存储空间。
5.SDK:是对OBS服务提供的REST API进行的封装,以简化用户的开发工作。用户直接调用SDK提供的接口函数即可实现使用OBS业务能力的目的。
6.API:OBS提供REST形式的访问接口,使用户能够非常容易地从Web应用中访问OBS。用户可以通过本文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。
OBS的接口既支持认证请求,也支持匿名请求。匿名请求通常仅用于需要公开访问的场景,例如静态网站托管。除此之外,绝大多数场景是需要经过认证的请求才可以访问成功。经过认证的请求总是需要包含一个签名值,该签名值以请求者的访问密钥(AK/SK)作为加密因子,结合请求体携带的特定信息计算而成。通过访问密钥(AK/SK)认证方式进行认证鉴权,即使用Access Key ID(AK)/Secret Access Key(SK)加密的方法来验证某个请求发送者身份。
OBS支持如下请求方式:
1.通过永久访问密钥访问OBS:用户可以在"我的凭证"页面创建永久访问密钥(AK/SK)。
2.通过临时访问密钥访问OBS: OBS可以通过IAM获取临时访问密钥(临时AK,SK和securitytoken)进行临时授权访问。临时访问密钥主要用于授权第三方临时访问OBS服务。
3.通过临时URL访问OBS:对桶或对象进行创建桶、上传对象和下载对象等操作。临时URL是由文件的访问域名和临时鉴权信息组成。
4.通过IAM委托访问OBS:IAM委托为统一身份认证服务IAM的功能特性,OBS在部分使用场景中(如CDN私有桶回源、跨区域复制),需要使用IAM委托功能,授予其他用户或云服务OBS的访问权限,替委托方管理OBS资源,实现安全高效的代维工作。
IAM用户若希望使用AK/SK访问OBS,必须要帐号为其开启"编程访问".
OBS权限控制:默认情况下,OBS的资源(桶和对象)都是私有的,只有资源拥有者可以访问OBS资源,其他用户在未经授权的情况下均无OBS访问权限。OBS的权限控制是指通过编写访问策略向其他帐号或者IAM用户授予资源的控制权限。例如,你拥有一个桶,你可以授权一个其他的IAM用户上传对象到你的桶中;你也可以将桶开放给非公有云用户访问,即桶作为一个公共资源,能被互联网上任何人访问。OBS提供多种方式将OBS资源权限授予给他人,资源拥有者可以根据业务需求制定不同的权限控制方案,从而确保数据安全。
OBS提供多种权限控制方式,包括IAM权限、桶策略、对象ACL、桶ACL。
创建桶:一个帐号及帐号下的所有IAM用户一共可创建100个桶。考虑到桶名会作为访问域名的一部分,需要参与域名解析,因此桶名需要满足DNS域名规范。长度范围为3到63个字符,支持小写字母、数字、中划线(-)、英文句号(.)。
首次登入华为云,需要先注册一个账号,然后实名认证,为了测试,可花费1元购买包月套餐,40G资源包。
对象存储服务软件开发工具包(OBS SDK, Object Storage Service Software Development Kit)是对OBS服务提供的REST API进行的封装,以简化用户的开发工作。用户直接调用OBS SDK提供的接口函数即可实现使用OBS服务业务能力的目的。
OBS SDK支持的语言包括:Java、Python、C、Go、.Net、Android、iOS等,这里介绍下C的使用。
Ubuntu 18.04上编译SDK:
1.OBS C SDK下载:从 https://github.com/huaweicloud/huaweicloud-sdk-c-obs clone项目,然后切换到tag v3.23.3.2,即最新发布版本,执行:git checkout v3.23.3.2;
2.编译:
(1).为source/eSDK_OBS_API/eSDK_OBS_API_C++/build.sh添加执行权限:
sudo chmod +x source/eSDK_OBS_API/eSDK_OBS_API_C++/build.sh
(2).将终端定位到source/eSDK_OBS_API/eSDK_OBS_API_C++目录下,执行:
./build.sh obs_sdk_api_c++ release
执行完上述命令后会生成obs_sdk_api_c++.tgz,此包内包含了由源码生成的eSDKOBS动态库,其它动态库是从仓库的其它目录中直接拷贝过来的。eSDKOBS动态库的源码在source/eSDK_OBS_API/eSDK_OBS_API_C++/src目录下。
也可以直接使用clone后存在的现成库:release/huaweicloud-obs-sdk-c-linux_3.23.3.2.tgz。
解压缩obs_sdk_api_c++.tgz,此包内包含demo、include、lib三个目录,其中demo中为测试代码,将终端定位到demo目录下,执行make即可生成demo和object_test可执行文件。
使用OBS客户端进行接口调用操作完成后,没有返回异常,则表明接口调用成功;若返回异常,则说明操作失败。修改demo.c函数test_create_bucket,将里面的create_bucket函数的第三个参数由NULL调整为具体的终端节点,否则在指定非默认区域时创建桶会失败。
执行demo可执行文件会在与demo目录同一目录下生成logs目录,此目录下的eSDK-OBS-API-Linux-C.run.log文件记录了每次执行命令后的信息,若操作失败,可从此文件中获得更多错误信息。
修改demo.c,从控制台下载AK/SK,将其拷贝给ACCESS_KEY_ID和SECRET_ACCESS_KEY,指定HOST_NAME,注意要同步修改location_constraint,然后指定桶名,注释掉main中的其它接口只保留test_create_bucket和test_head_bucket,重新make,然后执行demo,结果如下图所示:
实际使用中会将相关功能都封装在一个类中提供简单接口供调用。