• 快捷搜索
  • 全站搜索

主机查询交易下移技术与实践

2017-12-14 14:26:08作者:中国农业银行数据中心(北京)冯晓 阳酉良 软件开发中心罗位国编辑:金融咨询网
SQLJ是一个与Java编程语言紧密集成的嵌入式SQL的版本,可以使用静态SQL语句访问数据库,静态SQL较之动态SQL在性能和监控上都有一定优势。交易程序通过JDBC TYPE 4驱动远程访问主机DB2,并能实现交易级别负载均衡。

IBM大型主机在大型商业银行核心系统中处于垄断地位,伴随这种垄断地位的是高额的软硬件成本及服务费用,加之“斯诺登”事件的爆发,去IOE化工作已然势在必行。

  主机交易下移有“程序逻辑下移”、“数据复制下移”、“数据完全下移”几种思路,“数据完全下移”是最终的目标,但从可操作性上来看,“程序逻辑下移”更为可行。农业银行新一代核心系统(BoEing)投产后,查询交易占据每天总交易量的80%以上,而且查询交易对于数据库锁等资源的使用比较宽松,对其他交易影响较小。更为方便的是,该系统采用了基于第四代开发语言的Appbuilder工具进行开发,该工具支持代码无需修改即可翻译成Cobo1、C#、Java等多种目标语言,进而能够在不同系统平台编译使用。综上所述,选择“主机查询交易下移”作为去IOE化的突破口是较为合理的。

一、关键技术

  查询交易下移后,程序员利用Appbuilder工具将主机程序转化为SQLJ重新编译部署到开放平台。SQLJ是一个与Java编程语言紧密集成的嵌入式SQL的版本,可以使用静态SQL语句访问数据库,静态SQL较之动态SQL在性能和监控上都有一定优势。交易程序通过JDBC TYPE 4驱动远程访问主机DB2,并能实现交易级别负载均衡。

  1.JDBC驱动

  Java Database Connectivity(JDBC)是Java程序从数据库中获取数据的程序接口。IBM数据服务支持的JDBC可以访问本地DB2数据库,也可以通过DRDA协议访问远程关系型数据库。JDBC的API类似于一种不能执行的类,它们只是与数据库的标准化的接口,真正的执行要通过各种数据库不同的JDBC Driver,这样开发Java程序就非常容易在不同的数据库之间移植而不依赖于某一种数据库。根据执行方法和连接数据库方法的不同,JDBC Driver可分为四类。

  (1)JDBC-ODBC桥接型驱动;

  (2)不完全用Java编写,依赖于平台,需要一些本地库;

  (3)完全用Java编写,不是直连;

  (4)完全用Java编写,直连,并且用数据库提供的协议(DB2使用的是DRDA)直接获取数据。由于是纯Java编写,因此可以在支持同一访问协议的数据库间随意迁移,或者用于跨系统访问。这也是农业银行最终选择的驱动类型。

  2.SOLJ程序准备过程

  由于SQLJ使用静态SQL语句访问数据库,那么必然需要在运行程序前对相关SQL语句进行绑定操作,过程与主机程序绑定类似,具体如图1所示。

图片6.jpg

  (1)SQLJ Translator将SQLJ的代码翻译成.java文件,源文件中的SQL语句转化为对SQLJ运行时的调用,并产生一个或多个.ser文件,其个数取决于Context类的个数。

  (2)Java编译器将.java文件转成可执行的类文件,此时可以执行SQL(但是动态SQL)。

  (3)Translator生成的.ser文件可以并应该通过Customizer进行客户化。Customizer将Package名字、时间戳、Token等信息更新到.ser文件中,并在数据库中生成Package,进而使用静态SQL。Customizer可以执行一次或者多次,在一个系统执行以后,换一个系统不用再执行,但必须要重新绑定,否则会报“-805”。

  (4)当程序运行时,SQLJ运行时使用.ser文件中的信息执行SQL。只有.ser文件客户化后执行的才是真正的静态SQL,否则是动态SQL。

  3.JCC Driver实现负载均衡(交易级别)原理

  JCC Driver工作原理如图2所示。

图片7.jpg

  在JCC Driver内部,存在逻辑连接和物理连接,逻辑连接代表了客户端与数据库之间成功的连接请求,物理连接代表JCC Driver与DB2数据之间的真实连接。当客户端运行SQL语句的时候,物理连接和逻辑连接之间就会建立关联,实现客户端到DB2服务器之间的通路。如果客户端处在闲置状态(完成Commit/Rollback后),JCC Driver就会断开逻辑连接与物理连接之间的关联,在这种情况下,客户端只是获得了一个逻辑连接而已。基于以上工作原理,JCC Driver每次处理交易的时候都会关联逻辑连接和物理连接,而逻辑连接通过WLM信息关联到不同的物理连接,就实现了交易级的负载均衡。

  如使用WAS连接池,可以通过设置WAS端enable WLB参数,启用交易级别负载均衡。

二、实现方案

  基于上文中所涉及技术并结合现有系统架构,农业银行科技人员设计开发了一套开放平台查询系统。该系统部署部分静态数据、轻量级总控及下移的主机查询交易,负责查询交易的日志管理、安全控制、调度执行,并具有管理主机DB2数据库连接池等功能。

  1.应用架构

  开放平台查询系统主要由总控、公共组件、查询交易以及数据库、数据库连接池组成(如图3所示)。

图片8.jpg

  (1)总控:负责交易报文的解析、交易上下文管理、权限及安全控制、交易调度以及日志记录等;

  (2)查询交易:使用App Builder将主机查询交易TRN编译成开放平台WebSerice接口;

  (3)公共组件:查询交易依赖的组件,主要实现对公共TWA区访问及日期、字符串操作,安全检查算法等,需要在开放平台重新实现;

  (4)数据库:开放平台的数据库负责存储查询日志及部分下移的静态数据;

  (5)数据库连接池:负责数据库连接的统一管理,常用的有JNDI、Tomcat-JDBC等。

  2.总控程序逻辑设计

  开放平台查询系统的总控主要包含接入处理、安全控制、权限检查、交易调度、数据库连接池管理以及日志等功能。

  (1)接入处理:纯开放平台本地处理,负责交易报文解析及组装、交易请求及应答公共数据(上下文)的初始化、交易流量控制等;

  (2)安全检查:纯开放平台本地处理,负责通道、渠道、应用、交易相关的启用标识及状态的检查,依赖的配置数据从主机下移至开放平台,由系统启动时加载到缓存中并支持动态刷新;

  (3)权限控制:开放平台程序+远程主机配置数据,负责对查询交易涉及的机构、设备、用户等三个维度的权限检查;

  (4)交易调度:纯开放平台本地处理,根据请求报文里TRN全名完成查询交易的调度;

  (5)数据库连接池管理:纯开放平台本地处理,负责主机DB2及开放平台数据库连接池的管理;

  (6)日志:纯开放平台本地处理,仅记录查询交易应答的公共信息,以便于统计。

  3.开发规范

  (1)应用程序的编写必须使用静态SQL的编程方式,即使用SQLJ编写程序,并绑定。

  (2)对于主机数据库表的操作有如下约束:

  ①只允许使用SELECT或者SELECT INTO两种DML语句,不允许使用UPDATE、DELETE、INSERT、LOCKTABLE等DML语句;

  ②SELECT语句对应到程序中的游标必须是静态游标,语句后可以使用WITH UR,不能使用FOR UPDATE;

  ③SELECT INTO语句也需要使用WITH UR;

  ④静态游标不允许加WITH HOLD语句。

  (3)WAS上每一笔应用交易必须只使用一个线程,每个线程必须选取WAS连接池中的连接与主机数据库进行连接通信,而不能直接与主机数据库建立连接,每次获取的与主机数据库连接属性必须为set Auto Commit(false),即关闭Auto Commit。

  (4)为实现DRDA Thread的复用,在完成查询交易后,需要执行Commit,以便释放占用的Thread:目前,应用可通过编写类似主机总控功能的开放版本总控,调起相关查询业务程序。在查询业务处理回到总控后,由总控统一执行Commit,应用程序不参与事务控制。

  (5)为每一个下移查询交易分配唯一一个应用交易码,交易在从WAS连接池获取连接后,必须使用Set Client Info(“Client User”,“应用交易码”)重新初始化连接属性,传递“应用交易码”给主机系统监控。

  随着开放平台查询系统投产,农业银行基础架构投入成本明显降低。一部分CPU消耗下移到开放平台,一部分消耗转移到协处理器zIIP,使查询下移交易单笔消耗MIPS减少了约60%,达到了控制IT成本和去IOE化的目的,并实现了一种新型的包含主机和开放两大平台的应用与数据服务器全集群架构。

(文章来源:中国金融电脑杂志)

扫码即可手机
阅读转发此文

本文评论

相关文章