如何用云存储和CDN加速网站图片视频、阿里云OSS的使用(转)

总有人说阿里云主机带宽小,那只是由于你还停留在单机架构上。 php

阿里的架构设计,云主机主要用来跑程序的,附件的存储和访问主要靠OSS。 python

有人又会说了,OSS按存储费+流量双重计费伤不起,只是你不知道OSS有免费额度,另外能够经过CDN来大幅节约流量,甚至能够反代回云主机实现内网免流量。长远来说能节省一大笔费用。 vim

 

 

 

“无图无真相,有视频更好”。通常来讲,网络用户都喜欢图片和视频,而不喜欢读干巴巴的文字。这看似单纯的意愿,却让网站的开发者和维护人员叫苦不 迭——图片、视频等内容占用了一个网站的不少存储、带宽资源。是时候把图片、视频迁移到云存储,来释放被压得喘不过气的服务器和带宽了!浏览器

 

下面以一个网站的图片存储为例,来逐步了解如何使用开放存储服务(Open Storage Service,简称OSS)。缓存

 

开放存储服务安全

 

要使用OSS,须要先在http://oss.aliyun.com网站上注册,注册成功后,便可在网站上的OSS管理中心建立bucket,上传、下载本身的object。服务器

 

bucket是用户数据的命名空间,例如图片能够放到一个bucket中,视频放到另一个bucket中。一个bucket存储的总数据量和文件 个数都是无限制的。存储在bucket中的每一个文件,称之为object。存储在object中的数据能够是任意内容,OSS不会去处理object中的 数据。网络

 

对于每一个bucket,OSS允许设置三种访问权限,即私有读写(private)、公开读私有写(public-read)、公开读写 (public-read-write)。对于私有读写和私有写的权限,OSS使用API密钥对(AccessID/AccessKey)来保证你的数据 只能被你本身安全访问,因此千万不要向任何人泄露你的安全加密对。API密钥对能够从OSS的管理中心获取到,如图1所示。架构

 

20140915115027

 

如图1所示运维

 

初阶:使用命令行工具

 

对于开发人员来讲,使用命令行工具能够更容易地操做OSS。命令行工具随Python SDK包一块儿发布,从开放存储主页http://oss.aliyun.com能够下载到。

 

安装好Python SDK包后(安装指南参考主页的SDK使用向导),首先用osscmd来配置你的安全加密对(如下以Linux环境为例,Windows用户须要用python path_to_osscmd来指定osscmd的路径):

 

$ osscmd config –id=AccessID –key=AccessKey

 

配置完便可开始建立一个bucket,使用命令行工具键入以下命令建立一个叫作myimage的bucket,建立完调用osscmd的ls命令来列出已经有的bucket:

 

$ osscmd createbucket myimage

 

$ osscmd ls

 

因为bucket名字是全局惟一的,所以你建立的bucket可能和已存在的bucket冲突。建议使用公司的网址做为前缀来建立bucket,如 com-abc-img。默认状况下,osscmd建立的bucket权限是private。对于Web图片访问,能够设置bucket的权限为 public-read以将存储在OSS中的图片直接嵌入网页。可使用osscmd的setacl命令来设置bucket权限为public- read:

 

$ osscmd setacl myimage –acl=public-read

 

接下来,上传一个图片到myimage中。为了使浏览器正确解析图片,设置它的类型为图片(image/jpg):

 

$ osscmd put –content-type=image/jpg /path/to/top.jpg oss://myimage/

 

这样就成功地将图片文件top.jpg存入到了myimage中。这个文件的URL地址是http://storage.aliyun.com /myimage/top.jpg。对这个URL:域名地址是OSS的服务地址htpp://storage.aliyun.com,myimage是 bucket的名字,接下来就是刚刚上传的图片名。能够将这个URL直接嵌入到HTML页面中的img元素中:

 

<img src=”http://storage.aliyun.com/myimage/top.jpg” alt=”top image”>

 

这里须要提示的是:在使用osscmd的put命令时加入-p参数,在上传完文件后,会打印出URL。

 

直接键入osscmd,不加参数便可输出所有支持的命令。

 

进阶:使用SDK经过程序来操做OSS

 

OSS提供了Python、PHP、Java、C、C#五种语言的SDK包,若是以为直接调用OSS的REST API麻烦的话,可使用官方提供的可靠SDK。

 

咱们选择用时下流行的Python语言来操做OSS。上一节安装完Python SDK后,咱们已经不须要更多的配置了。打开文本编辑器或者vim,你用EMACS?佩服你,是个牛人!

 

下面代码的做用是打印出本身的全部bucket列表:

 

接下来,用SDK向刚刚建立的myimages中写入网页的导航图片nav.jpg。代码以下:

 

 

若是没有报错的话,文件已经上传成功了。可使用osscmd的ls命令来查看这个文件是否已经存在:

 

$ osscmd ls oss://myimages/

 

看到nav.jpg了吗?还能够用osscmd的meta命令来查看nav.jpg的属性:

 

$ osscmd meta oss://myimages/nav.jpg

 

输出中的第二列是nav.jpg的etag(即md5值)。回到SDK,接着再用这些代码继续传一些文件,而后用SDK来查看有哪些文件存在。

 

继续写下面的代码就能够列出myimages中的全部文件:

 

网站大量的图片,须要使用文件夹的方式来组织。在OSS里如何创建文件夹呢?很是简单,只须要在文件名以前加上文件夹名,OSS会自动为你建立出文件夹。使用osscmd来上传文件到myimages中的2012这个目录,而且用ls命令列出:

 

$ osscmd put /path/to/sidebar.jpg oss://myimages/2012/

 

$ osscmd ls oss://myimages/2012/

 

而使用SDK的代码以下:

 

用代码列出2012目录下的文件:

 

 

高阶:安全签名的URL和自定义header

 

对于有些设置为private的bucket,有时须要允许其中的某个文件可以被公开访问,但又不但愿把bucket的权限设置为public-read而致使其余数据有泄露的危险。对URL进行签名可以有效地解决这个问题。使用osscmd对一个文件进行签名:

 

$ osscmd signurl oss://myimages/2012/sidebar.jpg –timeout=600

 

命令最后的timeout参数的含义是生成的连接在600秒内有效,超过600秒就不可访问。使用SDK来生成URL:

 


对于某些网站,若是要防止盗链(或防止搜索引擎爬虫致使的网站流量飙升),可使用生成的URL嵌入页面,生成URL的过程不须要和OSS进行交换。

 

若是想在读取文件时,OSS支持返回一些自定义的响应头(response header),须要在上传这个文件时就设置好。目前,除了前面介绍的Content-Type之外,OSS还支持设置以下几种经常使用的HTTP响应 头:Expires、Cache-Control、Content-Disposition和Content-Encoding。这些Header的具体 含义,能够参考RFC 2616标准。使用API来设置这些响应头的方法以下:

 

经济、无需运维的云存储

 

以上介绍了OSS的基本功能,与传统的存储如NAS等解决方案相比,OSS更经济,而且为用户完全解决了繁杂的系统平常运维、备份等工做。

 

传统存储系统随着业务规模的增加,必须不断地预先扩容,同时还要对存储系统中的数据不断备份,以面对可能忽然发生的硬件故障。而使用OSS,用户上 传的数据自动会有多份拷贝冗余,数据安全性达到99.99999999%。OSS在维护用户数据高可靠性的同时,也保障了服务的高可用性,承诺最低 99.9%的可用性,全部繁杂的存储备份和硬件故障再也不是用户的问题。

 

在网络方面,OSS的网络响应速度很是具备优点,保证了全国绝大多数地区的良好访问体验。

 

但当用户网站的访问量很是大,须要服务全国各地用户,特别是部分静态图片成为访问热点时,使用CDN服务,可以更快地将数据传递到终端用户,而且网络流量的开销也更为经济。接下来,让咱们了解一下阿里云CDN的状况。

 

使用CDN加速内容加载的速度

 

阿里云CDN服务是一个遍及全国的分布式缓存系统,可以将网站文件(如图片或JavaScript代码文件)缓存到全国多个城市机房中的服务器上,当一个用户访问你的网站时,会就近到靠近TA的城市的服务器上获取数据,这样最终用户访问你的服务速度会很是快。

 

阿里云CDN服务在全国部署超过100个节点,能提供给用户优良的网络加速效果。当网站业务忽然爆发增加时,无需手忙脚乱地扩容网络带宽,使用 CDN服务便可轻松应对。和OSS服务同样,使用CDN,须要先在aliyun.com网站上开通CDN服务。开通后,须要在网站上的管理中心建立你的 distribution(即分发频道),每一个distribution由两个必须的部分组成:distribution ID和源站地址。

 

举例来讲,须要对刚刚存储在OSS中的myimages这个bucket中的数据进行加速,那么源站地址即为 http://storage.aliyun.com,CDN服务会自动为用户建立一个distribution ID,服务建立完成后,便可使用http://distributionID.aliyuncdn.com/myimages /someimage.jpg来访问原来存储在myimage这个bucket中的someimage.jpg文件。若是不想使用阿里云CDN生成的域 名,那么能够将本身网站的二级域名,如cdn.abc.com,加入一个CNAME记录到distributionID.aliyuncdn.com。

 

建立distribution须要在阿里云网站的CDN管理页面操做。而当 distribution建立好以后,便可使用SDK来对distribution进行操做,代码很是相似OSS的使用方法,接下来的代码列出了用户的 distribution列表,而且将其中一个ID为myID的distribution中的一张图片从CDN缓存中删除。

 

因而可知,使用阿里云OSS和CDN,能够简单、经济地解决服务的存储和网络问题,毕竟,大多数网站或应用的存储和网络带宽多半是被图片或视频消耗掉的。

 

从整个业界来看,最近这样的面向我的用户的云存储如国外的DropBox和Box.net很是受欢迎。很是期待你们能在阿里云服务如OSS平台上开发出这么棒的应用!

相关文章
相关标签/搜索