一种服务器和数据处理方法
【技术领域】
[0001]本发明涉及计算机通信技术,尤其涉及一种服务器和数据处理方法。
【背景技术】
[0002]在传统的数据库事务管理技术中,通常将数据操作的执行分为三个步骤:预提交、提交,以及数据操作失败时的回滚。其中“预提交”是指事务中的所有操作在缓存中执行,若所有操作均成功,则“提交”,否则“回滚”;“提交”是指将数据写入数据库;“回滚”是指清理缓存,恢复到预提交前的数据。
[0003]持久层服务,用于屏蔽不同数据库部署形式、版本差异和/或数据库提供商,向应用提供统一的访问数据库的接口。
[0004]图1示出了在云服务场景下,向应用服务提供持久层服务的典型架构。其中,应用服务(Applicat1n Service, App Service)向云端的持久层服务发送请求,持久层服务响应应用服务的请求向应用提供服务。在具体实现时,通常应用服务和持久层服务由不同的开发商实现,云服务开发商提供持久层服务,但提供的持久层服务通常不具有事务管理的功能。这是因为:持久层服务需要兼容不同类型的数据库,但是不同类型的数据库实现事务管理功能的机制不同,若持久层服务提供事务管理功能,则针对不同数据库的事务管理的实现机制,持久层服务均需要进行适配,并且某些数据库不具备事务管理功能,这更增加了持久层服务提供事务管理功能的难度。
[0005]另一方面,目前,持久层服务常见的实现方式是:持久层服务自身通过非关系数据库,以及存储区域网络(Storage Area Network, SAN)或网络存储(Network AttachedStorage, NAS) 一起提供可扩展的数据存贮能力,而不使用传统的关系数据库来组织数据。此时,持久层服务若自身实现事务管理功能,则需要耗费额外的数据处理资源,当占用的数据处理资源较大时,若持久层服务可用的数据处理资源有限,则可能会对持久层服务自身造成影响。
[0006]因此,目前的云服务场景中,不同应用服务的开发商通常需要自身提供事务管理功能,导致应用开发的复杂度高,同时不同应用的事务管理功能差异性较大,兼容性难以保证。
【发明内容】
[0007]本发明实施例提供一种服务器和数据处理方法,用于在云服务场景下,云服务开发商提供的持久层服务不具有事务管理的功能的情况下,提供一种简单的实现事务管理的方案,以降低应用服务实现的复杂度。
[0008]第一方面,本发明实施例提供一种第二数据服务器,所述第二数据服务器与第一数据服务器以及一个或多个应用服务器具有通信连接;所述一个或多个应用服务器用于提供应用服务;所述第一数据服务器用于提供第一持久层服务,所述第一数据服务器中包括第一数据;所述第二数据服务器用于提供第二持久层服务,所述第二数据服务器中包括第二数据,所述第二数据包括与所述第一数据相同的数据;所述第二数据服务器向所述一个或多个应用服务器提供第二应用程序接口 API,所述一个或多个应用服务器通过调用所述第二 API向所述第一数据服务器请求所述第一持久层服务;所述第一数据服务器向所述第二数据服务器提供第一 API,所述第二数据服务器通过调用所述第一 API请求所述第一持久层服务;
[0009]所述第二数据服务器包括:
[0010]所述第二接口,用于提供所述第二 API,并接收所述一个或多个应用服务器通过调用所述第二 API发送的第一操作请求,所述第一操作请求用于请求执行至少一个操作,所述至少一个操作属于同一个事务;
[0011]所述事务管理模块,用于在确定所述第一操作请求是用于请求所述第一持久层服务执行所述至少一个操作后,对所述第二数据执行所述至少一个操作;若每一个操作均执行成功,则生成第二操作请求,所述第二操作请求用于请求对所述第一数据执行所述至少一个操作;
[0012]所述第一接口,用于调用所述第一 API向所述第一数据服务器发送所述第二操作请求。
[0013]结合第一方面,在第一种可能的实现方式中,所述事务管理模块在确定所述第一操作请求是用于请求所述第一持久层服务执行所述至少一个操作时,具体用于:
[0014]根据所述第一操作请求中所述第一持久层服务的标识信息,或用于指示所述应用服务请求所述第一持久层服务的用户协议信息,确定所述第一操作请求用于请求所述第一持久层服务执行所述至少一个操作。
[0015]结合第一方面,或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述事务管理模块还用于:
[0016]若执行所述至少一个操作失败,则将所述第二数据回滚至执行所述至少一个操作之前的状态。
[0017]结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述事务管理模块在对所述第二数据执行所述至少一个操作中的每一个操作时,具体用于:
[0018]对所述至少一个操作进行拆解处理,所述拆解处理包括:将所述至少一个操作中针对多个资源对象的操作,分解为多个针对单个资源对象的原子操作,所述资源对象为所述第一持久层服务管理的资源对象,所述原子操作为对于所述第一持久层服务管理的资源对象不可再分的操作;以及
[0019]对所述拆解处理后得到的原子操作进行事务管理,所述事务管理包括:针对所述拆解处理得到的每一个原子操作,记录该原子操作的类型、该原子操作所针对的资源对象的标识和所述同一个事务的事务标识三者的对应关系;并执行所述拆解处理得到的每一个原子操作。
[0020]结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,
[0021]所述事务管理模块在将所述第二数据回滚至执行所述至少一个操作中的每一个操作之前的状态时,具体用于:
[0022]根据所述事务处理中记录的所述对应关系,将所述第二数据回滚至执行所述至少一个操作中的每一个操作之前的状态。
[0023]结合第一方面,或第一方面的第一种可能的实现方式至第四种可能的实现方式中的任一种,在第五种可能的实现方式中,
[0024]所述第一操作请求中包括所述同一个事务的事务标识;
[0025]所述事务管理模块在生成所述第二操作请求时,具体用于:去掉所述第一操作请求中的所述同一个事务的事务标识,以生成所述第二操作请求。
[0026]结合第一方面,或第一方面的第一种可能的实现方式至第五种可能的实现方式中的任一种,在第六种可能的实现方式中,
[0027]所述事务管理模块还用于:若执行所述至少一个操作失败,则针对所述第一操作请求生成失败响应,所述失败响应用于指示所述至少一个操作执行失败;
[0028]所述第二接口还用于:向所述一个或多个应用服务器发送所述失败响应,。
[0029]结合第一方面的第六种可能的实现方式,在第七种可能的实现方式中,所述失败响应中包括所述至少一个操作中未执行成功的操作的下列信息中的至少一种:
[0030]操作类型;
[0031]操作所针对的所述第一持久层服务的资源对象;
[0032]操作失败原因。
[0033]结合第一方面,或第一方面的第一种可能的实现方式至第七种可能的实现方式中的任一种,在第八种可能的实现方式中,所述第二数据服务器与所述第一数据服务器为同一服务器;或
[0034]所述第二数据服务器与所述第一数据服务器为不同服务器;或
[0035]所述应用服务器与所述第二数据服务器为同一服务器。
[0036]结合第一方面的第八种可能的实现方式,在第九种可能的实现方式中,所述第二数据服务器与所述第一数据服务器为不同服务器;
[0037]所述第一数据服务器和第二数据服务器为云服务器,且所述第一数据服务器和所述第二数据服务器承载在不同的虚拟机VM上。
[0038]第二方面,本发明实施例一种应用服务器,第二数据服务器与第一数据服务器以及一个或多个所述应用服务器具有通信连接;所述应用服务器用于提供应用服务;所述第一数据服务器用于提供第一持久层服务,所述第一数据服务器中包括第一数据;所述第二数据服务器向一个或多个所述应用服务器提供第二应用程序接口 API,一个或多个所述应用服务器通过调用所述第二 API向所述第一数据服务器请求所述第一持久层服务;所述第一数据服务器向所述第二数据服务器提供第一 API,所述第二数据服务器通过调用所述第一 API请求所述第一持久层服务;
[0039]所述应用服务器包括:
[0040]操作请求生成模块,用于生成第一操作请求,并指示所述第一操作请求用于请求所述第一持久层服务执行至少一个操作,所述至少一个操作属于同一个事务,所述第一操作请求中包括用于指示所述第一操作请求用于请求所述第一持久层服务的指示信息;
[0041]接口,用于调用所述第二 API,向所述第二数据服务器发送所述第一操作请求,指示所述第二数据服务器:对所述第二数据执行所述至少一个操作;若每一个操作均执行成功,则生成第二操作请求,并通过调用所述第一 API向所述第一数据服务器发送所述第二操作请求,所述第二操作请求用于请求对所述第一数据执行所述至少一个操作。
[0042]结合第二方面,在第一种可能的实现方式中,所述用于指示所述第一操作请求用于请求所述第一持久层服务的指示信息包括:
[0043]所述第一持久层服务的标识信息;或
[0044]用于指示所述应用服务请求所述第一持久层服务的用户协议信息。
[0045]结合第二方面,或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,
[0046]所述第一操作请求还用于指示所述第二数据服务器:在执行所述至少一个操作失败时,将所述第二数据回滚至执行所述至少一个操作之前的状态。
[0047]结合第二方面、第二方面的第一种可能的实现方式或第二种可能的实现方式,在第三种可能的实现方式中,所述第一操作请求中包括所述同一个事务的事务标识。
[0048]结合第二方面,或第二方面的第一种可能的实现方式至第三种可能的实现方式中的任一种,在第四种可能的实现方式中,所述接口还用于:
[0049]接收所述第二数据服务器在执行所述至少一个操作失败后发送的失败响应;
[0050]所述失败响应用于指示所述至少一个操作执行失败。
[0051]结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述失败响应中包括所述至少一个操作中未执行成功的操作的下列信息中的至少一种:
[0052]操作类型;
[0053]操作所针对的所述第一持久层服务的资源对象;
[0054]操作失败原因。
[0055]结合第二方面,或第二方面的第一种可能的实现方式至第五种可能的实现方式中的任一种,在第六种可能的实现方式中,所述应用服务器与所述第二数据服务器为同一服务器。
[0056]第三方面,本发明实施例提供一种数据处理方法,应用于第二数据服务器上,所述第二数据服务器与第一数据服务器以及一个或多个应用服务器具有通信连接;所述应用服务器用于提供应用服务;所述第一数据服务器用于提供第一持久层服务,所述第一数据服务器中包括第一数据;所述第二数据服务器用于提供第二持久层服务,所述第二数据服务器中包括第二数据,所述第二数据包括与所述第一数据相同的数据;所述第二数据服务器向所述应用服务器提供第二应用程序接口 API,所述应用服务器通过调用所述第二 API向所述第一数据服务器请求所述第一持久层服务;所述第一数据服务器向所述第二数据服务器提供第一 API,所述第二数据服务器通过调用所述第一 API请求所述第一持久层服务;所述方法包括:
[0057]所述第二数据服务器接收所述一个或多个应用服务器发送的第一操作请求,所述第一操作请求是所述一个或多个应用服务器通过调用所述第二 API发送的,用于请求执行至少一个操作,所述至少一个操作属于同一个事务;
[0058]所述第二数据服务器在确定所述第一操作请求是用于请求所述第一持久层服务执行所述至少一个操作后,
[0059]对所述第二数据执行所述至少一个操作;
[0060]若每一个操作均执行成功,则所述第二数据服务器生成第二操作请求,并通过调用所述第一 API向所述第一数据服务器发送所述第二操作请求,其中所述第二操作请求用于请求对所述第一数据执行所述至少一个操作。
[0061]结合第三方面,在第一种可能的实现方式中,第二数据服务器确定所述第一操作请求用于请求所述第一持久层服务执行所述至少一个操作,包括:
[0062]所述第二数据服务器根据所述第一操作请求中所述第一持久层服务的标识信息,或用于指示所述应用服务请求所述第一持久层服务的用户协议信息,确定所述第一操作请求用于请求所述第一持久层服务。
[0063]结合第三方面,或第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述方法还包括:
[0064]若执行所述至少一个操作失败,则所述第二数据服务器将所述第二数据回滚至执行所述至少一个操作之前的状态。
[0065]结合第三方面的第二种可能的实现方式,在第三种可能的实现方式中,
[0066]所述第二数据服务器对所述第二数据执行所述至少一个操作中的每一个操作,包括:
[0067]所述第二数据服务器对所述至少一个操作进行拆解处理,所述拆解处理包括:将所述至少一个操作中针对多个资源对象的操作,分解为多个针对单个资源对象的原子操作,所述资源对象为所述第一持久层服务管理的资源对象,所述原子操作为对于所述第一持久层服务管理的资源对象不可再分的操作;以及
[0068]所述第二数据服务器对所述拆解处理后得到的原子操作进行事务管理,所述事务管理包括:针对所述拆解处理得到的每一个原子操作,记录该原子操