• [产品介绍] 对象存储
    一:基本定义对象存储,也叫做基于对象的存储,是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。就像文件一样,对象包含数据,但是和文件不同的是,对象在一个层结构中不会再有层级结构。每个对象都在一个被称作存储池的扁平地址空间的同一级别里,一个对象不会属于另一个对象的下一级。文件和对象都有与它们所包含的数据相关的元数据,但是对象是以扩展元数据为特征的。每个对象都被分配一个唯一的标识符,允许一个服务器或者最终用户来检索对象,而不必知道数据的物理地址。这种方法对于在云计算环境中自动化和简化数据存储有帮助。对象存储经常被比作在一家高级餐厅代客停车。当一个顾客需要代客停车时,他就把钥匙交给别人,换来一张收据。这个顾客不用知道他的车被停在哪,也不用知道在他用餐时服务员会把他的车移动多少次。在这个比喻中,一个存储对象的唯一标识符就代表顾客的收据。 [1] 由于对象存储将遍布于很多节点且最新的数据并非总是可用,这将成为对象存储最终一致性的问题。  所有的数据存储都涉及到简称为CAP的三个元素:一致性、可用性和分区。  如果只是执行了写操作从而改变了一个对象,但有人正在从另外的节点访问这个对象。节点可能会在不同的物理位置,因为对象存储支持很大的地理扩展。新用户可能正在读取对象,但那是旧版本。这就是对象存储的最终一致性问题,此时并没有及时的同步。  这将成为问题,特别是利用对象存储做协同的时候,厂商为保证对象存储的一致性做了很好的工作,像是Joyent以及他的Manta 存储服务,一旦对象更改将不支持读取旧的内容。你必须等待,但你所读取的内容会是一致的。二:迁移访问企业对存储的诉求有一定的延续性,但其访问的介质不外乎是主机、PC、移动端以及应用,针对不同的访问介质来看,面向对象存储的解决方案也有所不同。然而如果应用软件不支持HTTP下REST API的方式,需要以传统文件服务器协议的方式访问,则需要在面向存储对象前面加一个网关进行协议的转换。没有了文件存储系统中的NFS或CIFS来给应用提供数据,面向对象的存储系统需要替换掉位于磁盘上的原始数据块和应用可以理解的文件之间的这个抽象层。面向对象的系统使用类似REST标准的API或者私有的API来告诉应用如何存储和读取对象标识。总体而言,对于面向对象的存储的操作的本质并不会改变。开源对象存储系统O基本上就是POST,GET ,PUT和 DELETE操作,如果需要上传大量的数据,则需要编写一个脚本就可以实现。三:平台选择基本上有四个选择:1.从当下各种厂商处购买完整功能的对象存储平台。2.购买对象存储软件并将其安装在你选择硬件上(服务器和存储)。3.在选择的文件和块存储整列中安装软件,这个阵列对现有存储增加了对象接口。4.使用网关解决方案连接现有应用到公有云四:使用方式对象存储根本上改变了存储蓝图。它处理和解决了曾经被认为是棘手的存储问题:不间断可扩展性、弹性下降、限制数据持久性、无限技术更新和成本失控。存储专家对其潜在的优势感到兴奋,尤其是他们的绝大多数数据都碰巧是被动的或者是冷数据。对象存储的本地应用程序接口是一个RESTful API。RESTful本质上是HTTP输入和输出,或者是互联网语言。这个语言对于Web浏览器是本地化的,但是对于大多数IT应用并非如此。这也为这个问题提供了一个答案,对RESTful API是一种检验,检测其变化、标准、事实标准以及在本地使用有哪些必须要做的事情,以及有哪些现成的软件可以实现。最佳的方式就是通过RESTful API使用对象存储系统。它是一个本地接口,具备最低延迟和最快的响应时间,能够同大多数的控制。
  • [技术研讨] 对象存储
    一:基本定义对象存储,也叫做基于对象的存储,是用来描述解决和处理离散单元的方法的通用术语,这些离散单元被称作为对象。就像文件一样,对象包含数据,但是和文件不同的是,对象在一个层结构中不会再有层级结构。每个对象都在一个被称作存储池的扁平地址空间的同一级别里,一个对象不会属于另一个对象的下一级。文件和对象都有与它们所包含的数据相关的元数据,但是对象是以扩展元数据为特征的。每个对象都被分配一个唯一的标识符,允许一个服务器或者最终用户来检索对象,而不必知道数据的物理地址。这种方法对于在云计算环境中自动化和简化数据存储有帮助。对象存储经常被比作在一家高级餐厅代客停车。当一个顾客需要代客停车时,他就把钥匙交给别人,换来一张收据。这个顾客不用知道他的车被停在哪,也不用知道在他用餐时服务员会把他的车移动多少次。在这个比喻中,一个存储对象的唯一标识符就代表顾客的收据。 [1] 由于对象存储将遍布于很多节点且最新的数据并非总是可用,这将成为对象存储最终一致性的问题。  所有的数据存储都涉及到简称为CAP的三个元素:一致性、可用性和分区。  如果只是执行了写操作从而改变了一个对象,但有人正在从另外的节点访问这个对象。节点可能会在不同的物理位置,因为对象存储支持很大的地理扩展。新用户可能正在读取对象,但那是旧版本。这就是对象存储的最终一致性问题,此时并没有及时的同步。  这将成为问题,特别是利用对象存储做协同的时候,厂商为保证对象存储的一致性做了很好的工作,像是Joyent以及他的Manta 存储服务,一旦对象更改将不支持读取旧的内容。你必须等待,但你所读取的内容会是一致的。二:迁移访问企业对存储的诉求有一定的延续性,但其访问的介质不外乎是主机、PC、移动端以及应用,针对不同的访问介质来看,面向对象存储的解决方案也有所不同。然而如果应用软件不支持HTTP下REST API的方式,需要以传统文件服务器协议的方式访问,则需要在面向存储对象前面加一个网关进行协议的转换。没有了文件存储系统中的NFS或CIFS来给应用提供数据,面向对象的存储系统需要替换掉位于磁盘上的原始数据块和应用可以理解的文件之间的这个抽象层。面向对象的系统使用类似REST标准的API或者私有的API来告诉应用如何存储和读取对象标识。总体而言,对于面向对象的存储的操作的本质并不会改变。开源对象存储系统O基本上就是POST,GET ,PUT和 DELETE操作,如果需要上传大量的数据,则需要编写一个脚本就可以实现。三:平台选择基本上有四个选择:1.从当下各种厂商处购买完整功能的对象存储平台。2.购买对象存储软件并将其安装在你选择硬件上(服务器和存储)。3.在选择的文件和块存储整列中安装软件,这个阵列对现有存储增加了对象接口。4.使用网关解决方案连接现有应用到公有云四:使用方式对象存储根本上改变了存储蓝图。它处理和解决了曾经被认为是棘手的存储问题:不间断可扩展性、弹性下降、限制数据持久性、无限技术更新和成本失控。存储专家对其潜在的优势感到兴奋,尤其是他们的绝大多数数据都碰巧是被动的或者是冷数据。对象存储的本地应用程序接口是一个RESTful API。RESTful本质上是HTTP输入和输出,或者是互联网语言。这个语言对于Web浏览器是本地化的,但是对于大多数IT应用并非如此。这也为这个问题提供了一个答案,对RESTful API是一种检验,检测其变化、标准、事实标准以及在本地使用有哪些必须要做的事情,以及有哪些现成的软件可以实现。最佳的方式就是通过RESTful API使用对象存储系统。它是一个本地接口,具备最低延迟和最快的响应时间,能够同大多数的控制。
  • [问题求助] OBS文件上传采用node.js的上传方式报错
    是不是esdk-obs-nodejs的npm包有问题?一直找不到这个JS:node_modules/log4js/lib/clustering.js,在文件夹里找了本地有这个,就是报错vue.runtime.esm.js?2b0e:1888 Error: No such module. (Possibly not yet loaded)    at Object.exports.binding (process.js?4362:17)    at Object.eval (worker.js?bcff:14)    at eval (worker.js:234)    at Object../node_modules/cluster/lib/worker.js (0.js:1023)    at __webpack_require__ (app.js:854)    at fn (app.js:151)    at Object.eval (master.js?bdb0:12)    at eval (master.js:918)    at Object../node_modules/cluster/lib/master.js (0.js:902)    at __webpack_require__ (app.js:854)
  • 微信小程序将音频文件上传至obs中遇到的问题
    欲实现微信小程序录音,并将音频文件上传至obs。在文档中看到说obs文件上传要使用本地文件路径,而小程序保存的录音为http临时文件。直接进行上传发现无法上传(桶中无新增文件),后来尝试上传本地文件,路径为c:/.....,结果也上传失败,请问可能是什么原因呢?下面是代码,我将obs上传部分又单独封装了一个函数,path为桶内的保存路径,event.src即文件路径path = event.bucket + '/' + event.id   obsClient.putObject({       Bucket : path,       Key : event.name,       SourceFile : event.src,      // body: event.body,      },       (err, result) => {        if(err){          console.error('Error-->' + err);   }else{          console.log('Status-->' + result.CommonMsg.Status);   }     })
  • [AI实战营] 使用ModelArts实现花卉图像分类云实验再次顺利完成
    云端实验室太方便了,成套的实验手册,结合现学的知识自主做实验,活学活用效果不错第一次完成用了接近一个小时,第二次出现了部署在线服务,一直在加载85%再次尝试成功了,可能是模型还没构建完成就急着上线服务接着测试也成功了
  • [问题求助] obs 客户端显示问题
    大家好:最近在使用OBS ,我目前的系统是WIN10 x64 安装了OBS Browser+工具,但是安装后OBS 客户端显示不正常,如图已经卸载重新安装过了,结果还是一样,请问有遇到此类问题的么?这个问题该如何处理?
  • [技术干货] OBS API 鉴权实现宝典(中)—POST签名计算
    OBS服务支持基于浏览器的POST上传对象请求,此类请求的签名信息通过表单的方式上传。POST上传对象的流程主要如下:首先,创建一个安全策略,指定请求中需要满足的条件,比如:桶名、对象名前缀;然后,创建一个基于此策略的签名,需要签名的请求表单中必须包含有效的signature和policy;最后,创建一个表单将对象上传到桶中。1、基于浏览器上传的表单中携带签名官网链接:https://support.huaweicloud.com/api-obs/obs_04_0012.html1.1、签名的计算原理和计算方法原理图示计算方法1.构造请求Policy:例如一个最简单的请求Policy如下:Policy = {  "expiration": "2020-12-21T12:00:00.000Z",  "conditions": [    {      "bucket": "obs-test"    },    [      "eq",      "$key",      "post.txt"    ],   ]}2.对请求Policy进行UTF-8编码。3.对第二步的结果进行Base64编码。4.使用SK对第三步的结果进行HMAC-SHA1签名计算。5.对第四步的结果进行Base64编码,得到签名。签名如以下形式(28位长度的BASE64编码的字符串):CVs7GTY6n8Gdhc74Gj+QhpbxtT4=即:StringToSign = Base64( UTF-8-Encoding-Of( policy ) )Signature = Base64( HMAC-SHA1( YourSecretAccessKeyID, StringToSign ) )计算示例例:需要通过浏览器表单上传对象”post.txt”到桶”obs-test”下,同时设置对象ACL为公共读,如何构造请求并计算签名?1、首先构造请求Policy:设置请求过期时间:2020-12-21T12:00:00.000Z桶名:obs-test对象ACL:public-read匹配条件:对象名=post.txt2、构造Policy如下:{  "expiration": "2020-12-21T12:00:00.000Z",  "conditions": [    {      "bucket": "obs-test"    },    {    "x-obs-acl": "public-read"    },    [      "eq",      "$key",      "post.txt"    ],  ]}3、根据签名算法,将Policy进行UTF-8编码后再进行BASE64编码,再进行HMAC-SHA1计算后获得签名结果:odouyqpyXcYlKQz7G1/EaUNfJUE=1.2、签名计算的实现方式以Python计算签名代码为例,供参考:1.  import hashlib  2.  import hmac  3.  import binascii  4.    5.  # 验证信息  6.  SK = '您的secret_access_key_id'  7.    8.  # Policy  9.  canonical_string = '''''{ 10.   "expiration": "2020-12-21T12:00:00.000Z", 11.   "conditions": [ 12.     { 13.       "bucket": "obs-test" 14.     }, 15.     { 16.     "x-obs-acl": "public-read"  17.     }, 18.     [ 19.       "eq", 20.       "$key", 21.       "post.txt" 22.     ], 23.   ] 24. }'''  25.   26. policybase64 = binascii.b2a_base64(canonical_string.encode('utf-8'))  27. policybase64 = policybase64[:-1].decode('UTF-8')  28. # Policy的Base64编码  29. print(policybase64)  30. hashed = hmac.new(SK.encode('UTF-8'), policybase64.encode('UTF-8'), hashlib.sha1)  31. encode_canonical = binascii.b2a_base64(hashed.digest())[:-1].decode('UTF-8')  32. # 签名  33. print(encode_canonical)  说明:1. policy使用json格式,conditions可以支持 { } 和 [ ] 两种方式,{ }中包含表单元素的key和value两项,以冒号分隔;[ ]中包含条件类型、key、value三项,以逗号分隔,元素key之前使用$字符表示变量;2.下表内的字符都必须进行转义:真实字符转义后的字符反斜杠(\)\\美元符号($)\$退格\b换页\f换行\n回车\r水平制表\t垂直制表\v所有Unicode字符\uxxxx 1.3、基于浏览器表单上传的Policy与其他方式的StringToSign的异同基于浏览器表单上传时,匹配条件可以设置为“Starts-With”,即前缀匹配而非精确匹配,因此在上传时适用于更广的场景。【系列文章推荐】:OBS API 鉴权实现宝典(上)—签名计算篇OBS API 鉴权实现宝典(下)—OBS API实战篇
  • [其他问题] 【实战营提问】【创建桶功能】怎么关闭OBS的多AZ啊,选项只有单和多啊,教程说关闭多AZ
    【功能模块】OBS创建桶【操作步骤&问题现象】怎么关闭OBS的多AZ啊,选项只有单和多啊,教程说关闭多AZ【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • h5如何做多文件上传到obs
    https://github.com/huaweicloud/huaweicloud-sdk-browserjs-obs/blob/master/examples/upload-download-sample.html这个例子里面的我实现了,但是有个问题,function getObsClient(){/** Initialize a obs client instance with your account for accessing OBS*/var ak = document.getElementById('ak').value;var sk = document.getElementById('sk').value;var server = document.getElementById('server').value;return new ObsClient({access_key_id: ak,secret_access_key: sk,server : server,timeout : 60 * 5,});}直接在js创建ObsClient,里面的secret_key泄露了,会很不安全吧。请问,大神有其他方案吗?
  • [教程] MLStudio上OBS细粒度权限设置
    https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829092.html在这个链接中有桶策略的详细说明,但是有些地方比较晦涩。一个常见的需求是不同的子账户只允许访问特定的桶。下面就简单说下这种需要怎么设置。(下面示例是允许某一用户访问某个桶,如果需要的是禁止某个用户访问某个桶,只需把“Allow”改为“Deny”即可)1、首先选择需要配置的桶,点击创建桶策略2、其次创建如下策略并保存。3、最后创建如下策略并保存这样就创建好了一个规则,这个桶只能特定用户访问。需要注意的是:第二步和第三步是合在一起才会起作用,所以要成对的配置。另外如果子账户给的权限过大,如上设置可能不起作用,需要提供显式的拒绝策略才能禁止用户访问某一桶(即把“Allow”改为“Deny”)。
  • [问题求助] OBS Android调用求助
    使用的是文档中示例的  implementation 'com.huawei.storage:esdk-obs-android:3.1.3'  在子线程中调用上传,初始可以调用成功,进度回调通过日志可以看到,但过一会就会抛出异常: OBS servcie Error Message. Request Error: javax.net.ssl.SSLException: Write error: ssl=0x7f7a21f280: I/O error during system call, Broken pipe 请问,这个问题是什么引起的?如何解决这个问题? AK SK 不方便说明,但endpoint 为: https://obs.cn-south-1.myhuaweicloud.com
  • [问题求助] OBS对象归档存储要怎么获取桶内到最新上传的那个对象?
    个人有一个思路是列举出桶内所有的对象,然后再获取最后一个对象的对象KEY值,将这个KEY值作为调用获取对象元数据的接口的对象名参数,不知道有没有其他更好的解决方法。用的是NODE.JS
  • [训练管理] 使用modelart时读取OBS桶数据显示找不到路径
    训练作业时出现这个错误,初次接触moedelart,故不是很清楚错在哪里,请各位大佬指教
  • [执行问题] 关于使用ascend云平台无法保存模型到obs桶
    【功能模块】模型保存【操作步骤&问题现象】1、在本地和云端使用同样的代码,云端却无法保存模型到obs桶,具体表现为obs桶中没有出现任何ckpt文件,将ModelCheckpoint方法中的directory改为“./”和“./out”同样无效,train_url的路径为/usr/ex1/out/。【截图信息】train_cifar10(train_url, lr=, momentum=, num_epoch=, wd=):     ds_train = create_cifar(=num_epoch)     ds_eval = create_cifar(=)     net = DenseNet()     loss = nn.loss.SoftmaxCrossEntropyWithLogits(=, =, =)     opt = nn.SGD(net.trainable_params(), =lr, =momentum, =wd)     config_ck = CheckpointConfig(=, =)     ckpoint_cb = ModelCheckpoint(=, =train_url, =config_ck)     loss_cb = LossMonitor(=)     model = Model(net, loss, opt, ={, })     model.train(num_epoch, ds_train, =[ckpoint_cb, loss_cb])     metrics = model.eval(ds_eval)     (, metrics) __name__ == :     argparse     parser = argparse.ArgumentParser()     parser.add_argument(, =, =, =)     parser.add_argument(, =, =, =)     parser.add_argument(, =, =, =)     args, unknown = parser.parse_known_args()     moxing mox     mox.file.copy_parallel(=args.data_url, =)     train_cifar10(args.train_url)非常感谢您的帮助
  • [数据管理] 【OBS产品】【打开、登陆功能】
    win10下载并安装这个包登录界面也是很阻挡登陆选项。。。升级安装之后就空白一片,上官网重新下载安装包,还是这样。。。