swoole-jobs基于 swoole 的 job 調(diào)度組件
swoole-jobs
- 基于swoole類似gearman的分布式任務(wù)處理系統(tǒng)
- 高性能/動態(tài)多woker進程消費隊列,加速后端耗時服
- 無需像gearman一個worker配置一條crontab,swoole-jobs負(fù)責(zé)管理所有worker狀態(tài)
- 獨立的swoole http api 入隊列,api不依賴php-fpm
1. 說明
- web中較慢的邏輯,比如統(tǒng)計/email/短信/圖片處理等;
- 支持redis/rabbitmq/zeromq等任何一種做隊列消息存儲;
- 比yii/laravel等框架自帶隊列更穩(wěn)定更快[消費進程可動態(tài)變化]
- 自帶yii2/phalcon/yaf/ThinkPHP5集成示例,其他框架可參考src/Action代碼,
- yii2完整示例
- ThinkPHP5完整示例
2. 架構(gòu)圖
3. 特性
- 基于swoole的job調(diào)度組件;類似gearman的分布式任務(wù)處理系統(tǒng);
- redis/rabbitmq/zeromq等任何一種做隊列消息存儲(目前只實現(xiàn)redis/rabbitmq);
- 利用swoole的process實現(xiàn)多進程管理,進程個數(shù)可配置,worker進程退出后會自動拉起;
- 子進程循環(huán)次數(shù)可配置,防止業(yè)務(wù)代碼內(nèi)存泄漏;默認(rèn)stop命令會等待子進程平滑退出;
- 支持topic特性,不同的job綁定不同的topic;
- 每個topic啟動對應(yīng)數(shù)量的子進程,杜絕不同topic之間相互影響;
- 根據(jù)隊列積壓情況,子進程動態(tài)啟動進程數(shù),最大子進程個數(shù)可配置;
- 支持composer,可以跟任意框架集成;
- 日志文件自動切割,默認(rèn)最大100M,最多5個日志文件,防止日志刷滿磁盤;
- 出現(xiàn)積壓情況,支持釘釘機器人等消息提醒;
4. 安裝
4.1 composer
git clone https://github.com/kcloze/swoole-jobs.git
cd swoole-jobs
composer install
4.2 docker
- git clone https://github.com/kcloze/swoole-jobs.git
- cd swoole-jobs and composer install
- 根據(jù)根目錄Dockerfile構(gòu)建鏡像
- docker build -t swoole-jobs .
- docker run -it -v ~/data/code/php:/data swoole-jobs /bin/bash
- 進入容器之后,進入項目目錄:
php ./bin/swoole-jobs.php start
5. 運行
5.1 示范
1.修改配置config.php
2.啟動服務(wù)
php ./bin/swoole-jobs.php start >> log/system.log 2>&1
3.往隊列推送任務(wù)
php ./tests/testJobsSerialzie.php
4.啟動api服務(wù)
php ./bin/swoole-jobs.php http start
5.停止api服務(wù)
php ./bin/swoole-jobs.php http stop
5.2 啟動參數(shù)說明
NAME
- manage swoole-jobs
SYNOPSIS
-php ./bin/swoole-jobs.php app [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.
-http start
-Start swoole http server for apis.
-http stop
-Stop swoole http server for api.
5.3 API parameter description
5.3.1 api url
5.3.2 api params:
| Params | Type | Demo |
|---|---|---|
| jobData | json | {"topic":"MyJob","jobClass":"\Kcloze\Jobs\Jobs\MyJob","jobMethod":"test2","jobParams":["kcloze",1532857253,"oop"],"jobExtras":[],"serializeFunc":"php"} |
6. 服務(wù)管理
線上啟動和關(guān)閉服務(wù),有兩種方式:
6.1 啟動腳本加入到crontab定時任務(wù),每分鐘執(zhí)行一次(swoole-jobs會自動檢查是否在執(zhí)行,避免重復(fù)啟動)
* * * * * /usr/local/bin/php /***/swoole-jobs.php start >> /***/log/system.log 2>&1
6.2 使用systemd管理(故障重啟、開機自啟動)
1. 根據(jù)自己項目路徑,修改 docs/systemd/swoole-jobs.service
2. sudo cp -f systemd/swoole-jobs.service /etc/systemd/system/
3. sudo systemctl --system daemon-reload
4. 服務(wù)管理
#啟動服務(wù)
sudo systemctl start swoole-jobs.service
#reload服務(wù)
sudo systemctl reload swoole-jobs.service
#關(guān)閉服務(wù)
sudo systemctl stop swoole-jobs.service
7.系統(tǒng)截圖
htop截圖
status
釘釘提醒
8. change log
9. 注意事項
- 如果嵌入自己的框架,可參考src/Action代碼,繼承抽象類Kcloze\Jobs\Action\BaseAction
- 各種框架服務(wù)啟動會稍有不同,具體參考:
example/bin項目的代碼 - swoole 4 以上版本需要設(shè)置php.ini,關(guān)閉協(xié)程
10. 壓測
- 瓶頸: redis/rabbitmq隊列存儲本身和job執(zhí)行速度
11. 感謝
12. 聯(lián)系
qq群:141059677
13. 捐贈
- 如果這個項目真的幫助到你,麻煩點擊右上角給個star
評論
圖片
表情
