基于 swoole 的 job 调度组件 swoole-jobs

码农软件 · 软件分类 · 网页组件 · 2019-04-08 17:12:37

软件介绍

swoole-jobs

  • 基于swoole的job调度组件

1. 使用场景

  • web中较慢的逻辑,比如统计/email/短信/图片处理等

  • 单机job任务并发数10000以内,但可以多机器部署

2. 架构图

架构图

3. 特性

  • 基于swoole的job调度组件;

  • redis/rabbitmq/zeromq等任何一种做队列消息存储(目前只实现redis/rabbitmq);

  • 利用swoole的process实现多进程管理,进程个数可配置,worker进程退出后会自动拉起;

  • 子进程循环次数可配置,防止业务代码内存泄漏;默认stop命令会等待子进程平滑退出;

  • 支持topic特性,不同的job绑定不同的topic;支持优先队列,根据topic顺序消费;

  • 支持composer,可以跟任意框架集成;

  • 日志文件自动切割,默认最大100M,最多5个日志文件,防止日志刷满磁盘;

4. 安装

git clone https://github.com/kcloze/swoole-jobs.git
cd swoole-jobs
composer install

5. 运行

5.1 示范

1.修改配置config.php

2.启动服务
php ./swoole-jobs.php start|stop|exit|restart

3.往队列推送任务
php ./test/testJobs.php

5.2 启动参数说明

NAME
      php swoole-jobs - manage swoole-jobs

SYNOPSIS
      php swoole-jobs command [options]
          Manage swoole-jobs daemons.


WORKFLOWS


      help [command]
      Show this help, or workflow help for command.


      restart
      Stop, then start swoole-jobs master and workers.

      start
      Start swoole-jobs master and workers.

      stop
      Wait all running workers smooth exit, please check swoole-jobs status for a while.

      exit
      Kill all running workers and master PIDs.

6. 服务管理

启动和关闭服务,有两种方式:

6.1 php脚本(主进程挂了之后,需要手动启动)

./swoole-jobs.php start|stop|exit|restart

6.2 使用systemd管理(故障重启、开机自启动)

更多systemd介绍

1. 根据自己项目路径,修改 systemd/swoole-jobs.service
2. sudo cp -f systemd/swoole-jobs.service /etc/systemd/system/
3. sudo systemctl --system daemon-reload
4. 服务管理
#启动服务
sudo systemctl start swoole-jobs.service
#reload服务
sudo systemctl reload swoole-jobs.service
#关闭服务
sudo systemctl stop swoole-jobs.service

实例图

7. change log

2017-11-30

  • 增加exit启动参数,默认stop等待子进程平滑退出

2017-11-29

  • 重构自身和第三方框架装载类实现,降低耦合性;

  • 支持Yii和Phalcon主流框架

2017-11-28 16:52:42

  • topics支持根据key值排序,队列根据这个排序优先消费;

  • 优化启动流程,让PHP进程自身管理,移除服务管理脚本;

  • 重构代码,优化结构;

2017-11-28 00:27:42

by daydaygo

  • 优化 TopicQueue 实现: TopicQueueInterface -> BaseTopicQueue -> XxxTopicQueue

  • 优化 job run() 方式, 增加类静态方法实现, 并实现多参数输入

  • 使用依赖注入方式进行解耦, 比如 Jobs 类依赖 BaseTopicQueue 抽象类, 不和具体的 TopicQueue 实现耦合; 比如配置的解耦, Jobs 类只用关系自己业务相关的配置, 不用耦合其他配置

  • 添加 php 进行服务管理

2017-5-19

  • 增加使用systemd管理swoole服务,实现故障重启、开机自启动等功能

8. 注意事项

  • 如果嵌入自己的框架,jobs类可以自己根据框架路径自由定义,详情看src/Jobs.php

9. 压测

  • 瓶颈: redis/rabbitmq队列存储本身和job执行速度

10. 感谢

本文地址:https://codercto.com/soft/d/3145.html

Twenty Lectures on Algorithmic Game Theory

Twenty Lectures on Algorithmic Game Theory

Tim Roughgarden / Cambridge University Press / 2016-8-31 / USD 34.99

Computer science and economics have engaged in a lively interaction over the past fifteen years, resulting in the new field of algorithmic game theory. Many problems that are central to modern compute......一起来看看 《Twenty Lectures on Algorithmic Game Theory》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器