本发明属计算机技术应用领域,具体涉及一种面向cpu密集型的vrp云服务系统的请求处理方法和系统。
背景技术
车辆路径问题(vehicleroutingproblem,vrp),车辆路径问题是一种组合优化问题,它由dantzig和ramser在1959年共同提出。vrp是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的。vrp在交通、分配资源和后勤补给方面有很重要的应用。
但是,目前在vrp服务系统领域,服务请求需要占用大量的cpu时间,服务结果不能实时返回,并且对于大规模的并发请求场景,服务器也不能全量实时处理。
类似的服务调用场景通用的解决方案是采用异步的方式来完成,当大量的服务请求到来时,可能导致vrp系统服务不可用,而且对于不同规模的服务请求采用固定迭代次数限制,在一定程度上也会浪费大量的cpu资源。
技术实现要素:
本发明的目的在于提供一种面向cpu密集型的vrp云服务系统的请求处理方法和系统,通过额外的双向队列缓冲机制,从而基于双向消息队列和根据问题规模动态配置迭代次数的机制来解决算力有限的问题。
为实现上述目的,本发明提供如下技术方案。
一种面向cpu密集型的vrp云服务系统的请求处理方法,包括:消息产生步骤,将各个请求的业务系统的不同请求统一接收,再根据客户预先的设置,产生格式统一的求解消息,同时将求解消息推送到消息队列中;消息队列处理步骤,采用消息队列rabbitmq进行处理;待解消息获取步骤,以消息消费者的角色启动,当空闲时从消息队列中主动拉取消息来求解;vrp系统启动和计算步骤,基于客户的求解问题复杂度,计算出合理的迭代次数作为计算参数;求解结果消息产生步骤,将vrp系统的求解结果组织成统一的结果消息推送到消息队列中;消息队列消费中间件处理步骤,定时从消息队列中拉取排线结果,然后推送到排线后端。
进一步地,在所述待解消息获取步骤中,包括智能排线worker,并且可以通过启动更多的智能排线worker来应对更多的排线请求。
进一步地,在所述vrp系统启动和计算步骤中,可基于配送订单的数量,计算出合理的迭代次数作为计算参数。
进一步地,在所述vrp系统启动和计算步骤中,所采用的迭代次数规则如下:
m<=50时,t=5000;
50<m<=100时,t=10000;
100<m<=500时,t=20000;
500<m<=1000时,t=30000;
其中,m是订单数量,t是迭代次数。
本发明还提供一种面向cpu密集型的vrp云服务系统的请求处理系统,包括:消息产生模块,将各个请求的业务系统的不同请求统一接收,再根据客户预先的设置,产生格式统一的求解消息,同时将求解消息推送到消息队列中;消息队列,采用消息队列rabbitmq;待解消息获取模块,以消息消费者的角色启动,当空闲时从消息队列中主动拉取消息来求解;vrp系统启动和计算模块,基于客户的求解问题复杂度,计算出合理的迭代次数作为计算参数;求解结果消息产生模块,将vrp系统的求解结果组织成统一的结果消息推送到消息队列中;消息队列消费中间件模块,定时从消息队列中拉取排线结果,然后推送到排线后端。
进一步地,在所述待解消息获取模块中,包括智能排线worker,并且可以通过启动更多的智能排线worker来应对更多的排线请求。
进一步地,其特征在于,在所述vrp系统启动和计算模块中,可基于配送订单的数量,计算出合理的迭代次数作为计算参数。
进一步地,在所述vrp系统启动和计算模块中,所采用的迭代次数规则如下:
m<=50时,t=5000;
50<m<=100时,t=10000;
100<m<=500时,t=20000;
500<m<=1000时,t=30000;
其中,m是订单数量,t是迭代次数。
与现有技术相比,本发明的核心是让vrp服务系统在高稳定性的前提下释放最大的cpu算力。因此,本发明具有如下有益效果:通过采用闲时拉取的机制,很好的保护了智能排线worker的稳定性;并且当有大量排线请求时,队列很好的缓冲了排线请求压力,智能排线worker有条不紊的进行排线处理;通过根据问题规模动态配置迭代次数,解决了算力有限的问题,避免了固定设置一个最大迭代次数值对于小规模问题的计算浪费;从而,提高了服务系统的高可用性,并且提高了服务系统的cpu利用率。
附图说明
图1是本发明的vrp云服务系统的请求处理流程图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
如图所示,本发明的面向cpu密集型的vrp云服务系统的请求处理方法,包括如下步骤。
①消息产生步骤
将各个请求的业务系统的不同请求统一接收,再根据客户预先的一些设置,产生格式统一的求解消息,同时求解消息会被推送到消息队列中。
②消息队列处理步骤
采用了开源的消息队列rabbitmq进行处理。
③待解消息获取(待排线消息获取)步骤
该步骤会以消息消费者的角色启动,当空闲时从消息队列中主动拉取消息来求解,采用闲时拉取的机制,很好的保护了智能排线worker的稳定性。当有大量排线请求时,队列很好的缓冲了排线请求压力,智能排线worker有条不紊的进行排线处理。还可以通过启动更多的worker来应对更多的排线请求。
④vrp系统启动和计算(启动&计算)步骤
该步骤基于客户的求解问题复杂度,主要是配送订单的数量。计算出合理的迭代次数作为计算参数。
目前的迭代次数规则(订单数量m,迭代次数t):
m<=50时,t=5000;
50<m<=100时,t=10000;
100<m<=500时,t=20000;
500<m<=1000时,t=30000;
根据需要,可继续加入一些车辆种类数量和订单距离离散程度的参数来综合决定迭代次数。从而,避免了固定设置一个最大迭代次数值对于小规模问题的计算浪费。
⑤求解结果消息产生(产生结果返回消息)步骤
该步骤会把vrp系统的求解结果组织成统一的结果消息推送到消息队列中。
⑥消息队列消费中间件处理步骤
该步骤定时从消息队列中拉取排线结果,然后推送到排线后端(php)/排线后台服务(php)。
相应地,本发明的面向cpu密集型的vrp云服务系统的请求处理系统,包括如下模块。
①消息产生模块
将各个请求的业务系统的不同请求统一接收,再根据客户预先的一些设置,产生格式统一的求解消息,同时求解消息会被推送到消息队列中。
②消息队列模块
采用了开源的消息队列rabbitmq。
③待解消息获取(待排线消息获取)模块
该模块会以消息消费者的角色启动,当空闲时从消息队列中主动拉取消息来求解,采用闲时拉取的机制,很好的保护了智能排线worker的稳定性。当有大量排线请求时,队列很好的缓冲了排线请求压力,智能排线worker有条不紊的进行排线处理。还可以通过启动更多的worker来应对更多的排线请求。
④vrp系统启动和计算(启动&计算)模块
该模块基于客户的求解问题复杂度,主要是配送订单的数量。计算出合理的迭代次数作为计算参数。
目前的迭代次数规则(订单数量m,迭代次数t):
m<=50时,t=5000;
50<m<=100时,t=10000;
100<m<=500时,t=20000;
500<m<=1000时,t=30000;
根据需要,可继续加入一些车辆种类数量和订单距离离散程度的参数来综合决定迭代次数。从而,避免了固定设置一个最大迭代次数值对于小规模问题的计算浪费。
⑤求解结果消息产生(产生结果返回消息)模块
该模块会把vrp系统的求解结果组织成统一的结果消息推送到消息队列中。
⑥消息队列消费中间件
该模块定时从消息队列中拉取排线结果,然后推送到排线后端(php)/排线后台服务(php)。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。