发明内容
本发明的目的在于提供一种设备指令下发方法、系统和服务器,可以保证指令下发的有序性,同时提升了指令下发的可靠性。
第一方面,本发明提供一种设备指令下发方法,方法包括:响应于用户发起的指令下发请求,生成与目标下发指令对应的第一指令编号;基于第一指令编号和目标下发指令确定有效的指令下发任务;将有效的指令下发任务发送至目标设备,并通过目标设备判断第一指令编号与已接收最大指令编号是否连续;如果否,则响应来自目标设备的指令拉取请求,以便执行连续的指令下发。
在可选的实施方式中,在响应于用户发起的指令下发请求之前,方法还包括:为每个目标设备创建对应的指令队列;指令队列用于存储目标下发指令以及与目标下发指令对应的指令编号。
在可选的实施方式中,响应于用户发起的指令下发请求,生成与目标下发指令对应的第一指令编号的步骤,包括:接收用户发起的指令下发请求;对指令下发请求进行有效性验证;响应验证通过的指令下发请求,并生成与目标下发指令对应的第一指令编号。
在可选的实施方式中,基于第一指令编号和目标下发指令确定有效的指令下发任务的步骤,包括:基于第一指令编号、目标下发指令和目标设备的编号确定初始的指令下发任务;判断目标设备是否在线;如果是,则确定初始的指令下发任务为有效的指令下发任务。
在可选的实施方式中,设备指令下发方法还包括:如果第一指令编号与已接收最大指令编号连续,则将目标下发指令下发至目标设备,以使目标设备执行目标下发指令。
在可选的实施方式中,在目标设备执行目标下发指令之后,方法还包括:接收来自目标设备的反馈请求;基于反馈请求更新目标下发指令的指令状态。
在可选的实施方式中,响应来自目标设备的指令拉取请求,以便执行连续的指令下发的步骤,包括:接收目标设备的指令拉取请求;对指令拉取请求进行解析,确定待下发指令;其中,待下发指令对应的第二指令编号为将已接收最大指令编号和第一指令编号构成连续编号的指令编号;将待下发指令下发至目标设备,以便执行连续的指令下发。
第二方面,本发明提供一种设备指令下发系统,系统包括任务队列管理模块,以及分别与任务队列管理模块连接的指令下发接口模块、指令发送模块和指令获取模块;任务队列管理模块用于为目标设备创建对应的指令队列;指令队列包括目标下发指令和与目标下发指令对应的第一指令编号;指令下发接口模块用于基于第一指令编号、目标下发指令和目标设备的编号确定有效的指令下发任务;指令发送模块用于将有效的指令下发任务发送至目标设备;指令获取模块用于在第一指令编号与已接收最大指令编号不连续时,响应来自目标设备的指令拉取请求,获取连续的目标指令。
在可选的实施方式中,设备指令下发系统还包括:与任务队列管理模块连接的指令结果反馈模块;指令结果反馈模块用于接收目标设备执行目标下发指令后的指令反馈状态。
第三方面,本发明提供一种服务器,包括处理器和存储器;存储器上存储有计算机程序,计算机程序在被处理器运行时执行如前述实施方式任一项的方法。
本发明提供的设备指令下发方法、系统和服务器,首先通过服务器响应于用户发起的指令下发请求,生成与目标下发指令对应的第一指令编号,然后基于第一指令编号和目标下发指令确定有效的指令下发任务,进而将有效的指令下发任务发送至目标设备,通过目标设备判断第一指令编号与已接收最大指令编号是否连续,并在第一指令编号与目标设备已接收最大指令编号不连续时,响应来自目标设备的指令拉取请求,以便执行连续的指令下发。上述方式可以保证指令下发的有序性,同时可以在指令丢失的情况下,通过指令拉取的方法进行补救,能够保证下发任务不丢失,提升了指令下发的可靠性。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
在本发明的描述中,需要说明的是,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
下面结合附图,对本发明的一些实施方式作详细说明。在不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。
为便于理解,首先对本发明实施例提供的一种设备指令下发系统进行详细说明,参见图1所示的一种设备指令下发系统的结构示意图,该系统主要包括任务队列管理模块10,以及分别与任务队列管理模块10连接的指令下发接口模块20、指令发送模块40和指令获取模块30。其中,指令下发接口模块20首先接收应用端用户的指令下发请求,该请求包括指定的设备及要下发的指令,或者,指定的设备组及要下发的指令集。当指令下发接口模块20接收到指令下发请求后,对请求进行必要的校验,诸如包括入参合法性、完整性验证,用户权限验证,并在通过后将指令下发请求发送给任务队列管理模块10。
任务队列管理模块10用于为目标设备创建对应的指令队列,也即在任务队列管理模块10中,为每一个目标设备(也即与该系统通信连接的设备)维护一个有序的指令队列,该指令队列中的每一个指令都有一个队列内唯一的序号(也即安全标识符(SecurityIdentifiers,SID)作为第一指令编号),且保证SID是递增的数字类型的编号,类似于数组的下标,对于对指令进行标识。任务队列管理模块10收到用户触发的指令下发请求后,将分配一个新的SID,并将目标下发指令和新的SID存储在该指令队列中(也即存库),也即,指令队列包括目标下发指令和与目标下发指令对应的第一指令编号,其中,存库的目标指令的初始状态为下发。然后将SID返回给至指令下发接口模块20。
进一步,指令下发接口模块20还用于基于第一指令编号、目标下发指令和目标设备的编号确定有效的指令下发任务,其中,有效的指令下发任务也即目标设备在线时的指令下发任务。具体的,指令下发接口模块20接口在接收到SID后,跟设备ID(也即目标设备的编号)进行拼接,生成初始的指令下发任务(也即taskId),该taskId可以用于查询目标指令下发的最终结果。然后将在线的目标设备接收到的指令下发任务确定为有效的指令下发任务。
当确定了有效的指令下发任务后,通过指令发送模块40将有效的指令下发任务发送至目标设备,在实际应用时,也即将该任务对应的指令发送至目标设备。当目标设备接收到目标下发指令后,首先检查本地的已经接收的指令对应的最大的SID是否和新收到的指令的SID连续,如果连续,则执行该指令,并反馈状态;否则触发拉取模式,到服务器上拉取不连续的指令。在进行拉取模式时,通过指令获取模块30响应来自目标设备的指令拉取请求,当服务器的指令获取模块30收到目标设备的指令拉取请求后,根据请求携带的序号依次按序给出连续序号的指令,从而获取连续的目标指令。
此外,本发明实施例还提供了另一种设备指令下发系统的结构,参见图2所示的另一种设备指令下发系统的结构示意图,该设备指令下发系统100还包括:与任务队列管理模块10连接的指令结果反馈模块50,当目标设备拿全指令后按序执行,给出指令执行反馈,指令结果反馈模块50接收目标设备执行目标下发指令后的指令反馈状态,该反馈进入指令结果反馈模块50中进行处理,也即在对应的指令队列中找出下发任务,打上标记,并向应用端(或客户端)推送指令下发结果。
需要注意的是,当将多个设备维护为一个设备组时,可以在指令队列管理模块中增加设备组的共享队列,这样就可以很简单的实现为一批设备做指令下发的场景。此外,在指令队列管理中可以增加周期任务队列,可以实现指令下发的周期执行,从而用来实现设备的周期检测、定期触发指令等场景。
综上,本实施例提供的设备指令下发系统,可以在指令下发中增加任务队列,可以统一实现在线下发、离线缓存、有序下发、周期下发、多设备下发等场景,可以提供完整的指令执行日志。提升了设备在线时指令下发的及时性,同时,如果在极端情况下指令丢失,还可以通过指令拉取的方法进行补救,能够保证下发任务不丢失。由于任务队列管理模块中的与目标下发指令对应的SID均为有序连续的编号,从而可以保证指令下发的有序性,为用户针对设备进行指令编排提供了技术基础,以便针对设备操作流程(诸如进行先干什么后干什么的)进行类脚本的时序控制。
本发明实施例还提供了一种设备指令下发方法,为便于理解,参见图3所示的一种设备指令下发方法的流程示意图,该方法主要包括以下步骤S302至步骤S308:
步骤S302,响应于用户发起的指令下发请求,生成与目标下发指令对应的第一指令编号。
指令下发请求为用户通过输入设备进行输入的请求,该请求可以包括指定的设备以及与该指定的设备对应的要下发的指令,或者,指定的设备组以及与该指定的设备组对应的要下发的指令集。在实际应用时,为了保证指令下发请求的合法性,在接收到用户发起的指令下发请求后,可以首先对该指令下发请求进行合法性验证,诸如可以包括入参合法性验证、完整性验证以及用户权限验证等等。在合法性验证之后,响应用户发起的指令下发请求。可以理解的是,目标下发指令为与指令下发请求对应的指令,第一指令编号为与目标下发指令对应的编号,诸如可以采用SID作为第一指令编号。
步骤S304,基于第一指令编号、目标下发指令和目标设备的编号确定有效的指令下发任务。
可以理解的是,在确定下发任务时需要有对应的目标设备,并且每个目标设备均对应有设备ID,以便在指令下发时可以准确查询到需要下发指令的目标设备。在一种实施方式中,可以将上述第一指令编号、目标下发指令以及目标设备的编号进行拼接,生成初始的指令下发任务(也即taskID)。然后检查目标设备是否在线,当设备为在线状态时,将上述初始的指令下发任务确定为有效的指令下发任务。如果设备不在线,则丢弃该初始的指令下发任务对应的目标下发指令。
步骤S306,将有效的指令下发任务发送至目标设备,并通过目标设备判断第一指令编号与已接收最大指令编号是否连续。
在一种实施方式中,通过上述指令发送模块接收指令下发任务,并在该指令下发任务有效时,发送至目标设备。当目标设备收到指令下发任务对应的目标指令后,为了保证目标设备接收的指令的连续性,在实际应用时,首先检查目标设备本地的当前最大的SID(也即已接收最大指令编号)与新收到的指令的SID(也即下发任务中的第一指令编号)是否连续。
步骤S308,如果否,则响应来自目标设备的指令拉取请求,以便执行连续的指令下发。
可以理解的是,当目标设备本地的当前最大的SID(也即已接收最大指令编号)与新收到的指令的SID(也即下发任务中的第一指令编号)不连续时,说明目标设备接收的指令出现丢失的情况,此时,目标设备需要向服务器发起指令拉取请求,该请求中携带有丢失的指令的编号,服务器通过响应来自目标设备的指令拉取请求,依次按序给出连续序号的指令,以便执行连续的指令下发。
本发明实施例提供的设备指令下发方法,首先通过服务器响应于用户发起的指令下发请求,生成与目标下发指令对应的第一指令编号,然后基于第一指令编号和目标下发指令确定有效的指令下发任务,进而将有效的指令下发任务发送至目标设备,通过目标设备判断第一指令编号与已接收最大指令编号是否连续,并在第一指令编号与目标设备已接收最大指令编号不连续时,响应来自目标设备的指令拉取请求,以便执行连续的指令下发。上述方式可以保证指令下发的有序性,同时可以在指令丢失的情况下,通过指令拉取的方法进行补救,能够保证下发任务不丢失,同时提升了指令下发的可靠性。
在响应用户发起的指令下发请求之前,首先通过任务队列管理模块为每个目标设备创建对应的指令队列,其中,该指令队列用于存储目标下发指令以及与目标下发指令对应的指令编号。每个与服务器通信连接的目标设备均在服务器有对应的指令队列,该队列中存储有至少一条指令,以及与每条指令对应的该指令队列内的唯一序号(也即指令编号)。在一种实施方式中,指令入队列可以参见图4所示的一种指令入队列的示意图,首先接收由用户进行用户指令输入(也即用户发起指令下发请求),然后对指令下发请求进行有效性验证(也即业务校验),诸如可以包括入参校验、完整性校验、用户权限校验,通过响应验证通过的指令下发请求,并生成与目标下发指令对应的第一指令编号(SID),将指令和指令与SID的关系入队列(也即入库)。当将指令入队列后,可以将指令以推模式发送给设备(也即上述目标设备)。
在实际应用时,如果第一指令编号与已接收最大指令编号连续,则将目标下发指令下发至目标设备,以使目标设备执行目标下发指令。当目标设备执行目标下发指令后,触发反馈流程,其中,该反馈流程可以参见图5所示的一种反馈流程的示意图,服务器接收来自目标设备的反馈请求,通过对该反馈请求进行解析,得到设备ID和反馈请求中的SID,根据设备ID找到对应的指令队列,并根据反馈请求中的SID找到对应的指令,从而可基于反馈请求更新目标下发指令的指令状态。此外,还可以异步通知用户和应用端。
如果第一指令编号与已接收最大指令编号不连续,则触发拉模式下的指令获取(也即向服务器发起指令拉取请求),拉模式下的指令获取如图6所示,首先接收目标设备的指令拉取请求,对指令拉取请求进行解析,确定待下发指令,其中,待下发指令对应的第二指令编号为将已接收最大指令编号和第一指令编号构成连续编号的指令编号。在确定待下发指令时,可以首先根据解析后的指令拉取请求确定设备ID,根据设备ID找到对应的指令队列,进行按顺序取出该指令队列(也即图中设备队列)中的待下发指令,并将待下发指令下发至目标设备,以便执行连续的指令下发。
此外,指令下发接口模块收到SID后,跟设备ID拼接成指令下发任务的taskId,表示一次指令下发任务,以便通过taskId查询下发的最终结果。在一种实施方式中,查询指令下发结果可以参见图7所示,首先输入taskID,按照taskID的生成规则拆分出设备ID和SID,然后根据设备ID找到对应的指令队列,并根据SID找到对应的指令和指令下发结果。
本发明实施例提供了一种服务器,具体的,该服务器包括处理器和存储装置;存储装置上存储有计算机程序,计算机程序在被所述处理器运行时执行如上所述实施方式的任一项所述的方法。
图8为本发明实施例提供的一种服务器的结构示意图,该服务器800包括:处理器80,存储器81,总线82和通信接口83,所述处理器80、通信接口83和存储器81通过总线82连接;处理器80用于执行存储器81中存储的可执行模块,例如计算机程序。
其中,存储器81可能包含高速随机存取存储器(RAM,RandomAccessMemory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口83(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。
总线82可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
其中,存储器81用于存储程序,所述处理器80在接收到执行指令后,执行所述程序,前述本发明实施例任一实施例揭示的流过程定义的装置所执行的方法可以应用于处理器80中,或者由处理器80实现。
处理器80可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器80中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器80可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器81,处理器80读取存储器81中的信息,结合其硬件完成上述方法的步骤。
本发明实施例所提供的设备指令下发方法、系统和服务器的计算机程序产品,包括存储了处理器可执行的非易失的程序代码的计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统具体工作过程,可以参考前述实施例中的对应过程,在此不再赘述。
本发明实施例所提供的可读存储介质的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。