【原创】关于PHP实现"文件下载"功能心得体会

blogdaren 2015-07-30 2评论 2461人次

问题背景:

1、场景:用户需要下载一种业务协议

2、格式:PDF

3、效果图:

33.png44.png


考虑到的关键点:

1、架构

首先我们不是下载网站,即使如此,下载相对于我们的核心业务来说依然会消耗不菲的带宽,同时考虑到下载对WEB业务的影响,所以决定剥离下载功能,即下载资源独立放在一台服务器上,核心业务独立在一个WEB集群,于是就是有子域名的诞生比如:ziyuan.blogdaren.com

2、性能

理想的模型是集中在后端生产需要下载的文件,然后用户在前端直接下载就好了,不过考虑到并非用户每个用户都会下载,其实只有少数用户会去下载, 所以在后端统一生产文件不大合理 浪费存储空间以及CPU号内存资源 所以我的策略是采用了前端下载时触发一个下载事件,后端准实时处理的异步模型,这个正是上面效果图的原理体现

3、安全

(1) 游客模式 或 VIP模式下载?

(2) 基于事件模型就有配套的内存NOSQL,那内存稀有,为防止内存泄漏以及最大并发下载量【这里的最大并发下载量是根据自己的硬件以及下载业务量计算出来的】,于是计数器闪亮登场。

4、资源利用率

(1)在上述效果图的第二步其实包含了两个过程: 先判定文件是否存在,不存在的话在后端默默生成文件,否则结束生产返回下载文件。

(2)考虑到用户下载同一份文件周期的几率相对较低,长期存储在硬盘会造成资源的浪费,同时由于是事件机制,所以推送和生产成本都比较低,所以决定来个crontab定期清理生产好的下载文件,释放出可用的硬盘空间,大不了低成本再生产一次。

结束语

(1) 异步编程思想随处可用

(2) 推荐星级开源PDF库:点击访问官方TCPDF

#tcpdf#

版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。

本文链接:【原创】关于PHP实现"文件下载"功能心得体会

用户评论:

2015-07-31 09:21
没看懂
manon
2015-08-01 01:01
@nick:哪里没看懂哦?

发表评论:

您的昵称:
电子邮件:
个人主页:

Free Web Hosting