tickcount()修改成小时分钟_银行核心系统24小时机制实现总结

852fb4f89f6b7b4a98e4aed14662c3f2.png

本文共2268字 | 建议阅读时间:5分钟

作者:张广

在核心系统的设计实现中,24小时机制向来是一个重点难点。早期的银行只有柜面一个业务办理渠道,因此当时的综合业务系统,跟随网点的营业时间,分为日起,营业,日结,日终批量这几个阶段。所有网点日结后,才开始日终批量,这时是不办理联机业务的。

随着科技发展,银行逐渐开展了自助设备,网上银行,手机银行等多种电子渠道,接入了支付系统,银联系统等第三方接口。这时,对核心系统就提出了的24小时支持的要求。

24小时实现机制有准24小时和真24小时之分。

准24小时是核心系统在日切时停止联机交易一小段时间,待日切完成后再启动联机,通常时间控制在几分钟内,这段时间内未完成的联机交易被强行中断,不接收新的交易请求。真24小时是不停联机,在任意时间联机交易都可以正常发送处理,不会中断。

下面总结的就是真24小时的实现方案。要做到真24小时,需从以下几个方面解决。

1、 分户账的改造

分户账处理主要有两种情况。

一是交易的记账日期可以先发生次日,再发生前日。例如,日切后先发生过次日的联机交易,再执行日终批处理记上日账。又比如,在日切点交易并发时,日切后的交易先被调度到执行完毕,日切前的交易后被调度执行。

二是日终批处理中能获取上日结束的准确余额。

主要的解决方法有AB表法,追账法,双字段法等几种,其中最优的当属双字段法。在分户账表中设置当前余额,上次更新日期,上日余额。发生交易时,用交易日期与上次更新日期比较。如果交易日期大,说明进入新的一天,将当前余额搬入上日余额,再更新当前余额,记录上次更新日期为交易日期。如果相等,说明是当天的后续交易,只更新当前余额,上日余额和上次更新日期不变。如果交易日期小,说明先发生了次日交易,这时同时更新上日余额和当前余额,上次更新日期不变。在日终批处理获取上日余额进行统计时,同样先判断上次更新日期,如果上次更新日期小于或等于上日,说明新的一天没发生过交易,取当前余额,否则说明新的一天已发生交易,取上日余额。2、 序号表的改造

核心系统有很多序号,是按周期设置的,最常见的是日序号,每天从1重新开始。原先常见的做法是,通过日切后一个序号初始化批处理,批量清零。

24小时情况下就不能如此了,同样也要考虑两个日期以及先后顺序的问题。与分户账类似,使用双字段法给序号表设置当前序号,上次更新日期,上日序号,解决不同日期交易取用的问题。

3、 明细类的改造

明细类包含有账户明细,记账传票流水等这类带日期的记录表。

以往的系统,在日切过程中进行当前表删除并导入历史表的操作,导出期间会影响按日期的查询结果,这也是24小时需要避免出现的。

解决方法是,将这类表按日期分表或分区,操作时根据日期就可算出应该操作的表名或分区名,免除了数据的搬移。这样在任意时间均可支持正确的写入和查询。

4、 冲正交易的改造

外围发起冲正时,无法判断何时日切,因此核心应只提供统一的冲正交易,后台根据原交易记账日期和当前日期判断是当日冲正还是隔日冲正,并支持隔日冲正的处理。

特别提一点,批处理中,日切这一任务应等待1个联机交易超时时间,以防批处理过快,前日的交易未处理完就在后续批处理任务中获取上日余额。

此外,系统在版本更新时,也需要考虑如何尽量支持不停止联机服务。更新时还需注意一定要保证同一笔交易内不同程序版本的一致性,不能出现部分旧版本部分新版本的情况。

5、 程序版本更新时的处理

如果应用系统支持运行中动态加载卸载库和名称绑定,例如Unix环境的动态链接库,则可以通过控制交易结束后开始前进行动态库的卸载加载,来保证交易内程序版本的一致性。

这种方式对于普通修复是可以了,但有时会严格要求新旧版本不能并存,切换时间点后必须全部执行新版本,这时候就要用额外的方法了,即暂挂请求交易的处理。

在每个并发进程上一交易结束后,接收完新的连接请求,下一交易开始前,通过标志控制暂停处理,可以保持连接。当所有并发进程都处于暂停状态时,说明原有交易均已处理完成。

版本更新后,修改标志放开处理,这时原先暂挂的交易会继续处理,对外感觉仅仅是这笔交易响应时间变长了,并未发生服务的中断。

6、 参数表内容更新时的处理

通常参数表是加载至缓存的,因此只要控制缓存更新的时机即可。参数表不会太大,缓存更新很快能完成,因此放在交易结束后开始前加载更新。

同样,如果严格要求新旧不能并存,也仍需要暂挂请求交易处理。

7、 数据库表结构更新时的处理

表结构的变动分为新增表,删除表,新增字段,修改删除字段这几类。新增表和删除表时通过操作顺序很容易做到不停止联机服务。

新增表时先建表,后更新程序,删除表时先更新程序,后删表。新增字段,修改删除字段可以通过SQL语句进行,执行期间会锁表,因此需要预先评估SQL执行时间长短。

如果表数据量较大则需要用以下的方式实现切换:首先暂挂交易的接收请求处理,将原表rename为旧表,并以新的结构建立空的新表。修改访问这个表的所有程序,改为访问新表和旧表的合集的版本。

随后开放交易处理,并以后台进程的方式,逐渐将旧表的记录一点一点搬移至新表,直到旧表为空。最后修改访问这个表的所有程序,恢复成仅访问新表的版本即可。

随着银行对服务可用性要求越来越高,核心系统的设计也应当充分考虑,尽可能实现完全不停机的连续运行,这也是设计人员对优秀核心系统的追求目标。

----------  END  ----------

也许你还想看

银行核心系统项目过程步骤银行核心系统在银行IT架构中的功能边界银行核心系统之分表分区和批处理性能优化

85b4e03fc30c24001bb7335f0cf9ce13.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美国将尝试区块链领域和加密货币相结合

首期隐匿性研究综述有三篇涉及以太坊Casper缺陷问题的论文评论,比特币通用货币理想的内在限制存在两个问题:以太坊Casper的缺陷问题、比特币UTXO解决方案的发展。 美国新闻报道,加密货币与区块链跨领域研究同侪评论这项一项大胆尝试&#xff…

python 人气高的项目_给大家推荐:五个Python小项目,Github上的人气很高的

deepfake 的深度学习技术,这款工具本来的用途是用来识别和交换图片、视频中人物脸部图像的工具 。该项目有多个入口,你需要做的事:● 收集照片● 从原始照片中提取面部图像● 在照片上训练模型● 使用模型转换源代码3.神经网络库 kerashttps:…

WBS结果输出表

目录​​​​​​​ 概述 模板 案例 扩展阅读 概述 花了很大力气分解的WBS,要趁热打铁,把每个活动落实到人。 模板 推荐一个模板 1:修改成项目名 2:填写项目基本信息 3:WBS的最底层工作包 4:工作…

scala:对象object

Scala没有静态方法或字段,可以用对象object(首字母小写)结构完成类似的功能。 object M {var count 0;def inc {count 1; count}def main(args: Array[String]){println(M.count)M.incprintln(M.count)} }对象的构造器在对象第一次被使用时…

svd奇异值分解_传统推荐算法(一)SVD推荐(1)解读奇异值分解

文章目录写在前面1. 从几何变换到奇异值分解2. 代数角度理解奇异值与奇异向量2.1 从正交基映射推导SVD2.2 特征值分解求解奇异值和奇异向量2.2.1 求解过程2.2.2 推论2.3 SVD的另一种形式3. 几何角度理解奇异值与奇异向量3.1 从坐标变换理解3.1.1 从例子到一般3.1.2 两个问题3.2…

信息化项目WBS实战总结

概述 前面花了几个篇幅讲解了WBS,这篇文章总结下实战要点。 第一篇:项目中的WBS分解 第二篇:项目的可交付成果 第三篇:WBS工作包 第四篇:WBS结果输出表 划重点 1.WBS是对“可交付成果”的分解,可交付…

kafka 支持发布订阅

概述 一般消息队列的是实现是支持两种模式的,即点对点,还有一种是topic发布订阅者模式,比如ACTIVEMQ。KAFKA也支持这两种模式,但是实现的原理不一样。 KAFKA 的消息被读取后,并不是马上删除,这样就可以重复…

svn管理工具_主流代码管理工具深度评测

引言 作为有十几年IT行业代码的从业人员,经历过代码管理工具的变迁,从早期的微软的Source Code Control,到TFS,再到SVN,再到现在的Git。我深知代码管理工具是代码开发过程中非常重要的工具。市场上的代码管理工具有很多…

假设条件和制约因素的理解

目录 假设条件 制约因素 假设条件和制约因素都记录在假设日志中。 假设条件 假设条件是指当前不能确定的、未经验证但仍被视为正确、真实或确定的因素。 假设条件存在不确定性,影响项目规划的所有方面;项目实施过程中假设条件一旦不成立就可能造成相…

深入理解Java的三种工厂模式

一、简单工厂模式简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类实现汽车接口public interface Car {String getName();}奔驰类public class Benz implements Car {…

项目管理PMBOK中的八大会议

目录 一、项目启动会 initiating meeting 二、项目开踢会议 kick-off meeting 三/四:焦点小组会议&引导式研讨会 五、规划会议与分析 六、状态审查会 七、投标人会议 八、项目经验总结会 一、项目启动会 initiating meeting 1、召开时间:是启…

python函数的继承_Python 继承

版权所有,未经许可,禁止转载Python 继承继承允许我们在定义一个类时,让该类继承另一个类的所有方法和属性。父类是被继承的类,也称为基类。子类是继承父类的类,也称为派生类。创建父类任何类都可以是父类,创…

MySQL 使用Node.js异步查询结果为undefined的简单处理办法

//定义查询过程,化异步为同步 function name(SQL_TXT, Respond) {ExecuteSQL(1, SQL_TXT);var i 0;var SetName setInterval(function () {if (i > 19) {clearInterval(SetName);}console.log("Tqr :第" i "次 obtain , Value : \n" Tqr " \…

python中的装饰器怎么运行_Python 装饰器入门(上)

翻译前想说的话:这是一篇介绍python装饰器的文章,对比之前看到的类似介绍装饰器的文章,个人认为无人可出其右,文章由浅到深,由函数介绍到装饰器的高级应用,每个介绍必有例子说明。文章太长,看完原文后我计划…

我的2018

写在开始 2018年以飞快的速度临近尾声了,只感慨时间过得真快! 这一年过得算是平平淡淡,没有比较特别的地方。 工作 从去年8月来到这公司,是个做旅游产品的互联网公司,平时里做的事可以说是很简单,我只能说&…

IntelliJ IDEA快捷键总结

搜索类快捷键 快捷键描述Ctrl F文件内查找字符串Ctrl Shift F按照文本的内容查找双击Shift查找任何内容,可搜索类、资源、配置项、方法等,还能搜索路径Ctrl Shift R全局资源查找和替换Ctrl N按类名搜索类,比如 Java,Groovy…

python小波分析法检测火焰_一种基于小波分析的网络流量异常检测方法

一种基于小波分析的网络流量异常检测方法杜臻;马立鹏;孙国梓【期刊名称】《计算机科学》【年(卷),期】2019(046)008【摘要】对大量网络流量数据进行高质量特征提取与异常识别是做好网络取证的重要基础.文中重点研究并实现了网络取证中的数据处理并建立了模型库.对一种基于小波分…

初学Linux第三周

简单shell脚本:#!/bin/bash 第一行必须包括shell声明序列:#!##********************************************************************#Author: *****#QQ: *****#Date: 2018-12-31#FileName: hello.sh#URL: http#Descriptio…

python使用ddt找不到方法_python使用ddt过程中遇到的问题及解决方案【推荐】

前言:在使用DDT数据驱动HTMLTestRunner输出测试报告时遇到过2个问题:1、生成的测试报告中,用例名称后有dict() -> new empty dictionary2、使用ddt生成的用例名称无法更改1、用例名称后有dict() -> new empty dictionary报告中用例名称…

合同的不含税与税额怎么算

假设税率是6% 不含税金额=总金额/1.06 税额=不含税金额0.06 增值税在线计算器:http://www.ab126.com/goju/7332.html 大小写转换:https://link.fobshanghai.com/rmb.htm?t1525225925284 工作日计算:http://www.fy…