Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

关于远程附件的处理机制优化

[复制链接]
mark35 发表于 2012-6-18 13:07:07 | 显示全部楼层 |阅读模式
本帖最后由 mark35 于 2012-12-3 21:35 编辑

远程附件是个不错的功能,不过实现的机制存在缺陷。如图
Snap3.png

功能的文字介绍和实际代码实现是有差距的:
文字介绍让人觉得上传是可以控制附件上传的目的,而实际上只是控制附件保存的目的。
真正代码实现是所有附件(包括图片)都是先上传到本地,然后再根据此开关决定是否把这个文件拷贝一份到远程服务器然后再删除本地(服务器)上的原本。

这种处理机制受网络状况严重影响,所有后续功能处理都需要依赖远程传输返回的状态值。这样不但导致服务器cpu资源被浪费并且也让前台流程处于停顿中给用户带来不畅快的体验。
另外,如果代码有缺陷就能会导致本地服务器临时文件堆积得不到清除,占用磁盘空间。

可以改成如下机制:
1、用户上传时都处理为本地附件
2、使用dz的定时任务机制或者服务器的crontab根据设定的值定时后台操作把本地附件传输到远程服务器
3、传送成功后再更新数据库中附件相关信息(url)。
这种机制的好处是可以让脚本尽快结束降低服务器资源占用,让用户也可以尽快完成上传。
因为是单线程跑传输而非用户上传时的并发传输,网络状况对服务器影响不大。即便远程暂时无法访问也不影响正常上传、访问。
第2步由程序或者OS后台调用不影响用户体验。如果本地磁盘空间足够则可以把执行时间设定在午夜低谷时段把影响降低到最低。
即便第二步执行时间非常长、或超时失败也不会影响附件的正常访问。因为尚未执行第3步。


回复

使用道具 举报

 楼主| mark35 发表于 2012-6-18 13:40:50 | 显示全部楼层
还可以在后台添加功能模块,允许手动过滤并操作转移附件。
这样就可以实现这种需求 https://discuz.dismall.com/thread-2952434-1-1.html
回复

使用道具 举报

yuantao19861215 发表于 2012-6-18 14:24:16 | 显示全部楼层
要是能这样就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-9-9 11:35 , Processed in 0.113142 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表