node.js 调度式离线任务处理

引言


随着web应用盛行于世(早就),node.js迅速成为当前最为流行的web应用搭建工具之一,他在各方面有明显的说烂了的优点,例如异步、非阻塞、事件驱动等,在高并发分布式的业务场景中有着十分明显的优势。

但node.js在服务端离线任务处理上仍然比较鸡肋,主要原因可能是由于工具本身的限制,例如单线程无法发挥多核性能、脚本弱类型容易产生BUG、开发过于简单以至于对开发人员难以把控等等,以至于大型团队在选择工具时都不会把node.js列入考虑范围内。

本文主要介绍一个个人开发使用的node.js分布式集群平台工具,主要适用于以下场景:

1、高并发且任务量巨大的场景 

2、需要无脑扩容、压榨硬件设备的场景

3、僵尸网络,小算力设备场景

# 普通业务请使用RabbitMQ,本情怀工具纯粹学习探索记录。

#借个图 留水印

架构简介



        这里基本仿照了消息订阅模式,稍有不同的有:

1、特殊消息发送方能给全部worker动态更新脚本

2、mq server(图中的master)会根据worker的负载情况传递任务消息

实现方案


1、解耦:

主要使用task queue来把消息进行解耦,由mq server(图中master)实现。

2、通信

目前使用TCP+JSON。

3、业务逻辑

Node.js脚本负责业务逻辑开发。

4、失败任务处理

由mq serer(图中master)捞回队列

运行演示


任务逻辑模块
消息发送模块
单机效果图

一些坑


由于worker非常不稳定,容易崩溃导致任务失败却没回调给mq server,以至于状态一直都是“进行中”,后来给mq server加了定期把“进行中”任务加入失败队列中。

Gayhub&联系


https://github.com/stevewooo/common 尽量使用最新的release分支。

邮箱:stevewoo23@gmail.com

学生党求撩

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,088评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,177评论 2 89
  • 开会用十二原则六步法,关键是看主持人能不能控制住现场,让在场的所有人都遵守规则很难,需要提前公布规则,主持人现场不...
    曲同宁阅读 1,733评论 0 0
  • 1.双十一来临,从上周末开始,学生帮挑了好几套汉服,重金马面真的很贵,还是重回汉唐比较便宜(尴尬 2.周六,滴滴到...
    云衣zxt阅读 2,555评论 0 0

友情链接更多精彩内容