用云存储和CDN轻松搞定网站图片

标签: 云计算 凌云 | 发表时间:2012-02-06 16:56 | 作者:baiyuzhong
出处:http://www.programmer.com.cn

文 / 倪浩

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

下面以一个网站的图片存储为例,来逐步了解如何使用开放存储服务(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所示。

图1 OSS管理中心

初阶:使用命令行工具

对于开发人员来说,使用命令行工具可以更容易地操作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平台上开发出这么棒的应用!

本文选自《凌云》杂志第1期,更多精彩内容敬请关注《程序员》2012年02期杂志

《程序员》2012年杂志订阅送好礼活动火热进行中

 

 

相关 [云存储 cdn 网站] 推荐:

用云存储和CDN轻松搞定网站图片

- - 技术改变世界 创新驱动中国 - 《程序员》官网
“无图无真相,有视频更好”. 一般来说,网络用户都喜欢图片和视频,而不喜欢读干巴巴的文字. 这看似单纯的意愿,却让网站的开发者和维护人员叫苦不迭——图片、视频等内容占用了一个网站的很多存储、带宽资源. 是时候把图片、视频迁移到云存储,来释放被压得喘不过气的服务器和带宽了. 下面以一个网站的图片存储为例,来逐步了解如何使用开放存储服务(Open Storage Service,简称OSS).

Webluker:为中小网站提供轻量级CDN 加速服务

- 午夜瞎想 - 36氪
对于任何网站来说,访问速度都是一个非常重要的参数. 如果你的网站加载了很久还是没有打开,那么一部分“不耐心”的用户就可能会离去了. 除了通过提升服务器性能之外,使用CDN 其实是一个提升网站访问速度的便捷方式. 不过对于中小网站来说,类似ChinaCache 的大型CDN 使用起来门槛非常的高,有没有一个轻量级容易使用的CDN 服务呢.

云存储在C2C网站的实际应用—详解TFS

- Caleb - 云存储技术博客:光头老蒋(云存储技术,虚拟化,IP存储, 数据库容灾等)
分布式文件系统在电子交易网站中会有广泛的用途,例如淘宝网,现在的交易额已经超过了600亿/每天,这是一个什么概念,香港一天的消费品市场也就600亿,也就是说一个淘宝已经超过香港了,而要达到这么大的交易量,交易的商业是上百亿件的,这样对商品图片的访问量就会很大. 日常照片分享往往集中在几个有限的亲朋好友之间,访问量不会特别高,而淘宝网商铺中的商品照片,尤其是热门商品,图片的访问流量其实是非常大的.

网络视频技术问答(11):CDN如何为视频网站服务?

- - 钛媒体TMTpost
CDN是Content delivery network的缩写,即内容分发网络,它具有下图所示的结构. 而随着网站规模的扩大,自建CDN也是一种选择. 问:CDN如何为视频网站服务. 答:CDN是Content delivery network的缩写,即内容分发网络. 如上图所示,CDN由两种服务器组成:.

天猫浏览型应用的CDN静态化架构演变(大型网站架构篇)(转)

- - 企业架构 - ITeye博客
转自:http://www.iteye.com/news/28732-CDN-Architecture-Tmall. 在天猫双11活动中,商品详情、店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击. 随着历年来双11流量的大幅增加,每年这些浏览型系统都要面临容量评估、硬件扩容、性能优化等各类技术挑战.

Google宣布Google CDN

- way - Solidot
Google宣布了最新的帮助加快互联网速度的工具Page Speed Service,加快静态网页的载入速度,不支持动态网页. 在开发者注册该服务之后,可将网站的DNS入口记录指向Google,然后Page Speed Service从服务器上抓取内容,采用最佳的Web性能方案重写网页,通过Google在全球部署的服务器将内容展示给终端用户,加快网页载入速度.

金山面试CDN

- - CSDN博客互联网推荐文章
今天去金山网络面试的时候,被问到 性能优化,我说了几个,最后说到了 CDN,我说要尽量把静态的内容放置到CDN,但是为什么呢. 面试官说既然你说到CDN,你就说说它的原理. 按我个人理解来说它是遵循就近原则,给用户找到最近的服务器来提供用户的静态内容,比如CSS文件、图像等,来提高用户访问网站的响应速度.

CDN缓存策略

- - 开心平淡对待每一天。热爱生活
   CDN这个东西,当然是个好东西. 所以看到有FAQ就理所当然的复制下来,其实,最近我突然想到一件事情,中国的地区域名还有一个很有意思的地域域名,那就是js.cn,所以,我悄悄的申请了两个域名,cache.js.cn和cdn.js.cn,就是想用来做这种CDN转发,当然,只是简单的. 我最初的想法是(有一小部分),如果我的服务器里有N多人装了DZ论坛,那么这些JS和CSS其实都是共用的.

CDN 工作原理

- - 互联网 - ITeye博客
1.CDN的实现基础是通过将DNS的域名设置为CNAME(就是指向另一个域名,但这个域名也是有A记录的(就是域名对应IP)). 2.CNAME的作用就是要求浏览器发送域名到CNAME这个域名的服务器去解析得到域名的IP,就是本地DNS不作IP解析,而由CNAME指定的服务器去解析. 3.CNAME指定的服务器去解析的IP地址是CDN的全局负载均衡设备IP.