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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

DISCUZX3/X25论坛云上报/计划任务异步机制方案1.0.2beta[7.22日更新]

[复制链接]
Luca. 发表于 2013-7-17 17:12:06 | 显示全部楼层 |阅读模式
本帖最后由 Luca. 于 2013-7-22 11:29 编辑

7.22日更新
1,优化超时问题
2,修正一个Exception错误


很多站长开启了防水墙等功能,在每次发帖的时候都会同步请求云端,这样当网络不畅的时候很容易导致“卡顿”的情况出现影响用户体验。

同理,论坛的计划任务也是把论坛后台的各种任务附加到用户的访问动作上,给用户造成论坛突然很卡了的假象。
于是,我们开发了这个论坛的异步机制来处理这个问题。


什么是异步?:

在执行过程中,我们把那些会造成卡的部分分离出来,放到后台来执行。

方案原理:
我们借助redis的队列机制的BLPOP方法,在一个死循环中等待队列中的可弹出的元素,否则就阻塞连接。
在后台处理前台提交过来的上报任务。

方案前提:
1,独立服务器,能执行命令行,并且安装了redis服务以及php-redis扩展。
2,服务器能执行计划任务。

实施步骤:
1,到https://discuz.dismall.com/thread-3334048-1-1.html 按提示安装框架。如果已经安装好可跳过此步。
2,关闭论坛,此过程大约需要5~15分钟。
3,确保论坛已经安装好redis以及php-redis扩展,如果没有安装可以参考帖子下方的方法。
4,下载帖子中的附件,并上传到服务器(不会覆盖任何文件)
5,切换到extend/bin目录,执行如下命令:
  1. ~$nohup php bin_async_cron.php&
复制代码
6,在配置文件的最下方加入如下配置:
  1. $_config['extend']['asynctask']['on'] = 1;
复制代码
在配置文件中找到如下两项按如下配置:
  1. $_config['remote']['on'] = '1';
  2. $_config['remote']['cron'] = '1';
复制代码
7,执行命令:
  1. ~$crontab -e
复制代码
添加如下代码到最后一行
  1. * * * * * curl "http://你的站/api/remote/index.php?mod=cron"
复制代码
8,可以到bin目录下查看out文件,里面记录了云上报日志,如果发现里面的剩余成员数一直在增加可以再次执行步骤5,新增一个进程来执行。

注意事项:
1,为了避免重启后任务丢失,建议把步骤5添加到开机启动里。
2,由于linux计划任务最多每分钟执行一次,所以论坛的任务执行可能有所延后而不是准点执行,比如今日发帖的任务可能就不是准点更新而是延后了几分钟。
3,请限制extend/bin目录只能本机访问,尤其是该脚本存在死循环,一定不要在浏览器下执行。

linux系统安装redis服务简单步骤:
1,一般在/usr/local/src下,执行wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz
2,解压 tar -zxf redis-2.6.14.tar.gz 然后切换到这个目录。
3,make
4,一般到/etc/sysctl.conf里添加vm.overcommit_memory=1,然后reboot,这样会允许分配所有内存避免不能启动redis。
5,在redis.conf中修改一下配置,最重要的是修改如下:
daemonize yes
把它转换成驻守进程,其余配置请参考手册。
6,redis-server redis.conf启动redis,如果没有redis-server命令,可以把src下面的redis-*都复制到/usr/bin目录下
7,redis-cli启动客户端测试启动是否正常。

PHP-REDIS客户端安装,参考:https://github.com/nicolasff/phpredis





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

1

查看全部评分

hnsy1988 发表于 2013-7-17 18:07:44 | 显示全部楼层
支持哈。好东西。
回复

使用道具 举报

5gss.cn 发表于 2013-7-18 01:17:45 | 显示全部楼层
非常受用啊
回复

使用道具 举报

sdshadow 发表于 2013-7-18 11:23:05 | 显示全部楼层
怎么确定 已经是异步了呢
我安装后  只显示这个

==============================
DISCUZX! async_cron job START!
==============================
回复

使用道具 举报

sdshadow 发表于 2013-7-18 11:34:10 | 显示全部楼层
$_config['memory']['redis']['server'] = '127.0.0.1';
$_config['memory']['redis']['port'] = '6379';
是需要在config_global.php 添加这俩条吗
回复

使用道具 举报

sdshadow 发表于 2013-7-18 11:34:33 | 显示全部楼层
论坛已经有很多贴在发了  out里没任何记录
求帮助
回复

使用道具 举报

sdshadow 发表于 2013-7-18 11:38:52 | 显示全部楼层
sdshadow 发表于 2013-7-18 11:34
论坛已经有很多贴在发了  out里没任何记录
求帮助

已发过去 谢谢
回复

使用道具 举报

流浪的纯洁 发表于 2013-7-19 06:26:04 | 显示全部楼层
留名,呵呵呵
回复

使用道具 举报

ARCHY` 发表于 2013-7-19 10:52:39 | 显示全部楼层
期待更多性能方面,更加稳定的表现
回复

使用道具 举报

1314学习网 发表于 2013-7-19 14:29:05 | 显示全部楼层
支持哈。好东西。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 03:06 , Processed in 0.143074 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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