引言
随着web应用盛行于世(早就),node.js迅速成为当前最为流行的web应用搭建工具之一,他在各方面有明显的说烂了的优点,例如异步、非阻塞、事件驱动等,在高并发分布式的业务场景中有着十分明显的优势。
但node.js在服务端离线任务处理上仍然比较鸡肋,主要原因可能是由于工具本身的限制,例如单线程无法发挥多核性能、脚本弱类型容易产生BUG、开发过于简单以至于对开发人员难以把控等等,以至于大型团队在选择工具时都不会把node.js列入考虑范围内。
本文主要介绍一个个人开发使用的node.js分布式集群平台工具,主要适用于以下场景:
1、高并发且任务量巨大的场景
2、需要无脑扩容、压榨硬件设备的场景
3、僵尸网络,小算力设备场景
# 普通业务请使用RabbitMQ,本情怀工具纯粹学习探索记录。
#借个图 留水印
![](https://img.haomeiwen.com/i6337594/75f3b3ef5eb5b4ed.jpg)
架构简介
![](https://img.haomeiwen.com/i6337594/a3b4905a13bdf90b.png)
这里基本仿照了消息订阅模式,稍有不同的有:
1、特殊消息发送方能给全部worker动态更新脚本
2、mq server(图中的master)会根据worker的负载情况传递任务消息
实现方案
1、解耦:
主要使用task queue来把消息进行解耦,由mq server(图中master)实现。
2、通信
目前使用TCP+JSON。
3、业务逻辑
Node.js脚本负责业务逻辑开发。
4、失败任务处理
由mq serer(图中master)捞回队列
运行演示
![](https://img.haomeiwen.com/i6337594/3129a1e6315bf2b6.png)
![](https://img.haomeiwen.com/i6337594/39ace8e63edaf195.png)
![](https://img.haomeiwen.com/i6337594/05ef257d7a0b9845.png)
一些坑
由于worker非常不稳定,容易崩溃导致任务失败却没回调给mq server,以至于状态一直都是“进行中”,后来给mq server加了定期把“进行中”任务加入失败队列中。
Gayhub&联系
https://github.com/stevewooo/common 尽量使用最新的release分支。
邮箱:stevewoo23@gmail.com
学生党求撩
网友评论