如何降低应用访问的负载

  1. 云栖社区>
  2. 博客>
  3. 正文

如何降低应用访问的负载

笑傲江湖lcx 2016-09-04 11:00:49 浏览1626
展开阅读全文

背景

应用访问的负载过高有很多种原因,以常见的Web站点为例,当其中静态文件访问量很大的情况下,就会导致服务器的负载过高;同时静态文件的数量、访问用户的位置以及移动更新包更新频次、并发下载量的情况都会导致下应用访问的负载过高。

与此同时,每个用OSS的用户,都会用到上传,由于是网页上传,其中包括一些APP里面的H5页面,对上传的需求很强烈。很多人采用的做法是用户在浏览器/APP上传到应用服务器,然后应用服务器再把文件上传到OSS,这种做法同样会导致服务器的负载过高的现象。

针对该问题,本文主要从动静分离和Web端直传两个方面介绍如何降低应用访问的负载。

网站文件动静分离

7e20c82933ff0f939cb5d50701e842de050d7fb3

上图是传统的动静不分离网站架构,随着访问量的增长,I/O性能成为其瓶颈,会出现响应慢、卡顿等现象。

5e7843355e32650ee2257fed83f5030041c68759

这是网站动静分离架构图,从图中可以清楚看到利用OSS作为海量文件存储源,静态图片、视频文件、下载包、app更新包等均放在OSS上,同时OSS作为CDN的源站,通过CDN加速分发,用户通过CDN节点就近获得文件。

通过动静分离,所有的静态文件访问全部通过CDN,降低Web服务器负载;此外由于OSS的存储费用仅为ECS磁盘费用的50%,存储费用也降到最低;与此同时相比直接通过OSS访问,除极少额外增加的回源流量外,主要流量使用CDN流量,单价最低只需0.26GB,远远低于OSS直接访问的外网流量单价,尽可能多地降低流量费用。

具体操作步骤

第一步对ECS上的网站程序进行整理,把动态程序部分和静态部分分不同的目录管理起来:

  • 建立Images目录,放置所有网站高清素材图片;
  • 建立Javascript目录,放置所有的JS脚本;
  • 建立Attachment目录,放置所有用户上传的图片和附件。

第二步进入到OSS控制台,点击“CDN加速OSS”。

4d6a1d1250e3fd2a9518d9fee8018ac5b27b6fdf

  • 选择新建Bucket。根据你ECS所在的区域选择Bucket所在区域,权限选择“公共读”,Bucket名称与ECS上新建的目录的名称对应,比如”acar-image-bucket“,选择下一步;
  • 输入“image.acar.com”作为您网站高清素材图片的加速域名后,点击下一步;
  • 选择默认的自动添加阿里云解析,点击完成。

第三步点击“立即上传文件,体验加速效果”。

  • 把您在第一步中建立在ECS上的Images目录下的所有图片文件上传到这里(acar-image-bucket下),您可以使用OSS客户端工具更加方便灵活的完成图片的上传(OSS客户端工具Windwos版本);
  • 点击列表中已经上传文件的“获取地址”,您就能获取到该文件的CDN加速的访问地址,通常为“您输入的加速域名+'/'+'文件名'”的格式;
  • 逐一完成图片文件的上传。

8a3fd0a5acc0cac4a556ed2972779032692526f7
3242e97446c1f8860acc6d20aa62b791d51bc516
d70b20a883fe7637289fb0e8d48648aa7be4b8ae

第四步按照前三步的示意,把其他两个文件也通过“CDN加速OSS”的方式上传,分别建立“acar-js-bucket”和"acar-csimages-bucket"两个使用CDN加速的OSSbucket

第五步在原本ECS系统中,找到原本访问静态文件的代码,把访问URL修改为加速访问的地址。

大功告成,以后用户访问您的网站的静态文件就全部通过OSS+CDN的方式访问,不再占用您ECS的资源

需要注意的是,如果您想把用户上传的文件自动同步到“acar-csimages-bucket”中,您可以参考OSS相关SDK和API的PutObjcet部分,实现代码级别自动上传。

Web端直传

数据直传到OSS,不走应用服务器,服务器的负载将会大大降低;同时OSS是采用BGP带宽,能保证各地各运营商的速度;此外,因为OSS上传流量是免费的,所以成本也会大大降低。

下文通过三个例子介绍如何在Html表单提交直传OSS:

第一个例子:讲解签名在客户端(Javascript)完成,然后直接通过表单上传到OSS, 注意这个例子有安全风险,推荐使用第二个例子和第三个例子;

第二个例子:讲解签名在服务端(php)完成,然后直接通过表单上传到OSS;

第三个例子:讲解签名在服务端(php)完成, 并且服务端面设置了上传后回调。然后直接通过表单上传到OSS,OSS回调完应用服务器再返回给用。

相关示例链接:

基础篇:客户端用JS直接签名,然后上传到OSS

进阶篇:应用服务器php返回签名

终级篇--应用服务器php返回签名及采用上传回调

网友评论

登录后评论
0/500
评论
笑傲江湖lcx
+ 关注