CN109739482B - 一种基于动态语言的业务逻辑执行***及方法 - Google Patents
一种基于动态语言的业务逻辑执行***及方法 Download PDFInfo
- Publication number
- CN109739482B CN109739482B CN201811623920.3A CN201811623920A CN109739482B CN 109739482 B CN109739482 B CN 109739482B CN 201811623920 A CN201811623920 A CN 201811623920A CN 109739482 B CN109739482 B CN 109739482B
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- service
- service virtual
- coroutine
- command request
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种基于动态语言的业务逻辑执行***及方法,包括多个业务逻辑执行装置,每个业务逻辑执行装置包括调度单元和多个业务虚拟机:调度单元,接收命令请求,并根据业务和虚拟机映射表,将命令请求加入到对应的业务虚拟机的命令请求缓冲区内,每个业务虚拟机包括:业务虚拟机线程,定时查看命令请求缓冲区内是否有新的命令请求,当有新的命令请求、且空闲协程队列中有空闲协程时,从空闲协程队列中提取一个协程对象,然后将新的命令请求数据注入到被提取的协程中;命令请求缓冲区,保存命令请求;空闲协程队列,保存业务虚拟机的空闲协程。本发明属于信息技术领域,能为大规模应用***提供一个高可靠、高稳定的业务逻辑执行环境。
Description
技术领域
本发明涉及一种基于动态语言的业务逻辑执行***及方法,属于信息技术领域。
背景技术
随着互联网技术的快速发展,基于动态语言(如Lua语言)的业务逻辑开发已得到广泛的应用,并成为许多大规模业务***的主流开发模式。为保证业务***的高可用性、高性能和方便维护,通常需要一个非常稳定的业务逻辑执行环境作为支撑。
如何给业务逻辑层提供一个高可靠稳定的执行环境?目前也有一些简单的实现方法:
首先,将动态语言嵌入到一个特定的虚拟机中动态执行,可以在业务逻辑出错时,重启虚拟机,然后重新加载业务;
其次,在业务中尽量编写简单的逻辑,防止出现与第三方***之间非常耗时的调用逻辑导致业务请求大量堆积而严重影响***性能的情况。同时,通过硬件及网络优化等手段,确保与业务逻辑交互的其他***(数据库等)能够快速的响应业务请求;
最后,通过手工给***发信号令其重新加载配置的手段,实现被动的业务逻辑升级。
以上这些简单的实现方式对于一般小规模的***来说是可行的,但是对于大规模(例如上百的开发人员,承载几十甚至几百个复杂业务)的业务逻辑执行环境实现来说还是非常捉襟见肘的。
因此,如何为大规模的应用***提供一个高可靠、高稳定的业务逻辑执行环境,已成为技术人员急需解决的技术问题。
发明内容
有鉴于此,本发明的目的是提供一种基于动态语言的业务逻辑执行***及方法,能为大规模的应用***提供一个高可靠、高稳定的业务逻辑执行环境。
为了达到上述目的,本发明提供了一种基于动态语言的业务逻辑执行***,包括有多个业务逻辑执行装置,每个业务逻辑执行装置包括有调度单元和多个加载不同业务的业务虚拟机:
调度单元,用于接收外部装置发送来的命令请求,并从命令请求中提取业务名,然后根据业务和虚拟机映射表,将所述命令请求加入到对应的业务虚拟机的命令请求缓冲区内,
每个业务虚拟机内预置若干数量的协程,业务虚拟机进一步包括有:
业务虚拟机线程,用于定时查看自身的命令请求缓冲区内是否有新的命令请求,当命令请求缓冲区内有新的命令请求、且自身的空闲协程队列中有空闲的协程时,从空闲协程队列中提取一个协程对象,然后将新的命令请求数据注入到被提取的协程中,由被提取的协程执行对应的业务逻辑;
命令请求缓冲区,用于保存由调度单元发送过来的命令请求;
空闲协程队列,用于保存业务虚拟机的当前为空闲状态的协程,
业务虚拟机还包括有:
协程,用于执行业务逻辑,在执行业务逻辑过程中向外部装置发送调用消息后,修改自身状态为挂起状态,并加入到挂起协程队列中,再由业务虚拟机线程继续执行其他已就绪的协程;
响应事件缓冲区,用于保存协程在执行业务逻辑处理过程中向外部装置发送调用消息后,外部装置所返回的响应事件消息;
挂起协程队列,用于保存业务虚拟机的当前为挂起状态的协程,
协程在执行业务逻辑过程中向外部装置发送调用消息时,在调用消息中添加协程所属的业务虚拟机编号和协程自身编号,当调用消息中不能添加信息时,则将业务虚拟机编号和协程自身编号写入消息映射表,
当业务逻辑执行装置内的调度单元接收到外部装置返回的响应事件消息时,从响应事件消息中提取业务虚拟机编号、或者查询消息映射表获得业务虚拟机编号,然后将响应事件消息加入到对应业务虚拟机的响应事件缓冲区中,
业务虚拟机线程查看自身的响应事件缓冲区内是否有新的响应事件消息,如果有,则从响应事件消息中提取协程编号、或者查询消息映射表获得协程编号,然后将响应事件数据注入到挂起协程队列中对应的协程中,并恢复该协程的业务逻辑代码执行,协程继续执行业务逻辑,
业务逻辑执行装置还包括有:
业务虚拟机管理器,用于定时扫描业务逻辑执行装置内的每个业务虚拟机,判断是否每个业务虚拟机的健康指标超过健康阈值或业务虚拟机线程出现运转异常,如果是,则健康指标超过健康阈值或业务虚拟机线程出现运转异常的业务虚拟机是异常虚拟机,创建一个新的加载相同业务逻辑代码的业务虚拟机实例,并销毁异常虚拟机;如果否,则继续扫描下一个业务虚拟机,
其中,业务虚拟机的健康指标包括但不限于:消息处理总量、消息处理成功量、消息处理失败量、消息处理超时量,
判断业务虚拟机线程是否出现运转异常进一步包括但不限于:判断业务虚拟机指标是否正常、或判断业务虚拟机线程运转心跳是否正常,
业务虚拟机线程运转心跳是否正常通过心跳埋点来检查,即业务虚拟机线程在空闲、处理新命令请求、处理新响应事件时,更新心跳埋点以向业务虚拟机管理器上报心跳时间,当业务虚拟机管理器检测到业务虚拟机线程运转心跳的更新时间超过更新时间阈值,则表示业务虚拟机线程出现运转异常,业务逻辑执行装置还包括有:
业务虚拟机管理器,定时扫描业务逻辑代码文件,并判断每个业务逻辑代码文件是否发生了变化,如果发生了变化,则根据变化后的业务文件,创建一个新的业务虚拟机,读取业务与虚拟机映射表中该业务对应的原业务虚拟机,将业务与虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机,
业务逻辑执行装置还包括有:
业务虚拟机管理器,定时扫描API支撑库文件,并判断每个API支撑库是否发生了变化,如果发生了变化,则获取所有依赖该发生了变化的API支撑库的业务虚拟机,并由获取的所有业务虚拟机构成原业务虚拟机列表,然后从原业务虚拟机列表中逐一提取每个原业务虚拟机,对所提取的原业务虚拟机的处理如下:根据变化后的API支撑库,创建一个新的业务虚拟机,将业务与虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机。
为了达到上述目的,本发明还提供了一种基于动态语言的业务逻辑执行方法,业务逻辑执行装置包括有调度单元和多个负责不同业务的业务虚拟机,每个业务虚拟机内预置若干数量的协程,包括有:
步骤A1、调度单元从接收到的命令请求中提取业务名,然后根据业务和虚拟机映射表,将所述命令请求加入到对应的业务虚拟机的命令请求缓冲区内;
步骤A2、每个业务虚拟机线程定时查看自身的命令请求缓冲区内是否有新的命令请求,如果是,则继续下一步;如果否,则间隔一段时间后,再转向步骤A2;
步骤A3、业务虚拟机线程查看自身的空闲协程队列中是否有空闲的协程,如果是,则从空闲协程队列中提取一个协程对象,然后将新的命令请求数据注入到被提取的协程中,再继续下一步;如果否,则间隔一段时间后,再转向步骤A2;
步骤A4、被提取的协程执行对应的业务逻辑,
步骤A4中,协程当向外部装置发送调用消息后,修改自身状态为挂起状态,并加入到挂起协程队列中,
步骤A4中,协程向外部装置发送调用消息时,在调用消息中添加协程所属的业务虚拟机编号和协程自身编号,当调用消息中不能添加信息时,则将业务虚拟机编号和协程自身编号写入消息映射表,
当业务逻辑执行装置内的调度单元接收到外部装置返回的响应事件消息时,从响应事件消息中提取业务虚拟机编号、或者查询消息映射表获得业务虚拟机编号,然后将响应事件消息加入到对应业务虚拟机的响应事件缓冲区中,
还包括有:
每个业务虚拟机线程查看自身的响应事件缓冲区内是否有新的响应事件消息,如果有,则从响应事件消息中提取协程编号、或者查询消息映射表获得协程编号,然后将响应事件数据注入到挂起协程队列中对应的协程中,并恢复该协程的业务逻辑代码执行,协程继续执行业务逻辑,
对每个业务虚拟机的运行状态进行监控管理,包括有:
业务虚拟机管理器定时扫描业务逻辑执行装置内的每个业务虚拟机,判断是否每个业务虚拟机的健康指标超过健康阈值或业务虚拟机线程出现运转异常,如果是,则健康指标超过健康阈值或业务虚拟机线程出现运转异常的业务虚拟机是异常虚拟机,创建一个新的加载相同业务逻辑代码的业务虚拟机实例,并销毁异常虚拟机;如果否,则继续扫描下一个业务虚拟机,
其中,业务虚拟机的健康指标包括但不限于:消息处理总量、消息处理成功量、消息处理失败量、消息处理超时量,
判断业务虚拟机线程是否出现运转异常进一步包括但不限于:判断业务虚拟机指标是否正常、或判断业务虚拟机线程运转心跳是否正常,
业务虚拟机线程运转心跳是否正常通过心跳埋点来检查,即业务虚拟机线程在空闲、处理新命令请求、处理新响应事件时,更新心跳埋点以向业务虚拟机管理器上报心跳时间,当业务虚拟机管理器检测到业务虚拟机线程运转心跳的更新时间超过更新时间阈值,则表示业务虚拟机线程出现运转异常,
对业务逻辑代码文件采用动态替换的模式实现升级的过程如下:
业务虚拟机管理器定时扫描业务逻辑代码文件,并判断每个业务逻辑代码文件是否发生了变化,如果发生了变化,则根据变化后的业务文件,创建一个新的业务虚拟机,读取业务与虚拟机映射表中该业务对应的原业务虚拟机,将业务与虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机,
对API支撑库文件采用动态替换的模式实现升级的过程如下:
业务虚拟机管理器定时扫描API支撑库文件,并判断每个API支撑库是否发生了变化,如果发生了变化,则获取所有依赖该发生了变化的API支撑库的业务虚拟机,并由获取的所有业务虚拟机构成原业务虚拟机列表,然后从原业务虚拟机列表中逐一提取每个原业务虚拟机,对所提取的原业务虚拟机的处理如下:根据变化后的API支撑库,创建一个新的业务虚拟机,将业务与虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机。
与现有技术相比,本发明的有益效果是:本发明采用分层架构,在业务执行单元中引入虚拟机机制,在内部构造虚拟机池,每个业务虚拟机只负责一个业务的加载和执行,从而实现业务之间的隔离;在业务虚拟机中引入协程,实现协程池,每个协程负责执行被分配到的命令调用,从而实现命令调用之间的隔离,保证***的高度稳定性;对协程、业务虚拟机的运行状态进行监控管理,一旦发现其健康指标超过健康阈值,则对协程、业务虚拟机进行重建,同时,业务逻辑或API库可以无损升级,从而为业务逻辑提供了高可靠的执行环境。
附图说明
图1是业务逻辑执行装置的组成结构示意图。
图2是业务虚拟机的组成结构示意图。
图3本发明一种基于动态语言的业务逻辑执行方法的流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
采用动态语言进行业务逻辑开发,可以有效地提高开发和测试效率,但动态语言的灵活性也在一定程度上造成了业务执行环境的不稳定。针对Lua等动态语言的特性,本发明为每个业务分配一个独立的业务虚拟机,并在每个业务虚拟机内预置一定数量的协程,业务虚拟机当收到新的命令请求时,会绑定一个空闲的协程到此请求对象上,然后由此协程负责调用对应的业务逻辑处理此请求对象,本发明中的动态语言可以包括不限于:Lua语言。
本发明一种基于动态语言的业务逻辑执行***,包括有多个业务逻辑执行装置,如图1所示,每个业务逻辑执行装置可以包括有调度单元和多个加载不同业务的业务虚拟机:
调度单元,用于接收外部装置发送来的命令请求,并从命令请求中提取业务名,然后根据业务和虚拟机映射表,将所述命令请求加入到对应的业务虚拟机的命令请求缓冲区内,
每个业务虚拟机内预置若干数量的协程,如图2所示,业务虚拟机进一步包括有:
业务虚拟机线程,用于定时查看自身的命令请求缓冲区内是否有新的命令请求,当命令请求缓冲区内有新的命令请求、且自身的空闲协程队列中有空闲的协程时,从空闲协程队列中提取一个协程对象,然后将新的命令请求数据注入到被提取的协程中,由被提取的协程执行对应的业务逻辑;
协程,用于执行业务逻辑,在执行业务逻辑过程中向外部装置发送调用消息后,修改自身状态为挂起状态,并加入到挂起协程队列中,再由业务虚拟机线程继续执行其他已就绪的协程;由于协程在执行业务逻辑过程中调用外部装置(比如数据库、内存库、接口调用等)后,需等待外部装置返回响应事件消息后才能继续执行业务逻辑,此协程会让出控制权,从而执行其他已就绪协程;
命令请求缓冲区,用于保存由调度单元发送过来的命令请求;
响应事件缓冲区,用于保存协程在执行业务逻辑处理过程中向外部装置发送调用消息后,外部装置所返回的响应事件消息;
空闲协程队列,用于保存业务虚拟机的当前为空闲状态的协程;
挂起协程队列,用于保存业务虚拟机的当前为挂起状态的协程。
协程在执行业务逻辑过程中向外部装置发送调用消息时,可以在调用消息中添加协程所属的业务虚拟机编号和协程自身编号,当调用消息中不能添加信息(比如数据库调用消息)时,则将业务虚拟机编号和协程自身编号写入消息映射表,这样,当业务逻辑执行装置内的调度单元接收到外部装置返回的响应事件消息时,从响应事件消息中提取业务虚拟机编号、或者查询消息映射表获得业务虚拟机编号,然后将响应事件消息加入到对应业务虚拟机的响应事件缓冲区中,业务虚拟机线程查看自身的响应事件缓冲区内是否有新的响应事件消息,如果有,则从响应事件消息中提取协程编号、或者查询消息映射表获得协程编号,然后将响应事件数据注入到挂起协程队列中对应的协程中,并恢复该协程的业务逻辑代码执行,协程继续执行业务逻辑。
本发明还可以对业务逻辑执行环境的运行状态进行监控管理,一旦发现其健康指标超过健康阈值,则对协程或业务虚拟机进行重建。业务虚拟机可以进一步包括协程监控部件,协程监控部件用于检测每个挂起协程是否存在等待外部装置响应超时,如果是,则根据业务逻辑的设定,向业务逻辑注入调用外部装置超时信息,然后恢复业务执行、或终止超时的挂起协程,并向业务客户端回复错误应答;检测每个非空闲协程(包括挂起协程和正在执行业务逻辑的协程)是否存在整体执行超时(超时时间可由业务逻辑指定或***默认),如果是,则终止超时协程的执行,并向业务客户端回复错误应答;当协程执行完业务逻辑后,检测协程的返回状态是否存在异常,如果是,则创建一个新的协程替换异常协程,然后回收异常协程资源。
业务逻辑执行装置还可以包括有:
业务虚拟机管理器,用于定时扫描业务逻辑执行装置内的每个业务虚拟机,判断是否每个业务虚拟机的健康指标超过健康阈值或业务虚拟机线程出现运转异常,如果是,则健康指标超过健康阈值或业务虚拟机线程出现运转异常的业务虚拟机是异常虚拟机,创建一个新的加载相同业务逻辑代码的业务虚拟机实例,并销毁异常虚拟机;如果否,则继续扫描下一个业务虚拟机,
其中,业务虚拟机的健康指标可以包括但不限于:消息处理总量、消息处理成功量、消息处理失败量、消息处理超时量等,判断业务虚拟机线程是否出现运转异常可以进一步包括但不限于:判断业务虚拟机指标是否正常、或判断业务虚拟机线程运转心跳是否正常。业务虚拟机线程运转心跳是否正常,可以通过心跳埋点来检查,即业务虚拟机线程在空闲、处理新命令请求、处理新响应事件时,更新心跳埋点以向业务虚拟机管理器上报心跳时间,当业务虚拟机管理器检测到业务虚拟机线程运转心跳的更新时间超过更新时间阈值,则表示业务虚拟机线程出现运转异常。
业务逻辑执行环境的实现由内核、API库和业务逻辑三大部分组成。内核主要负责业务的加载管理与命令分发调度等;API库为业务命令的执行提供必要的能力支撑。业务逻辑则为实现某个具体业务流程的代码文件。一个业务逻辑可以按需引入一个或多个不同的API库,并调用其中所需的支撑能力。本发明中,一个业务虚拟机的加载,包括其所属的业务逻辑代码、以及其依赖的API库。当业务逻辑代码变更或其依赖的API库版本变更时,都会触发升级操作。升级可以采用动态替换的模式实现,替换操作过程中旧版业务虚拟机和新版业务虚拟机会共存一段时间,旧版业务虚拟机直至处理完存量命令请求后进行回收,因此业务升级不会造成业务的呼损。
业务虚拟机管理器还可以用于定时扫描业务逻辑代码文件,并判断每个业务逻辑代码文件是否发生了变化,如果发生了变化,则根据变化后的业务文件,创建一个新的业务虚拟机,读取业务与虚拟机映射表中该业务对应的原业务虚拟机,将业务与虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机。
同时,业务虚拟机管理器还可以用于定时扫描API支撑库文件,并判断每个API支撑库是否发生了变化,如果发生了变化,则获取所有依赖该发生了变化的API支撑库的业务虚拟机,并由获取的所有业务虚拟机构成原业务虚拟机列表,然后从原业务虚拟机列表中逐一提取每个原业务虚拟机,对所提取的原业务虚拟机的处理如下:根据变化后的API支撑库,创建一个新的业务虚拟机,将业务与虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机。
上述判断每个业务逻辑代码文件或API支撑库文件是否发生了变化可以进一步包括有:判断每个文件的大小、时间戳或md5等特征值是否发生了变化。
如图3所示,业务逻辑执行装置包括有调度单元和多个负责不同业务的业务虚拟机,每个业务虚拟机内预置若干数量的协程,本发明一种基于动态语言的业务逻辑执行方法包括有:
步骤A1、调度单元从接收到的命令请求中提取业务名,然后根据业务和虚拟机映射表,将所述命令请求加入到对应的业务虚拟机的命令请求缓冲区内;
步骤A2、每个业务虚拟机线程定时查看自身的命令请求缓冲区内是否有新的命令请求?如果是,则继续下一步;如果否,则间隔一段时间后,再转向步骤A2;
步骤A3、业务虚拟机线程查看自身的空闲协程队列中是否有空闲的协程?如果是,则从空闲协程队列中提取一个协程对象,然后将新的命令请求数据注入到被提取的协程中,再继续下一步;如果否,则间隔一段时间后,再转向步骤A2;
步骤A4、被提取的协程执行对应的业务逻辑,当向外部装置发送调用消息后,修改自身状态为挂起状态,并加入到挂起协程队列中。由于协程在执行业务逻辑调用外部装置(比如数据库、内存库、接口调用等)后,需等待外部装置返回响应事件消息后才能继续执行业务逻辑,协程可以让出控制权,从而执行其他已就绪协程。
步骤A4中,协程向外部装置发送调用消息时,可以在调用消息中添加协程所属的业务虚拟机编号和协程自身编号,当调用消息中不能添加信息(比如数据库调用消息)时,则将业务虚拟机编号和协程自身编号写入消息映射表,这样,当业务逻辑执行装置内的调度单元接收到外部装置返回的响应事件消息时,从响应事件消息中提取业务虚拟机编号、或者查询消息映射表获得业务虚拟机编号,然后将响应事件消息加入到对应业务虚拟机的响应事件缓冲区中。本发明还包括有:
每个业务虚拟机线程查看自身的响应事件缓冲区内是否有新的响应事件消息?如果有,则从响应事件消息中提取协程编号、或者查询消息映射表获得协程编号,然后将响应事件数据注入到挂起协程队列中对应的协程中,并恢复该协程的业务逻辑代码执行,协程继续执行业务逻辑。
本发明还可以对业务逻辑执行环境的运行状态进行监控管理,一旦发现其健康指标超过健康阈值,则对协程或业务虚拟机进行重建。本发明对每个协程的运行状态进行监控管理,还可以包括有以下的一个或多个步骤:
业务虚拟机线程检测每个挂起协程是否存在等待外部装置响应超时,如果是,则根据业务逻辑的设定,向业务逻辑注入调用外部装置超时信息,然后恢复业务执行、或终止超时的挂起协程,并向业务客户端回复错误应答,或
业务虚拟机线程检测每个非空闲协程(包括挂起协程和正在执行业务逻辑的协程)是否存在整体执行超时(超时时间可由业务逻辑指定或***默认),如果是,则终止超时协程的执行,并向业务客户端回复错误应答,或
业务虚拟机线程当协程执行完业务逻辑后,检测协程的返回状态是否存在异常,如果是,则创建一个新的协程替换异常协程,然后回收异常协程资源。
同时,本发明对每个业务虚拟机的运行状态进行监控管理,还包括有:
业务虚拟机管理器定时扫描业务逻辑执行装置内的每个业务虚拟机,判断是否每个业务虚拟机的健康指标超过健康阈值或业务虚拟机线程出现运转异常,如果是,则健康指标超过健康阈值或业务虚拟机线程出现运转异常的业务虚拟机是异常虚拟机,创建一个新的加载相同业务逻辑代码的业务虚拟机实例,并销毁异常虚拟机;如果否,则继续扫描下一个业务虚拟机,
其中,业务虚拟机的健康指标可以包括但不限于:消息处理总量、消息处理成功量、消息处理失败量、消息处理超时量等,判断业务虚拟机线程是否出现运转异常可以进一步包括但不限于:判断业务虚拟机指标是否正常、或判断业务虚拟机线程运转心跳是否正常。业务虚拟机线程运转心跳是否正常,可以通过心跳埋点来检查,即业务虚拟机线程在空闲、处理新命令请求、处理新响应事件时,更新心跳埋点以向业务虚拟机管理器上报心跳时间,当业务虚拟机管理器检测到业务虚拟机线程运转心跳的更新时间超过更新时间阈值,则表示业务虚拟机线程出现运转异常。
本发明中,一个业务虚拟机的加载,包括其所属的业务逻辑代码、以及其依赖的API库,当业务逻辑代码变更或其依赖的API库版本变更时,都可以采用动态替换的模式实现升级。
其中,对业务逻辑代码文件采用动态替换的模式实现升级的过程如下:
业务虚拟机管理器定时扫描业务逻辑代码文件,并判断每个业务逻辑代码文件是否发生了变化,如果发生了变化,则根据变化后的业务文件,创建一个新的业务虚拟机,读取业务与虚拟机映射表中该业务对应的原业务虚拟机,将业务与虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机。
对API支撑库文件采用动态替换的模式实现升级的过程如下:
业务虚拟机管理器定时扫描API支撑库文件,并判断每个API支撑库是否发生了变化,如果发生了变化,则获取所有依赖该发生了变化的API支撑库的业务虚拟机,并由获取的所有业务虚拟机构成原业务虚拟机列表,然后从原业务虚拟机列表中逐一提取每个原业务虚拟机,对所提取的原业务虚拟机的处理如下:根据变化后的API支撑库,创建一个新的业务虚拟机,将业务与虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机。
上述判断每个业务逻辑代码文件或API支撑库文件是否发生了变化可以进一步包括有:判断每个文件的大小、时间戳或md5等特征值是否发生了变化。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (4)
1.一种基于动态语言的业务逻辑执行***,其特征在于,包括有多个业务逻辑执行装置,每个业务逻辑执行装置包括有调度单元和多个加载不同业务的业务虚拟机:
调度单元,用于接收外部装置发送来的命令请求,并从命令请求中提取业务名,然后根据业务和虚拟机映射表,将所述命令请求加入到对应的业务虚拟机的命令请求缓冲区内,
每个业务虚拟机内预置若干数量的协程,业务虚拟机进一步包括有:
业务虚拟机线程,用于定时查看自身的命令请求缓冲区内是否有新的命令请求,当命令请求缓冲区内有新的命令请求、且自身的空闲协程队列中有空闲的协程时,从空闲协程队列中提取一个协程对象,然后将新的命令请求数据注入到被提取的协程中,由被提取的协程执行对应的业务逻辑;
命令请求缓冲区,用于保存由调度单元发送过来的命令请求;
空闲协程队列,用于保存业务虚拟机的当前为空闲状态的协程,
业务虚拟机还包括有:
协程,用于执行业务逻辑,在执行业务逻辑过程中向外部装置发送调用消息后,修改自身状态为挂起状态,并加入到挂起协程队列中,再由业务虚拟机线程继续执行其他已就绪的协程;
响应事件缓冲区,用于保存协程在执行业务逻辑过程中向外部装置发送调用消息后,外部装置所返回的响应事件消息;
挂起协程队列,用于保存业务虚拟机的当前为挂起状态的协程,
协程在执行业务逻辑过程中向外部装置发送调用消息时,在调用消息中添加协程所属的业务虚拟机编号和协程自身编号,当调用消息中不能添加信息时,则将业务虚拟机编号和协程自身编号写入消息映射表,
当业务逻辑执行装置内的调度单元接收到外部装置返回的响应事件消息时,从响应事件消息中提取业务虚拟机编号、或者查询消息映射表获得业务虚拟机编号,然后将响应事件消息加入到对应业务虚拟机的响应事件缓冲区中,
业务虚拟机线程查看自身的响应事件缓冲区内是否有新的响应事件消息,如果有,则从响应事件消息中提取协程编号、或者查询消息映射表获得协程编号,然后将响应事件数据注入到挂起协程队列中对应的协程中,并恢复该协程的业务逻辑代码执行,协程继续执行业务逻辑,
业务逻辑执行装置还包括有:
业务虚拟机管理器,用于定时扫描业务逻辑执行装置内的每个业务虚拟机,判断是否每个业务虚拟机的健康指标超过健康阈值或业务虚拟机线程出现运转异常,如果是,则健康指标超过健康阈值或业务虚拟机线程出现运转异常的业务虚拟机是异常虚拟机,创建一个新的加载相同业务逻辑代码的业务虚拟机实例,并销毁异常虚拟机;如果否,则继续扫描下一个业务虚拟机,
其中,业务虚拟机的健康指标包括但不限于:消息处理总量、消息处理成功量、消息处理失败量、消息处理超时量,
判断业务虚拟机线程是否出现运转异常进一步包括但不限于:判断业务虚拟机指标是否正常、或判断业务虚拟机线程运转心跳是否正常,
业务虚拟机线程运转心跳是否正常通过心跳埋点来检查,即业务虚拟机线程在空闲、处理新命令请求、处理新响应事件时,更新心跳埋点以向业务虚拟机管理器上报心跳时间,当业务虚拟机管理器检测到业务虚拟机线程运转心跳的更新时间超过更新时间阈值,则表示业务虚拟机线程出现运转异常,业务逻辑执行装置还包括有:
业务虚拟机管理器,定时扫描业务逻辑代码文件,并判断每个业务逻辑代码文件是否发生了变化,如果发生了变化,则根据变化后的业务文件,创建一个新的业务虚拟机,读取业务和 虚拟机映射表中该业务对应的原业务虚拟机,将业务和 虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机,
业务逻辑执行装置还包括有:
业务虚拟机管理器,定时扫描API支撑库文件,并判断每个API支撑库是否发生了变化,如果发生了变化,则获取所有依赖该发生了变化的API支撑库的业务虚拟机,并由获取的所有业务虚拟机构成原业务虚拟机列表,然后从原业务虚拟机列表中逐一提取每个原业务虚拟机,对所提取的原业务虚拟机的处理如下:根据变化后的API支撑库,创建一个新的业务虚拟机,将业务和 虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机。
2.根据权利要求1所述的***,其特征在于,业务虚拟机还包括有:
协程监控部件,用于检测每个挂起协程是否存在等待外部装置响应超时,如果是,则根据业务逻辑的设定,向业务逻辑注入调用外部装置超时信息,然后恢复业务执行、或终止超时的挂起协程,并向业务客户端回复错误应答;检测每个非空闲协程是否存在整体执行超时,如果是,则终止超时协程的执行,并向业务客户端回复错误应答;当协程执行完业务逻辑后,检测协程的返回状态是否存在异常,如果是,则创建一个新的协程替换异常协程,然后回收异常协程资源。
3.一种基于动态语言的业务逻辑执行方法,其特征在于,业务逻辑执行装置包括有调度单元和多个负责不同业务的业务虚拟机,每个业务虚拟机内预置若干数量的协程,包括有:
步骤A1、调度单元从接收到的命令请求中提取业务名,然后根据业务和虚拟机映射表,将所述命令请求加入到对应的业务虚拟机的命令请求缓冲区内;
步骤A2、每个业务虚拟机线程定时查看自身的命令请求缓冲区内是否有新的命令请求,如果是,则继续下一步;如果否,则间隔一段时间后,再转向步骤A2;
步骤A3、业务虚拟机线程查看自身的空闲协程队列中是否有空闲的协程,如果是,则从空闲协程队列中提取一个协程对象,然后将新的命令请求数据注入到被提取的协程中,再继续下一步;如果否,则间隔一段时间后,再转向步骤A2;
步骤A4、被提取的协程执行对应的业务逻辑,
步骤A4中,协程当向外部装置发送调用消息后,修改自身状态为挂起状态,并加入到挂起协程队列中,
步骤A4中,协程向外部装置发送调用消息时,在调用消息中添加协程所属的业务虚拟机编号和协程自身编号,当调用消息中不能添加信息时,则将业务虚拟机编号和协程自身编号写入消息映射表,
当业务逻辑执行装置内的调度单元接收到外部装置返回的响应事件消息时,从响应事件消息中提取业务虚拟机编号、或者查询消息映射表获得业务虚拟机编号,然后将响应事件消息加入到对应业务虚拟机的响应事件缓冲区中,
还包括有:
每个业务虚拟机线程查看自身的响应事件缓冲区内是否有新的响应事件消息,如果有,则从响应事件消息中提取协程编号、或者查询消息映射表获得协程编号,然后将响应事件数据注入到挂起协程队列中对应的协程中,并恢复该协程的业务逻辑代码执行,协程继续执行业务逻辑,
对每个业务虚拟机的运行状态进行监控管理,包括有:
业务虚拟机管理器定时扫描业务逻辑执行装置内的每个业务虚拟机,判断是否每个业务虚拟机的健康指标超过健康阈值或业务虚拟机线程出现运转异常,如果是,则健康指标超过健康阈值或业务虚拟机线程出现运转异常的业务虚拟机是异常虚拟机,创建一个新的加载相同业务逻辑代码的业务虚拟机实例,并销毁异常虚拟机;如果否,则继续扫描下一个业务虚拟机,
其中,业务虚拟机的健康指标包括但不限于:消息处理总量、消息处理成功量、消息处理失败量、消息处理超时量,
判断业务虚拟机线程是否出现运转异常进一步包括但不限于:判断业务虚拟机指标是否正常、或判断业务虚拟机线程运转心跳是否正常,
业务虚拟机线程运转心跳是否正常通过心跳埋点来检查,即业务虚拟机线程在空闲、处理新命令请求、处理新响应事件时,更新心跳埋点以向业务虚拟机管理器上报心跳时间,当业务虚拟机管理器检测到业务虚拟机线程运转心跳的更新时间超过更新时间阈值,则表示业务虚拟机线程出现运转异常,
对业务逻辑代码文件采用动态替换的模式实现升级的过程如下:
业务虚拟机管理器定时扫描业务逻辑代码文件,并判断每个业务逻辑代码文件是否发生了变化,如果发生了变化,则根据变化后的业务文件,创建一个新的业务虚拟机,读取业务和 虚拟机映射表中该业务对应的原业务虚拟机,将业务和 虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机,
对API支撑库文件采用动态替换的模式实现升级的过程如下:
业务虚拟机管理器定时扫描API支撑库文件,并判断每个API支撑库是否发生了变化,如果发生了变化,则获取所有依赖该发生了变化的API支撑库的业务虚拟机,并由获取的所有业务虚拟机构成原业务虚拟机列表,然后从原业务虚拟机列表中逐一提取每个原业务虚拟机,对所提取的原业务虚拟机的处理如下:根据变化后的API支撑库,创建一个新的业务虚拟机,将业务和 虚拟机映射表中的原业务虚拟机修改为新的业务虚拟机,以使得新的命令请求被分发给新的业务虚拟机,并将原业务虚拟机放入到待回收虚拟机队列,当原业务虚拟机处理完已分配的存量命令请求后,从待回收虚拟机队列中回收原业务虚拟机。
4.根据权利要求3所述的方法,其特征在于,对每个协程的运行状态进行监控管理,包括有以下的一个或多个步骤:
业务虚拟机线程检测每个挂起协程是否存在等待外部装置响应超时,如果是,则根据业务逻辑的设定,向业务逻辑注入调用外部装置超时信息,然后恢复业务执行、或终止超时的挂起协程,并向业务客户端回复错误应答,或,
业务虚拟机线程检测每个非空闲协程是否存在整体执行超时,如果是,则终止超时协程的执行,并向业务客户端回复错误应答,或,
业务虚拟机线程当协程执行完业务逻辑后,检测协程的返回状态是否存在异常,如果是,则创建一个新的协程替换异常协程,然后回收异常协程资源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811623920.3A CN109739482B (zh) | 2018-12-28 | 2018-12-28 | 一种基于动态语言的业务逻辑执行***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811623920.3A CN109739482B (zh) | 2018-12-28 | 2018-12-28 | 一种基于动态语言的业务逻辑执行***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109739482A CN109739482A (zh) | 2019-05-10 |
CN109739482B true CN109739482B (zh) | 2022-04-15 |
Family
ID=66361863
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811623920.3A Active CN109739482B (zh) | 2018-12-28 | 2018-12-28 | 一种基于动态语言的业务逻辑执行***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109739482B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175080A (zh) * | 2019-05-29 | 2019-08-27 | 上海有谱网络科技有限公司 | 进销存软件中保证数据线程安全的方法 |
CN110247984B (zh) * | 2019-06-27 | 2022-02-22 | 腾讯科技(深圳)有限公司 | 业务处理方法、装置及存储介质 |
CN110399416B (zh) * | 2019-07-24 | 2023-08-22 | 成都甄识科技有限公司 | 一种分布式数据库操作优化访问处理方法及*** |
CN110955520A (zh) * | 2019-11-05 | 2020-04-03 | 中国电力科学研究院有限公司 | 一种面向电能表的多任务调度方法和*** |
CN111858293A (zh) * | 2019-11-21 | 2020-10-30 | 北京嘀嘀无限科技发展有限公司 | 一种检测方法、检测装置、电子设备及可读存储介质 |
CN112905267B (zh) * | 2019-12-03 | 2024-05-10 | 阿里巴巴集团控股有限公司 | 虚拟机接入协程库的方法、装置及设备 |
CN111078436B (zh) * | 2019-12-18 | 2023-04-07 | 上海金仕达软件科技股份有限公司 | 数据处理的方法、装置、设备及存储介质 |
CN112235268B (zh) * | 2020-09-29 | 2023-01-24 | 北京智芯微电子科技有限公司 | 安全通信方法、***及装置 |
CN112286595A (zh) * | 2020-10-30 | 2021-01-29 | 深圳市九九互动科技有限公司 | Lua语言的异步处理方法、装置、计算机设备和存储介质 |
CN117581198A (zh) * | 2021-12-14 | 2024-02-20 | 英特尔公司 | 用于提供和执行采用动态脚本语言编写的代码的装置、设备、方法和计算机程序 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103118100A (zh) * | 2013-01-25 | 2013-05-22 | 武汉大学 | 一种提高虚拟机应用的可用性的保障方法及*** |
KR20140081871A (ko) * | 2011-12-23 | 2014-07-01 | 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 | 장치 집합체에서 리소스 활용의 최적화 |
CN103930875A (zh) * | 2011-06-16 | 2014-07-16 | 尤塞瑞斯公司 | 用于加速业务数据处理的软件虚拟机 |
-
2018
- 2018-12-28 CN CN201811623920.3A patent/CN109739482B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103930875A (zh) * | 2011-06-16 | 2014-07-16 | 尤塞瑞斯公司 | 用于加速业务数据处理的软件虚拟机 |
KR20140081871A (ko) * | 2011-12-23 | 2014-07-01 | 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 | 장치 집합체에서 리소스 활용의 최적화 |
CN103118100A (zh) * | 2013-01-25 | 2013-05-22 | 武汉大学 | 一种提高虚拟机应用的可用性的保障方法及*** |
Non-Patent Citations (1)
Title |
---|
"基于Lua虚拟机的通用业务引擎的设计与实现";王一帆;《中国优秀硕士学位论文全文库》;20151216;第13-19、35-41页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109739482A (zh) | 2019-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109739482B (zh) | 一种基于动态语言的业务逻辑执行***及方法 | |
US7523196B2 (en) | Session monitoring using shared memory | |
US7886294B2 (en) | Virtual machine monitoring | |
US7689989B2 (en) | Thread monitoring using shared memory | |
EP1679602B1 (en) | Shared memory based monitoring for application servers | |
US10068015B2 (en) | Monitoring a monitoring-target process | |
US10956143B2 (en) | Server updates | |
US7730342B2 (en) | Server system | |
US10635473B2 (en) | Setting support program, setting support method, and setting support device | |
US8589727B1 (en) | Methods and apparatus for providing continuous availability of applications | |
US20100161549A1 (en) | Masterless distributed batch scheduling engine | |
US20080282255A1 (en) | Highly-available application operation method and system, and method and system of changing application version on line | |
CN109558260B (zh) | Kubernetes故障排除***、方法、设备及介质 | |
EP2972824B1 (en) | Computer system using in-service software upgrade | |
CN111143044B (zh) | 任务调度管理***、方法、装置及其可存储介质 | |
CN110895488B (zh) | 任务调度方法及装置 | |
WO2019242455A1 (en) | Method and apparatus for user request forwarding, reverse proxy and computer readable storage medium | |
CN108664520B (zh) | 维护数据一致性的方法、装置、电子设备和可读存储介质 | |
CN113157411B (zh) | 一种基于Celery的可靠可配置任务***及装置 | |
EP2674868A1 (en) | Database update notification method | |
CN113422692A (zh) | 一种K8s集群内节点故障检测及处理方法、装置及存储介质 | |
CN108804579B (zh) | 应用服务***及数据一致性控制方法 | |
CN111124370A (zh) | 一种数据处理方法及相关设备 | |
KR101692964B1 (ko) | 프로비저닝 장치 및 그 방법 | |
US20230101776A1 (en) | Desired state configuration for virtual machines |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 310013 4th floor, No.398 Wensan Road, Xihu District, Hangzhou City, Zhejiang Province Patentee after: Xinxun Digital Technology (Hangzhou) Co.,Ltd. Address before: 310013 4th floor, No.398 Wensan Road, Xihu District, Hangzhou City, Zhejiang Province Patentee before: EB Information Technology Ltd. |
|
CP01 | Change in the name or title of a patent holder |