如何用云存储和CDN加速网站图片视频、阿里云OSS的使用(转)
总有人说阿里云主机带宽小,那只是因为你还停留在单机架构上。
阿里的架构设计,云主机主要用来跑程序的,附件的存储和访问主要靠OSS。
有人又会说了,OSS按存储费+流量双重计费伤不起,只是你不知道OSS有免费额度,另外可以通过CDN来大幅节约流量,甚至可以反代回云主机实现内网免流量。长远来讲能节省一大笔费用。
“无图无真相,有视频更好”。一般来说,网络用户都喜欢图片和视频,而不喜欢读干巴巴的文字。这看似单纯的意愿,却让网站的开发者和维护人员叫苦不 迭——图片、视频等内容占用了一个网站的很多存储、带宽资源。是时候把图片、视频迁移到云存储,来释放被压得喘不过气的服务器和带宽了!
下面以一个网站的图片存储为例,来逐步了解如何使用开放存储服务(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。命令行工具随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平台上开发出这么棒的应用!
如何用云存储和CDN加速网站图片视频、阿里云OSS的使用(转)的更多相关文章
- 微信小程序云开发-云存储-上传文件(图片/视频)到云存储 精简代码
说明 图片/视频这类文件是从客户端会话选择文件. 一.wxml文件添加if切换显示 <!--上传文件到云存储--> <button bindtap="chooseImg&q ...
- 国内外免费对象存储和CDN加速额度
标题: 国内外免费对象存储和CDN加速额度 作者: 梦幻之心星 sky-seeker@qq.com 标签: [#免费,#对象存储,#CDN] 日期: 2022-01-29 国内对象存储和CDN加速 七 ...
- 免费网站监控服务阿里云监控,DNSPod监控,监控宝,360云监控使用对比
网站会因为各种原因而导致宕机,具体表现为服务器没有响应,用户打不开网页,域名解析出错,搜索引擎抓取页面失败,返回各种HTTP错误代码.网站宕机可能带来搜索引擎的惩罚,网站服务器不稳定与百度关系文章中就 ...
- 2019 GNTC 阿里云参会分享:开放、弹性的阿里云网络NFV平台
作为全球规模最大的网络技术盛会之一,GNTC全球网络技术大会是网络技术发展的重要风向标,包含战略规划.产业方向.技术趋势.应用创新等皆汇集于此.而作为云服务商代表,阿里云再度受邀以顶级钻石合作伙伴之名 ...
- 真正云原生的智能运维体系,阿里云发布ECS自动化运维套件
云计算的发展,推动了自动化运维.DevOps.AIOps 等趋势的兴起,在业务快速变化的今天,企业希望通过一套自动化运维的专家系统提高运维效率,为业务提供支撑. 传统的方式下,打造一套成熟的 DevO ...
- CDNJS:使用JavaScript CDN加速网站载入速度
先介绍一下: 内容传递网络(CDN)或者叫内容分发网络,他的作用是给不同区域的访客以其最快的网速.比如,你的网站是开在美国的,但很多访客来自中国,无疑他们会觉得速度很慢,那么,怎么为他们提速呢?简单来 ...
- 大型网站架构演化(六)——使用反向代理和CDN加速网站响应
随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大.有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开.为了提供更 ...
- 2018-2019年中国CDN市场发展报告:阿里云成为中国CDN市场的领军者
近日,权威ICT市场咨询机构计世资讯(CCW Research)发布<2018-2019年中国CDN市场发展报告>,报告显示,当前,随着新型信息技术在中国不断应用,以及互联网化新业务的快速 ...
- 将网站发布到阿里云的Linux服务器上(简述)
这里以idea的springboot项目为例(打成jar包) 这里去阿里云购买服务器的过程就不说了,自行百度 还有这篇只是简述,因为把一个项目部署到服务器要做的事情还是不少的,然后没学过Linux的建 ...
随机推荐
- linux使用fdisk命令操作硬盘
知识点: MBR:Master Boot Record 主引导记录 在硬盘0柱面 0磁头的第一个扇区,占512字节(3部分 主引导程序 446字节,硬盘分区表DPT[disk partion tabl ...
- rocketmq发送消息代码
DefaultMQProducer defaultMQProducer = new DefaultMQProducer(); defaultMQProducer.setProducerGroup(Co ...
- SGDMA-----Scatter-gather DMA
Scatter-gather DMA 使用一个链表描述物理上不连续的存储空间,然后把链表首地址告诉DMA master.DMA master在传输完一块物理连续的数据后,不用发起中断,而是根据链表来传 ...
- DatabaseFactory.CreateDatabase 方法操作数据库
using Microsoft.Practices.EnterpriseLibrary.Data;using Microsoft.Practices.EnterpriseLibrary.Data.Sq ...
- Django学习之模板标签和变量
safe过滤器和{% autoescape %}标签 首先看这样一个例子: views.py中: c = '<h3>更上一层楼</h3>' render(request,'te ...
- java - day14 - InnerClass
内部类使用 package com.InnerClass; public class Mama { String name; Baby baby; Mama(String name){ this.na ...
- Netbeans取消CTRL+\才能代码提示的方法
更好的方法: ------------------------------------------------------------ 边打字边按CTRL+\进行代码提示的方法我TM也是醉了 简而言之 ...
- iOS开发正则表达式的学习
正则表达式笔记 每天的一小步,知道我在不断进步,这就是我每天的小目标. 这是我的第一篇博客,在工作之余,我会努力地留下些许脚印. 我是一名iOS开发者,对于iOS我仅仅只是一个菜鸟,愿意在此处留下我的 ...
- C# WEB 不显示目录结构
<system.webServer> <directoryBrowse enabled="false" /> </system.webServer&g ...
- go开启多进程——拆分多个进程同时处理(分而治之)
使用了goroutine实现了多线程,使用chan来控制多线程. runtime.GOMAXPROCS(3)来设置最大的原生线程. runtime.Gosched() 显式地让出CPU时间给其他gor ...