一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据库访问方法和系统与流程

2022-02-25 18:13:51 来源:中国专利 TAG:


1.本技术涉及数据库技术领域,具体涉及一种数据库访问方法和系统。


背景技术:

2.在当前的端云应用系统中,应用(application,app)可以访问云端的多个应用服务器中的任意应用服务器,每个应用服务器需要连接任意app的数据库,以存储和访问任意app的数据。因此,每个应用服务器都要为每个数据库建立连接池。当应用规模增长时,需要相应增加应用服务器和数据库。这会导致两方面的问题:支撑的用户规模有限,数据库存在连接数的最大限制,从而限制了应用服务器的最大数目,使得无法支撑热门应用的超大用户规模;支撑的app数有限,app数的增长会导致每个应用服务器的数据库连接数的成倍增长,最后会导致应用服务器负载过大而建立不了新连接。而这两个方面的叠加,会导致应用服务器的伸缩性问题更加严重。
3.当前业界已存在一些成熟的数据库代理方案。在数据库代理方案中,数据库代理服务器连接在应用服务器与数据库之间,应用服务器只需要与数据库代理服务器建立连接,以请求对数据库的访问。然而,在已有的数据库代理方案中,应用服务器与代理服务器建立多个物理连接,app数的增长仍会导致每个应用服务器的连接数成倍增长,最后会导致应用服务器负载过大而建立不了新连接。另外,由于一个应用服务器到代理服务器的连接对应一个代理服务器到数据库的连接,从而数据库的最大连接数仍限制了应用服务器到代理服务器的连接数,导致无法支撑热门应用的超大用户规模。


技术实现要素:

4.本技术实施例旨在提供一种更有效的数据库访问方案,该方案增加了应用层可包括的最大应用服务器数目,从而可支持超大用户规模,该方案还增加了可支持的最大应用数目。
5.为实现上述目的,本技术第一方面提供一种数据库访问方法,其特征在于,所述方法包括:应用服务器与接入服务器建立一个或多个连接,所述接入服务器通过多个执行服务器与多个数据库的服务器连接,所述多个数据库中包括存储有第一应用的数据的第一数据库,所述应用服务器与所述接入服务器之间的连接数小于任一所述执行服务器与所述多个数据库之间的连接数;响应于第一应用发起的业务请求,所述应用服务器生成对所述第一数据库的第一操作请求;将所述第一操作请求和用于指示所述第一数据库的第一标识发送给所述接入服务器。
6.在该方法中,通过将接入服务器和执行服务器用作为对数据库的代理层,并且使得应用服务器通过一个或多个连接与接入服务器连接,相应地,应用服务器将操作请求和例如应用标识发送给接入服务器,从而应用服务器可通过所述一个连接发送多个操作请求,而不需要如现有技术中那样对每个操作请求都分配一个连接。通过这样,使得应用服务器的连接数与数据库的连接数解耦,从而不会出现由于应用服务器的连接数过多而限制应
用数的增长。同时,由于应用服务器的连接数与数据库的连接数解耦,使得数据库的规模不会限制应用服务器的最大数目,而接入服务器与应用层的连接数是固定的(例如10000个),每个应用服务器与接入服务器的连接数越少,就代表接入服务器可支撑的应用服务器数目越多,从而使用该方法的系统可支撑更多的应用服务器数,从而可支撑超大用户规模。另外,应用层支撑的应用服务器数目的增加和应用数目的增加,使得该应用层可支撑超大规模的对应用数据库的操作请求的数目。
7.在一种实施方式中,所述第一操作请求包括请求开始第一事务的事务开始请求,所述方法还包括:所述应用服务器将所述第一事务的标识发送给所述接入服务器。
8.在一种实施方式中,所述方法还包括:所述应用服务器从所述接入服务器接收对所述事务开始请求的响应和所述多个执行服务器中的第一执行服务器的标识,记录所述第一事务与所述第一执行服务器的对应关系。
9.在一种实施方式中,所述方法还包括:所述应用服务器在从所述接入服务器接收对所述事务开始请求的响应之后,生成所述第一事务包含的第二操作请求,将所述第二操作请求、所述第一事务的标识和所述第一执行服务器的标识发送给所述接入服务器。
10.在一种实施方式中,所述方法还包括:基于所述接入服务器和所述第一执行服务器中的至少一个出现预定异常情况,所述应用服务器结束对所述第一事务的处理。
11.在一种实施方式中,所述方法还包括:所述应用服务器在管理设备中注册与所述应用服务器对应的信息,在所述管理设备中注册与所述第一事务对应的信息。在该实施方式中,通过使用管理设备提供监听和通知功能,实现了本技术数据库访问系统架构下的事务管理、数据库连接池动态配置、异常处理、高可伸缩等功能。
12.在一种实施方式中,所述方法还包括:所述应用服务器在所述管理设备中设置对所述第一事务的监听;从所述管理设备接收删除第一事务的信息的通知,结束对所述第一事务的处理,其中,所述第一事务的信息在所述接入服务器、所述第一执行服务器和所述第一数据库中任一个出现预定异常情况时被删除。
13.在一种实施方式中,所述应用服务器中预设有所述第一数据库对应的逻辑连接池,所述逻辑连接池包括多个逻辑连接,每个逻辑连接与所述应用服务器与所述接入服务器的一个连接对应,所述应用服务器将所述第一操作请求和所述第一标识发送给所述接入服务器包括:所述应用服务器从所述逻辑连接池中确定目标逻辑连接,通过所述目标逻辑连接对应的所述应用服务器与所述接入服务器的连接将所述第一操作请求和所述第一标识发送给所述接入服务器。在该实施方式中,通过在应用服务器中利用驱动组件构建逻辑连接池,使得不需要修改应用服务器的原有代码,应用服务器只需要安装本技术实施例中提供的驱动程序,即可使用本技术实施例提供的数据库访问方法,从而使得本技术实施例提供的数据库访问方法具有高可用性。
14.本技术第二方面提供一种数据库访问方法,其特征在于,所述方法包括:接入服务器从应用服务器接收对第一数据库的第一操作请求和用于指示所述第一数据库的第一标识,其中,所述接入服务器通过一个或多个连接与所述应用服务器连接,所述接入服务器还与多个执行服务器连接,所述多个执行服务器与多个数据库连接,所述多个数据库中包括存储有所述第一应用的数据的第一数据库,所述应用服务器和所述接入服务器之间的连接数小于所述执行服务器与其连接的数据库之间的连接数;基于所述第一标识,确定所述多
个执行服务器中的与所述第一数据库连接的第一执行服务器;将所述第一操作请求和所述第一标识发送给所述第一执行服务器。
15.在一种实施方式中,所述多个执行服务器中的部分执行服务器与所述第一数据库连接。在该方法中,通过使得每个数据库仅与多个执行服务器中的部分执行服务器连接,使得数据库数目的增加不会超过单个执行服务器的连接数限制,并且在新增数据库时,还可以扩展执行服务器的数目,从而使得本技术实施例的数据库访问方案可支持大规模的应用数(数据库数)。
16.在一种实施方式中,所述第一操作请求包括请求开始第一事务的事务开始请求,所述方法还包括:所述接入服务器从所述应用服务器接收所述第一事务的标识。
17.在一种实施方式中,所述方法还包括:所述接入服务器将所述第一事务的标识发送给所述第一执行服务器,从所述第一执行服务器接收对所述事务开始请求的响应,将所述响应和所述第一执行服务器的标识发送给所述应用服务器。
18.在一种实施方式中,所述方法还包括:所述接入服务器从所述应用服务器接收所述第一事务包含的第二操作请求、所述第一事务的标识和所述第一执行服务器的标识。
19.本技术第三方面提供一种数据库访问方法,其特征在于,所述方法包括:执行服务器从接入服务器接收对第一数据库的第一操作请求和用于指示所述第一数据库的第一标识,其中,所述执行服务器还与所述第一数据库连接,所述第一数据库用于存储所述第一应用的数据;基于所述第一标识将所述第一操作请求发送给所述第一数据库。
20.在一种实施方式中,所述第一操作请求包括用于请求开始第一事务的事务开始请求,所述方法还包括:所述执行服务器从所述接入服务器接收所述第一事务的标识,从所述第一数据库接收对所述事务开始请求的响应,相对于所述第一事务的标识锁定与所述第一数据库的连接。
21.在一种实施方式中,所述方法还包括:所述执行服务器将所述响应发送给所述接入服务器;从所述接入服务器接收所述第一事务包含的第二操作请求和所述第一事务的标识,通过所述与所述第一数据库的连接将所述第二操作请求发送给所述第一数据库。
22.在一种实施方式中,所述事务开始请求由应用服务器发送给所述接入服务器,所述方法还包括:基于所述接入服务器和/或所述应用服务器出现预定异常情况,所述执行服务器向所述第一数据库发送回滚所述第一事务的请求,释放与所述第一数据库的连接。
23.在一种实施方式中,所述方法还包括:所述执行服务器在管理设备中注册与所述执行服务器对应的信息,所述管理设备中包括与所述第一事务对应的信息。
24.在一种实施方式中,所述方法还包括:所述执行服务器在所述管理设备中设置对所述第一事务的监听;从所述管理设备接收对所述第一事务的信息的删除通知,向所述第一数据库发送回滚所述第一事务的请求,释放与所述第一数据库的连接,其中,所述第一事务的信息在所述应用服务器或所述接入服务器出现预定异常情况时被删除。
25.在一种实施方式中,所述方法还包括:基于所述执行服务器与所述第一数据库的连接断开的情况,所述执行服务器在所述管理设备中删除所述第一事务的信息。
26.本技术第四方面提供一种数据库访问方法,其特征在于,所述方法包括:
27.管理设备对应用服务器进行监听,所述管理设备还与执行服务器连接,所述管理设备中存储有与所述应用服务器对应的信息、与所述执行服务器对应的信息和与第一事务
对应的信息,所述第一事务的信息中记录了所述应用服务器的标识,所述与所述执行服务器对应的信息中设置了对所述第一事务的信息进行监听,;
28.在监听到所述应用服务器异常的情况中,删除所述第一事务的信息;
29.对所述执行服务器发送对所述第一事务的信息的删除通知。
30.在一种实施方式中,所述管理设备还与接入服务器连接,所述管理设备中存储有与所述接入服务器对应的信息,所述与所述应用服务器对应的信息设置了对所述接入服务器和所述执行服务器进行监听,所述方法还包括:管理设备对所述接入服务器和所述执行服务器进行监听;在监听到所述接入服务器和/或所述执行服务器异常的情况中,通知所述应用服务器;删除所述第一事务的信息;对所述执行服务器发送对所述第一事务的信息的删除通知。
31.本技术另一方面提供一种应用服务器,包括存储器和处理器,所述存储器中存储有计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以实现本技术第一方面提供的方法。
32.本技术另一方面提供一种接入服务器,包括存储器和处理器,所述存储器中存储有计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以实现本技术第二方面提供的方法。
33.本技术另一方面提供一种执行服务器,包括存储器和处理器,所述存储器中存储有计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以实现本技术第三方面提供的方法。
34.本技术另一方面提供一种管理设备,包括存储器和处理器,所述存储器中存储有计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以实现本技术第四方面提供的方法。
35.本技术另一方面提供一种数据库访问系统,包括:多个上述应用服务器,多个上述接入服务器、多个上述执行服务器。
36.在一种实施方式中,所述系统还包括上述管理设备。
37.通过本技术实施例提供的数据库访问方法,应用服务器通过较少的(例如一个)连接与接入服务器建立连接,并通过代理层的接入层和执行层的两层设计,使得应用服务器的连接数不再与数据库连接数相关联,从而不会出现由于应用服务器的连接数过多而限制应用数的增长,同时使得数据库的规模不会限制应用服务器的最大数目,应用服务器与接入服务器的较少连接数使得该系统可支撑更多的应用服务器数目,从而可支撑超大用户规模;通过只在部分执行服务器上构建数据库的连接池,通过扩展执行服务器可以支持大规模的数据库实例,从而可支撑超大规模对数据库的访问数;另外,通过在该系统中使用管理设备进行类事务管理,保证了类事务操作在多层服务器间的正确性。
附图说明
38.通过结合附图描述本技术实施例,可以使得本技术实施例更加清楚:
39.图1为根据本技术实施例的端云应用系统的架构示意图;
40.图2为管理设备14中生成的数据结构示意图;
41.图3为本技术实施例提供的一种数据库访问方法流程图;
42.图4为应用服务器as1的示意图;
43.图5为在应用服务器as1中记录的逻辑连接与物理连接的对应关系的示意图;
44.图6示出了由工作线程生成的数据包1的示意图;
45.图7为ip/tcp数据包2的数据结构的示意图;
46.图8为在图3所示方法中各个服务器之间的数据传输示意图;
47.图9为执行服务器e1的示意图;
48.图10为本技术实施例提供的另一种数据库访问方法流程图;
49.图11为本技术实施例提供的另一种数据库访问方法流程图;
50.图12为本技术实施例提供的另一种数据库访问方法流程图;
51.图13为本技术实施例提供的另一种数据库访问方法流程图;
52.图14为本技术实施例提供的另一种数据库访问方法流程图;
53.图15为根据本技术另一实施例的端云应用系统服务端的架构示意图;
54.图16为根据本技术另一实施例的端云应用系统服务端的架构示意图;
55.图17为根据本技术实施例的云服务系统1700的示意图。
具体实施方式
56.下面将结合附图,对本技术实施例中的技术方案进行描述。
57.图1为根据本技术实施例的端云应用系统的架构示意图。如图1所示,该系统包括用户设备11、应用层12、代理层13、管理设备14和存储层15。其中,应用层12包括多个应用服务器,图1中示意示出应用服务器as1-as6。代理层13包括接入层131和执行层132,其中,所述接入层131包括多个接入服务器,图1中示意示出接入服务器a1-a3,执行层132包括多个执行服务器,图1中示意示出执行服务器e1-e3。存储层15包括多个数据库服务器,数据库服务器(本技术简称为“数据库”)是用于存储和管理应用数据的实体。数据库服务器可以是存储有应用数据,并运行有数据库管理系统的物理服务器,也可以是部署在通用硬件资源池上的虚拟机、容器等。例如,数据库服务器或数据库可以是数据中心中部署的数据库节点或数据库实例。图1中示意示出数据库db1和db2,db1例如为应用1(app1)的数据库,用于存储和管理app1的数据;db2例如为应用2(app2)的数据库,用于存储和管理app2的数据。所述管理设备14主要提供服务注册与发现、以及配置功能,从而实现事务管理、数据库连接池动态配置、异常处理、系统的伸缩等等。管理设备14可以包括一个或多个设备(或虚拟设备)。在一个实施例中,管理设备14为一个或多个zookeeper服务器。上述所述各个服务器可以为物理服务器,或者也可以为虚拟机、容器等基于通用硬件资源抽象的虚拟实体。
58.如图1中所示,用户设备11可通过网络与应用服务器连接,每个应用服务器只与一个接入服务器建立一个物理连接,可以理解,所述应用服务器与接入服务器不限于只建立一个物理连接,而可以是建立较少的物理连接,如两个、三个等。例如,所述物理连接可以为传输控制协议(transmission control protocol,tcp)连接。下文中,除逻辑连接之外,所描述的连接都为物理连接。每个接入服务器可与多个应用服务器建立连接,并与多个执行服务器分别建立连接。每个数据库仅与部分执行服务器建立有连接,例如,执行服务器e1中设置有数据库db1的连接池,该连接池中包含与数据库db1的多个连接,执行服务器e2中设置有数据库db1和db2各自的连接池,等等。其中,执行服务器与数据库之间的较粗的箭头表
示其之间的连接包括多个连接。另外,应用层12中的每个应用服务器都与管理设备14连接,接入层131中的每个接入服务器都与管理设备14连接,执行层132中的每个执行服务器都与管理设备14连接。
59.通过图1所示的端云应用系统,应用服务器通过较少的(例如一个)连接与接入服务器建立连接,并通过代理层的接入层和执行层的两层设计,使得应用服务器的连接数不再与数据库连接数相关联,从而不会出现由于应用服务器的连接数过多而限制应用数的增长,同时使得数据库的规模不会限制应用服务器的最大数目,应用服务器与接入服务器的较少连接数使得该系统可支撑更多的应用服务器数目,从而可支撑超大用户规模;通过只在部分执行服务器上构建数据库的连接池,通过扩展执行服务器可以支持大规模的数据库实例;另外,通过在该系统中使用管理设备进行类事务管理,保证了类事务操作在多层服务器间的正确性。
60.可以理解,虽然在图1中示出了在代理层13中包括接入层131和执行层132,本技术实施例不限于此,例如,在应用数进一步增长导致执行层的执行服务器的数目超过单个接入服务器的连接数限制时,可以在接入层和执行层之间加入一层路由层,该路由层可包括多个路由服务器,每个接入服务器可只与一个路由服务器建立连接,一个路由服务器可与多个执行服务器建立连接,从而由路由层进行执行服务器到接入服务器的路由。
61.图1所示的端云应用系统可基于管理设备14进行构建,这里将以zookeeper服务器作为管理设备14的示例描述所述构建过程。管理设备14中例如安装有zookeeper服务端程序,各个应用服务器、接入服务器和执行服务器中例如安装有zookeeper客户端,各个应用服务器、接入服务器和执行服务器与管理设备14之间通过zookeeper客户端和zookeeper服务端程序进行信息交互,从而使得在管理设备14中生成包括各个客户端的对应节点的数据结构,管理设备14通过该数据结构实现上述事务管理等功能。
62.图2为管理设备14中生成的数据结构示意图。如图2中所示,所述数据结构为类似文件系统的树状数据结构,其中设置有与应用层12对应的as节点、与接入层131对应的a节点、与执行层132对应的e节点、与存储层15对应的app节点、以及事务节点(tx节点),每个节点例如为键值数据结构,其中节点的键即为节点的名称,节点的值即为节点对应的信息,例如,as节点的值为该节点包括的多个as子节点。其中,所述as节点中的每个子节点与一个应用服务器对应并由该应用服务器启用时创建,管理设备14通过定期对应用服务器进行监听而维护所述数据结构中相应的as子节点,例如,当管理设备14监听到应用服务器as1崩溃或退出的情况,在所述数据结构中删除as子节点。其中,所述管理设备14通过zookeeper服务端程序接收由应用服务器as1中的zookeeper客户端定期发送的信号对应用服务器as1进行心跳监测,从而对应用服务器as1进行监听。所述a节点中的每个子节点与一个接入服务器对应并由该接入服务器启用时创建,管理设备14通过定期监听接入服务器而维护所述数据结构中相应的a子节点。所述e节点中的每个子节点与一个执行服务器对应并由该执行服务器启用时创建,管理设备14通过定期监听执行服务器而维护所述数据结构中相应的e子节点。所述app节点中的每个子节点与一个app或该app的数据库对应,由系统管理用户通过配置页面创建,管理用户在创建app子节点时,在该app子节点对应的值字段中记录相应app的类型(如热门app或普通app),app对应的数据库的连接参数等,所述连接参数例如包括数据库的最大连接数、连接池最大连接数等等,例如,在图2中的db1子节点中,记录了app类型为
普通类型,db1的最大连接数为1000,db1的每个连接池的最大连接数为100。所述tx节点中的每个子节点代表一个事务,tx子节点为临时节点,由应用服务器在开始处理事务时创建,tx子节点中记录了创建其的应用服务器对应的子节点标识,例如,在图2中的txn子节点中,记录了对创建txn子节点的as1应用服务器对应的as1子节点进行监听,其中,n为事务tx的事务编号。对事务子节点的创建和删除过程将在下文中详细描述。
63.应用服务器as1在启用时,当在管理设备14注册as1子节点之后,基于管理设备14中记录的各个a子节点确定多个可用的接入服务器,并基于预定策略从多个可用接入服务器中选择一个接入服务器并与之建立连接。例如,应用服务器as1可选择连接数最少的接入服务器(例如服务器a1)并与之建立一个连接,同时如图2中所示,该应用服务器as1在as1子节点中设置对a1子节点进行监听,从而可通过管理设备14对其连接的接入服务器a1进行监听。接入服务器可限制应用服务器的接入数量,在应用服务器的接入数量达到预定阈值的情况中,可拒绝应用服务器的连接。另外,接入服务器可以限制正在处理的数据库操作请求队列的长度,并且可将当前请求队列长度上报给管理设备14。从而,应用服务器as1在选择接入服务器时,还可以从管理设备14获取各个接入服务器的请求队列长度,并选择请求队列长度较短的接入服务器进行连接。
64.应用服务器as1在与接入服务器a1建立连接之后,如果接入服务器a1出现例如崩溃或退出等异常情况,由于应用服务器as1在as1子节点中设置了对a1子节点进行监听,因此,管理设备14在通过监听接入服务器a1而确定其异常之后,将删除a1子节点,并将该删除通知应用服务器as1,在该情况中,应用服务器as1可与上文类似地重新选择一个a子节点,并与对应的接入服务器建立连接。另外,应用服务器as1还可以从管理设备14中获取可用的e子节点(例如e1,e2,e3),并在as1子节点中设置对e1,e2,e3子节点进行监听,以用于事务处理,这将在下文详细描述。
65.接入服务器a1在启用时,当在管理设备14注册a1子节点之后,基于管理设备14记录的各个e子节点获取多个可用的执行服务器,并与该多个执行服务器分别建立连接,同时,该接入服务器a1可在a1子节点中设置对e1、e2和e3子节点进行监听,从而可通过管理设备14对各个执行服务器进行监听。执行服务器e1在启用时,当在管理设备14注册e1子节点之后,在e1子节点中设置对子节点e1、e2、e3、db1和db2进行监听,从而可通过管理设备14获取自身配置的变化、并对其它各个执行服务器和数据库进行监听。
66.当管理用户在管理设备14中创建app子节点(例如db2子节点)时,在设置db2子节点的app类型(例如热门类型)和数据库连接参数(例如,最大连接数2000,连接池最大连接数200)之后,在管理设备14中通过分布式锁在多个e子节点中确定一个e子节点(例如图1中的e1子节点)作为计算节点。所述分布式锁用于在分布式环境下从多个服务器中确定一个服务器用于执行特定程序。管理设备14可通过多种方式实现分布式锁,例如基于数据库实现分布式锁、基于缓存实现分布式锁,基于zookeeper实现分布式锁等等。例如,在通过zookeeper实现分布式锁的方式中,各个执行服务器可通过其zookeeper客户端在图2所示的数据结构中创建有序的lock子节点,每个服务器判断自身对应的lock子节点的序号是否最小,如果最小则获得锁。该确定的e1子节点对应的执行服务器e1可基于预定策略确定将新创建的app数据库分配给一个或多个执行服务器,例如,执行服务器e1可选择与存储层的总连接数最小的至少一个执行服务器与该新数据库进行连接。在确定好用于与新创建的
app数据库连接的执行服务器(例如执行服务器e2和e3)之后,执行服务器e1在db2子节点中记录与db2连接的执行服务器对应的e子节点(即e2和e3),在e2和e3子节点中记录其与db2的连接(图2中仅示出e3子节点)。例如执行服务器e3通过监听e3子节点而获知其被分配给db2之后,基于db2对应的app的类型、最大连接数、连接池最大连接数、本地与其它数据库的连接数等信息确定与db2的连接数(例如200),在e3子节点中记录与db2的连接数,并基于该确定的连接数建立与db2的连接池。
67.下文将详细描述基于图1所示的端云应用系统的数据库访问方法。
68.图3为本技术实施例提供的一种数据库访问方法流程图。
69.本技术实施例中涉及的数据库(例如图1中的db1)可以为单机数据库或者集群数据库。
70.在本技术实施例中,以mysql数据库为例进行描述,在mysql数据库中,通过查询(query),例如结构化查询语言(structured query language,sql)操作请求来请求对数据库的访问或操作。所述sql请求可以为单独的请求,或者可以为类事务操作中包括的一组sql请求中的一个sql请求,所述类事务操作例如包括事务操作、使用准备(prepared)语句的操作和使用流式读取结果集的操作等等。图3所示的数据库访问方法适用于非类事务操作的单独的sql请求。该单独的sql请求可包括数据库操作(database manipulation language,dml)请求、数据库查询(database query language,dql)请求等等。可以理解,本技术实施例提供的数据库访问方法不限于用于mysql数据库,而可以用于任意类型的数据库,如关系型数据库、图数据库、键-值(key-value)数据库、文档数据库、非关系型数据库等等。
71.如图3所示,首先,在步骤s301,用户设备11向应用服务器as1发送业务请求1。
72.当用户设备11的用户1在例如app1中进行操作时,用户设备11可将基于用户1在app1中的操作生成业务请求,并将该业务请求发送给一个应用服务器(例如图1中的应用服务器as1)。例如,app1为银行app,用户1在app1中点击账户余额按钮以希望查询账户余额。在该情况中,用户设备11生成业务请求1,在该业务请求1中例如包括app1的标识、用户1的标识、账户余额按钮的标识等信息。用户设备11在生成业务请求1之后将业务请求1发送给应用服务器as1。
73.在步骤s302,应用服务器as1基于业务请求1生成sql请求1。
74.图4为应用服务器as1的示意图。如图4所示,应用服务器as1中包括与用户设备11连接的网络线程1,该网络线程1将来自用户设备11的多个业务请求存储到内存中的请求队列中,从而使得工作线程池中的工作线程可依次获取其中的业务请求。工作线程池中的工作线程在获取业务请求之后,基于业务请求1中的app1标识,确定应向db1发送数据库操作请求。
75.由于现有技术中的应用服务器通常通过设置数据库的连接池而与数据库直接连接,为了不修改现有的应用服务器中的代码而在该应用服务器中使用根据本技术的方法,在本技术中,可以在应用服务器as1中设置驱动组件,该驱动组件对应的驱动程序由数据库提供方提供,所述驱动程序可通过对现有的java数据库连接(java database connectivity,jdbc)驱动程序修改与连接和消息相关的程序而获取。当在应用服务器as1中运行该驱动组件之后,创建网络线程2,通过该网络线程2在监测设备14中注册as1子节
点,同时如上文所述与接入服务器a1建立连接。应用服务器as1可通过调用驱动组件中的接口创建图4中所示的db1逻辑连接池和db2逻辑连接池,其中,在db1逻辑连接池中创建有db1的预定数目的逻辑连接,在db2逻辑连接池中创建有db2的预定数目的逻辑连接。该逻辑连接为应用层连接对象的实例,其例如为数据库的jdbc连接,其具有逻辑连接标识(id),并且具有预定的连接属性,所述连接属性例如包括:数据库的统一资源定位符(uniform resource locator,url)、数据库用户名、数据库登录密码等等。由于所述逻辑连接并不用于实际连接对应的数据库,因此,其中的url可以不包括ip地址端口号等连接信息,而可以用app标识、数据库标识等代替。另外,在应用服务器as1中,并不为每个所述逻辑连接建立一一对应的网络连接(例如tcp连接),db1逻辑连接池和db2逻辑连接池中的每个逻辑连接都与应用服务器as1与接入服务器a1之间建立的连接相对应,即,每个逻辑连接对应的数据库操作请求都通过应用服务器as1与接入服务器a1之间的连接发送给接入服务器a1。
76.图5为在应用服务器as1中的逻辑连接与物理连接的对应关系的示意图。如图5所示,左侧的虚线框db1表示db1逻辑连接池,其中包括逻辑连接c1、c2等等,逻辑连接c1例如为虚拟的jdbc连接1,逻辑连接c2例如为虚拟的jdbc连接2,各个逻辑连接中的url、用户名、密码等属性都是虚拟的内容,并不是真实的属性。图5左侧的虚线框db2表示db2逻辑连接池,其中包括逻辑连接c3、c4等等。图5中的实线框中的连接代表应用服务器as1与接入服务器a1之间建立的物理连接,其中,ip1为应用服务器as1的实际ip地址,port1为应用服务器as1中用于连接的实际端口号,ip2为接入服务器a1的实际ip地址,port2为接入服务器a1中用于连接的实际端口号。如图5所示,逻辑连接c1、c2、c3和c4都与物理连接相对应。
77.基于上述db1逻辑连接池和db2逻辑连接池,应用服务器as1中的所述工作线程在获取一个对应于db1的业务请求之后,与现有应用服务器中执行的操作相同地,工作线程从db1逻辑连接池中获取一个逻辑连接(例如逻辑连接c1),并生成将与该逻辑连接c1一起发送的sql请求1,并将其打包成将要发送的数据包1。图6示出了由工作线程生成的数据包1的示意图。如图6所示,所述数据包1中包括jdbc连接61(例如上述逻辑连接c)和sql请求1,其中,所述jdbc连接61中包括url、数据库用户名、数据库登录密码等信息,该sql请求1与所述业务请求1相对应,用于请求查询用户1的账户余额,并且所述sql请求1中包括请求序号。同时,工作线程记录业务请求1与sql请求1的对应关系。工作线程在生成该数据包1之后,在与逻辑连接c1对应的内存空间中存储该数据包1或者该数据包1中的部分内容(例如sql请求或者sql请求中的请求序号等),并将该数据包1提供给网络线程2,以用于发送sql请求1。
78.可以理解,所述应用服务器as1不限于实现为图4所示的结构,例如,应用服务器as1中也可以不创建各个数据库的逻辑连接池,而可以直接获取物理连接,并通过该物理连接发送该sql请求1。
79.在步骤s303,应用服务器as1向接入服务器a1发送sql请求1和app1标识。
80.工作线程在将上述数据包1提供给网络线程2之后,网络线程2从数据包1中获取sql请求1,从所述url中获取用于指示第一数据库的标识(例如app1标识“app1”),基于与接入服务器a1的连接生成ip/tcp数据包2,通过网络线程2发送该ip/tcp数据包2,并在与该连接对应的内存空间中存储ip/tcp数据包2。也就是说,应用服务器as1通过与接入服务器a1的连接发送该ip/tcp数据包2,从而将数据库操作请求和应用标识发送给接入服务器a1。可以理解,这里,app1标识用于指示第一数据库,应用服务器as1不限于向接入服务器a1发送
app1标识,而可以发送任何可以指示第一数据库的标识,如第一数据库的标识“db1”等等,对此不作限定。
81.图7为ip/tcp数据包2的数据结构的示意图。如图7所示,ip/tcp数据包2中包括ip数据包71、tcp数据包72和传输数据包73。所述ip数据包71中包括ip首部711和ip数据712,ip首部711中包括实际的发送侧ip地址(即应用服务器as1的实际ip地址:ip1)和接收侧ip地址(即接入服务器a1的实际ip地址:ip2),ip数据712中包括tcp数据包72。所述tcp数据包72中包括tcp首部721和tcp数据722,所述tcp首部721中包括发送侧端口(即应用服务器as1的实际端口port1)、接收侧端口(即接入服务器a1的实际端口port2)、以及数据序号(例如序号2),所述tcp数据722中包括传输数据包73。所述传输数据包73中包括sql请求1和应用标识“app1”,在该实施例中,由于通过一个连接发送多个数据库的操作请求,因此,通过与sql请求一起发送相应的应用标识(即app1标识),以指示该操作请求所对应的数据库。
82.图8为在图3所示方法中各个服务器之间的数据传输示意图。在图8中,as1为一个应用服务器,a1为一个接入服务器,e1为一个执行服务器e1,db1为一个数据库,ip/tcp2为一个数据包,如图8中所示,应用服务器as1向接入服务器a1发送ip/tcp数据包2,该ip/tcp数据包2中包括sql请求1、app1标识和序号2。图8中示出的其它传输数据将在下文中依次描述。
83.在步骤s304,接入服务器a1在接收到sql请求1和app1标识之后选择执行服务器e1。
84.接入服务器a1在通过与应用服务器as1的连接接收到上述ip/tcp数据包2之后,通过解析其中的传输数据包73,可读取其中的sql请求1和app1标识,并且接入服务器a1在其中与所述连接对应的内存空间中存储所述ip/tcp数据包2。接入服务器a1基于app1标识可确定该sql请求1为传输给db1的请求,因此,如图2中所示,接入服务器a1通过在管理设备14中查询db1节点,可获知执行服务器e1和执行服务器e2与数据库db1连接。之后,接入服务器a1可选择执行服务器e1和执行服务器e2中的任一个(例如执行服务器e1)作为接收所述sql请求1和app1标识的执行服务器。在一种实施方式中,执行服务器e1和执行服务器e2可在管理设备14中的相应的子节点中记录其请求队列长度,从而,接入服务器a1还可以在执行服务器e1和执行服务器e2中选择请求队列长度较短的执行服务器进行连接。
85.在步骤s305,接入服务器a1将sql请求1和app1标识发送给执行服务器e1。
86.接入服务器a1与执行服务器e1建立有连接,接入服务器a1在相对于上述sql请求1选择执行服务器e1之后,通过与执行服务器e1的连接将上述sql请求1和app1标识发送给执行服务器e1。具体是,如图8所示,接入服务器a1基于所述连接生成ip/tcp数据包3并将其发送给执行服务器e1,之后,接入服务器a1在与该连接对应的内存空间中存储ip/tcp数据包3,其中,所述ip/tcp数据包3中例如包括序号3作为数据序号,并且所述ip/tcp数据包3中包括sql请求1和app1标识。
87.在步骤s306,执行服务器e1获取连接1向数据库db1发送sql请求1。
88.图9为执行服务器e1的示意图。如图9所示,在执行服务器e1中通过网络线程1执行与接入服务器a1的连接,通过工作线程池中的线程进行对sql请求1的处理,并且如上文所述,执行服务器e1中预设有db1连接池和db2连接池,其中,db1连接池中包括与数据库db1的多个jdbc连接,db2连接池中包括与数据库db2的多个jdbc连接,这里的jdbc连接为实际的
jdbc连接,即,该jdbc连接中的url、用户名和密码都是真实的信息。当网络线程1从接入服务器a1接收到上述ip/tcp数据包3之后,从ip/tcp数据包3中解析出sql请求1和app1标识,将其存入请求队列中,并在与所述连接对应的内存中存储所述ip/tcp数据包3。工作线程池中的工作线程从请求队列中获取sql请求1和app1标识之后,基于app1标识确定该sql请求1应发送给数据库db1。从而,工作线程从db1连接池中获取一个jdbc连接(例如连接1),并通过该连接1将sql请求1发送给数据库db1。具体是,如图8所示,工作线程基于连接1生成ip/tcp数据包4,该ip/tcp数据包4中的tcp数据与图6类似地包括所述连接1和sql请求1,并通过网络线程2将该ip/tcp数据包4发送给数据库db1,其中,该ip/tcp数据包4中包括例如序号4作为数据序号。同样地,执行服务器e1在发送该sql请求1之后,在与连接1对应的内存空间中记录该ip/tcp数据包4,以等待对该sql请求1的响应。
89.在步骤s307,数据库db1进行对所述sql请求1的处理,生成响应1。
90.例如,如上文所述,所述sql请求1用于请求查询用户1的账户余额,数据库db1在本地读取用户1的账户余额,并生成对所述sql请求1的响应1,在所述响应1中包括所述用户1的账户余额。
91.在步骤s308,数据库db1向执行服务器e1发送对所述sql请求1的响应1。
92.数据库db1仍通过上述与执行服务器e1的连接1将对所述sql请求1的响应1发送给执行服务器e1。具体是,如图8所示,数据库db1基于连接1生成包括响应1的ip/tcp数据包5,该ip/tcp数据包5中包括与序号4对应的确认序号4,该确认序号4基于序号4生成,例如为序号4加1,以指示该ip/tcp数据包5是对ip/tcp数据包4的响应。
93.在步骤s309,执行服务器e1释放连接1。
94.具体是,执行服务器e1将连接1放回db1连接池中,从而使得执行服务器e1可再次使用该连接1向数据库db1发送其它对数据库db1的操作请求。
95.在步骤s310,执行服务器e1向接入服务器a1发送对所述sql请求1的响应1。
96.再参考图8,执行服务器e1在从数据库db1接收到ip/tcp数据包5之后,对ip/tcp数据包5进行解析,基于其中包括的确认序号4确定其为对ip/tcp数据包4的响应,并从其中获取与sql请求1对应的响应1。可以理解,执行服务器e1不限于通过ip/tcp数据包中的序号确认响应1与sql请求1相对应,例如,响应1中可包括sql请求1的请求序号,从而,执行服务器e1可基于响应1中的请求序号确认响应1对应于sql请求1。
97.然后,如图8所示,工作线程针对上述在内存中记录的包括sql请求1的ip/tcp数据包3,基于与应用服务器as1的连接生成ip/tcp数据包6,该ip/tcp数据包6中包括所述响应1、以及与上述序号3对应的确认序号3,该确认序号3用于指示该ip/tcp数据包6是对ip/tcp数据包3的响应。之后,工作线程将ip/tcp数据包6提供给图9中的网络线程1,以通过网络线程1将ip/tcp数据包6发送给接入服务器a1。
98.在步骤s311,接入服务器a1向应用服务器as1发送对所述sql请求1的响应1。
99.接入服务器a1在接收ip/tcp数据包6之后,如图8所示,基于其中的确认序号3确定该数据包是对ip/tcp数据包3的响应,从而确定响应1是针对sql请求的响应。接入服务器a1从内存中获取包括sql请求1的ip/tcp数据包2,从其中获取序号2,基于与应用服务器as1的连接生成ip/tcp数据包7,该数据包7中包括与序号2对应的确认序号2和对sql请求1的响应1。然后,接入服务器a1将ip/tcp数据包7发送给应用服务器as1的网络线程2。
100.在步骤s312,应用服务器as1向用户设备11发送对业务请求1的响应。
101.仍然参考图4,应用服务器as1中的网络线程2在从接入服务器a1接收到ip/tcp数据包7之后从中获取响应1并将响应1提供给工作线程池中的工作线程。工作线程在获取响应1之后,基于响应1中的请求序号和预先记录的请求序号与业务请求的对应关系,可确定该响应1与业务请求1相对应,并且基于与逻辑连接c对应的记录,可确定该响应1与逻辑连接c相对应。从而,应用服务器as1将逻辑连接c放回到db1逻辑连接池中,并从响应1中获取用户1的账户余额,生成对应于用户1的业务请求1的响应,该响应例如包括用户1的账户余额和app1的标识等信息,并通过与用户1的用户设备11的连接将该响应发送回用户设备11。
102.图3所示过程为向用户设备11成功返回响应的过程,可以理解,在用户设备11向应用服务器as1发送业务请求1并等待响应的过程中,各个服务器有可能出现例如崩溃、退出等异常情况,在该情况下,向用户设备11返回操作失败响应。具体是,如果数据库db1出现长时间无返回的异常情况,执行服务器e1在预定时间内未从数据库db1接收到对sql请求1的响应,则结束对响应的等待,并向接入服务器a1返回处理失败响应,从而最终向用户设备11返回操作失败响应。如果执行服务器e1出现例如崩溃或退出等异常情况,管理设备14将会感知到并删除对应的e1子节点,由于应用服务器as1在as1子节点中设置了对e1子节点进行监听,因此,管理设备14在删除e1子节点之后通知应用服务器as1,从而应用服务器as1可获知执行服务器e1出现异常情况,从而,应用服务器as1向用户设备11返回操作失败响应。如果接入服务器a1出现例如崩溃或退出的异常情况,由于应用服务器as1在as1子节点中设置了对a1子节点进行监听,因此,应用服务器as1将从管理设备14接收到通知从而获知接入服务器a1出现异常情况,从而,如上文所述,应用服务器as1将重新选择一个接入服务器进行连接,并且,应用服务器as1向用户设备11返回操作失败响应。如果应用服务器as1出现例如崩溃或退出的异常情况,用户设备11在预定时段中未接收到应用服务器as1的响应之后,将对用户1显示相应的异常消息。
103.图10为本技术实施例提供的另一种数据库访问方法流程图。图10所示的数据库访问方法适用于通过类事务操作进行的对数据库的访问。图10中以事务操作为例进行示例描述。
104.如图10所示,首先,在步骤s1001,用户设备1向应用服务器as1发送来自于应用1的业务请求2。
105.例如,app1为银行app,用户1在app1中进行转账操作以希望向用户2转账例如100元。在该情况中,用户设备11生成业务请求2,在该业务请求2中例如以预定数据结构包括app1的标识、用户1的标识、用户2的标识、“100”等信息。用户设备11在生成业务请求2之后将业务请求2发送给应用服务器as1。
106.在步骤s1002,应用服务器as1在管理设备14中建立txn子节点。
107.应用服务器as1在接收到业务请求2之后,如图4所示,应用服务器as1中的工作线程基于业务请求2确定该请求对应于对数据库的一系列的操作,该一系列的操作包括,将用户1的账户余额减少100,将用户2的账户余额增加100。为了保证对业务请求2的正确处理,需要保证这两个操作的原子性,即,对这两个操作都执行或者都不执行,而不能仅执行这两个操作中的任一个。为此,应用服务器as1通过相对于业务请求2执行数据库事务,从而保证上述两个操作的原子性。
108.具体是,应用服务器as1生成该事务的唯一标识txn,并使用txn作为事务子节点的名称在管理设备14中建立txn子节点,其中,所述“n”为事务的编号。例如,应用服务器as1可首先从db1逻辑连接池中获取用于发送该事务的逻辑连接1,然后,应用服务器as1可基于应用服务器as1的ip地址和逻辑连接1确定n,从而可保证标识txn的唯一性。可以理解,对标识txn的生成不限于如上文所述,只要可以保证标识txn的唯一性即可。在创建txn子节点之后,工作线程在txn子节点中的“监听”字段中记录“as1”,以相对于txn子节点监听应用服务器as1的状态。
109.在步骤s1003,应用服务器as1基于业务请求2生成事务txn的事务开始请求。
110.在建立txn子节点之后,应用服务器as1首先生成事务txn的事务开始请求(下文称为txn开始请求),所述事务开始请求用于请求开始对事务txn的处理。
111.在步骤s1004,应用服务器as1将txn开始请求、“txn”和“app1”发送给接入服务器a1。
112.该步骤s1004可参考上述步骤s303的实施,所不同的是,当应用服务器as1从db1逻辑连接池获取一个逻辑连接(例如逻辑连接c1)之后,在本地记录逻辑连接c1与“txn”的对应关系,从而锁定该逻辑连接c1,并且在该次发送完成之后并不将该逻辑连接c1放回db1逻辑连接池中,从而当收到事务txn的下一个访问请求时,仍然使用该逻辑连接c1进行对该下一个访问请求发送,应用服务器as1中直到提交或回滚事务txn时才将逻辑连接c1放回到db1逻辑连接池中。与上文类似地,在基于逻辑连接c1生成数据包时,可在该数据中包括txn开始请求和“txn”,应用服务器as1中的网络线程2在从工作线程接收到该数据包之后,基于该数据包生成ip/tcp数据包并发送给接入服务器a1,其中该ip/tcp数据包中还包括app1标识,即,应用服务器将txn开始请求、“txn”和“app1”发送给接入服务器a1。
113.在步骤s1005,接入服务器a1相对于接收的txn开始请求选择执行服务器e1。
114.在步骤s1006,接入服务器a1将txn开始请求、“txn”和“app1”发送给执行服务器e1。
115.步骤s1005-s1006可参考上文对步骤s304-s305的描述,在此不再赘述。
116.在步骤s1007,执行服务器e1通过管理设备14监听txn子节点。
117.参考图2,执行服务器e1在接收到txn开始请求之后,在e1子节点中设置对txn子节点的监听,从而对txn子节点进行监听。在进行该设置之后,当管理设备14中的txn子节点被删除之后,管理设备14将对执行服务器e1进行通知。
118.在步骤s1008,执行服务器e1获取连接1向数据库db1发送txn开始请求。
119.该步骤s1008可参考上文对步骤s306的描述,在此不再赘述。
120.在步骤s1009,数据库db1处理txn开始请求,生成响应2。
121.数据库db1在接收到txn开始请求之后,开始对事务txn的事务操作,并生成响应2,该响应2指示对txn开始请求成功处理。
122.在步骤s1010,数据库db1向执行服务器e1发送响应2。
123.数据库db1仍通过上述与执行服务器e1的连接1将对所述txn开始请求的响应2发送回执行服务器e1。
124.在步骤s1011,执行服务器e1对事务txn锁定连接1。
125.也就是说,执行服务器e1在接收到对txn开始请求的响应2之后,并不是如处理单
独sql请求那样释放数据库连接(即连接1),而是对事务txn锁定连接1,直到在事务提交或回滚之后再释放连接1,从而保证事务处理的一致性。具体是,执行服务器e1可在内存中相对于标识“txn”存储连接1,从而在下次处理事务txn中的请求时,可从内存获取与标识“txn”对应的连接1,并通过连接1进行消息收发。
126.在步骤s1012,执行服务器e1向接入服务器a1发送响应2。
127.在步骤s1013,接入服务器a1向应用服务器as1发送响应2和执行服务器e1的标识(例如“e1”)。
128.步骤s1012-s1013可参考上文对步骤s310-s311的描述,这里,步骤s1013与上述步骤s311不同之处在于,除了发送响应2之外还发送“e1”,从而应用服务器as1可获知事务txn的sql请求都应发送给执行服务器e1,并将后续的事务txn的sql请求与“e1”一起发送。为此,应用服务器as1在接收到该响应之后,在本地记录事务txn与“e1”相对应,以确保事务txn的后续请求都通过执行服务器e1进行处理。在另一种实施方式中,执行服务器e1在接收到txn开始请求之后,可在管理设备14的txn子节点中记录“e1”,以指示处理事务txn的执行服务器为执行服务器e1,从而不需要在步骤s1013中发送“e1”。
129.在进行步骤s1013之后,应用服务器as1还依次进行以下过程:生成并发送事务txn的sql请求2、在接收到sql请求2的处理成功响应之后,生成并发送sql请求3,并接收相应的响应。其中,sql请求2用于将用户1的账户余额减少100,sql请求3用于将用户2的账户余额增加100。该过程可参考上文对步骤s303-s311的描述,该过程与步骤s303-s311不同之处包括以下几项:在发送例如sql请求2时,将sql请求2与“txn”和“e1”一起发送,而不需要如sql请求1那样与“app1”一起发送;执行服务器e1在接收到sql请求2之后,从内存中获取连接1,而不是从连接池中获取连接1;另外,执行服务器e1在接收到数据库db1对sql请求2和sql请求3的响应之后,不释放连接1。在该过程中,数据库db1在执行sql请求2和sql请求3时,并不对数据库中的用户1的账户余额和用户2的账户余额进行更改,而仅在内存中预存对sql请求2和sql请求3的操作结果,以等待后续的提交或回滚。
130.在步骤s1014,应用服务器as1生成txn结束请求,并向接入服务器a1发送txn结束请求、“txn”和“e1”。
131.在处理完成sql请求2和sql请求3之后,应用服务器as1向接入服务器a1发送txn结束请求、“txn”和“e1”,以进行对事务txn的提交,所述“txn”用于指示该txn结束请求为事务txn中包括的请求,所述“e1”用于指示接入服务器a1将该请求发送给执行服务器e1。
132.在步骤s1015,接入服务器a1向执行服务器e1发送txn结束请求和“txn”。
133.接入服务器a1在从应用服务器as1接收到txn结束请求、“txn”和“e1”之后,基于“e1”确定事务txn与执行服务器e1相对应,因此,将txn结束请求和“txn”发送给执行服务器e1。
134.在步骤s1016,执行服务器e1通过连接1提交事务txn。
135.如上文所述,执行服务器e1在内存中记录了与“txn”对应的连接1,因此,执行服务器e1在接收到txn结束请求和“txn”之后,基于“txn”,在内存中读取与“txn”对应的连接1,从而可通过连接1提交事务txn,即向数据库db1发送txn结束请求。
136.在步骤s1017,数据库db1提交事务txn,生成响应3。
137.如上文所述,数据库db1在执行sql请求2和sql请求3时,并不对数据库中的用户1
的账户余额和用户2的账户余额进行更改,而仅在内存中预存对sql请求2和sql请求3的操作结果。在接收到txn结束请求之后,该txn结束请求即对事务txn确认提交,因此,数据库db1将内存中存储的对sql2请求和sql3请求的处理结果更新到数据库中,即将用户1的账户余额减少100,将用户2的账户余额增加100。在进行数据库更新之后,数据库db1生成与txn结束请求对应的响应3,该响应3指示事务txn提交成功。
138.在步骤s1018,数据库db1通过连接1将响应3发送给执行服务器e1。
139.在步骤s1019,执行服务器e1释放连接1。
140.由于事务txn提交成功,后续将不需要连接1继续对事务txn进行处理,因此,执行服务器e1将连接1放回db1连接池中,并删除内存中存储的与“txn”对应的连接1,从而完成对连接1的释放。
141.在步骤s1020,执行服务器e1在管理设备14中删除txn子节点。
142.具体是,执行服务器e1向管理设备14发送删除txn节点子节点的请求,从而使得管理设备14基于该请求将tx节点中的txn子节点删除,并在e1子节点中删除对txn子节点的监听。
143.在步骤s1021,执行服务器e1将响应3发送给接入服务器a1。
144.在步骤s1022,接入服务器a1将响应3发送给应用服务器as1。
145.步骤s1021-s1022可参考上文对步骤s310和s311的描述,在此不再赘述。
146.在步骤s1023,应用服务器as1向用户设备11发送对对业务请求2的响应。
147.应用服务器as1在接收到响应3之后,确定事务txn提交成功,从而可生成对业务请求2的响应,该响应例如指示转账成功。之后,应用服务器as1将对业务请求2的响应返回给用户设备11,从而可提示用户1其转账操作成功执行。
148.图10示出了成功执行事务txn的过程,在实际执行事务时,各个服务器都有可能出现例如崩溃或退出的异常情况,其中,如果接入服务器a1在执行事务txn中的两个sql请求之间崩溃或退出,即,例如接入服务器a1在应用服务器as1接收到响应2之后、在发送sql请求2之前崩溃或退出,不会对事务txn的处理产生影响,应用服务器as1可重新选择一个接入服务器与其连接并继续发送sql请求2。如果应用服务器as1、接入服务器a1、执行服务器e1和数据库db1中任一个在应用服务器as1在等待事务txn中任一个sql请求的响应时崩溃或退出,则将使得事务txn处理失败,从而都需要在数据库db1进行对事务txn的回滚、在管理设备14中删除txn子节点、在执行服务器e1中释放与txn对应的连接1、以及对用户设备11返回转账失败。
149.下面将描述事务txn执行失败的几种情况作为示例。
150.图11为本技术实施例提供的另一种数据库访问方法流程图。
151.图11中所示的步骤s1101-s1108与图10中的步骤s1001-s1008相同,在此不再赘述。
152.在步骤s1109,数据库db1回滚事务txn。
153.数据库db1例如在接收到txn开始请求并开始处理事务txn之后发生了异常(例如连接1断开),在该情况中,数据库db1将对事务txn进行回滚,以结束对事务txn的处理。
154.在步骤s1110,执行服务器e1释放连接1。
155.执行服务器e1在确定连接1断开之后,确定事务txn处理失败,将不再继续处理事
务txn的后续sql请求,因此可释放用于处理事务txn的连接1。具体是,执行服务器e1将连接1放入db1连接池中,以用于发送其它sql请求。
156.在步骤s1111,执行服务器e1在管理设备14中删除txn子节点。
157.该步骤可参考上文对步骤s1020的描述,在此不再赘述。
158.在步骤s1112,执行服务器e1向接入服务器a1发送响应4。执行服务器e1在确定事务txn处理失败之后生成响应4并将其发送给接入服务器a1,该响应4用于指示事务txn处理失败。
159.在步骤s1113,接入服务器a1向应用服务器as1发送响应4。
160.在步骤s1114,应用服务器as1向用户设备11发送对业务请求2的响应。
161.在该情况中,应用服务器as1向用户设备11发送转账失败,以提示用户1转账操作处理失败。
162.图12为本技术实施例提供的另一种数据库访问方法流程图。
163.图12中所示的步骤s1201-s1210与图10中的步骤s1001-s1010相同,在此不再赘述。
164.在步骤s1211,管理设备14监听到执行服务器e1出现崩溃或退出等异常。
165.管理设备14中例如安装有zookeeper服务端,执行服务器e1中安装有zookeeper客户端。从而管理设备14可通过心跳监测来确定执行服务器e1的状态。
166.在步骤s1212,管理设备14向应用服务器as1发送执行服务器e1异常的通知。
167.参考上文对图2的描述,as1子节点可在创建之后进行对e1子节点的监听。当管理设备14确定执行服务器e1崩溃或退出之后,删除e1子节点,并通知对e1子节点进行监听的应用服务器as1,从而应用服务器as1可获知执行服务器e1出现异常情况。
168.在步骤s1213,应用服务器as1在管理设备14中删除txn子节点。
169.例如,应用服务器as1在获知执行服务器e1出现异常退出情况之后,由于执行服务器e1无法继续执行事务txn,因此,应用服务器as1确定事务txn处理失败,并将管理设备14中的txn子节点删除,以结束对事务txn的处理。
170.可以理解,在本技术实施例中,不限于如步骤s1212和步骤s1213那样进行对txn子节点的管理,例如,在txn子节点中可设置对e1子节点进行监听,在as1子节点中设置对txn子节点进行监听,从而,当管理设备14删除e1子节点之后,将触发对txn子节点的删除,并且,管理设备在删除txn子节点之后,将对txn子节点的删除通知给应用服务器as1,从而应用服务器as1可获知事务txn处理失败。
171.在步骤s1214,应用服务器as1向用户设备11发送对业务请求2的响应。
172.即,应用服务器as1向用户设备11发送转账失败的响应。
173.图13为本技术实施例提供的另一种数据库访问方法流程图。
174.图13中所示的步骤s1301-s1310与图10中的步骤s1001-s1010相同,在此不再赘述。
175.在步骤s1311,管理设备14通过监听接入服务器a1而确定接入服务器a1出现例如崩溃或退出等异常情况。
176.在步骤s1312,管理设备14向应用服务器as1发送接入服务器a1异常通知。
177.参考图2,由于应用服务器as1在创建as1子节点时设置了对a1子节点进行监听,因
此,当管理设备14在确定接入服务器a1崩溃或退出之后,删除a1子节点并通知应用服务器as1,从而应用服务器as1可获知接入服务器a1出现异常情况。
178.在步骤s1313,应用服务器as1在管理设备14中删除txn子节点。
179.由于接入服务器a1在应用服务器as1还在等待txn开始请求的响应的情况下出现异常,因此,在该情况中,应用服务器as1不能另外连接一个接入服务器来继续处理事务txn,而只能结束对事务txn的处理。因此,应用服务器as1在管理设备14中删除txn子节点,以结束对事务txn的处理。
180.可以理解,与上文所述类似地,在本技术实施例中不限于通过步骤s1312和步骤s1313进行对txn子节点的管理,管理设备14可在txn子节点中设置对a1子节点进行监听,在as1子节点中设置对txn子节点的监听,从而管理设备14在删除a1子节点之后,将触发对txn子节点的删除,并将该删除通知应用服务器as1和执行服务器e1。
181.在步骤s1314,管理设备14向执行服务器e1发送txn子节点删除通知。
182.如上文所述,执行服务器e1在接收到txn开始请求之后,在管理设备14中的e1子节点中设置对txn子节点进行监听。因此,管理设备14在删除txn子节点之后将该txn子节点的删除通知执行服务器e1,从而使得执行服务器e1获知对事务txn的处理结束。
183.在步骤s1315,执行服务器e1通知数据库db1回滚事务txn。
184.在步骤s1316,数据库db1回滚事务txn,即结束对事务txn的处理,在内存中删除与事务txn相关的数据。
185.在步骤s1317,执行服务器e1释放连接1。
186.在步骤s1318,应用服务器as1向用户设备11发送对业务请求2的响应,即返回转账失败。
187.图14为本技术实施例提供的另一种数据库访问方法流程图。
188.图14中所示的步骤s1401-s1410与图10中的步骤s1001-s1010相同,步骤s1413-s1416与图13中的步骤s1314-s1317,在此不再赘述。
189.在步骤s1411,管理设备14监听到应用服务器as1出现例如崩溃或退出等异常情况。在监听到服务器as1出现异常之后,管理设备14将删除as1子节点。
190.在步骤s1412,管理设备14删除txn子节点。
191.管理设备14在删除as1子节点之后,如图2所示,由于txn子节点中设置了对as1子节点的监听,因此,管理设备14进行对txn子节点的删除,从而使得执行服务器e1可执行回滚事务txn、释放连接1等后续处理。
192.图15为根据本技术另一实施例的端云应用系统服务端的架构示意图。如图15所示,该系统服务端包括应用层22、代理层23、弹性负载均衡(elastic load balance,elb)器24和存储层25。其中,应用层22包括多个应用服务器,图15中示意示出应用服务器as1-as6。代理层23包括接入层231和执行层232,其中,所述接入层231包括多个接入服务器,图15中示意示出接入服务器a1-a3,执行层232包括多个执行服务器,图15中示意示出执行服务器e1-e3。存储层25包括多个数据库,图15中示意示出数据库db1和db2,数据库db1例如为应用1(app1)的数据库,用于存储和管理app1的数据;数据库db2例如为应用2(app2)的数据库,用于存储和管理app2的数据。
193.在图15所示的服务端架构中,与图1所示架构类似地,每个应用服务器只通过较少
的(例如一个)物理连接与负载均衡器231进行连接,并且每个数据库仅与部分执行服务器建立有连接,从而可获取与图1所示架构类似的技术效果,即,将应用服务器的连接数与数据库的连接数解耦,从而可支撑更大的应用服务器数目,也即可支撑超大用户规模,同时可支持大规模的数据库实例。
194.为了便于进行类事务管理,elb24对每个应用服务器和每个接入服务器分别进行监听,接入层231中的各个接入服务器与执行层232中的各个执行服务器相互之间进行点对点监听,从而进行类事务操作。具体是,假设应用服务器as1生成针对数据库db1的事务txn的事务开始请求,并将该请求、“app1”和事务txn标识“txn”发送给elb24。elb24选择接入服务器a1,并将事务开始请求、“app1”和“txn”发送给接入服务器a1,elb24同时在本地记录“txn”与应用服务器as1与接入服务器a1的对应关系。接入服务器中还可以预先由执行服务器设置各个数据库与执行服务器的连接信息,以用于在发送数据库操作请求时选择相应的数据库。接入服务器a1在接收到事务开始请求、“app1”和“txn”之后,基于数据库的连接信息选择执行服务器e1,并将事务开始请求、“app1”和“txn”发送给执行服务器e1,同时,接入服务器a1在本地记录“txn”与执行服务器e1的对应关系。执行服务器e1在接收到事务开始请求、“app1”和“txn”之后,将事务开始请求发送给数据库db1,同时在本地记录“txn”与接入服务器a1的对应关系。
195.在处理事务txn的过程中,如果接入服务器监听到执行服务器e1出现例如崩溃的异常,接入服务器a1将该异常通知给elb24,elb24基于本地对事务txn的记录将执行服务器e1的异常信息发送给应用服务器as1,从而应用服务器as1可结束对事务txn的处理,同时elb24和接入服务器a1中也可删除对事务txn的记录。如果接入服务器a1出现例如崩溃的异常,elb24和执行服务器e1都会监听到该异常。elb24在监听到该异常之后,通知与事务txn对应的应用服务器as1,从而使得应用服务器as1结束对事务txn的处理。执行服务器e1在监听到接入服务器a1的异常之后,将通知数据库db1回滚对事务txn的处理。如果应用服务器as1出现例如崩溃的异常,elb24将监听到该异常,并根据对事务txn的记录将该异常通知接入服务器a1,接入服务器a1在接收到该通知之后,根据本地对事务txn的记录将该异常通知执行服务器e1,从而执行服务器e1通知数据库db1回滚对事务txn的处理。
196.图16为根据本技术另一实施例的端云应用系统服务端的架构示意图。如图16所示,该系统服务端包括应用层32、代理层33和存储层35。其中,应用层32包括多个应用服务器,图16中示意示出应用服务器as1-as6。代理层33包括接入层331和执行层332,其中,所述接入层331包括多个接入服务器,图16中示意示出接入服务器a1-a3,执行层332包括多个执行服务器,图16中示意示出执行服务器e1-e3。存储层35包括多个数据库,图16中示意示出数据库db1和db2,数据库db1例如为应用1(app1)的数据库,用于存储和管理app1的数据;数据库db2例如为应用2(app2)的数据库,用于存储和管理app2的数据。
197.在图16所示的服务端架构中,与图1所示架构类似地,每个应用服务器只通过较少的(例如一个)物理连接与接入层331进行连接,并且每个数据库仅与部分执行服务器建立有连接,从而可获取与图1所示架构类似的技术效果,即,将应用服务器的连接数与数据库的连接数解耦,从而可支撑更大的应用服务器数目,也即可支撑超大用户规模,同时可支持大规模的数据库实例。
198.为了便于进行类事务管理,与图15所示架构类似地,接入层231中的各个接入服务
器与执行层232中的各个执行服务器相互之间进行点对点监听,另外,相互连接的应用服务器与接入服务器之间还进行点对点监听,从而进行类事务操作。具体是,假设应用服务器as1生成针对数据库db1的事务txn的事务开始请求,并将该请求、“app1”和事务txn标识“txn”发送给接入服务器a1。接入服务器a1在接收到事务开始请求、“app1”和“txn”之后,与上文类似地选择执行服务器e1,并将事务开始请求、“app1”和“txn”发送给执行服务器e1,同时,接入服务器a1在本地记录“txn”与执行服务器e1和应用服务器as1的对应关系。执行服务器e1在接收到事务开始请求、“app1”和“txn”之后,将事务开始请求发送给数据库db1,同时在本地记录“txn”与接入服务器a1的对应关系。
199.在处理事务txn的过程中,如果接入服务器a1监听到执行服务器e1出现例如崩溃的异常,基于本地对事务txn的记录,接入服务器a1将该异常通知给应用服务器as1,从而应用服务器as1可结束对事务txn的处理,同时接入服务器a1中也可删除对事务txn的记录。如果接入服务器a1出现例如崩溃的异常,应用服务器as1和执行服务器e1都会监听到该异常,从而分别进行相应的处理。如果应用服务器as1出现例如崩溃的异常,接入服务器a1将监听到该异常,并根据对事务txn的记录将该异常通知通知执行服务器e1,从而执行服务器e1进行相应的处理。
200.本技术另一方面提供一种应用服务器,包括存储器和处理器,所述存储器中存储有计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以实现上文中由应用服务器as1执行的方法。
201.本技术另一方面提供一种接入服务器,包括存储器和处理器,所述存储器中存储有计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以实现上文中由接入服务器a1执行的方法。
202.本技术另一方面提供一种执行服务器,包括存储器和处理器,所述存储器中存储有计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以实现上文中由执行服务器e1执行的方法。
203.本技术另一方面提供一种管理设备,包括存储器和处理器,所述存储器中存储有计算机程序或指令,所述处理器用于执行所述计算机程序或指令,以实现上文中由管理设备14执行的方法。
204.本技术另一方面提供一种数据库访问系统,包括:多个上述应用服务器,多个上述接入服务器、多个上述执行服务器和多个数据库。
205.在一种实施方式中,所述系统还包括上述管理设备。
206.可以理解,上文所述服务器可以为物理服务器,也可以为云服务器(如虚拟服务器)。图17为根据本技术实施例的云服务系统1700的示意图。参见图17,所述系统1700包括:硬件层1707和运行在硬件层1707之上的虚拟机监控器(vmm)1701,以及多个虚拟机(vmi)1702。一个虚拟机可以作为云服务系统1700的一个虚拟服务器节点。可选地,还可以指定一个虚拟机作为协调节点。以上实施例中描述的应用服务器、接入服务器、执行服务器和数据库服务器中部分或全部,可以为云服务系统1700中的虚拟机。
207.具体的,虚拟机1702是通过虚拟机软件在公共硬件资源上模拟出的虚拟的计算机(服务器),虚拟机上可以安装操作系统和应用程序,虚拟机还可访问网络资源。对于在虚拟机中运行的应用程序而言,虚拟机就像是在真正的计算机中进行工作。
208.硬件层1707是虚拟化环境运行的硬件平台,可以由一个或多个物理主机的硬件资源抽象得到的。其中,硬件层可包括多种硬件,例如包括处理器1704(例如cpu)和存储器1705,还可以包括网卡1703、高速/低速输入/输出(i/o,input/output)设备,及具有特定处理功能的其它设备。
209.虚拟机1702基于vmm,以及硬件层1707提供的硬件资源,运行可执行程序,以实现上述图3、图10-图14相关的实施例中的方法步骤。为了简洁,在此不再赘述。
210.进一步地,该云服务系统1700还可以包括宿主机(host):作为管理层,用以完成硬件资源的管理、分配;为虚拟机呈现虚拟硬件平台;实现虚拟机的调度和隔离。其中,host可能是虚拟机监控器(vmm);也有可能是由vmm和1个特权虚拟机的结合。其中,虚拟硬件平台对其上运行的各个虚拟机提供各种硬件资源,如提供虚拟处理器(如vcpu)、虚拟内存、虚拟磁盘、虚拟网卡等等。其中,该虚拟磁盘可对应host的一个文件或者一个逻辑块设备。虚拟机运行在host为其准备的虚拟硬件平台上,host上运行一个或多个虚拟机。虚拟机1702的vcpu通过执行存储在其对应的虚拟内存中的可执行程序,以实现或者执行本发明上述各方法实施例中所描述的方法步骤。
211.需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
212.本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
213.以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献