阿里云ossimport是什么?

OSS是阿里云对象存储服务(Object Storage Service)的一个简称,它是阿里云提供的海量、安全、低成本、高可靠的云存储服务。
即开即用、无限大空间的存储集群。相较传统建服务器存储而言,OSS在可靠性、安全性、成本和数据处理能力方面都有着突出的优势。使用OSS,您可以通过网络随时存储和调用包括文本、图片和视频等在内的各种非结构化数据文件。
OSS将数据文件以对象/文件(Object)的形式上传到存储空间(Bucket)中。OSS提供的是一个Key-Value键值对形式的对象存储服务。用户可以根据Object的名称(Key)唯一地址获取该Object的内容。

  1. WS&PM(协议接入层):负责接收用户使用RESTful协议发来的请求,进行安全认证。如果认证通过,用户的请求将被转发到Key-Value引擎继续处理。如果认证失败,直接返回错误信息给用户。
  2. KV集群:负责数据结构化处理,即按照Key(对象名称)来查找或存储数据,并支持大规模并发的请求。当协调服务集群变更导致服务被迫改变运行物理位置时,可以快速协调找到接入点。
  3. 存储集群:元数据存储在Master上,Master之间采用**分布式消息一致性协议(Paxos)**保证元数据的一致性,从而实现高效的文件分布式存储和访问。

对象是OSS存储数据的基本单元,也被称为OSS的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一个键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。

对象的生命周期是从上传成功到被删除为止。在整个生命周期内,对象信息不可变更,重复上传同名的对象会覆盖之前的对象。因此,OSS不支持修改文件的部分内容等操作。

存储空间是您用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。您可以设置和修改存储空间属性用来控制访问权限、生命周期等,这些属性设置直接作用于该存储空间内所有对象,因此您可以通过灵活创建不同的存储空间来完成不同的管理功能。

  • 同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有对象都直接隶属于其对应的存储空间。
  • 每个用户可以拥有多个存储空间。
  • 存储空间的名称在OSS范围内必须是全局唯一的,一旦创建之后无法修改名称。
  • 存储空间内部的对象数目没有限制。

Object操作在OSS上具有原子性,操作要么成功要么失败,不会存在有中间状态的Object。

OSS保证用户一旦上传完成之后读到的Object是完整的,OSS不会返回给用户一个部分上传成功的Object。Object操作在OSS上同样具有强一致性,用户一旦收到了一个上传(PUT)成功的响应,该上传的Object就已经立即可读,并且数据的三份副本已经写成功。不存在一种上传的中间状态,即read-after-write却无法读取到数据。对于删除操作也是一样的,用户删除指定的Object成功之后,该Object立即变为不存在。

强一致性方便了用户架构设计,可以使用跟传统存储设备同样的逻辑来使用OSS,修改立即可见,无需考虑最终一致性带来的各种问题。
OSS与文件系统的对比
OSS是一个分布式的对象存储服务,提供的是一个Key-Value对形式的对象存储服务。用户可以根据Object的名称(Key)唯一地获取该Object的内容。虽然用户可以使用类似test1/test.jpg的名字,但是这并不表示用户的Object是保存在test1目录下面的。对于OSS来说,test1/test.jpg仅仅只是一个字符串,和a.jpg这种并没有本质的区别。因此不同名称的Object之间的访问消耗的资源是类似的。

文件系统是一种典型的树状索引结构,一个名为test1/test.jpg的文件,访问过程需要先访问到test1这个目录,然后再在该目录下查找名为test.jpg的文件。因此文件系统可以很轻易地支持文件夹的操作,比如重命名目录、删除目录、移动目录等,因为这些操作仅仅只是针对目录节点的操作。这种组织结构也决定了文件系统访问越深的目录消耗的资源也越大,操作拥有很多文件的目录也会非常慢。

对于OSS来说,可以通过一些操作来模拟类似的功能,但是代价非常昂贵。比如重命名目录,希望将test1目录重命名成test2,那么OSS的实际操作是将所有以test1/开头的Object都重新复制成以test2/开头的Object,这是一个非常消耗资源的操作。因此在使用OSS的时候要尽量避免类似的操作。

OSS保存的Object不支持修改(追加写Object需要调用特定的接口,生成的Object也和正常上传的Object类型上有差别)。用户哪怕是仅仅需要修改一个字节也需要重新上传整个Object。而文件系统的文件支持修改,比如修改指定偏移位置的内容、截断文件尾部等,这些特点也使得文件系统拥有广泛的适用性。但另外一方面,OSS能支持海量的用户并发访问,而文件系统会受限于单个设备的性能。

因此,将OSS映射为文件系统是非常低效的,也是不建议的做法。如果一定要挂载成文件系统的话,建议尽量只做新建文件、删除文件、读取文件这几种操作。使用OSS应该充分发挥其优点,即海量数据处理能力,优先用来存储海量的非结构化数据,比如图片、视频、文档等

我们可以理解为就是一个资源服务器,在这之前我也尝试过Nginx当静态资源服务器,但效果比较一般,为什么选择,只是因为最近刚好公司用到了,所以就接入了,还有其他的比如七牛云,腾讯云等等。

Bucket 就是存储空间,我们的文件放在那里。具体操作如下:

1、点击进入,在 Bucket 列表创建自己的存储空间。

2、填写空间名,选择地域节点等操作。

我们的存储空间创建好了,下一步就是集成到我们的项目当中。

在阿里云的中提供了不同语言SDK示例,可自行参考。

在操作之前,先讲一讲我使用的场景。

在我负责的模块需要提供一个上传文件的服务,从消息队列中去读取数据,然后把数据转为 excel 文件在上传到 oss 中去,并返回一个文件的路径。当然,不只是上传 excel ,任何文件都可以。

首先是 oss 的依赖,我用的是官方文档中提供的版本:

在实际操作过程中,你可以按照自己需求去实现自己的工具类,主要参考OssApi这个类,这里讲讲提供的uploadFileExpireduploadFile方法,其他的可自行查看,都有注释。

1、uploadFileExpired返回的是一个有过期时间的连接,并且是有权限才能访问的,在控制台详情可以看到:

其主要是通过OSSClient的授权方法实现的:


 
 

2、uploadFile返回的是没有过期时间的连接,并且是开放权限的,任何人都可以访问,前提是你需要开启 Bucket权限:

如果你在没有开启的情况下调用该方法,结果可能就是这样:

还有一个需要注意的是,上面每个方法执行完成之后都是把OSSClient给关闭了,即调用了OssClient.shutdown(),相当于连接关闭,所以你不能连续的执行不同方法,除非你在shutdown之前,不然会出现以下情况。

问题分析:这个是连接超时的报错,通常原因是迁移用的设备非ECS实例或不是与OSS同地域的ECS实例,但是配置文件使用了OSS的内网域名。OSS内网域名仅支持同地域ECS实例访问。

问题分析:配置文件里的destDomian配置的域名是Bucket所在地域的Endpoint地址,而不是带Bucket名称的二级域名。例如Bucket在华北2(北京),应填写oss-cn-。详情请参见。

问题分析:该报错可能是以下情况导致。

a.本地机器时间不对,与OSS服务器时间相差15分钟以上,该情况居多。

b.可能是并发太高,尤其是CPU占用率很高,导致并发上传慢。

a.修改本地时间,与OSS服务器一致。

问题分析:这种情况一般是本地防火墙或者iptables等原因导致网络不通。

解决方案:通过ping命令测试迁移服务器到源端和目的端网络是否正常。

a.若网络正常,可检查电脑防火墙和本地的防火墙设备是否有限制,可尝试关闭防火墙测试。

b.若网络异常,排查原因并处理后重试。

问题分析:该问题是因为指定的http列表文件格式不对或内容不符合规范。

a.如果是从其它操作系统上拷过来的文件,Linux系统可以用mac2unix、dos2unix等相关命令转换文件格式;Windows系统可以使用notepad等工具转换格式。

b.如果是列表文件内容的格式不正确,请修改为正确的格式。列表文件内容的格式请参见列表文件。

a.检查srcPrefix是否是作为目录但没有以正斜线(/)结尾。如果是目录,请以正斜线(/)结尾。

b.检查destPrefix是否以正斜线(/)或者反斜线(\)开头。如果是,请删除正斜线(/)或反斜线(\),destPrefix不能以正斜线(/)或反斜线(\)开头。

我要回帖

更多关于 阿里云 oss 的文章

 

随机推荐