一种服务器和数据处理方法_3

文档序号:8412610阅读:来源:国知局
[0145]可选地,对于方式二和方式三,第一操作请求包括事务标识的情况,第二数据服务器202在生成第二操作请求时,将第一操作请求中的同一个事务的事务标识去掉后,生成第二操作请求。
[0146]该可选方案避免了对第一数据服务器203提供的第一 API的改动,由于原有的在云服务场景下,持久层服务通常不具备事务管理功能,因此,第一数据服务器203并不识别事务标识,第二数据服务器202将事务标识去掉,则更好地兼容了以往的持久层服务。
[0147]对于方式三,第一操作请求中包括分属于不同事务的多个操作,比如:包括属于事务I的多个操作和属于事务2的多个操作,则第二数据服务器202分别对事务I和事务2进行事务管理,针对事务1,生成的第二操作请求中仅包括事务I的多个操作;针对事务2,生成的第二操作请求中仅包括事务2的多个操作。
[0148]其中,事务标识可为一个或多个字段的组合,只要能唯一标识应用服务器201期望进行事务管理的多个操作所属的事务即可。
[0149]可选地,应用服务器201可通过如下方式,指示第一操作请求用于请求所述第一持久层服务:
[0150]方式一、
[0151]在第一操作请求中携带第一持久层服务的标识信息;
[0152]方式二、
[0153]在第一操作请求中携带用于指示应用服务请求第一持久层服务的用户协议信息。
[0154]第二数据服务器202在收到第一操作请求后,即可根据第一操作请求中第一持久层服务的标识信息,或用于指示应用服务请求第一持久层服务的用户协议信息,确定第一操作请求用于请求第一持久层服务。
[0155]可选地,若执行上述至少一个操作失败,比如:逐条执行上述至少一个操作,在遇到执行失败的操作时,确定执行上述至少一个操作失败。此时,第二数据服务器202将第二数据回滚至执行上述至少一个操作之前的状态。这样,在操作失败时进行数据回滚,保证了第二数据服务器202中的第二数据与第一数据服务器203中的第一数据一致。
[0156]并且,可选地,若执行上述至少一个操作失败,则第二数据服务器202不会生成第二操作请求,也不会向第一数据服务器203发送第二操作请求。
[0157]可选地,若可选地,若执行上述至少一个操作失败,则第二数据服务器202针对第一操作请求,向应用服务器201发送失败响应,指示上述至少一个操作执行失败。
[0158]进一步可选地,该失败响应中包括上述执行失败的操作的下列信息中的至少一种:
[0159]操作类型;
[0160]操作所针对的第一持久层服务的资源对象;
[0161]操作失败原因。
[0162]通过向应用服务器201发送失败响应,可使应用服务器201获知第一操作请求的执行结果,并且,通过进一步提供的详细信息,可使应用服务器201获知部分操作为执行成功的详细信息,便于应用服务器201自身的灵活处理。
[0163]其中,资源对象是指资源对象:在对技术领域建模过程中得到的对象实体,可使用名词描述,对这些实体可执行的操作包括:创建、读取、更新、删除。
[0164]图2所示的网络20可有多种实现方式,图3A?图3C示出了其中的三种可选实现方式,为了简单示意,仅示出了一个应用服务器201。
[0165]图3A中,应用服务器201、第二数据服务器202和第一数据服务器203分别在服务器A、服务器B和服务器C三个不同的服务器上实现。其中,可选地,第一数据服务器203可在云端实现,且第一数据服务器203和第二数据服务器202承载在不同的VM上。
[0166]采用图3A所示的实现方式,一方面,由云端的VM实现第二持久层服务,可实现按需分配数据资源;另一方面,由于包括具有事务管理功能的第二持久层服务的第二数据服务器202,与包括原有云端的第一持久层服务的第一数据服务器203承载在不同的VM上,这样避免了实现该具有事务管理功能的第二持久层服务占用原有的第一持久层服务的数据处理资源,避免了对原有的第一持久层服务的影响。
[0167]图3B中,应用服务器201在服务器A上实现,第一数据服务器203和第二数据服务器202在同一个云中的服务器一一服务器B上实现,该服务器B位于云中。在具体实施时,可通过在第一数据服务器203上打补丁或安装程序来实现第二数据服务器202提供的第二持久层服务。对应地,在网络部署时,无需单独部署第二数据服务器202。
[0168]图3B中,应用服务器201和第二数据服务器202在同一个服务器一一服务器A上实现,第一数据服务器203在云端的服务器B上实现,在具体实施时,可通过在应用服务器201上打补丁或安装程序来实现第二数据服务器202提供的第二持久层服务。对应地,在网络部署时,无需单独部署第二数据服务器202。
[0169]可选地,第二数据服务器202的实现方式有多种,包括但不限于图4?图6所示的三种实现方式,下面,以这三种实现方式为例加以说明。
[0170]图4为第二数据服务器202的第一种实现方式的示意图。如图4所示,第二数据服务器202包括:
[0171]北向接口(North Bound Interface,NBI) 2021,用于提供第二 API,并接收应用服务器201通过调用第二 API发送的第一操作请求,第一操作请求用于请求执行至少一个操作,该至少一个操作属于同一个事务;
[0172]事务管理模块2022,用于在确定第一操作请求是用于请求第一持久层服务后,对第二数据执行该至少一个操作;若每一个操作均执行成功,则生成第二操作请求,第二操作请求用于请求对第一数据执行至少一个操作;
[0173]南向接口(SouthBound Interface,SBI) 2023,用于调用第一 API 向第一数据服务器203发送第二操作请求。
[0174]图5为第二数据服务器202的第二种实现方式的示意图。与图4所示的第一种实现方式的区别在于,事务管理模块2022又细分为拆解器2022a,资源管理器2022b和事务管理器2022c。连接关系如图5所示。
[0175]具体地,拆解器2022a用于对NBI2021收到的第一操作请求中的至少一个操作进行拆解处理;
[0176]其中,拆解处理包括:将上述至少一个操作中针对多个资源对象的操作,分解为多个针对单个资源对象的原子操作,上述资源对象为上述第一持久层服务所管理的资源对象,上述原子操作为对于第一数据服务器203所管理的资源对象不可再分的操作。
[0177]比如:应用服务器201发送的第一操作请求为:
[0178]NE {
[0179]url:rest/ne,
[0180]data:{[ {obj ect i d:1dl,name: ne I,remark: core network element,...}, {objectid:
[0181]id2, name:ne2, remark:access network element,...}]},
[0182]type: post,
[0183]Transact1nID: Transact1n_Idl,
[0184]},
[0185]P0RT{
[0186]url:rest/port,
[0187]data: {[ {object id:1d3, name: port I, remark: connect nel,...},{objectid:
[0188]id4, name:port2, remark:connect ne2,...}]},
[0189]type: post,
[0190]Transact1nID: Transact1n_Idl,
[0191]}
[0192]其中,第一操作请求中至少一个操作所针对的资源对象包括:nel、ne2、portl和port2,对这些资源对象的操作均为post,即新增资源对象。这里一个操作对应多个资源对象。其中,remark后面的省略号表示其他可携带的参数。
[0193]这里,以符合RESTful格式的第一操作请求为例,根据RESTful标准的规定,操作类型可包括:CRUD,其中
[0194]C为Create:新增,RESTful标准中对应为Post ;
[0195]R 为 Retrieve:读取,RESTful 标准中对应为 get ;
[0196]U为Update:修改,RESTful标准中对应为put ;
[0197]D 为 Delete:删除,RESTful 标准中对应为 delete。
[0198]这里,仅以RESTful格式为例,具体实现时,NBI2021可接收应用服务器201发送的符合各种格式的第一操作请求,比如:符合某些网络通信协议,比如简单网络管理协议(Simple Network Management Protocol,SNMP)的操作请求。
[0199]仍以上述符合RESTful格式的第一操作请求为例,拆解器2022a将第一操作请求中针对nel、ne2的操作和针对portl和port2的两个post操作,分解为四个原子操作,这四个原子操作分别针对资源对象nel、ne2、portl和port2。
[0200]这里,第一操作请求中的数据体(body),即data语句后面大括号中的部分符合JavaScript 对象标记(JavaScript Object Notat1n,JS0N)格式,可选地,拆解器 2022a将第一操作请求中的body转换格式,使其符合JavaBean格式。
[0201]以上述第一操作请求的语句为例,分解转换后的四个原子操作如下,其中每个大括号中的为一个原子操作。
[0202][
[0203]{
[0204]url:rest/ne,
[0205]data: {[ {objectid:1dl, name:nel, remark: core network element,...}]},
[0206]type: post,
[0207]Transact1nID: Transact1n_Idl,
[0208]},
[0209]{
[0210]url:rest/ne,
[0211]data:{[{objectid:1d2, name:ne2, remark:access network element,...}]},
[0212]type: post,
[0213]Transact1nID: Transact1n_Idl,
[0214]},
[0215]{
[0216]url:rest/port,
[0217]data: {[ {object id:1d3, name: port I, remark: connect nel,...}]},
[0218]type: post,
[0219]Transact1nID: Transact1n_Idl,
[0220]},
[0221] {
[0222]url:rest/port,
[0223]data: {[ {objectid:1d4, name:port2, remark: connect ne2,...}]},
[0224]type: post,
[0225]Transact1nID: Transact1n_Idl,
[0226]},
[0227]]
[0228]上述四个原子操作为对于第二数据服务器202不可再分的最小粒度的操作。
[0229]上述拆解器2022a对第一操作请求的拆解处理中,将第一操作请求中针对nel、ne2的操作和针对port I和port2的两个post操作,分解为四个原子操作,这四个原子操作分别针对资源对象nel、ne2、portl和port2。解释处理的目的是能够按照资源对象加锁,使针对同一个资源对象的操作能够按顺序执行。其中,“加锁”是指若两个操作针对同一个资源对象,则在执行第一个操作时,第二个操作需等待。资源管理器2022b是一个可选的部分,用于对拆解器2022a进行拆解处理后得到的每一个原子操作进行资源管理,该资源管理包括:将每一个原子操作生成属于同一个事务的原子操作队列,该同一个事务即为上述Transact1n_Id所标识的事务。
[0230]生成操作队列,便于后续事务管理器2022c对各原子操作按顺序处理,同时也起到数据缓存的作用。
[0231]事务管理器2022c,用于对各原子操作进行事务管理,若存在资源管理器2022b,则事务管理器2022c处理的是原子操作的队列;若不存在资源管理器2022b,则事务管理器2022c直接处理拆解器2022a输出的各原子操作。
[0232]其中,事务管理器2022c进行的事务管理包括:
[0233]首先,针对每一个原子操作,记录该原子操作的类型、该原子操作所针对的资源对象的标识和同一个事务的事务标识二者的对应关系;
[0234]可选地,对于每一个原子操作,还可记录该原子操作的执行时间,即时间戳,该时间戳用于在后续可能的数据回滚中,辅助标记各原子操作的执行顺序。
[0235]然后,对各原子操作逐条进行预提交,即逐条执行各原子操作;
[0236]若所有原子操作均执行成功,则事务完成,生成第二操作请求,并通知SBI2023将第二操作请求发送给第一数据服务器203 ;
[
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1