CN107612950B - 一种提供服务的方法、装置、系统、电子设备 - Google Patents
一种提供服务的方法、装置、系统、电子设备 Download PDFInfo
- Publication number
- CN107612950B CN107612950B CN201610543775.2A CN201610543775A CN107612950B CN 107612950 B CN107612950 B CN 107612950B CN 201610543775 A CN201610543775 A CN 201610543775A CN 107612950 B CN107612950 B CN 107612950B
- Authority
- CN
- China
- Prior art keywords
- task
- service request
- execution result
- tasks
- transactions
- 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
Abstract
一种提供服务的方法、装置、系统、电子设备;所述提供服务的方法,包括:收到客户端的服务请求后,根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。本申请可以解决系统升级、宕机、网络异常等情况对系统服务的影响,提高系统的可用性。
Description
技术领域
本发明涉及网络服务领域,尤其涉及一种提供服务的方法、装置、系统、电子设备。
背景技术
在面向服务的技术架构(Service-Oriented Architecture,SOA)框架下,服务可用性是考核系统的一项重要指标。在生产环境中,系统升级、宕机故障等异常情况是影响服务可用性的常见因素。软件快速迭代更新在互联网公司都非常正常,在系统升级时常常需要停止服务,待完成整个升级过程后方能继续提供服务;而对单机系统来说存在单点故障,如果服务器宕机则需要运维人员迅速进行服务恢复或者转移。在异常期间,对用户来说服务都是不可用的,直接影响系统的服务水平协议(Service Level Agreement,SLA)。
目前,应对异常情况的主要做法是设计多台服务器负载均衡来实现服务的冗余。系统设计为无状态的服务,将数据保存在数据库(DataBase,DB)和消息中间件,多台服务器挂载在负载均衡器(Load Balance)后端同时提供服务,如图1所示。每台应用(APP)服务器(Server)都是无状态的服务,相互之间并无区别,任意一台均能独立处理接口调用。此时即使有一台服务器宕机,负载均衡器在识别宕机机器后将其排除在服务列表之外,后续将调用转发至其它服务器,从而继续提供服务,如图2所示。
上面提到的方法在网络较好、场景简单的时候能实现初步的服务冗余,但在要求较高的复杂环境下会存在以下问题:
首先,宕机等异常情况对网络连接会产生影响。网络连接也是一种服务状态,虽然系统在设计实现时能做到服务的无状态,内存中不保存用户数据,但从整个服务器来看,除了服务状态还包括系统状态,系统状态中网络状态是一个主要方面。而宕机意味着网络中断,用户的服务请求将会无法完成,即服务请求失败,从而影响系统可用性。
其次,网络不稳定造成连接中断;在网络状态不好的时候,业务处理尚未返回结果,而出现网络连接中断或者超时,对用户来说都意味着服务请求将会无法完成,即服务请求失败。
再次,事务未处理完毕,出现数据不一致。宕机是随时都可能发生的情况,在宕机时会有未处理完的事务,在简单的纯数据库操作时可以利用数据库的事务原子性(即执行的一系列操作,要么完全地执行,要么完全地不执行)来保证数据的一致性。然而在复杂情况下,并非只有数据库,还可能涉及对其它服务的远程过程调用(Remote Procedure Call,RPC)等,如果在业务处理过程中出现宕机,就无法回滚事务,从而产生数据不一致的情况。另外也制约了对前两个缺点的改进,不一致的脏数据导致不能通过简单的重试来应对网络连接的中断。
发明内容
本申请提供一种提供服务的方法、装置、系统、电子设备,可以解决系统升级、宕机、网络异常等情况对系统服务的影响,提高系统的可用性。
本申请采用如下技术方案。
一种提供服务的方法,包括:
收到客户端的服务请求后,根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
可选地,根据所述服务请求生成的相应的任务、及该任务的执行结果中均携带所述服务请求的标识;
所述根据所述服务请求生成相应的任务之前还包括:
根据所述服务请求的标识在所述任务集合中进行查找,如果查找不到具有相同标识的任务及执行结果,则进行所述根据服务请求生成相应的任务的步骤。
可选地,所述的方法还包括:
收到客户端的查询请求后,根据所述查询请求中携带的待查询的服务请求的标识,在所述任务集合中进行查找;如果查找到具有该标识的任务或执行结果,则将所查找到的任务的执行进度信息或执行结果返回给所述客户端。
可选地,所述根据服务请求生成相应的任务包括:
根据所述服务请求生成以下一个或多个事务:
数据库操作、同步远程过程调用、异步远程过程调用、查询异步远程过程调用的结果;
其中,每个事务均携带所述服务请求的标识。
可选地,所述根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中包括:
收到所述服务请求的服务器调用本服务器上的工作流应用程序编程接口,由所述工作流应用程序编程接口根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
所述从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合包括:
服务器上运行的工作流引擎从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
一种提供服务的方法,包括:
接收客户端的服务请求;
根据所接收的服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中。
一种提供服务的方法,包括:
从多个服务器共享的任务集合中获取未处理完成的任务;所述任务集合中的任务根据客户端的服务请求生成;
对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
一种提供服务的装置,包括:
提交模块,用于收到客户端的服务请求后,根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
处理模块,用于从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
可选地,所述根据服务请求生成的相应的任务、及该任务的执行结果中均携带所述服务请求的标识;
所述装置还包括:
查找模块,用于在所述提交模块根据所述服务请求生成相应的任务之前,根据所述服务请求的标识在所述任务集合中进行查找,如果查找不到具有相同标识的任务及执行结果,则指示所述提交模块进行所述根据服务请求生成相应的任务的操作。
可选地,所述的装置还包括:
查询模块,用于当收到客户端的查询请求后,根据所述查询请求中携带的待查询的服务请求的标识,在所述任务集合中进行查找;如果查找到具有该标识的任务或执行结果,则将所查找到的任务的执行进度信息或执行结果返回给所述客户端。
可选地,所述提交模块根据服务请求生成相应的任务包括:
所述提交模块根据所述服务请求生成以下一个或多个事务:
数据库操作、同步远程过程调用、异步远程过程调用、查询异步远程过程调用的结果;
其中,每个事务均携带所述服务请求的标识。
可选地,所述提交模块根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中包括:
提交模块调用工作流应用程序编程接口,由所述工作流应用程序编程接口根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
所述处理模块从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合包括:
所述处理模块通过工作流引擎从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
一种用于提供服务的数据处理电子设备,包括:存储器和处理器;
所述存储器用于存储用于提供服务的程序;所述用于提供服务的程序在被所述处理器读取执行时,执行如下操作:
收到客户端的服务请求后,根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
一种提供服务的系统,包括:多个服务器;
所述多个服务器中的全部或部分服务器收到客户端的服务请求后,根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
所述多个服务器中的全部或部分服务器从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
本申请包括以下优点:
本申请的至少一个实施例中,根据服务请求生成任务提交到多个服务器共享的任务集合中,一旦服务请求对应的任务提交到任务集合中,即使接收所述服务请求的服务器出现宕机、升级或其它异常情况,其它正常工作的服务器也可以对该服务请求对应的任务进行业务处理,因此,只要提交成功的服务请求都可以执行完成,实现了服务的冗余,并可以提高服务请求的成功率,从而保证了系统的可用性。
本申请的至少一个实施例中,每个处于正常工作状态的服务器从多个服务器共享的任务集合中捞取任务并执行;这样可以保证提交到任务集合中的任务都可以成功完成,实现了服务的冗余,并可以提高服务请求的成功率,从而保证了系统的可用性。
本申请实施例的一个备选方案中,在生成的任务和执行结果中携带服务请求的标识,并且在生成任务前先查询是否已存在具有相同标识的任务或执行结果;这样即使客户端由于宕机或网络中断等原因重复发送同一个服务请求(即具有相同标识的服务请求),也不会再次生成任务提交,因此使系统具有幂等性,即客户进行多次相同的服务请求和进行一次服务请求的结果相同,都只会生成和提交一次任务。可选地,还可以在客户端查询时根据所述标识反馈相应任务的执行进度或执行结果。
本申请实施例的又一个备选方案中,将一个服务请求对应的任务拆分为多个事务,由于事务本身具有原子性,因此即使工作流引擎在处理某个事务时发生服务器宕机等异常情况,正在处理的事务将回滚到未处理的状态,而不会出现数据不一致的情况。
本申请实施例的又一个备选方案中给出了一种具体的实现方式,采用工作流应用程序编程接口实现任务的生成和提交,采用工作流引擎捞取和执行任务,将任务以工作流的形式保存和执行,增加了可靠性。
当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
图1(a)是正常情况下服务运行状态示意图;
图1(b)是异常情况下的服务运行状态示意图;
图2是实施例一的提供服务的方法的流程图;
图3是实施例一的例子中基于工作流的系统框架示意图;
图4是实施例一的例子中系统交互示意图;
图5是实施例一的例子中的工作流实例示意图;
图6是实施例四的提供服务的装置的示意图。
具体实施方式
下面将结合附图及实施例对本申请的技术方案进行更详细的说明。
需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在一个典型的配置中,客户端或服务器的计算设备可包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存(memory)。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。内存可能包括模块1,模块2,……,模块N(N为大于2的整数)。
计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM),快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
实施例一、一种提供服务的方法,如图2所示,包括步骤S110~S120:
S110、收到客户端的服务请求后,根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
S120、从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
本实施例的方法可以应用在包含多个服务器的、面向服务的系统中;所述系统中的部分或全部服务器能够执行所述步骤S110,所述系统中的部分或全部服务器能够执行所述步骤S120。所述任务集合是所述系统中多个服务器共享的。
所述系统还可以包括负载均衡器,用于根据预定的负载均衡策略,将客户端发送的服务请求转发给所述多个服务器中的一个。
所述系统还可以包括用于保存所述任务集合的设备,该设备可以是独立于所述多个服务器、负载均衡器之外的设备,也可以复用所述多个服务器中的一个或多个,或者复用所述负载均衡器所在的设备。所述任务集合可以在不同设备上存在多个能够同步更新的备份,当所述任务集合所在的设备出现异常情况时,可以使用备份的任务集合。
所述系统中,当任务提交到任务集合后,可以由任一服务器进行业务处理,而不限于由提交该任务的服务器执行;只有当传输服务请求、生成、提交任务的过程中发送服务器宕机、升级或网络中断等异常情况,才会导致服务请求失败;一旦服务请求对应的任务提交到任务集合中,即使接收所述服务请求的服务器出现宕机、升级或其它异常情况,由于任务已存在于任务集合中,所以其它服务器也能够对该服务请求对应的任务进行业务处理,从而实现了failover(失效备援)机制;因此只要提交成功的服务请求都可以成功完成,实现了服务的冗余,并可以提高服务请求的成功率,从而保证了系统的可用性。
本实施例中,客户端的服务请求可以先发送到负载均衡器,由负载均衡器根据预定的负载均衡策略选择合适的服务器,转发该服务请求给所选择的服务器,由接收所述服务请求的服务器生成相应的任务并提交。提交完成后还可以反馈给客户端表示提交成功的消息。
本实施例的一种备选方案中,所述根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中可以包括:
收到所述服务请求的服务器调用本服务器上的工作流应用程序编程接口(workflow api),由所述工作流应用程序编程接口根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
所述从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合可以包括:
服务器上运行的工作流引擎从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
本备选方案中,由工作流应用程序编程接口来实现任务提交(及向客户端反馈),由工作流引擎执行任务的处理。至少用于接收客户端的服务请求的服务器上具有工作流应用程序编程接口,至少部分服务器上具有工作流引擎;每个处于正常工作状态的服务器上的工作流引擎都会不断从所述任务集合中捞取任务并执行。工作流应用程序编程接口将任务提交到任务集合中后,可以由位于同一服务器或其它服务器上的工作流引擎进行处理。
本备选方案中,所述任务的形式可以是工作流,所述任务集合的形式可以是工作流的数据库;该数据库不同于执行服务请求时作为操作对象的数据库,而是专门存放工作流的数据库。本备选方案中,通过工作流的方式实现本实施例的上述方法;针对工作流技术目前已存在标准化组织和较多开发实例,因此采用工作流方式实现较为可靠。
本备选方案中,所述方法还可以包括:
不同服务器上的工作流引擎相互进行通信,以维护活动工作节点集群;所述活动工作节点是指位于正常工作状态的服务器上的工作流引擎。
通过维护活动工作节点集群,不同服务器上的工作流引擎可以了解其它工作流引擎的状态。
在其它备选方案中,也不排除采用工作流技术以外的方式实现本实施例的方法,比如在服务器中运行可以执行上述步骤S110~S120的软件。
本实施例的一种备选方案中,所述根据服务请求生成的相应的任务、及该任务的执行结果中均携带所述服务请求的标识;
所述根据所述服务请求生成相应的任务之前还可以包括:
根据所述服务请求的标识在所述任务集合进行查找,如果查找不到具有相同标识的任务及执行结果,则进行所述根据服务请求生成相应的任务的步骤。
本备选方案中,本备选方案中,如果根据所述服务请求的标识在所述任务集合进行查找时,在所述任务集合中查找到具有相同标识的任务或执行结果,说明已经根据该服务请求生成过任务,则不再根据该服务请求生成任务;这样即使客户端由于宕机或网络中断等原因重复发送同一个服务请求(即具有相同标识的服务请求),也不会再次生成任务提交,因此具有幂等性,即客户进行多次相同的服务请求和进行一次服务请求的结果相同,都只会生成和提交一次任务,但可以对于所述多次相同的服务请求均反馈表示提交成功的消息。
本备选方案中,可以由负载均衡器在客户端发送的服务请求中增加所述标识,该标识对于服务请求而言是唯一的,即没有两个不同的服务请求具有相同的标识;客户端重发的服务请求所采用的标识不变。也可以是客户端在需要发送服务请求时,先向系统请求分配一个全局唯一的标识,然后由客户端在发送服务请求时携带所分配的标识。还可以是客户端自行生成该标识,比如采用本客户端的唯一标识(例如但不限于客户端所在设备的国际移动用户识别码),加上本客户端自行维护的递增数值(例如但不限于每发送一个服务请求该数值就加1,重发服务请求时该数值不增加),组合后作为所述标识。上述仅是获得所述标识的示例,而获得所述标识的方式并不仅限于此;其它获得所述标识的方案也可以采用。
其它备选方案中,也可以通过其它方式保证幂等性;比如对每个服务请求的请求时间、源地址等信息及服务请求的内容计算特征值并查询,如果存在该特征值则不生成和提交任务,如果不存在则保存该特征值。
本备选方案的一种实施方式中,所述方法还可以包括:
收到客户端的查询请求后,根据所述查询请求中携带的待查询的服务请求的标识,在所述任务集合中进行查找;如果查找到具有该标识的任务或执行结果,则将所查找到的任务的执行进度信息或执行结果返回给所述客户端。
本实施方式中,所述客户端在发送服务请求后,可以定期发送查询请求,以了解服务请求的执行情况,如果服务请求已执行完毕(即相应任务已处理完成),还可以获得执行结果。
本实施方式中,可以由收到客户端的查询请求的服务器调用本服务器上的所述工作流应用程序编程接口执行上述查找、以及将所查找到的任务的执行进度信息或执行结果返回给所述客户端的操作。
本实施方式中,任务的执行进度信息可以但不限于包括以下一种或多种:表示任务尚未开始执行的信息、表示任务目前已在执行的信息、表示任务已执行的比例或时间长度的信息等。
在其它实施方式中,当客户端查询时也可以只查找具有所述标识的执行结果;能查找到则返回该执行结果,查找不到则通知客户端尚未执行完成。
本实施例的一种备选方案中,所述根据所述服务请求生成相应的任务可以包括:
根据所述服务请求生成以下一个或多个事务:
数据库操作、同步远程过程调用、异步远程过程调用、查询异步远程过程调用的结果;
其中,每个事务均携带所述服务请求的标识。
本备选方案中,由每个服务请求生成的一个或多个事务都存在于所述任务集合中,通过所述failover机制保证一个服务请求所对应的所有事务能够执行完成。由于每个事务都携带所述服务请求的标识,因此都具有幂等性,即客户进行多次相同的服务请求和进行一次服务请求的结果相同,都只会提交一次任务(一个或多个事务),而不会对于一次服务请求重复提交事务。
本备选方案中,针对一个服务请求生成的一个或多个事务可以看成是一个任务,即,本备选方案可以看成是将一个服务请求对应的任务拆分为多个事务。由于事务本身具有原子性,因此即使某个工作流引擎在处理某个事务时发生该工作流引擎所在的服务器宕机等异常情况,正在处理的事务将回滚到未处理的状态,而不会出现数据不一致的情况。后续将由其它工作流引擎重新执行该事务;与该事务属于同一个任务的其它事务如果在发生异常情况前已经执行完,则不受影响,不需要回滚。也就是说,本备选方案当服务器发生异常情况时,不需要将整个任务回滚,而只需要回滚正在处理中的事务,因此节省了处理资源。
本备选方案中,如果由服务器上运行的工作流引擎执行任务,则工作流引擎可以驱动执行所述事务;将查询异步远程过程调用的结果作为一个独立的事务,可以保证工作流引擎会不断去查询异步接口的执行状态,保证了即使原先进行查询的工作流引擎所在服务集宕机或出现其它异常情况,仍然会有其它服务器上的工作流引擎去查询异步远程过程调用的结果。
本备选方案中,一个任务的所述执行结果可以包括该任务中每个事务的执行结果,也可以是该任务中最后一个事务或某一个、某几个事务的执行结果;每个事务的执行结果中可以均携带所述服务请求的标识。在查询时,可以根据事务的执行结果得知任务的执行进度,比如已执行完的比例,或者已执行到哪个事务等。
本备选方案中,数据库操作、同步远程过程调用、异步远程过程调用、查询异步远程过程调用的结果这四个事务(或其中的几个)的执行顺序可以为依次执行;当没有异步远程过程调用这个事务时,则相应也不存在查询异步远程过程调用的结果这个事务。比如只生成数据库操作和同步远程过程调用这两个事务时,可以先执行数据库操作,再执行同步远程过程调用。当事务需要按照一定顺序执行时,在生成事务时可以在事务中携带序号或其它表示执行顺序的信息。
当事务需要按一定顺序执行时,可以由所述任务集合进行控制,将排序在第一位的事务,或前序事务均已执行完成的事务放在供工作流引擎捞取的区域,排序在后,需要等待前序事务执行完成的事务可以放在工作流引擎不能捞取的区域。也可以由执行任务的服务器或工作流引擎进行判断,比如获取到一个事务后可以先根据序号等信息判断该第一事务是否存在前序事务,如果存在前序事务且该前序事务未执行完成(比如没有该前序事务的执行结果,或该前序事务不具有完成标识),则可以将获取到的该事务先放回任务集合中。当事务不需要按一定顺序执行时,可以由多个工作流引擎并行执行同一个任务的不同事务,也可以由一个或多个工作流引擎依次执行同一个任务的不同事务。
其它备选方案中,也不排除将任务作为整体执行,而不将任务拆为事务;另外,任务也可以按照其它方式拆分为事务,或其它形式的组成部分。
本实施例的一个例子中,实现所述提供服务的方法的系统如图3所示,包括负载均衡器、多个应用服务器;每个应用服务器上包括工作流应用程序编程接口和工作流引擎;工作流引擎(workflow engine)以jar包的形式嵌入到每台应用服务器中,相互间通信来维护工作流的活动工作节点集群,以工作流应用程序编程接口的形式与应用交互。工作流应用程序编程接口根据服务请求生成工作流并保存在工作流的数据库中。
本例子中,系统交互时序如图4所示,包括步骤401~406:
401、客户端发起服务请求,调用工作流应用程序编程接口。如果因宕机或者网络抖动造成的网络中断,此时客户端重试即可。
402、工作流应用程序编程接口收到调用后,如果所述服务请求的标识在工作流的数据库中查找不到,则生成相应任务提交到工作流的数据库中,所述任务携带所述服务请求的标识;返回给客户端表示提交成功的消息。
此步骤可能收到客户端重试时再次发出的服务请求,工作流应用程序编程接口如果在工作流的数据库中能够查找到具有所述服务请求的标识的任务,则不再生成新的任务。通过对标识的保存和查询,可以实现工作流的幂等特性,从而保证不会产生重复提交;在客户端重试时可以仍然返回表示提交成功的消息。
在此步骤如果宕机则转到401,客户端会重试,再次发出的服务请求。
403、工作流引擎从所述工作流的数据库中捞取任务;如果执行某一任务的工作流引擎所在的应用服务器宕机,所述failover机制(即一个工作流引擎失效时,会由其它工作流引擎完成)可以保证将由其它工作流引擎继续完成该任务。
404、工作流引擎执行业务处理后将执行结果写回工作流的数据库,执行结果中携带所述服务请求的标识。此步骤同样由failover机制保证操作一定会继续。
405、客户端定期查询服务请求执行进展。
宕机等异常情况对查询无影响,在查询失败后可以重试查询。
406、工作流应用程序编程接口根据服务请求的标识在工作流的数据库中查询对应任务的执行进展或执行结果,并返回给客户端。
通过上述6个步骤,保证了无论在哪个步骤出现宕机等异常情况均能保证此次服务请求最终能成功。
本例子中,所述生成相应的任务包括生成以下依次执行的四个事务,如图5所示:
数据库操作(updateInDB);一系列的数据库操作归为一个事务,由数据库的事务原子性保证此事务的数据完整。
同步远程过程调用(SyncRpcCall);调用其它服务提供方的接口,同步等待结果返回,并由该服务提供方保证幂等性和事务原子性。
异步远程过程调用(AsyncRpcCall);调用其它服务提供方的异步接口,提交任务即返回。
查询异步远程过程调用的结果(QueryRpcCallResult);在调用RPC接口时,比较耗时的接口常常以异步接口方式提供,需要不断去查询异步执行结果。如果服务器宕机,由工作流的failover机制保证在其它服务器上继续查询。
上述各个事务均具有幂等性和事务原子性,最终由工作流引擎驱动执行。由于上述的事务均具有幂等性和事务原子性,因此在遭遇宕机等异常情况下,所述failover机制会保证其它服务器上的工作流引擎重新尝试执行,保证事务继续执行完毕,最终完成客户的服务请求。
另外,由于每个事务本身具有事务原子性,因此在对一个事务执行回滚操作时需要对该事务已经执行过的各个步骤执行相应的回滚操作。
实施例二、一种提供服务的方法,包括:
接收客户端的服务请求;
根据所接收的服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中。
本实施例可以由包含多个服务器的、面向服务的系统中的全部或部分服务器分别执行;所述任务集合中的任务可以由所述系统中的全部或部分服务器获取并执行。
本实施例的其它实现细节可参见实施例一。
实施例三、一种提供服务的方法,包括:
从多个服务器共享的任务集合中获取未处理完成的任务;所述任务集合中的任务根据客户端的服务请求生成;
对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
本实施例可以由包含多个服务器的、面向服务的系统中的全部或部分服务器分别执行;所述任务集合中的任务可以由所述系统中的全部或部分服务器根据所接收到的服务请求生成,并提交到所述任务集合中。
本实施例的其它实现细节可参见实施例一。
实施例四、一种提供服务的装置,如图6所示,包括:
提交模块61,用于收到客户端的服务请求后,根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
处理模块62,用于从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
本实施例中,所述提交模块61是所述装置中负责生成、提交任务的部分,可以是软件、硬件或两者的结合。
本实施例中,所述处理模块62是所述装置中负责处理任务的部分,可以是软件、硬件或两者的结合。
本实施例的装置可以设置在包含多个服务器的、面向服务的系统中的全部或部分服务器上。所述系统中的部分或全部服务器设置有所述提交模块61,所述系统中的部分或全部服务器设置有所述处理模块62。
本实施例的一种备选方案中,所述根据服务请求生成的相应的任务、及该任务的执行结果中可以均携带所述服务请求的标识;
所述装置还可以包括:
查找模块,用于在所述提交模块根据所述服务请求生成相应的任务之前,根据所述服务请求的标识在所述任务集合中进行查找,如果查找不到具有相同标识的任务及执行结果,则指示所述提交模块进行所述根据服务请求生成相应的任务的操作。
本备选方案中,所述查找模块如果根据所述服务请求的标识,在所述任务集合中查找到具有相同标识的任务或执行结果,则提交模块不再根据该服务请求生成相应的任务。
本备选方案的一种实施方式中,所述的装置还可以包括:
查询模块,用于当收到客户端的查询请求后,根据所述查询请求中携带的待查询的服务请求的标识,在所述任务集合中进行查找;如果查找到具有该标识的任务或执行结果,则将所查找到的任务的执行进度信息或执行结果返回给所述客户端。
本实施例的一种备选方案中,所述提交模块根据服务请求生成相应的任务,将生成的任务可以包括:
所述提交模块根据所述服务请求生成以下一个或多个事务:
数据库操作、同步远程过程调用、异步远程过程调用、查询异步远程过程调用的结果;
其中,每个事务均携带所述服务请求的标识。
本实施例的一种备选方案中,所述提交模块根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中可以包括:
提交模块调用工作流应用程序编程接口,由所述工作流应用程序编程接口根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
所述处理模块从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合可以包括:
所述处理模块通过工作流引擎从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
本实施例中,所述装置包含的模块分别用于执行实施例一中的步骤S110和S120,其它实现细节可参见实施例一。
实施例五、一种提供服务的装置,包括:
接收模块,用于接收客户端的服务请求;
提交模块,用于根据所接收的服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中。
本实施例的装置可以设置在包含多个服务器的、面向服务的系统中的全部或部分服务器上;所述任务集合中的任务可以由所述系统中的全部或部分服务器获取并执行。所述提交模块的实现细节可参见实施例四。
实施例六、一种提供服务的装置,包括:
获取模块,用于从多个服务器共享的任务集合中获取未处理完成的任务;所述任务集合中的任务根据客户端的服务请求生成;
执行模块,用于对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
本实施例的装置可以设置在包含多个服务器的、面向服务的系统中的全部或部分服务器上;所述任务集合中的任务可以由所述系统中的全部或部分服务器根据所接收到的服务请求生成,并提交到所述任务集合中。所述获取模块和执行模块的实现细节可参见实施例四中的处理模块。
实施例七、一种服务系统,包括多个服务器;其中:
所述多个服务器中的全部或部分服务器收到客户端的服务请求后,根据所述服务请求生成相应的任务,提交到多个服务器共享的任务集合中;
所述多个服务器中的全部或部分服务器从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
该系统的其它实现细节可参见实施例一中对于包含多个服务器、面向服务的系统的描述。
实施例八、一种用于提供服务的数据处理电子设备,包括:存储器和处理器;
所述存储器用于存储用于提供服务的程序;所述用于提供服务的程序在被所述处理器读取执行时,执行如下操作:
收到客户端的服务请求后,根据所述服务请求生成相应的任务,提交到多个服务器共享的任务集合中;
从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
本实施例中,所述用于提供服务的程序被读取执行时,所执行的操作对应于实施例一中的步骤S110和S120;该程序被读取执行时,所执行的操作的其它实现细节可参见实施例一。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。
Claims (14)
1.一种提供服务的方法,包括:
收到客户端的服务请求后,根据所述服务请求生成相应的任务,所述任务包括一个或多个事务,所述事务具有幂等性和事务原子性,将生成的任务提交到多个服务器共享的任务集合中;
从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合;
其中,当包含多个所述事务时,一个任务的所述执行结果包括:该任务中每个事务的执行结果,或者该任务中最后一个事务或某一个、某几个事务的执行结果。
2.如权利要求1所述的方法,其特征在于,根据所述服务请求生成的相应的任务、及该任务的执行结果中均携带所述服务请求的标识;
所述根据所述服务请求生成相应的任务之前还包括:
根据所述服务请求的标识在所述任务集合中进行查找,如果查找不到具有相同标识的任务及执行结果,则进行所述根据服务请求生成相应的任务的步骤。
3.根据权利要求2所述的方法,其特征在于,还包括:
收到客户端的查询请求后,根据所述查询请求中携带的待查询的服务请求的标识,在所述任务集合中进行查找;如果查找到具有该标识的任务或执行结果,则将所查找到的任务的执行进度信息或执行结果返回给所述客户端。
4.如权利要求1所述的方法,其特征在于,所述根据服务请求生成相应的任务包括:
根据所述服务请求生成以下一个或多个事务:
数据库操作、同步远程过程调用、异步远程过程调用、查询异步远程过程调用的结果;
其中,每个事务均携带所述服务请求的标识。
5.如权利要求1~4中任一项所述的方法,其特征在于,所述根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中包括:
收到所述服务请求的服务器调用本服务器上的工作流应用程序编程接口,由所述工作流应用程序编程接口根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
所述从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合包括:
服务器上运行的工作流引擎从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
6.一种提供服务的方法,包括:
接收客户端的服务请求;
根据所接收的服务请求生成相应的任务,所述任务包括一个或多个事务,所述事务具有幂等性和事务原子性,将生成的任务提交到多个服务器共享的任务集合中;
当包含多个所述事务时,一个任务的执行结果包括:该任务中每个事务的执行结果,或者该任务中最后一个事务或某一个、某几个事务的执行结果。
7.一种提供服务的方法,包括:
从多个服务器共享的任务集合中获取未处理完成的任务,所述任务包括一个或多个事务,所述事务具有幂等性和事务原子性;所述任务集合中的任务根据客户端的服务请求生成;
对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合;
其中,当包含多个所述事务时,一个任务的所述执行结果包括:该任务中每个事务的执行结果,或者该任务中最后一个事务或某一个、某几个事务的执行结果。
8.一种提供服务的装置,其特征在于,包括:
提交模块,用于收到客户端的服务请求后,根据所述服务请求生成相应的任务,所述任务包括一个或多个事务,所述事务具有幂等性和事务原子性,将生成的任务提交到多个服务器共享的任务集合中;
处理模块,用于从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合;
其中,当包含多个所述事务时,一个任务的所述执行结果包括:该任务中每个事务的执行结果,或者该任务中最后一个事务或某一个、某几个事务的执行结果。
9.如权利要求8所述的装置,其特征在于,所述根据服务请求生成的相应的任务、及该任务的执行结果中均携带所述服务请求的标识;
所述装置还包括:
查找模块,用于在所述提交模块根据所述服务请求生成相应的任务之前,根据所述服务请求的标识在所述任务集合中进行查找,如果查找不到具有相同标识的任务及执行结果,则指示所述提交模块进行所述根据服务请求生成相应的任务的操作。
10.根据权利要求9所述的装置,其特征在于,还包括:
查询模块,用于当收到客户端的查询请求后,根据所述查询请求中携带的待查询的服务请求的标识,在所述任务集合中进行查找;如果查找到具有该标识的任务或执行结果,则将所查找到的任务的执行进度信息或执行结果返回给所述客户端。
11.如权利要求8所述的装置,其特征在于,所述提交模块根据服务请求生成相应的任务包括:
所述提交模块根据所述服务请求生成以下一个或多个事务:
数据库操作、同步远程过程调用、异步远程过程调用、查询异步远程过程调用的结果;
其中,每个事务均携带所述服务请求的标识。
12.如权利要求8~11中任一项所述的装置,其特征在于,所述提交模块根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中包括:
提交模块调用工作流应用程序编程接口,由所述工作流应用程序编程接口根据所述服务请求生成相应的任务,将生成的任务提交到多个服务器共享的任务集合中;
所述处理模块从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合包括:
所述处理模块通过工作流引擎从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合。
13.一种用于提供服务的数据处理电子设备,包括:存储器和处理器;
其特征在于:
所述存储器用于存储用于提供服务的程序;所述用于提供服务的程序在被所述处理器读取执行时,执行如下操作:
收到客户端的服务请求后,根据所述服务请求生成相应的任务,所述任务包括一个或多个事务,所述事务具有幂等性和事务原子性,将生成的任务提交到多个服务器共享的任务集合中;
从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合;
其中,当包含多个所述事务时,一个任务的所述执行结果包括:该任务中每个事务的执行结果,或者该任务中最后一个事务或某一个、某几个事务的执行结果。
14.一种提供服务的系统,包括:多个服务器;
其特征在于:
所述多个服务器中的全部或部分服务器收到客户端的服务请求后,根据所述服务请求生成相应的任务,所述任务包括一个或多个事务,所述事务具有幂等性和事务原子性,将生成的任务提交到多个服务器共享的任务集合中;
所述多个服务器中的全部或部分服务器从所述任务集合中获取未处理完成的任务,对所获取的任务执行相应的业务处理,将执行结果写回所述任务集合;
其中,当包含多个所述事务时,一个任务的所述执行结果包括:该任务中每个事务的执行结果,或者该任务中最后一个事务或某一个、某几个事务的执行结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610543775.2A CN107612950B (zh) | 2016-07-11 | 2016-07-11 | 一种提供服务的方法、装置、系统、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610543775.2A CN107612950B (zh) | 2016-07-11 | 2016-07-11 | 一种提供服务的方法、装置、系统、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107612950A CN107612950A (zh) | 2018-01-19 |
CN107612950B true CN107612950B (zh) | 2021-02-05 |
Family
ID=61055399
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610543775.2A Active CN107612950B (zh) | 2016-07-11 | 2016-07-11 | 一种提供服务的方法、装置、系统、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107612950B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109818836B (zh) * | 2018-11-08 | 2021-12-14 | 平安科技(深圳)有限公司 | 服务接入方法、装置、计算机设备及计算机存储介质 |
CN109688138B (zh) * | 2018-12-27 | 2021-07-20 | 北京天融信网络安全技术有限公司 | 一种基于网络的数据处理方法及电子设备 |
CN110351126A (zh) * | 2019-06-26 | 2019-10-18 | 中信百信银行股份有限公司 | 日志级别调整方法、装置及电子设备 |
CN110750271B (zh) * | 2019-10-21 | 2021-07-23 | 珠海格力电器股份有限公司 | 服务聚合、聚合服务的执行方法、装置和电子设备 |
CN112565286A (zh) * | 2020-12-17 | 2021-03-26 | 金蝶软件(中国)有限公司 | 一种基于rpc访问的任务响应方法、装置、设备和存储介质 |
CN112860510A (zh) * | 2021-01-20 | 2021-05-28 | 中国农业银行股份有限公司 | 一种告警补偿方法及装置 |
CN114331391B (zh) * | 2022-03-09 | 2022-08-19 | 北京有生博大软件股份有限公司 | 基于全域状态更新的工作流同步更新方法及工作流同步更新系统 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2003225984A1 (en) * | 2002-03-25 | 2003-10-13 | Myriagon Corporation | Information management system |
US7454501B2 (en) * | 2002-03-29 | 2008-11-18 | International Business Machines Corporation | Most eligible server in a common work queue environment |
KR100793446B1 (ko) * | 2006-02-07 | 2008-01-14 | 에스케이 텔레콤주식회사 | 이중화 통신 시스템의 페일 오버 및 원복 처리 방법 |
US8015262B2 (en) * | 2008-02-27 | 2011-09-06 | Sap, Ag | Stateless core service transaction patterns |
US20100217866A1 (en) * | 2009-02-24 | 2010-08-26 | Thyagarajan Nandagopal | Load Balancing in a Multiple Server System Hosting an Array of Services |
CN201805455U (zh) * | 2010-10-13 | 2011-04-20 | 北京神州融信信息技术股份有限公司 | 集群读写装置及系统 |
US9996403B2 (en) * | 2011-09-30 | 2018-06-12 | Oracle International Corporation | System and method for providing message queues for multinode applications in a middleware machine environment |
US20130145371A1 (en) * | 2011-12-01 | 2013-06-06 | Sap Ag | Batch processing of business objects |
CN103353852A (zh) * | 2013-06-07 | 2013-10-16 | 曲阜师范大学 | 一种虚拟化WebService的IaaS的构建方法 |
CN103647834B (zh) * | 2013-12-16 | 2017-03-22 | 上海证券交易所 | 一种用于处理多阶段分布式任务调度的系统及方法 |
US9350812B2 (en) * | 2014-03-21 | 2016-05-24 | Ptc Inc. | System and method of message routing using name-based identifier in a distributed computing environment |
CN104463409A (zh) * | 2014-10-28 | 2015-03-25 | 用友软件股份有限公司 | 任务操作方法与任务操作装置 |
CN104601696B (zh) * | 2015-01-13 | 2018-05-15 | 北京京东尚科信息技术有限公司 | 服务处理方法、服务调用系统、装置和系统 |
CN106406983B (zh) * | 2015-07-27 | 2021-01-08 | 创新先进技术有限公司 | 一种集群中的任务调度方法及装置 |
CN105700958B (zh) * | 2016-01-07 | 2019-05-03 | 北京京东尚科信息技术有限公司 | 一种任务自动拆分以及子任务并行执行的方法及其系统 |
CN105721562B (zh) * | 2016-01-28 | 2019-01-29 | 武汉大学 | 一种基于代理的异构服务调用方法与协同调用系统 |
CN106357452B (zh) * | 2016-09-29 | 2019-06-04 | 上海和付信息技术有限公司 | 一种单点异构数据存储的高可用框架系统及其实现方法 |
-
2016
- 2016-07-11 CN CN201610543775.2A patent/CN107612950B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107612950A (zh) | 2018-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107612950B (zh) | 一种提供服务的方法、装置、系统、电子设备 | |
US10509680B2 (en) | Methods, systems and apparatus to perform a workflow in a software defined data center | |
US8762929B2 (en) | System and method for exclusion of inconsistent objects from lifecycle management processes | |
US9934107B1 (en) | Designating backup nodes and backing up in parallel in a high-availability environment | |
KR102072726B1 (ko) | 데이터베이스로의 미들-티어 트랜잭션 로그들의 인라인 위임을 지원하는 시스템들 및 방법들 | |
US8190562B2 (en) | Linking framework for information technology management | |
US9535754B1 (en) | Dynamic provisioning of computing resources | |
CN110825420A (zh) | 分布式集群的配置参数更新方法、装置、设备及存储介质 | |
US10523754B2 (en) | Methods for integrating applications with a data storage network and devices thereof | |
CN106789741B (zh) | 消息队列的消费方法及装置 | |
CN110019469B (zh) | 分布式数据库数据处理方法、装置、存储介质及电子装置 | |
US20210286799A1 (en) | Automated transaction engine | |
CN110895488B (zh) | 任务调度方法及装置 | |
US20150019620A1 (en) | High availability for communications based on remote procedure calls | |
EP3786802A1 (en) | Method and device for failover in hbase system | |
US11500812B2 (en) | Intermediate file processing method, client, server, and system | |
JP5518950B2 (ja) | バーチャルマシンの管理システム及び管理方法 | |
US9069632B2 (en) | Message processing | |
US9031969B2 (en) | Guaranteed in-flight SQL insert operation support during an RAC database failover | |
US20110225463A1 (en) | Detecting and recovering from process failures | |
WO2021082925A1 (zh) | 一种交易处理的方法及装置 | |
CN108475211B (zh) | 无状态系统和用于获得资源的系统 | |
US11954069B2 (en) | Find operation for union-mounted systems | |
US11321120B2 (en) | Data backup method, electronic device and computer program product | |
US9996870B2 (en) | Method, system, and computer readable medium for utilizing job control orders in an order management system |
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 |