主机查询交易下移技术与实践
作者:冯晓 等
来源:《中国金融电脑》 2016年第9期
    中国农业银行数据中心(北京) 冯晓 阳酉良
    中国农业银行软件开发中心 罗位国
    IBM 大型主机在大型商业银行核心系统中处于垄断地位,伴随这种垄断地位的是高额的软硬件成本及服务费用,加之“斯诺登”事件的爆发,去IOE 化工作已然势在必行。
    主机交易下移有“程序逻辑下移”、“数据复制下移”、“数据完全下移”几种思路,“数据完全下移”是最终的目标,但从可操作性上来看,“程序逻辑下移”更为可行。农业银行新一代核心系统(BoEing)投产后,查询交易占据每天总交易量的80% 以上,而且查询交易对于数据库锁等资源的使用比较宽松,对其他交易影响较小。更为方便的是,该系统采用了基于第四代开发语言的Appbuilder 工具进行开发,该工具支持代码无需修改即可翻译成Cobol、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.SQLJ 程序准备过程
    由于SQLJ 使用静态SQL 语句访问数据库,那么必然需要在运行程序前对相关SQL 语句进行绑定操作,过程与主机程序绑定类似,具体如图1 所示。
    (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 所示。
    在JCC Driver 内部,存在逻辑连接和物理连接,逻辑连接代表了客户端与数据库之间成功的连接请求,物理连接代表JCC Driver 与DB2 数据之间的真实连接。当客户端运行SQL 语句的时候,物理连接和逻辑连接之间就会建立关联,实现客户端到DB2 服务器之间的通路。如果客户端处在闲置状态( 完成Commit/Rollback 后),JCC Driver 就会断开逻辑连接与物理连接之间的关联,在这种情况下,客户端只是获得了一个逻辑连接而已。基于以上工作原理,JCC Driver 每次处理交易的时候都会关联逻辑连接和物理连接,而逻辑连接通过WLM 信息关联到不同的物理连接,就实现了交易级的负载均衡。
    如使用WAS 连接池, 可以通过设置WAS 端enableWLB 参数,启用交易级别负载均衡。
    二、实现方案
    基于上文中所涉及技术并结合现有系统架构,农业银行科技人员设计开发了一套开放平台查询系统。该系统部署部分静态数据、轻量级总控及下移的主机查询交易,负责查询交易的日志管理、安全控制、调度执行,并具有管理主机DB2 数据库连接池等功能。
    1. 应用架构
银行为什么用db2数据库
    开放平台查询系统主要由总控、公共组件、查询交易以及数据库、数据库连接池组成(如图3 所示)。
    (1)总控:负责交易报文的解析、交易上下文管理、权限及安全控制、交易调度以及日志记录等;
    (2)查询交易:使用AppBuilder 将主机查询交易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、LOCK TABLE 等DML 语句;
    ② SELECT 语句对应到程序中的游标必须是静态游标,语句后可以使用WITH UR,不能使用FORUPDATE;
    ③ SELECT INTO 语句也需要使用WITH UR;④静态游标不允许加WITH HOLD 语句。
    (3)WAS 上每一笔应用交易必须只使用一个线程,每个线程必须选取WAS 连接池中的连接与主机数据库进行连接通信,而不能直接与主机数据库建立连接,每次获取的与主机数据库连接属性必须为setAutoCommit(false),即关闭Autocommit。
    (4)为实现DRDA Thread 的复用,在完成查询交易后,需要执行Commit,以便释放占用的Thread。目前,应用可通过编写类似主机总控功能的开放版本总控,调起相关查询业务程序。在查询业务处理回到总控后,由总控统一执行Commit,应用程序不参与事务控制。
    (5)为每一个下移查询交易分配唯一一个应用交易码,交易在从WAS 连接池获取连接后,必须使用setClientInfo(“ClientUser”,“应用交易码”) 重新初始化连接属性,传递“应用交易码”给主机系统监控。
    随着开放平台查询系统投产,农业银行基础架构投入成本明显降低。一部分CPU 消耗下移到开放平台,一部分消耗转移到协处理器zIIP,使查询下移交易单笔消耗MIPS 减少了约60%,达到了控制IT 成本和去IOE化的目的,并实现了一种新型的包含主机和开放两大平台的应用与数据服务器全集架构。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。