【OSS最佳实践】WEB站点中如何应用OSS产品

【OSS最佳实践】WEB站点中如何应用OSS产品http://www.bieryun.com/1194.html

OSS提供了海量、安全、低成本、高可靠的云存储服务,用户可以通过SDK、API、OSS相关工具等在WEB端应用集成OSS。OSS的优势在于:OSS服务器性能较好,OSS单个bucket存储空间大小不限制,OSS单个bucket出入带宽限制5Gb以上(故大部分情况下,上传下载速度是取决于客户端的带宽)。

WEB站点应用OSS分为:源静态资源上传至OSS、WEB端集成OSS实现资源上传、WEB端应用OSS资源;

1. 源数据上传至OSS

将WEB站点中的静态资源上传至OSS,上传资源可以通过SDK、API或者相关工具进行上传;
1) SDK/API 上传方式(需要代码基础):在web 服务器上调用sdk 或者api 读取站点目录下的静态资源,一个个调用putobject接口进行上传资源。
2) OSSimport迁移(推荐):在站点服务器上部署OSSimport工具进行迁移数据,OSSimport支持增量数据迁移,并且配置简单方便,但是需要JAVA环境;
3)OSSfs: 安装OSSfs,挂载待上传的bucket,通过命令cp 资源到bucket中,缺陷为OSSfs挂载bucket的稳定性需要客户自己保障,并且OSSfs挂载bucket的性能由于走的是http协议,性能相对不理想;
4) 第三方工具:客户也可以在云市场上寻找一些第三方工具进行数据迁移至OSS;

参考链接如下:
SDK:SDK
API: API
OSSimport配置文件说明:OSSimport配置
OSSimport安装看:OSSimport安装
OSSfs: OSSfs

2.WEB端集成OSS,实现资源上传

WEB集成OSS实现资源上传,可以通过如下几种方式进行:WEB端集成OSS SDK/API实现资源直传至OSS、WEB端上传资源至服务器端,服务器端集成OSS SDK上传资源至OSS、通过OSSftp工具上传资源至OSS等;

1) WEB端集成OSS的SDK(推荐)

WEB端集成OSS的SDK实现资源直传至OSS,并且服务器端联动更新站点的应用内容。WEB端可以集成OSSWEB直传回调demo、JS SDK、自己实现JS API封装来实现直传资源至OSS;

I) OSS WEB直传回调demo(推荐)

改造Web 站点上传资源部分的代码,集成web直传回调demo,web端直传资源至OSS,OSS接到对应的上传请求,存储数据,并且将文件相关的信息回调给web 服务器,web 服务器记录相关的文件信息(可以是数据库记录对应上传的uid,bucketname,objectname,endpoint等信息)联动更新web 站点,显示对应object的链接;web 直传回调的业务逻辑示例如下:

缺陷:采用post 请求上传资源,目前没有分块上传的demo,得客户自己二次开发实现下;

II) JS SDK

改造Web 站点上传资源部分的代码,集成OSS JS SDK,通过JS SDK上传资源至OSS;业务逻辑可以为:客户端发起上传请求,web 端请求web 服务器获取得到对应的临时ak,sk,token/子账户的ak,sk ,进行初始化client,调用put object接口进行上传资源;

缺陷:如果调用子账户或者主账户ak,sk进行初始化client,账户很可能会存在安全风险;并且目前js sdk 不支持回调,这样的方式不能很好的实现业务服务器联动;

III) JS API封装

改造Web 站点上传资源部分的代码,通过JS封装OSS上传object的API接口实现资源直传至OSS,封装api 构造上传object的请求,需要获取签名,获取签名可以请求业务服务器端获取,保证access key id安全性;同时JS 封装API可以实现下回调逻辑,将上传资源的相关信息回调给业务服务器,业务服务器实现相关联动;

缺陷:需要一定开发基础,并且有一定开发工作量

2) 服务器端集成OSSSDK

原有的Web端上传逻辑不变,上传资源至服务器端,但服务器端增加上传逻辑,调用OSSSDK上传对应的资源至OSS。
缺陷:上传通过Web服务器中转,消耗了服务器的性能及带宽,并未充分利用OSS的优势,服务器端的性能及带宽瓶颈会成功业务瓶颈;

3) OSSftp实现资源上传至OSS

在一台有公网的服务器上部署OSSftpserver,测试通过使用FileZilla客户端去连接FTP server成功后,对应的站点参考OSSftp文档进行FTP配置,实现资源上传至OSS。
缺陷:OSSftp目前仅支持Discuz论坛、phpwind论坛、Wordpress等个人网站的应用,业务量较大的站点不推荐使用该方式集成;

参考链接如下:
OSSftp安装部署
Discuz配置
phpwind论坛配置
Wordpress配置

3. WEB端应用OSS资源

Web端应用OSS资源可以通过如下几种方式进行:Web应用的静态资源url链接直接替换为OSS object的url链接、Web端的页面引用的链接不进行任何改造,通过反向代理配置,静态资源请求定位到OSS上、Web端的页面引用不进行任何改造,直接ossfs挂载使用OSS资源等;

1) 直接应用objecturl链接

客户可以将站点中的全部静态资源链接替换为OSS中对应object的url链接。

I) 为bucket绑定自定义域名并且开启cdn加速(可选,但是推荐),参考:cdn加速oss

II) 更新WEB站点中静态资源的URL链接
将WEB站点中的静态资源url链接全部替换为OSS object的URL链接;OSSobjecturl链接获取:object公共读,那么直接通过bucket域名/objectname 即可拼接得到url;object私有,那么客户的web 站点得集成OSS的SDK或者API动态更新对应资源的url链接:签名URL获取 ;

缺陷:OSS目前还不支持安全防护功能,如果存在恶意客户刷取客户静态资源,可能会产生大流量费用,但是OSS结合阿里云安全产品可以进行安全防护,详细看OSS异常流量排查及防护;

2) WEB端反向代理应用OSS资源

客户可以将站点中静态资源对应的域名绑定bucket,将对应的静态资源目录反向代理到OSS上,访问oss的资源;

I) 为bucket绑定静态资源域名,静态域名仍然解析至站点服务器端,bucket绑定域名;

II) 在web 站点服务器上进行反向代理配置,将静态目录反向代理到oss上,应用OSS资源,如果对应的web 站点服务器是ECS,并且与OSS同区域,那么反向代理的OSS域名可以是内网域名。

缺陷:Web端访问静态资源的速度及并发数限制取决于代理服务器的性能、带宽及nginx服务器的并发数限制;该配置用户可以在代理服务器上做相关的安全策略,可以规避一定的恶意客户刷流量行为。

3) WEB服务器通过OSSfs挂载应用OSS资源(不推荐)

客户Web端不做任何的改造,Web服务器直接通过ossfs挂载bucket,Web访问的资源直接访问挂载目录的资源;

缺陷:ossfs挂载资源性能相对较差,并且ossfs 挂载bucket的稳定性客户得业务端设置对应的监控保证挂载正常,故不推荐使用。

原文地址:http://blog.51cto.com/13602422/2071175

时间: 2024-10-29 13:45:13

【OSS最佳实践】WEB站点中如何应用OSS产品的相关文章

如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]

如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[About Layout Pages] 很多网站有些内容需要显示在各个页面中,比如Header,Footer或者告诉用户已经登录的部分.ASP.NET允许你创建一个单独的文件来包含文本.标签和代码的内容块,从而搭建一个风格整齐的网站.接下来你就可以将这个内容块插入到任何你想要让它展示的页面中.采用这种方法

jQuery最佳实践(不断更新中...)

1. 处理cnd失效 <script type="text/javascript" src="http://xxx.com/jquery.min.js "></script> <script type="text/javascript"> if(typeof jQuery == 'undefined'){ document.write("<script type='text/javascript

[Celery]Celery 最佳实践

orangleliu 翻译 原文点击查看 如果你的工作和 Django 相关, 并且有时候需要执行一些长时间的后台任务.可能你已经使用了某种任务队列,Celery就是Python(和Django)世界中时下解决类似问题最受欢迎的项目. 当在某些项目使用Celery作为任务队列之后,我总结了一些最佳实践,决定把它们些下来.然而,这里也有一些对自己应该做的却没做的反思,还有一些celery提供但是没有充分利用的功能. No.1 不要使用关系型数据库来作为AMQP的代理 让我来解释下我为什么觉得这是错

构建高可用web站点(五)

数据库是web站点中重要的应用,放在第四篇是因为之前来不及总结的原因,在之前的文章我看到了无论是Mysql或者是nosql的一些缓存和分布式一些比较扩展性的功能.但是对于单个数据库来说,它的优化也是我们学习的重点.现在我就来简单说说我自己总结的一些东西. 关于Mysql:Mysql是web站点中应用很广泛的关系型数据库.这一块的东西也是有很多值得学习的东西,介绍的书籍也很多,比如<高性能Mysql><Mysql性能调优和架构设计><Mysql技术内幕:InnoDB引擎>

Hadoop MapReduce开发最佳实践(上篇)

body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI",Tahoma,Helvetica,Sans-Serif,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5;}

【译】JavaScript 创建对象: 方法一览与最佳实践

本文是我在众成翻译上认领并翻译的:JavaScript 创建对象: 方法一览与最佳实践 在JavaScript中“创建对象”是一个复杂的话题.这门语言提供了很多种创建对象的方式,不论新手还是老手都可能对此感到无所适从,不知道应该选择哪一种.不过,尽管创建对象的方法很多,看上去语法差异也很大,但实际上它们的相似性可能比你所以为的要多.本文将带领你踏上一段梳理对象创建方法的旅程,为你揭示不同方法之间的依赖与递进关系. 对象字面量 我们的第一站毫无疑问就是创建对象最简单的方法,对象字面量.JavaSc

JavaScript - undefined与null的区分及最佳实践

主要参考 <JavaScript高级程序设计> ECMAScript中的六种数据类型 ECMAScript中包含六种数据类型: Undefined Null Boolean Number String Object 其中,Undefined类型和Null类型是唯二的仅有一个值的数据类型 运算符typeof 通过typeof运算符可能返回如下六种可能的字符串: "undefined" "boolean" "string" "n

提高 Web 站点性能的最佳实践

本文内容 提高 Web 站点性能的最佳实践 最大限度减少 HTTP 请求 使用内容分发网络(CDN) 添加 Expires 或 Cache – Control 头 Gzip 组件 CSS 放在页面顶部 JavaScript 放在页面底部 避免 CSS 表达式 使用外部 JavaScript 和 CSS 减少 DNS 查询 精简 JavaScript 和 CSS 避免重定向 删除重复的脚本 配置 ETags 使得 Ajax 可缓存 尽早强制地发送缓冲给客户端 用 GET 发送 Ajax 请求 延迟

移动端WEB前端开发最佳实践

移动端WEB前端开发最佳实践 Safari,Android Browser,Chrome都是以WebKit为核心的 移动设备和PC之间的页面现实存在差异(Safari中定义了viewport) 在移动设备和桌面端WEB前端开发中,事件绑定存在差异(移动触点) 页面控件设计存差异(点触不灵敏,虚拟键盘弹出框) 移动设备的网络带宽普遍比PC慢,移动页面要设置更简洁 PC页面兼容移动设备 使用流式布局 借助CSS Media queries(媒体查询)技术 使用合适的图片显示兼容方案 保持页面简洁,不