一种支持自动扩缩容接入不同数量单灯控的系统和方法转让专利

申请号 : CN202311436980.5

文献号 : CN117156649B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张伟杰王鹏

申请人 : 中节能晶和科技有限公司中节能晶和照明(江西)有限公司

摘要 :

本发明提供了一种支持自动扩缩容接入不同数量单灯控的系统和方法,所述系统包括配置于照明管理平台中的:业务处理模块,其用于进行接入设备业务管理和数据指令下发;若干传输模块,其用于端口监听及维护与接入设备的通信链路,将接收到的数据包转发给指定适配模块,以及接收适配模块的指令下发给指定的接入设备;若干适配模块,其用于按照协议解析传输模块上行的接入设备数据包转换数据格式后继续上行给相应的业务处理模块,以及按照协议封装业务处理模块下发的指令并下发给指定传输模块;以及资源调度器,用于进行传输模块和适配模块的管理协调和监控。本发明的系统和方法解决了大批量单灯控接入情况下系统并发性能不足的问题。

权利要求 :

1.一种支持自动扩缩容接入不同数量单灯控的方法,其特征在于,基于单灯控接入系统进行,所述单灯控接入系统包括配置于照明管理平台中的:至少一个业务处理模块,其用于进行接入设备业务管理和数据指令下发,所述接入设备包括单灯控和集控;

若干灯控数据传输模块,其用于端口监听及维护与接入设备之间的通信链路,对接收到的数据包进行数据识别和校验后转发数据包给指定灯控协议适配模块,以及接收灯控协议适配模块的指令下发给指定的接入设备;

若干灯控协议适配模块,其用于按照协议解析灯控数据传输模块上行的接入设备数据包,转换为照明管理平台中的数据格式,并继续上行给相应的业务处理模块,以及按照协议封装业务处理模块下发的指令,并将封装好的指令包下发给指定灯控数据传输模块;

以及资源调度器,其包括灯控实例管理协调服务、灯控实例启动服务、灯控实例监控服务和存储单元,用于进行所述灯控数据传输模块和灯控协议适配模块的管理协调和监控;

其中,所述灯控数据传输模块和灯控协议适配模块基于对应接入设备的协议设置为不同的类型,所述灯控数据传输模块和灯控协议适配模块启动后作为灯控数据传输程序实例和灯控协议适配程序实例运行,且相同类型的灯控数据传输程序实例或灯控协议适配程序实例作为实例集群进行管理;

所述方法包括如下步骤:

S1、在计划的亮灯时间前,资源调度器根据集控和单灯控历史接入情况,进行灯控数据传输模块和灯控协议适配模块的预启动;

S2、建立业务处理模块、灯控数据传输程序实例和灯控协议适配程序实例之间的数据传输关系;

S3、根据资源调度器中灯控实例监控服务获取到的负载情况,动态的新增或者减少灯控数据传输程序实例和灯控协议适配程序实例的启用数量。

2.如权利要求1所述的支持自动扩缩容接入不同数量单灯控的方法,其特征在于:所述灯控实例管理协调服务用于设置灯控实例监控服务运行参数,接收灯控实例监控服务信息;对灯控实例启动服务发送启动命令启动灯控数据传输模块或灯控协议适配模块;设置灯控数据传输程序实例或灯控协议适配程序实例的吞吐量上限阈值、下限阈值和最大时延阈值;

所述灯控实例启动服务用于接受灯控实例管理协调服务指令,调用执行脚本启动灯控数据传输模块或灯控协议适配模块,或向运行中的程序实例发送停止指令,并调用执行脚本停止程序实例进程;以及管理启动参数;

所述灯控实例监控服务用于接收各运行程序实例的状态上报,并周期性的将信息汇报给灯控实例管理协调服务;

所述存储单元用于存储各个程序实例的参数,包括程序实例的启动预设信息和当前信息。

3.如权利要求1所述的支持自动扩缩容接入不同数量单灯控的方法,其特征在于,步骤S1具体包括:S11、启动灯控实例管理协调服务,获取灯控数据传输模块和灯控协议适配模块启动记录,判断是否需要启动所述灯控数据传输模块和灯控协议适配模块,并将需要启动的模块放入启动列表;

S12、灯控实例管理协调服务通知灯控实例启动服务调用执行脚本启动所述启动列表记录的灯控数据传输模块和灯控协议适配模块;

S13、执行脚本回传启动结果,灯控实例监控服务对新启动的灯控数据传输程序实例和灯控协议适配程序实例进行监测。

4.如权利要求3所述的支持自动扩缩容接入不同数量单灯控的方法,其特征在于,步骤S2具体包括:预先确定好灯控协议适配程序实例、灯控数据传输程序实例的接口地址,包括IP和端口;

在启动新的灯控协议适配程序实例时将业务处理模块和灯控数据传输程序实例的接口地址作为启动参数传入,并将新创建的灯控协议适配程序实例的接口地址返回给业务处理模块;

在启动新的灯控数据传输程序实例时将灯控协议适配程序实例的接口地址作为启动参数传入。

5.如权利要求3所述的支持自动扩缩容接入不同数量单灯控的方法,其特征在于,步骤S3具体包括:S31、基于灯控实例监控服务获取的负载情况,灯控实例管理协调服务判断是否进行程序实例的启动或关闭,所述负载情况包括灯控协议适配程序实例和灯控数据传输程序实例周期性上报的吞吐量以及处理时延;

S32、根据上述判断结果,进行灯控数据传输模块或灯控协议适配模块的启动,以及灯控协议适配程序实例或灯控数据传输程序实例的关闭。

6.如权利要求5所述的支持自动扩缩容接入不同数量单灯控的方法,其特征在于,步骤S31中,灯控实例管理协调服务基于预设的灯控数据传输程序实例或灯控协议适配程序实例的吞吐量上、下限阈值和最大时延阈值,以及监测的程序实例的实际吞吐量、处理时延判断是否进行程序实例的启动或关闭,具体包括:如果程序实例吞吐量大于预设吞吐量上限阈值,且处理时延大于预设最大时延,则判断该程序实例需要进行分流;

如果程序实例吞吐量大于预设吞吐量上限阈值,且处理时延小于预设最大时延,则提高该程序实例预设的吞吐量上限阈值;

如果程序实例吞吐量小于预设吞吐量下限阈值,则判断该程序实例可以被合并;

如果程序实例被判断为崩溃状态,则重新启动该程序实例。

7.如权利要求6所述的支持自动扩缩容接入不同数量单灯控的方法,其特征在于,步骤S32中,如果判断程序实例需要进行分流,则执行如下操作:如果当前程序实例所在的实例集群的总吞吐量大于集群中所有程序实例预设上限吞吐量之和,则启动新的程序实例;

如果当前程序实例所在的实例集群的总吞吐量小于集群中所有程序实例预设上限吞吐量之和,则进行负载均衡调配,降低当前程序实例的数据包处理比重。

8.如权利要求6所述的支持自动扩缩容接入不同数量单灯控的方法,其特征在于,步骤S32中,进行灯控数据传输模块或灯控协议适配模块的启动,以及灯控协议适配程序实例或灯控数据传输程序实例的关闭具体包括:当需要启动灯控协议适配模块时,灯控实例管理协调服务调用灯控实例启动服务启动新的灯控协议适配模块为灯控协议适配程序实例,并建立与业务处理模块和灯控数据传输程序实例之间的数据传输关系;

当需要启动灯控数据传输模块时,灯控实例管理协调服务调用灯控实例启动服务启动新的灯控数据传输模块为灯控数据传输程序实例,并建立与业务处理模块和灯控协议适配程序实例之间的数据传输关系,同时灯控实例管理协调服务通知业务处理模块对相关的设备下发上行地址变更的命令;

当需要关闭灯控协议适配程序实例时,灯控实例启动服务先向目标程序实例发送关闭命令,目标程序实例接收到命令后停止接收外部数据,待处理完所有当前数据后,灯控实例启动服务调用执行脚本传入该实例所在的服务器IP与进程ID,由执行脚本结束程序实例进程;

当需要关闭灯控数据传输程序实例时,灯控实例管理协调服务通知业务处理模块下发变更上行地址指令,将所有连接到此灯控数据传输程序实例的设备变更连接到当前实例集群中其它的灯控数据传输程序实例中,然后执行关闭步骤;

当程序实例崩溃需要重启时,灯控实例启动服务调用执行脚本传入该程序实例所在的服务器IP与进程ID,由执行脚本结束程序实例进程,灯控实例启动服务再根据存储的程序实例记录启动该程序实例。

9.如权利要求8所述的支持自动扩缩容接入不同数量单灯控的方法,其特征在于,步骤S3中,动态的新增或者减少灯控数据传输程序实例和灯控协议适配程序实例的启用数量还包括:若当前时间进入关灯状态时间段,则停止所有灯控协议适配程序实例和灯控数据传输程序实例,但该程序实例的参数中判断保持实例运行的字段值为运行的除外。

10.如权利要求1‑9任一项所述的支持自动扩缩容接入不同数量单灯控的方法,其特征在于,还包括:在亮灯周期中,资源调度器对各个灯控协议适配程序实例记录和灯控数据传输程序实例记录进行保持存活判断,以及程序实例是否需要在下次开灯时进行初始化启动:如果一个程序实例是该类型协议的唯一一个程序实例,则判断该程序实例需要一直存活;

资源调度器设置延迟时间,在开灯时间的延迟时间后,为存活的程序实例设置其下次开灯时进行初始化启动,其它程序实例设置为不启动。

说明书 :

一种支持自动扩缩容接入不同数量单灯控的系统和方法

技术领域

[0001] 本发明涉及物联网技术领域,具体涉及一种支持自动扩缩容接入不同数量单灯控的系统和方法。

背景技术

[0002] 在市政道路照明领域,已经发展到了利用智能控制设备控制道路上每一盏灯的程度,其中主要的智能控制设备就是集中控制器(以下简称集控)和单灯控制器(以下简称单灯控)。集控管理一段道路上若干路灯的供电,单灯控管理具体某个路灯的亮灭和亮度。而在一个城市照明体系中单灯控数量比较庞大,基本与城市的路灯数相等,因此在夜幕降临城市亮灯时,它们同时上线将对照明管理平台产生巨大的并发压力,会导致服务响应延迟甚至服务崩溃。
[0003] 另外,城市道路照明管理实践中,集控和单灯控的控制与上报有潮汐的特性,即在夜晚开灯时、亮度有变化时并发量特别大,而在夜晚其它时候则比较平缓,在白天不亮灯时甚至不会任何数据。这也要求照明管理平台具有一定弹性能适应这种具有周期性特点的变化。
[0004] 公开号为CN115765791A的中国专利公开了一种增大单灯控制器接入容量的方法及架构系统。该专利在智能集中控制器的各相输入端均设置电力载波模块,各个电力载波模块采用生产者消费者模型进行线程间的数据同步;根据网络同步时隙与智能单灯控制器的接入时隙,控制智能单灯控制器的时钟同步或加入网络或者处于静默状态;根据智能单灯控制器加入网络的数量,下发运行数据收发指令控制智能单灯控制器进行数据收发。该专利方案增大了接入到集中控制器的单灯控数量,但仅局限于电力载波这种传输方式,局限性比较高。而且发明内容主要是设备层面的调整,对照明管理平台的设计都没有涉及。
[0005] 公开号为CN113473680A的中国专利公开了一种NB‑IoT智能路灯终端的离散接入方法及其结构。该专利通过控制线连接NB‑IoT通信模块的RESET接口,并通过程序控制实现NB‑IoT通信模块延时上电功能;或者通过在电源电路与NB‑IoT通信模块之间串接直流电源分配器,再由微控制器随机延时控制直流电源分配器向没有RESET引脚的NB‑IoT通信芯片供电,从而错开每台路灯终端的上电时间以实现离散接入网络。该专利方案能解决NB‑IoT智能路灯上电时大量终端同时入网而导致的瞬时网络资源不足和上行于扰电平大幅提升的问题,提升NB‑IoT网络通信成功率和终端上报数据成功率。但该发明主要针对NB单灯控进行了设备层面的改造,对其它类型的单灯控以及上位平台的改造没有涉及。

发明内容

[0006] 基于上述背景,本发明的目的在于提供一种支持自动扩缩容接入不同数量单灯控的系统和方法,以解决大批量单灯控接入情况下系统并发性能不足的问题,以及并发低谷时服务器资源浪费的情况。
[0007] 为实现上述目的,本发明采用了如下技术方案:
[0008] 本发明的第一个方面提供一种支持自动扩缩容接入不同数量单灯控的系统,包括配置于照明管理平台中的:
[0009] 至少一个业务处理模块,其用于进行接入设备业务管理和数据指令下发;
[0010] 若干灯控数据传输模块,其用于端口监听及维护与接入设备之间的通信链路,对接收到的数据包进行数据识别和校验后转发数据包给指定灯控协议适配模块,以及接收灯控协议适配模块的指令下发给指定的接入设备;
[0011] 若干灯控协议适配模块,其用于按照协议解析灯控数据传输模块上行的接入设备数据包,转换为照明管理平台中的数据格式,并继续上行给相应的业务处理模块,以及按照协议封装业务处理模块下发的指令,并将封装好的指令包下发给指定灯控数据传输模块;
[0012] 以及资源调度器,其包括灯控实例管理协调服务、灯控实例启动服务、灯控实例监控服务和存储单元,用于进行所述灯控数据传输模块和灯控协议适配模块的管理协调和监控;
[0013] 其中,所述接入设备包括单灯控和集控,所述灯控数据传输模块和灯控协议适配模块基于对应接入设备的协议设置为不同的类型,所述灯控数据传输模块和灯控协议适配模块启动后作为灯控数据传输程序实例和灯控协议适配程序实例运行,且相同类型的灯控数据传输程序实例或灯控协议适配程序实例作为实例集群进行管理。
[0014] 进一步的,所述灯控实例管理协调服务用于设置灯控实例监控服务运行参数,接收灯控实例监控服务信息;对灯控实例启动服务发送启动命令启动灯控数据传输模块或灯控协议适配模块;设置灯控数据传输程序实例或灯控协议适配程序实例的吞吐量上限阈值、下限阈值和最大时延阈值;
[0015] 所述灯控实例启动服务用于接受灯控实例管理协调服务指令,调用执行脚本启动灯控数据传输模块或灯控协议适配模块,或向运行中的程序实例发送停止指令,并调用执行脚本停止程序实例进程;以及管理启动参数;
[0016] 所述灯控实例监控服务用于接收各运行程序实例的状态上报,并周期性的将信息汇报给灯控实例管理协调服务;
[0017] 所述存储单元用于存储各个程序实例的参数,包括程序实例的启动预设信息和当前信息。
[0018] 本发明的第一个方面提供一种支持自动扩缩容接入不同数量单灯控的方法,基于上述第一个方面所述的支持自动扩缩容接入不同数量单灯控的系统进行,包括如下步骤:
[0019] S1、在计划的亮灯时间前,资源调度器根据集控和单灯控历史接入情况,进行灯控数据传输模块和灯控协议适配模块的预启动;
[0020] S2、建立业务处理模块、灯控数据传输程序实例和灯控协议适配程序实例之间的数据传输关系;
[0021] S3、根据资源调度器中灯控实例监控服务获取到的负载情况,动态的新增或者减少灯控数据传输程序实例和灯控协议适配程序实例的启用数量。
[0022] 进一步的,步骤S1具体包括:
[0023] S11、启动灯控实例管理协调服务,获取灯控数据传输模块和灯控协议适配模块启动记录,判断是否需要启动所述灯控数据传输模块和灯控协议适配模块,并将需要启动的模块放入启动列表;
[0024] S12、灯控实例管理协调服务通知灯控实例启动服务调用执行脚本启动所述启动列表记录的灯控数据传输模块和灯控协议适配模块;
[0025] S13、执行脚本回传启动结果,灯控实例监控服务对新启动的灯控数据传输程序实例和灯控协议适配程序实例进行监测。
[0026] 进一步的,步骤S2具体包括:
[0027] 预先确定好灯控协议适配程序实例、灯控数据传输程序实例的接口地址,包括IP和端口;
[0028] 在启动新的灯控协议适配程序实例时将业务处理模块和灯控数据传输程序实例的接口地址作为启动参数传入,并将新创建的灯控协议适配程序实例的接口地址返回给业务处理模块;
[0029] 在启动新的灯控数据传输程序实例时将灯控协议适配程序实例的接口地址作为启动参数传入。
[0030] 进一步的,步骤S3具体包括:
[0031] S31、基于灯控实例监控服务获取的负载情况,灯控实例管理协调服务判断是否进行程序实例的启动或关闭,所述负载情况包括灯控协议适配程序实例和灯控数据传输程序实例周期性上报的吞吐量以及处理时延;
[0032] S32、根据上述判断结果,进行灯控数据传输模块或灯控协议适配模块的启动,以及灯控协议适配程序实例或灯控数据传输程序实例的关闭。
[0033] 进一步的,步骤S31中,灯控实例管理协调服务基于预设的灯控数据传输程序实例或灯控协议适配程序实例的吞吐量上、下限阈值和最大时延阈值,以及监测的程序实例的实际吞吐量、处理时延判断是否进行程序实例的启动或关闭,具体包括:
[0034] 如果程序实例吞吐量大于预设吞吐量上限阈值,且处理时延大于预设最大时延,则判断该程序实例需要进行分流;
[0035] 如果程序实例吞吐量大于预设吞吐量上限阈值,且处理时延小于预设最大时延,则提高该程序实例预设的吞吐量上限阈值;
[0036] 如果程序实例吞吐量小于预设吞吐量下限阈值,则判断该程序实例可以被合并;
[0037] 如果程序实例被判断为崩溃状态,则重新启动该程序实例。
[0038] 进一步的,步骤S32中,如果判断程序实例需要进行分流,则执行如下操作:
[0039] 如果当前程序实例所在的实例集群的总吞吐量大于集群中所有程序实例预设上限吞吐量之和,则启动新的实例;
[0040] 如果当前程序实例所在的实例集群的总吞吐量小于集群中所有程序实例预设上限吞吐量之和,则进行负载均衡调配,降低当前程序实例的数据包处理比重。
[0041] 进一步的,步骤S32中,进行灯控数据传输模块或灯控协议适配模块的启动,以及灯控协议适配程序实例或灯控数据传输程序实例的关闭具体包括:
[0042] 当需要启动灯控协议适配模块时,灯控实例管理协调服务调用灯控实例启动服务启动新的灯控协议适配模块为灯控协议适配程序实例,并建立与业务处理模块和灯控数据传输程序实例之间的数据传输关系;
[0043] 当需要启动灯控数据传输模块时,灯控实例管理协调服务调用灯控实例启动服务启动新的灯控数据传输模块为灯控数据传输程序实例,并建立与业务处理模块和灯控协议适配程序实例之间的数据传输关系,同时灯控实例管理协调服务通知业务处理模块对相关的设备下发上行地址变更的命令;
[0044] 当需要关闭灯控协议适配程序实例时,灯控实例启动服务先向目标程序实例发送关闭命令,目标程序实例接收到命令后停止接收外部数据,待处理完所有当前数据后,灯控实例启动服务调用执行脚本传入该实例所在的服务器IP与进程ID,由执行脚本结束程序实例进程;
[0045] 当需要关闭灯控数据传输程序实例时,灯控实例管理协调服务通知业务处理模块下发变更上行地址指令,将所有连接到此灯控数据传输程序实例的设备变更连接到当前实例集群中其它的灯控数据传输程序实例中,然后执行关闭步骤;
[0046] 当程序实例崩溃需要重启时,灯控实例启动服务调用执行脚本传入该程序实例所在的服务器IP与进程ID,由执行脚本结束程序实例进程,灯控实例启动服务再根据存储的程序实例记录启动该程序实例。
[0047] 进一步的,步骤S3中,动态的新增或者减少灯控数据传输程序实例和灯控协议适配程序实例的启用数量还包括:
[0048] 若当前时间进入关灯状态时间段,则停止所有灯控协议适配程序实例和灯控数据传输程序实例,但该程序实例的参数中判断保持实例运行的字段值为运行的除外。
[0049] 进一步的,该方法还包括:
[0050] 在亮灯周期中,资源调度器对各个灯控协议适配程序实例记录和灯控数据传输程序实例记录进行保持存活判断,以及程序实例是否需要在下次开灯时进行初始化启动:
[0051] 如果一个程序实例是该类型协议的唯一一个程序实例,则判断该程序实例需要一直存活;
[0052] 资源调度器设置延迟时间,在开灯时间的延迟时间后,为存活的程序实例设置其下次开灯时进行初始化启动,其它程序实例设置为不启动。
[0053] 本发明的有益效果如下:
[0054] 本发明的支持自动扩缩容接入不同数量单灯控的系统和方法,通过将设备接入程序依据模块内部工作内容的不同进行解耦分离,解耦为适配不同协议的灯控数据传输模块和灯控协议适配模块,使得对接入设备的管控更为精细,同时也能更方便的进行横向扩容。同时,通过资源调度器进行单灯控和集控设备接入模块(程序实例)的启动、停止和状态监控,实现了在开灯前提前准备好足够的计算机资源即进行系统扩容,而在不亮灯的白天则释放这些资源即进行系统缩容,从而解决了大批量单灯控接入情况下系统并发性能不足的问题,并避免了并发低谷时服务器资源浪费的情况。

附图说明

[0055] 图1为本发明的支持自动扩缩容接入不同数量单灯控的系统的实施例示意图。
[0056] 图2为本发明的支持自动扩缩容接入不同数量单灯控的系统的实施例中资源调度器的组成及运行原理示意图。
[0057] 图3为本发明实施例中启动一个灯控协议适配程序实例的过程示意图。
[0058] 图4为本发明实施例中利用消息队列进行信息传递的过程示意图。
[0059] 图5为本发明实施例中关闭灯控数据传输程序实例的过程示意图。

具体实施方式

[0060] 为了进一步理解本发明,下面结合实施例对本发明优选实施方案进行描述,但是应当理解,这些描述只是为进一步说明本发明的特征和优点,而不是对本发明权利要求的限制。
[0061] 单灯控的通信具有瞬时接入的高并发性和不同时间段数据上报的潮汐性,在夜晚开灯的刹那,单灯控会集中向照明管理平台发送数据,而在白天,单灯控几乎不会跟平台通信。因此,管理系统应在开灯前提前准备好足够的计算机资源即进行系统扩容,而在不亮灯的白天则可以释放这些资源即进行系统缩容。
[0062] 基于此,本发明的一个实施例首先提供一种支持自动扩缩容接入不同数量单灯控的系统,其配置于照明管理平台中,包括:
[0063] 至少一个业务处理模块,其用于进行接入设备业务管理和数据指令下发,接入设备包括待接入或已接入的单灯控和集控;
[0064] 若干灯控数据传输模块,其用于端口监听及维护与接入设备之间的通信链路,对接收到的数据包进行数据识别和校验后转发数据包给指定灯控协议适配模块,以及接收灯控协议适配模块的指令下发给指定的接入设备;
[0065] 若干灯控协议适配模块,其用于按照协议解析灯控数据传输模块上行的接入设备数据包,转换为照明管理平台中的数据格式,并继续上行给相应的业务处理模块,以及按照协议封装业务处理模块下发的指令,并将封装好的指令包下发给指定灯控数据传输模块;
[0066] 以及资源调度器,其包括灯控实例管理协调服务、灯控实例启动服务、灯控实例监控服务和存储单元,用于进行灯控数据传输模块和灯控协议适配模块的管理协调和监控;
[0067] 其中,灯控数据传输模块和灯控协议适配模块的类型跟集控和单灯控协议相关,即不同的协议有不同的类型;灯控数据传输模块和灯控协议适配模块启动后则称为一个灯控数据传输程序实例和灯控协议适配程序实例,且相同类型的灯控数据传输程序实例或灯控协议适配程序实例作为实例集群进行管理。
[0068] 本发明实施例中,灯控数据传输模块和灯控协议适配模块由解耦照明管理平台的设备接入程序得到。设备接入程序是指照明管理平台中负责接受单灯控和集控的数据包以及下发指令的模块,对此模块依据模块内部工作内容的不同进行解耦分离,分成若干灯控数据传输模块和灯控协议适配模块。在解耦分离后,对接入设备的管控更为精细,同时也能更方便的进行横向扩容。
[0069] 其中灯控数据传输模块更靠近设备一侧,其启动后为灯控数据传输程序实例,主要做三件事情:
[0070] 1)维护与设备之间的通信链路,启动后的程序实例将在某个端口进行监听,等待集控和单灯控上线后会向此端口发送数据。通信链路的方式包括TCP方式、UDP方式、HTTP方式。其中TCP方式下,设备侧要与灯控数据传输程序实例保持长链接,在指令下发时需要保持与上行的灯控数据传输程序实例一致。
[0071] 2)上行数据,对接收到的数据包进行简单的数据识别和校验后,转发数据包给灯控协议适配程序实例。
[0072] 3)下发指令,接收灯控协议适配程序实例的指令,下发给指定的设备。
[0073] 灯控协议适配模块启动后为灯控协议适配程序实例,在灯控数据传输程序实例之上,其工作内容主要包括:
[0074] 1)按照协议解析灯控数据传输程序实例上行的设备数据包,转换为照明管理平台中的数据格式,并继续上行给具体的业务处理模块。
[0075] 2)按照协议封装业务处理模块下发的指令,并将封装好的指令包继续下发给灯控数据传输程序实例。
[0076] 3)进行一些复杂业务操作,如多条指令的封装、多个数据包的合并等。
[0077] 本发明实施例中,灯控数据传输程序实例和灯控协议适配程序实例是多对多的关系,即一个灯控数据传输程序实例可以将数据包发送给不同的灯控协议适配程序实例,一个灯控协议适配程序实例也可以接收或者下发多个灯控数据传输程序实例数据。一般而言,灯控协议适配程序实例的逻辑要更加复杂,是大批量设备接入的性能瓶颈,因此在实际部署中往往会启动更多的灯控协议适配程序实例。
[0078] 图1是一个示例,描述灯控数据传输程序实例、灯控协议适配程序实例以及业务处理模块的结构与关系。由图1可以看到,接入设备包括集控和单灯控,其中因为集控数量一般较少,所以为集控单独部署了一个集控灯控数据传输程序实例和灯控协议适配程序实例,另外部署了n个单灯控灯控数据传输程序实例和n个灯控协议适配程序实例,同类型灯控协议适配程序实例可以组成一个灯控协议适配程序实例集群,灯控数据传输程序实例同理。
[0079] 本发明实施例中,资源调度器是一个独立运行的服务进程,它不做具体的照明管理业务,只做灯控数据传输模块(灯控数据传输程序实例)和灯控协议适配模块(灯控协议适配程序实例)的管理协调和监控。资源调度器包含了三个模块,分别是灯控实例管理协调服务、灯控实例启动服务、灯控实例监控服务,另外还有存储单元用来保存数据。图2示出了资源调度器内部三个服务以及存储单元的主要关系,以及这三个服务与外部执行脚本、灯控数据传输程序实例、灯控协议适配程序实例的关系示意。
[0080] 如图2所示,灯控实例管理协调服务职责主要包括如下内容:设置灯控实例监控服务运行参数,接收灯控实例监控服务信息;对灯控实例启动服务发送启动命令启动灯控数据传输模块或灯控协议适配模块;设置灯控数据传输程序实例或灯控协议适配程序实例的吞吐量上限阈值、下限阈值和最大时延阈值。
[0081] 灯控实例启动服务用于接受灯控实例管理协调服务指令,调用执行脚本启动灯控数据传输模块或灯控协议适配模块,或向运行中的程序实例发送停止指令,并调用执行脚本停止程序实例进程;以及管理启动参数,包括灯控数据传输程序实例端口、灯控协议适配程序实例并发线程数,以及灯控数据传输程序实例与灯控协议适配程序实例的上报时间间隔等。
[0082] 灯控实例监控服务开放接口,用于接收各运行程序实例的状态上报,包括实例信息、吞吐量、时延等,并周期性的将信息汇报给灯控实例管理协调服务。同时灯控实例监控服务还用于维护对外的web监控页面,用户可以在此页面中看到各适配程序、传输程序的状态和处理量。
[0083] 存储单元存储各个灯控数据传输程序实例和灯控协议适配程序实例的参数,主要为灯控数据传输程序实例和灯控协议适配程序实例的启动预设信息和当前信息。举例,下述信息是存储单元中一条灯控数据传输程序实例的记录:
[0084]
[0085] 上述信息中,PID为该灯控数据传输程序实例在当前服务器中的进程ID;host_id为服务器的标识,通过这个标识可以确定唯一一台服务器信息如服务器IP、配置等;port为该灯控数据传输程序实例监听的端口;resource_id为该灯控数据传输程序实例关联的设备协议类型;keep_alive为是否保持该实例一直运行;need_run代表在开灯前是否应该被启动;max_capacity为该灯控数据传输程序实例预设的吞吐量上限值。
[0086] 上述字段只是实际中的一部分,其它字段不再列出。另外灯控协议适配程序实例信息字段与监听器实例字段有所不同,不一一列出。
[0087] 图2中执行脚本是预先编写好的启动(或停止)具体灯控协议适配程序实例或者灯控数据传输程序实例的脚本,灯控实例启动服务通过调用执行脚本来真正启动(或停止)灯控协议适配程序实例或者灯控数据传输程序实例。因为部署的服务器操作系统的不同,执行脚本也不相同,在linux操作系统中,脚本后缀为sh,而在windows中,脚本后缀为bat。
[0088] 本发明的另一个实施例提供一种支持自动扩缩容接入不同数量单灯控的方法,基于上述第一个实施例中的支持自动扩缩容接入不同数量单灯控的系统进行,包括如下步骤:
[0089] 一、在计划的亮灯时间前,资源调度器根据前一天的集控和单灯控接入情况,进行灯控数据传输模块和灯控协议适配模块的预启动。
[0090] 具体的,本发明实施例中,灯控实例管理协调服务以定时任务方式扫描存储单元中所有记录,并启动需要预先启动的灯控数据传输模块和灯控协议适配模块。具体步骤如下:
[0091] 首先需要启动灯控实例管理协调服务,获取灯控数据传输模块和灯控协议适配模块启动记录,判断是否需要启动这些模块,并将需要启动的模块放入启动列表。灯控实例管理协调服务以定时任务形式运行,运行时间一般比计划亮灯提前一个时间段。定时任务启动后,开始扫描存储单元中的所有灯控数据传输模块和灯控协议适配模块启动记录,对获取到的记录进行两个判断:need_run字段是否是1以及该条记录是否已经在运行,若need_run字段是1且该条记录没有在运行,则将其存放到待启动列表中。
[0092] 然后,灯控实例管理协调服务通知灯控实例启动服务调用执行脚本启动所述启动列表记录的灯控数据传输模块和灯控协议适配模块。灯控实例启动服务扫描启动列表中的记录,根据记录的字段确定启动参数,如:根据host_id字段确定待启动的模块(程序实例)运行的目标服务器从而确定服务器的操作系统和登录账号;根据resource_id确定具体启动的模块(程序实例)类型等,并将参数传入到执行脚本中进行具体模块(程序实例)的启动。
[0093] 最后,执行脚本回传启动结果,灯控实例监控服务对新启动的灯控数据传输程序实例和灯控协议适配程序实例进行监测。执行脚本回传启动模块后程序实例的进程ID,灯控实例启动服务将进程ID更新到存储单元中。启动的程序实例也根据预设参数向灯控实例监控服务进行各种状态数据的周期性上报。
[0094] 图3是一个示例,表明启动一个适配程序A实例的过程。
[0095] 二、建立业务处理模块、灯控数据传输程序实例和灯控协议适配程序实例之间的数据传输关系。
[0096] 在具体实施中,灯控协议适配程序实例与灯控数据传输程序实例是动态增减的,因此业务处理模块与灯控协议适配程序实例之间、灯控协议适配程序实例与灯控数据传输程序实例之间需要互相知道对方的传输地址,以传输单灯控和集控的上行数据包或下发业务处理模块的指令包。
[0097] 一种具体实现方案为:业务处理模块、灯控协议适配程序实例和灯控数据传输程序实例之间通过消息队列服务来建立数据传输关系,具体包括:
[0098] 资源调度器在启动灯控协议适配模块和灯控数据传输模块前依据规则建立好消息队列,并将队列名字作为启动参数之一传送给执行脚本,由执行脚本在执行启动命令时传入到具体的灯控协议适配模块和灯控数据传输模块中,灯控协议适配模块和灯控数据传输模块启动后的程序实例基于所述消息队列进行数据传输。消息队列的数量与接入的设备类型、协议类型、传输方式种类的数量相关。
[0099] 图4是一个示例,表示了利用消息队列进行信息的传递后,系统的整体结构示意。图中,有灯控协议适配程序A实例集群,包括两个灯控协议适配程序A实例;灯控协议适配程序B实例集群,包含三个灯控协议适配程序B实例;灯控数据传输程序A实例集群,包含两个灯控数据传输程序A实例;灯控数据传输程序B实例集群,也包含两个灯控数据传输程序B实例。其中,在灯控协议适配程序实例与业务处理模块的通信中,所有灯控协议适配程序实例共用一个上行消息队列向业务处理模块发送转换后的设备数据包,业务处理模块发送的下行数据包则根据灯控协议适配程序实例集群的不同向不同的消息队列进行下发。在灯控数据传输程序实例与灯控协议适配程序实例的通信中,同一resource_id的灯控数据传输程序实例与灯控协议适配程序实例集群间共用相同的消息队列。特殊的,当设备传输方式采用TCP的时候,下行的消息队列与灯控数据传输程序实例一一对应,灯控协议适配程序实例需要根据集控和单灯控设备连接的灯控数据传输程序实例来确定下发的消息队列。
[0100] 另外一种具体实现方案是开放灯控协议适配程序实例、灯控数据传输程序实例、业务处理模块的Http接口地址,三者通过调用Http接口方式进行单灯控和集控的消息包的上报和命令的下发。具体实现方案为:
[0101] 预先确定好灯控协议适配程序实例、灯控数据传输程序实例的接口地址,包括IP和端口;
[0102] 在启动新的灯控协议适配程序实例时将业务处理模块和灯控数据传输程序实例的接口地址作为启动参数传入,并将新创建的灯控协议适配程序实例的接口地址返回给业务处理模块;在启动新的灯控数据传输程序实例时将灯控协议适配程序实例的接口地址作为启动参数传入。
[0103] 三、根据资源调度器中灯控实例监控服务获取到的负载情况,动态的新增或者减少灯控数据传输程序实例和灯控协议适配程序实例的启用数量。
[0104] 本发明实施例中,基于灯控实例监控服务获取的负载情况,灯控实例管理协调服务判断是否进行程序实例的启动或关闭。负载情况主要包括灯控协议适配程序实例和灯控数据传输程序实例周期性上报的过去一段时间处理的数据包数量即吞吐量以及这段时间内处理数据包所用的平均时长即处理时延。特殊的,如果某个程序实例超出一定时间没有上报负载情况,则认为该服务已经崩溃。
[0105] 灯控实例监控服务获取这些信息后,按照实例集群划分情况进行处理,并按一定数据格式继续周期性的向灯控实例管理协调服务上报。灯控实例管理协调服务基于预设的灯控数据传输程序实例或灯控协议适配程序实例的吞吐量上、下限阈值和最大时延阈值,以及监测的程序实例的实际吞吐量、处理时延判断是否进行程序实例的启动或关闭,具体包括:
[0106] 如果程序实例吞吐量大于预设吞吐量上限阈值,且处理时延大于预设最大时延,则判断该程序实例需要进行分流。分流分为两种情况:
[0107] 如果当前程序实例所在的实例集群的总吞吐量大于集群中所有程序实例预设上限吞吐量之和,则启动新的实例;
[0108] 如果当前程序实例所在的实例集群的总吞吐量小于集群中所有程序实例预设上限吞吐量之和,则进行负载均衡调配,降低当前程序实例的数据包处理比重。
[0109] 如果程序实例吞吐量大于预设吞吐量上限阈值,且处理时延小于预设最大时延,则提高该程序实例预设的吞吐量上限阈值;
[0110] 如果程序实例吞吐量小于预设吞吐量下限阈值,则判断该程序实例可以被合并;
[0111] 特殊的,如果程序实例被判断为崩溃状态,则重新启动该程序实例。
[0112] 然后,根据上述判断结果,进行灯控数据传输模块或灯控协议适配模块的启动,以及灯控协议适配程序实例或灯控数据传输程序实例的关闭。分为以下几类:
[0113] 当需要启动灯控协议适配模块时,灯控实例管理协调服务调用灯控实例启动服务启动新的灯控协议适配模块为灯控协议适配程序实例,并建立与业务处理模块和灯控数据传输程序实例之间的数据传输关系;
[0114] 当需要启动灯控数据传输模块时,灯控实例管理协调服务调用灯控实例启动服务启动新的灯控数据传输模块为灯控数据传输程序实例,并建立与业务处理模块和灯控协议适配程序实例之间的数据传输关系,同时灯控实例管理协调服务通知业务处理模块对相关的设备下发上行地址变更的命令;
[0115] 当需要关闭灯控协议适配程序实例时,灯控实例启动服务先向目标程序实例发送关闭命令,目标程序实例接收到命令后停止接收外部数据,待处理完所有当前数据后,灯控实例启动服务调用执行脚本传入该实例所在的服务器IP与进程ID,由执行脚本结束程序实例进程;
[0116] 当需要关闭灯控数据传输程序实例时,灯控实例管理协调服务通知业务处理模块下发变更上行地址指令,将所有连接到此灯控数据传输程序实例的设备变更连接到当前实例集群中其它的灯控数据传输程序实例中,然后执行关闭步骤,方法与关闭灯控协议适配程序实例一致;
[0117] 当程序实例崩溃需要重启时,灯控实例启动服务调用执行脚本传入该程序实例所在的服务器IP与进程ID,由执行脚本结束程序实例进程,灯控实例启动服务再根据存储的程序实例记录启动该程序实例。
[0118] 通用的,每当执行上述动作后,都需要在存储单元进行相应程序实例记录的数据变更。
[0119] 图5示出了一个关闭灯控数据传输程序实例的具体实施过程。
[0120] 作为特殊情况,本发明实施例中,动态的新增或者减少灯控数据传输程序实例和灯控协议适配程序实例的启用数量还包括:
[0121] 若当前时间进入关灯状态时间段,则停止所有灯控协议适配程序实例和灯控数据传输程序实例,但该程序实例的参数中判断保持实例运行的字段值为运行(例如keep_alive字段值为1时)的除外。
[0122] 作为进一步的优选实施方案,本发明实施例中,所述方法还包括:
[0123] 四、记录存储系统运行情况,指导下一次亮灯周期的系统运行。
[0124] 具体的,在亮灯周期中,资源调度器对各个灯控协议适配程序实例记录和灯控数据传输程序实例记录进行保持存活判断,以及程序实例是否需要在下次开灯时进行初始化启动:
[0125] 如果一个程序实例是该类型协议的唯一一个程序实例,则判断该程序实例需要一直存活;
[0126] 资源调度器设置延迟时间,在开灯时间的延迟时间后,为存活的程序实例设置其下次开灯时进行初始化启动,其它程序实例设置为不启动。
[0127] 在一个具体示例中,设置该延迟时间为60分钟,即判断开灯60分钟后,系统调整为最佳状态,然后设置当前运行的程序实例的need_run值为1,其它实例设置为0。
[0128] 以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。