CN113986491A - 一种基于cluster的Node.js多进程管理方法及系统 - Google Patents

一种基于cluster的Node.js多进程管理方法及系统 Download PDF

Info

Publication number
CN113986491A
CN113986491A CN202111233313.8A CN202111233313A CN113986491A CN 113986491 A CN113986491 A CN 113986491A CN 202111233313 A CN202111233313 A CN 202111233313A CN 113986491 A CN113986491 A CN 113986491A
Authority
CN
China
Prior art keywords
worker
master
subprocess
starting
sub
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111233313.8A
Other languages
English (en)
Inventor
周鹏
姚荣飞
王永超
王春艳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BEIJING FUNSHION ONLINE TECHNOLOGIES Ltd
Original Assignee
BEIJING FUNSHION ONLINE TECHNOLOGIES Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BEIJING FUNSHION ONLINE TECHNOLOGIES Ltd filed Critical BEIJING FUNSHION ONLINE TECHNOLOGIES Ltd
Priority to CN202111233313.8A priority Critical patent/CN113986491A/zh
Publication of CN113986491A publication Critical patent/CN113986491A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开一种基于cluster的Node.js多进程管理方法及系统,所述系统包括:进程启动模块:用于master主进程及各个worker子进程的启动、初始化、数据加载、应用服务启动;心跳检测模块:用于当启动完成后,master主进程开启定时任务,按配置的时间间隔周期性地向各个worker子进程发出心跳检测,关闭僵死的worker子进程,并且重启新的worker子进程;状态查询接口:用于对外提供一个进程状态查询接口;消息接口函数:用于对外提供一个消息发布的接口函数,以向各个worker子进程发送消息,同时,worker子进程对外提供一个消息订阅函数,用以接收master主进程发送来的消息,并通过回调函数的形式将响应消息发送给master主进程。本发明将Node.js多进程应用抽象出一个通用框架,可提高开发效率。

Description

一种基于cluster的Node.js多进程管理方法及系统
技术领域
本发明属于Node.js多进程应用领域,具体涉及一种基于cluster的Node.js多进程管理方法及系统。
背景技术
单个Node.js实例运行在单个线程中,为了充分利用多核系统,需要启用一组Node.js子进程去处理负载任务。Node.js自带的cluster模块可以创建共享服务器端口的子进程,但是对于子进程的状态监测、子进程间的协同工作、子进程异常退出时重建新子进程等功能,cluster模块都没有支持。父子进程间的管理涉及到进程间的信号交互以及诸多细节,很容易出现BUG,如果每个软件项目都去实现这部分功能则费时费力,因此有必要抽象出一个通用框架,高效管理多个子进程。
发明内容
有鉴于此,本发明提出了一种基于cluster的Node.jsNode.js多进程管理方法及系统,用于解决多线程应用中缺乏对子进程的有效管理的问题。
本发明第一方面,公开一种基于cluster的Node.jsNode.js多进程管理方法,所述方法包括:
master主进程启动及初始化;
由master主进程通过cluster模块逐一启动设定数量的worker子进程并初始化;
master主进程通知各个worker子进程从master主进程下载共享数据并完成Worker子进程的数据加载;
master主进程通知各个worker子进程启动应用服务,各个worker子进程同步启动应用服务并完成端口监听;
master主进程启动自身的应用服务,并输出启动成功及总体耗时的相关日志。
优选的,所述由master主进程通过cluster模块逐一启动设定数量的worker子进程并初始化具体包括:
通过cluster模块逐一启动设定数量的worker子进程,当前一个worker子进程完成初始化之后,后一个worker子进程才开始启动;
worker子进程的初始化包括但不限于读取配置文件、建立到各种数据库的连接、初始化各个功能模块;
各个worker子进程在完成初始化之后向master主进程发送一个“准备就绪可以开始下载共享数据”的消息。
优选的,所述master主进程通知各个子进程启动应用服务中,所述应用服务包括HTTP、Thrift以及其它各种应用层协议。
优选的,如果在某一个阶段有worker子进程启动出现异常,则该worker子进程向master主进程发送相关错误消息,master收到错误消息后输出错误日志,然后关闭对应的子进程。
优选的,所述方法还包括:
当master主进程启动自身的应用服务后,开启定时任务,按配置的时间间隔周期性地向各个worker子进程发出心跳检测;
如果超过最大时间限制而没有收到worker子进程的心跳响应,按进程号关闭该worker子进程,并且重新启动新的worker子进程;在重启Worker子进程的数据加载的阶段,根据配置选择从master的共享数据接口进行下载或者直接从数据库下载。
优选的,所述方法还包括:
当master主进程启动自身的应用服务后,对外提供一个进程状态查询接口,包括但不限于当前存活的子进程数、已经死亡的子进程数、子进程的启动时间及死亡时间。
优选的,所述方法还包括:
当master主进程启动自身的应用服务后,对外提供一个消息发布的接口函数,以向各个worker子进程发送消息;同时,worker子进程对外提供一个消息订阅函数,用以接收master主进程发送来的消息,并通过回调函数的形式将响应消息发送给master主进程。
本发明第二方面,公开一种基于cluster的Node.js多进程管理系统,所述系统包括:
进程启动模块:用于master主进程启动及初始化、应用服务启动及各个worker子进程的启动、初始化、数据加载、应用服务启动;
心跳检测模块:用于当进程启动模块启动完成后,master主进程开启定时任务,按配置的时间间隔周期性地向各个worker子进程发出心跳检测,关闭僵死的worker子进程,并且重新启动新的worker子进程;
状态查询接口:用于当进程启动模块启动完成后,master主进程对外提供一个进程状态查询接口;
消息接口函数:用于当进程启动模块启动完成后,master主进程对外提供一个消息发布的接口函数,以向各个worker子进程发送消息;同时,worker子进程对外提供一个消息订阅函数,用以接收master主进程发送来的消息,并通过回调函数的形式将响应消息发送给master主进程。
本发明第三方面,公开一种电子设备,包括:至少一个处理器、至少一个存储器、通信接口和总线;
其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令,以实现如本发明第一方面所述的方法。
本发明第四方面,公开一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机实现如本发明第一方面所述的方法。
本发明相对于现有技术具有以下有益效果:
1)本发明实现了启动流程标准化及启动方式可配置,建立了父子进程之间心跳监测,当子进程异常退出时,父进程能重新启动新的子进程以维持设定的子进程数,提供主从进程间消息通信的接口函数封装各类细节问题,通过状态查询接口实现子进程状态可查询,可提高多进程管理的灵活性和实时性。
2)本发明提出的Node.js多进程应用框架将启动流程标准化,将容易出错的子进程管理以及进程间消息传递机制封装起来,让程序员能够专注于业务代码的开发,而无需重复地把时间花在子进程逻辑上,从而大大的提升了应用服务的开发效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的基于cluster的Node.js多进程框架fun_cluster类图。
图2为本发明的基于cluster的Node.js多进程启动时序图;
图3为本发明的重启子进程时序图。
具体实施方式
下面将结合本发明实施方式,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
本发明提出一种基于cluster的Node.js多进程管理方法,创建了基于cluster的Node.js多进程框架,并命名为fun_cluster框架,如图1所示为fun_cluster框架类图,其中master为主进程(父进程),worker为子进程,message为主进程和子进程之间的通信消息,index为数据状态,server为服务器。各进程中,ini()为初始化函数,load()为加载函数,start()为启动函数,error()为返回错误函数。
本发明基于cluster的Node.js多进程管理方法包括如下步骤:
S1、进程启动
具体的,进程启动包括master主进程启动及初始化、应用服务启动及各个worker子进程的启动、初始化、数据加载、端口监听。如图2所示为进程启动时序图。
步骤S1具体包括如下分步骤:
S11、master主进程启动及初始化;
具体的,初始阶段只启动master主进程,主进程将完成启动初始化,包括从数据库获取各个worker子进程需要加载的共享数据。
S12、由master主进程通过cluster模块逐一启动设定数量的worker子进程并初始化;
master主进程启动及初始化完成后,由master主进程通过cluster模块逐一启动设定数量的worker子进程,如图2中所示,通过fork创建子进程,当前一个worker子进程完成初始化之后,后一个worker子进程才开始启动。worker子进程的初始化包括读取配置文件、建立到各种数据库的连接、初始化各个功能模块等等。各个worker子进程在完成初始化之后向master主进程发送一个“准备就绪可以开始下载共享数据”的消息message1。
S13、master主进程通知各个worker子进程从master主进程下载共享数据并完成Worker子进程的数据加载;
当master主进程收到所有worker子进程的就绪消息后,发送“下载共享数据”的消息message2,通知各个worker子进程从master主进程下载共享数据进完成Worker子进程的数据加载。各个worker子进程完成数据加载后,发送“准备就绪可以启动应用服务”消息message3给master主进程。
本发明的框架中,由master先访问数据库,然后分发给各个worker子进程的方式可以显著降低数据库的负载及延时,而各个worker子进程同时并行加载数据可以缩短总体启动时间。
S14、master主进程通知各个worker子进程启动应用服务,各个worker子进程同步启动应用服务并完成端口监听;
当master主进程收到所有worker子进程发送的“准备就绪可以启动应用服务”消息message3后,master主进程向各个子进程发送“启动应用服务”消息message4,各个worker子进程收到“启动应用服务”消息后,同步启动应用服务并完成端口监听。这里的应用服务可以是HTTP、Thrift以及其它各种应用层协议。worker子进程应用服务启动完成后,向master主进程发送“应用服务器启动完成”的消息message5。
本发明设置各个worker子进程在同一时刻同时启动应用服务,可以保证各个worker子进程之间的负载均衡,避免先启动应用服务的worker子进程因负载过重而出现异常情况。
S15、master主进程启动自身的应用服务,并输出启动成功及总体耗时的相关日志。
master主进程收到所有worker子进程发送的“应用服务器启动完成”消息后,master主进程启动自身的应用服务如进程状态查询接口,并输出启动成功及总体耗时的相关日志。
在上述步骤S1的启动流程中,如果在某一个阶段有worker子进程启动出现异常,则该worker子进程向master主进程发送相关错误消息,master收到错误消息后输出错误日志,然后杀掉所有子进程,最后程序退出。
本发明实现了启动流程标准化及启动方式可配置(options),比如可配置子进程数,父子进程脚本文件(masterScript、workerScript),父子进程名称等。
S2、心跳检测
当启动完成后,master主进程开启定时任务,按配置的时间间隔周期性地向各个worker子进程发出心跳检测,关闭僵死的worker子进程,并且重新启动新的worker子进程。
具体的,如果超过最大时间限制而没有收到worker子进程的心跳响应,则认为该worker子进程已经僵死,然后按进程号kill掉该worker子进程,并且重新启动新的worker子进程。图3为重启子进程时序图,重启Worker子进程的流程和正常启动worker子进程的流程大致相同,只是在数据加载的阶段,可以根据配置选择从master的共享数据接口进行下载,也可以直接从数据库下载。
S3、状态查询
当步骤S1的进程启动完成后,master主进程对外提供一个进程状态查询接口GetStatus(),用于查询当前存活的子进程数、已经死亡的子进程数、子进程的启动时间及死亡时间等等进程状态。
S4、消息接口
当步骤S1的进程启动完成后,master主进程对外提供一个消息发布的消息接口函数,以向各个worker子进程发送消息,业务应用只需调用该函数即可向各个worker子进程发送消息,相当于将各类消息封装起来,而具体有多少个worker子进程以及接收是否超时等细节问题则无需关心,这些细节问题都由fun_cluster框架来封装实现。同时,worker子进程对外提供一个消息订阅函数,用以接收master主进程发送来的消息,并通过回调函数的形式将响应消息发送给master主进程。
与上述方法实施例相对应,本发明还提出一种基于cluster的Node.js多进程管理系统,所述系统包括:
进程启动模块:用于master主进程启动及初始化、应用服务启动及各个worker子进程的启动、初始化、数据加载、应用服务启动;
心跳检测模块:用于当进程启动模块启动完成后,master主进程开启定时任务,按配置的时间间隔周期性地向各个worker子进程发出心跳检测,关闭僵死的worker子进程,并且重新启动新的worker子进程;
状态查询接口:用于当进程启动模块启动完成后,master主进程对外提供一个进程状态查询接口;
消息接口函数:用于当进程启动模块启动完成后,master主进程对外提供一个消息发布的接口函数,以向各个worker子进程发送消息;同时,worker子进程对外提供一个消息订阅函数,用以接收master主进程发送来的消息,并通过回调函数的形式将响应消息发送给master主进程。
以上方法实施例和系统实施例是对应的,系统实施例简述之处请参阅方法实施例即可。
本发明还公开一种电子设备,包括:至少一个处理器、至少一个存储器、通信接口和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令,以实现本发明前述的方法。
本发明还公开一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机实现本发明实施例所述方法的全部或部分步骤。所述存储介质包括:U盘、移动硬盘、只议存储器ROM、随机存取存储器RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以分布到多个网络单元上。本领域普通技术人员在不付出创造性的劳动的情况下,可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
以上所述仅为本发明的较佳实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于cluster的Node.js多进程管理方法,其特征在于,所述方法包括:
master主进程启动及初始化;
由master主进程通过cluster模块逐一启动设定数量的worker子进程并初始化;
master主进程通知各个worker子进程从master主进程下载共享数据并完成woker子进程的数据加载;
master主进程通知各个worker子进程启动应用服务,各个worker子进程同步启动应用服务并完成端口监听;
master主进程启动自身的应用服务,并输出启动成功及总体耗时的相关日志。
2.根据权利要求1所述基于cluster的Node.js多进程管理方法,其特征在于,所述由master主进程通过cluster模块逐一启动设定数量的worker子进程并初始化具体包括:
通过cluster模块逐一启动设定数量的worker子进程,当前一个worker子进程完成初始化之后,后一个worker子进程才开始启动;
worker子进程的初始化包括但不限于读取配置文件、建立到各种数据库的连接、初始化各个功能模块;
各个worker子进程在完成初始化之后向master主进程发送一个“准备就绪可以开始下载共享数据”的消息。
3.根据权利要求2所述基于cluster的Node.js多进程管理方法,其特征在于,所述master主进程通知各个子进程启动应用服务中,所述应用服务包括HTTP、Thrift以及其它各种应用层协议。
4.根据权利要求3所述基于cluster的Node.js多进程管理方法,其特征在于,如果在某一个阶段有worker子进程启动出现异常,则该worker子进程向master主进程发送相关错误消息,master收到错误消息后输出错误日志,然后关闭对应的子进程。
5.根据权利要求1所述基于cluster的Node.js多进程管理方法,其特征在于,所述方法还包括:
当master主进程启动自身的应用服务后,开启定时任务,按配置的时间间隔周期性地向各个worker子进程发出心跳检测;
如果超过最大时间限制而没有收到worker子进程的心跳响应,按进程号关闭该worker子进程,并且重新启动新的worker子进程;在重启Worker子进程的数据加载的阶段,根据配置选择从master的共享数据接口进行下载或者直接从数据库下载。
6.根据权利要求5所述基于cluster的Node.js多进程管理方法,其特征在于,所述方法还包括:
当master主进程启动自身的应用服务后,对外提供一个进程状态查询接口,查询内容包括但不限于当前存活的子进程数、已经死亡的子进程数、子进程的启动时间及死亡时间。
7.根据权利要求1所述基于cluster的Node.js多进程管理方法,其特征在于,所述方法还包括:
当master主进程启动自身的应用服务后,对外提供一个消息发布的接口函数,以向各个worker子进程发送消息;同时,worker子进程对外提供一个消息订阅函数,用以接收master主进程发送来的消息,并通过回调函数的形式将响应消息发送给master主进程。
8.一种基于cluster的Node.js多进程管理系统,其特征在于,所述系统包括:
进程启动模块:用于master主进程启动及初始化、应用服务启动及各个worker子进程的启动、初始化、数据加载、应用服务启动;
心跳检测模块:用于当进程启动模块启动完成后,master主进程开启定时任务,按配置的时间间隔周期性地向各个worker子进程发出心跳检测,关闭僵死的worker子进程,并且重新启动新的worker子进程;
状态查询接口:用于当进程启动模块启动完成后,master主进程对外提供一个进程状态查询接口;
消息接口函数:用于当进程启动模块启动完成后,master主进程对外提供一个消息发布的接口函数,以向各个worker子进程发送消息;同时,worker子进程对外提供一个消息订阅函数,用以接收master主进程发送来的消息,并通过回调函数的形式将响应消息发送给master主进程。
9.一种电子设备,其特征在于,包括:至少一个处理器、至少一个存储器、通信接口和总线;
其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令,以实现如权利要求1~7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机实现如权利要求1~7任一项所述的方法。
CN202111233313.8A 2021-10-22 2021-10-22 一种基于cluster的Node.js多进程管理方法及系统 Pending CN113986491A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111233313.8A CN113986491A (zh) 2021-10-22 2021-10-22 一种基于cluster的Node.js多进程管理方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111233313.8A CN113986491A (zh) 2021-10-22 2021-10-22 一种基于cluster的Node.js多进程管理方法及系统

Publications (1)

Publication Number Publication Date
CN113986491A true CN113986491A (zh) 2022-01-28

Family

ID=79740412

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111233313.8A Pending CN113986491A (zh) 2021-10-22 2021-10-22 一种基于cluster的Node.js多进程管理方法及系统

Country Status (1)

Country Link
CN (1) CN113986491A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115016946A (zh) * 2022-08-03 2022-09-06 深圳市星卡软件技术开发有限公司 用户咨询处理方法和系统
CN117666451A (zh) * 2024-02-01 2024-03-08 合肥安迅精密技术有限公司 基于多进程的贴片机主控系统、方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115016946A (zh) * 2022-08-03 2022-09-06 深圳市星卡软件技术开发有限公司 用户咨询处理方法和系统
CN117666451A (zh) * 2024-02-01 2024-03-08 合肥安迅精密技术有限公司 基于多进程的贴片机主控系统、方法
CN117666451B (zh) * 2024-02-01 2024-05-10 合肥安迅精密技术有限公司 基于多进程的贴片机主控系统、方法

Similar Documents

Publication Publication Date Title
CN113986491A (zh) 一种基于cluster的Node.js多进程管理方法及系统
CN113630372A (zh) 一种边缘计算的云边协同系统
CN112698963B (zh) 一种事件通知方法及装置
CN112035228A (zh) 一种资源调度方法及装置
CN114253748B (zh) 一种消息处理系统和消息处理方法
CN111064626B (zh) 配置更新方法、装置、服务器及可读存储介质
CN107066339A (zh) 分布式作业管理器及分布式作业管理方法
CN111338829B (zh) 远程过程调用服务的调用方法及装置
CN115878301A (zh) 一种数据库网络负载性能的加速框架、加速方法及设备
CN110333916B (zh) 请求消息处理方法、装置、计算机系统及可读存储介质
CN114546648A (zh) 任务处理方法及任务处理平台
CN112600842A (zh) 集群shell方法、装置、电子设备及计算机可读存储介质
CN111240760B (zh) 基于注册中心的应用发布方法、系统、存储介质及设备
CN112559155A (zh) 批量作业处理方法、系统、计算机设备及可读存储介质
CN114157725B (zh) 设备联动的方法、装置、服务器、电子设备以及存储介质
CN115794321A (zh) 定时任务处理方法、装置、介质及设备
CN114500681A (zh) 一种网络请求的连接方法、装置、介质及计算机设备
CN115174440B (zh) 连通性检测方法、装置、存储介质和设备
CN115914330B (zh) 一种基于nio异步线程模型的异构应用间通信方法
CN113347151B (zh) 一种基于socket共享内存的数据交互方法
CN113342540B (zh) 终端用户缴费开机方法、系统、计算机设备和存储介质
CN113656357B (zh) 文件管理方法、装置、系统及存储介质
CN115576650A (zh) 一种容器化组件的管理方法、装置、设备和存储介质
CN114785859B (zh) 服务注册方法、装置、设备及存储介质
CN117170777A (zh) 状态转移方法和相关设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination