专栏首页cwl_Java系统架构师论文-论软件三层结构的设计(银行管理系统)

系统架构师论文-论软件三层结构的设计(银行管理系统)

论软件三层结构的设计

-银行管理系统

[摘要]

我所在的单位是国内主要的商业银行之一,作为单位的主要技术骨干,2003年1月,我主持了远期结售汇系统的开发,该系统是我行综合业务系统XX2000的一个子系统,由于银行系统対安全性,可靠性,可用性和响应速度要求很高,我选择了三层C/S结构作为该系统的软件体系结构,在详细的设计三层结构的过程中,我采用了字符终端为表示层,CICS TRANSTION SERVER为中间层,DB2 UDB 7.1为数据库层,并采用了 CICS SWITCH组,并行批量的办法来解决设计中遇到的问题,保证了远期结售汇系统按计划完成并顺利投产,我设计的软件三层结构得到了同事和领导的一致认同和称赞。但是,我也看到在三层结构设计中存在一些不足之处:比如中间层的负载均衡算法过于简单,容易造成系统负荷不均衡,并行批量设计不够严谨,容易造成资源冲突等。

[正文]

我所在的单位是国内主要的商业银行之一。众所周知,银行的业务存在一个“二八定理即银行的百分之八十的利润是由百分之二十的客户所创造。为了更好地服务大客户,适应我国対外贸易的蓬勃发展态势,促进我国対外贸易的发展,2003年1月,我行开展了远期结售汇业务。 所谓的远期结售汇就是企业在取得中国外汇管理局的批准后,根据対外贸易的合同等凭证与银行制定合约,银行根据制定合约当天的外汇汇率,通过远期汇率公式,计算出交割当天的外汇汇率,并在那天以该汇率进行成交的外汇买卖业务。远期结售汇系统是我行综合业务系统XX2000的一个子系统,它主要包括了联机部分、批量部分、清算部分和通兑部分,具有协议管理、合约管理、报价管理、外汇敞口管理、帐务管理、数据拆分管理、报表管理、 业务缩微和事后监督等功能。 我作为单位的主要技术骨干之一,主持并参与了远期结售汇系统的项目计划、需求分析、设计、编码和测试阶段的工作。由于银行系统対安全性,可靠性,可用性和响应速度要求很高,我选择了三层C/S结构作为该系统的软件体系结构,下面,我将分层次详细介绍三层C/S软件体系结构的设计过程。 1.表示层为字符终端。我行以前一直使用IBM的VISUALGEN2.。附带的图形用户终端来开发终端程序,但在使用的过程中,分行的业务人员反映响应速度比较慢,特别是业务量比较大的时候,速度更是难以忍受。为此,我行最近自行开发了一套字符终端CITE,它采用VISUAL BASIC作为开发语言,具有响应速度快,交互能力强,易学,编码快和功能强大的特点,在权衡了两者的优点和缺点之后,我决定选择字符终端cm作为表示层。 2.中间层为CICS TOINSATION SERVER (CTS)o首先,我行与IBM公司一亘保持着良好的合作关系,而我行的大部分技术和设备都采用了 IBM公司的产品,其中包括了大型机,由于CICS在IBM的大型机上得到了厂泛的应用,并在我行取得了很大的成功,为了保证与原来系统的兼容和互用性,我采用了 IBM的CTS作为中间层,连接表示层和数据库层,简化系统的设计,使开发人员可以专注于表示逻辑和业务逻辑的开发工作,缩短了开发周期,减少开发费用和维护费用,提高了开发的成功率;其次,対于中间层的业务逻辑,我采用了我行一直使用的VISUALAGE FOR JAVA作为开发平台,它具有简单易用的特点,特别适合开发业务逻辑,可以使开发人员快速而准确地开发出业务逻辑,确保了远期结售汇系统的顺利完成;最后,由于采用了 CTS,确保了系统的开放性和互操作性,保证了与我行原来的联机系统和其他系统的兼容,保护了我行的原有投资。 3.数据层为DB2 UDB7.1.由于DB2在大型事务处理系统中表现出色,我行一直使用DB2作为事务处理的数据库,并取得了很大的成功,在DB2数据库的使用方面积累了自己独到的经验和大量的人才,为了延续技术的连续性和保护原有投资,我选择了 DB2UDB7.1作为数据层。但是,在设计的过程中我也遇到了一些困难,我主要采取了以下的办法来解决:

  1. CICS SWITCH组。众所周知,银行系统対于安全性,可靠性,可用性和响应速度要求很高,特别是我行最近进行了数据集中,全国只设两个数据中心,分别在XX和YY两个地方,这样対以上的要求就更高了,为了保障我行的安全生产,我采用了 CTS SWITCH技术,所谓的CICS SWITCH 就是一组相同的CTS,每个CTS上都有相同的业务逻辑,共同作为中间层,消除了单点故障,确保了系统的高度可用性。为了简化系统的设计和缩短通讯时间,我采用了简单的负载均衡算法,比如这次分配给第N个CTS,下次则分配给第N+1个CTS,当到了最后一个,就从第一个开始;为了更好地实现容错,我采用了当第N个CTS失效的时候,把它正在处理的业务转到第N+1个上面继续处理,这样大大増加了系统的可用性,可以为客户提供更好的服务;此外,我还采用了数据库连接池的技术,大大缩短了数据库处理速度,提高了系统运行速度。
  2. 并行批量。银行系统每天都要处理大量的数据,为了确保白天的业务能顺利进行,有一部分的帐务处理,比如一部分内部户帐务处理,或者代理收费业务和总帐与分户帐核対等功能就要到晚上批量地去处理,但是,这部分数据在数据集中之后就显得更加庞大,我行以前采用串行提交批量作业的办法,远远不能适应数据中心亿万级的数据处理要求,在与其他技术骨干讨论之后,并经过充分的论证和试验,我决定采用了并行批量的技术,所谓的并行 批量,就是在利用 IBM 的 OPC (Tivoli Operations, Planning and Control)技术,把批量作业按时间和业务处理先后顺序由操作员统一提交的基础上,再利用DB2的PARTITION技术,把几个地区分到一个PATITON里面分别处理,大大提高了银行系统的数据处理速度,确保了远期结售汇系统三层结构的先进性。在并行批量的设计过程中,我考虑到批量作业有可能因为网络错误或者资源冲突等原因而中断,这样在编写批量程序和作业的时候必须支持断点重提,以确保生产的顺利进行。 由于我软件三层结构设计得当,并采取了有效的措施去解决设计中遇到的问题,远期结售汇系统最后按照计划完成并顺利投产,不但保证了系统的开发性开放性、可用性和互用性,取得了良好的社会效益和经济效益,而且我的软件三层结构设计得到了同事和领导的一致认同与称赞,为我行以后系统的开发打下了良好的基础。 在总结经验的同时,我也看到了我在软件三层结构设计中的不足之处:首先,负载算法过于简单,容易造成系统的负荷不均衡:由于每个业务的处理时间不一样,有的可能差距很远,简单的顺序加一负载分配算法就容易造成负载不均衡,但是如果专门设貫一个分配器,则増加了一次网络通讯,使得系统的速度变慢,这样対响应速度要求很高的银行系统来说也是不可行的,于是我决定采用基于统计的分配算法,即在收到请求的时候,根据预先设定的权值,按概率直接分配给CTS。 其次,由于批量作业顺序设计得不过够严谨等各种原因,容易造成资源冲突:在远期结售汇系统运行了一段时间之后,数据中心的维护人员发现了,系统有的时候会出现资源冲突现象,在经过仔细的分析之后,我发现,由于每天各个业务的业务量大小不一样,顺序的两个作业之间访问同一个表的时候便会产生资源冲突,另外,在OPC作业运行的过程中,操作员提交的其他作业与这个时间的OPC作业产生也有可能产生资源冲突。対于第一种情况,可 以在不影响业务的情况下调整作业顺序或者対于查询作业运用DB2的共享锁的技术,而第二种情况则要制定规范,规定在某时间断内不允许提交某些作业来解决。为了更好地开展系统分析工作,我将在以后的工作实践中不断地学习,提高自身素质和能力,为我国的软件事业贡献自己的微薄力量。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

推荐阅读

  • 远程办公经验为0,如何将日常工作平滑过度到线上?

    我是一名创业者,我的公司(深圳市友浩达科技有限公司)在2018年8月8日开始运营,现在还属于微型公司。这个春节假期,我一直十分关注疫情动向,也非常关心其对公司带来的影响。

    TVP官方团队
    TAPD 敏捷项目管理腾讯乐享企业邮箱企业编程算法
  • 数据中台,概念炒作还是另有奇效? | TVP思享

    作者简介:史凯,花名凯哥,腾讯云最具价值专家TVP,ThoughtWorks数据智能业务总经理。投身于企业数字化转型工作近20年。2000年初,在IBM 研发企业级中间件,接着加入埃森哲,为大型企业提供信息化架构规划,设计,ERP,云平台,数据仓库构建等技术咨询实施服务,随后在EMC负责企业应用转型业务,为企业提供云迁移,应用现代化服务。现在专注于企业智能化转型领域,是数据驱动的数字化转型的行业布道者,数据中台的推广者,精益数据创新体系的创始人,2019年荣获全球Data IQ 100人的数据赋能者称号,创业邦卓越生态聚合赋能官TOP 5。2019年度数字化转型专家奖。打造了行业第一个数据创新的数字化转型卡牌和工作坊。创建了精益数据创新方法论体系构建数据驱动的智能企业,并在多个企业验证成功,正在向国内外推广。

    TVP官方团队
    大数据数据分析企业
  • 扩展 Kubernetes 之 CRI

    使用 cri-containerd 的调用流程更为简洁, 省去了上面的调用流程的 1,2 两步

    王磊-AI基础
    Kubernetes
  • 扩展 Kubernetes 之 Kubectl Plugin

    kubectl 功能非常强大, 常见的命令使用方式可以参考 kubectl --help,或者这篇文章

    王磊-AI基础
    Kubernetes
  • 多种登录方式定量性能测试方案

    最近接到到一个测试任务,某服务提供了两种登录方式:1、账号密码登录;2、手机号+验证码登录。要对这两种登录按照一定的比例进行压测。

    八音弦
    测试服务 WeTest
  • 线程安全类在性能测试中应用

    首先验证接口参数签名是否正确,然后加锁去判断订单信息和状态,处理用户增添VIP时间事务,成功之后释放锁。锁是针对用户和订单的分布式锁,使用方案是用的redis。

    八音弦
    安全编程算法
  • 使用CDN(jsdelivr) 优化博客访问速度

    PS: 此篇文章适用于 使用 Github pages 或者 coding pages 的朋友,其他博客也类似.

    IFONLY@CUIT
    CDNGitGitHub开源
  • 扩展 Kubernetes 之 CNI

    Network Configuration 是 CNI 输入参数中最重要当部分, 可以存储在磁盘上

    王磊-AI基础
    Kubernetes
  • 聚焦【技术应变力】云加社区沙龙online重磅上线!

    云加社区结合特殊时期热点,挑选备受关注的音视频流量暴增、线下业务快速转线上、紧急上线防疫IoT应用等话题,邀请众多业界专家,为大家提供连续十一天的干货分享。从视野、预判、应对等多角度,帮助大家全面提升「技术应变力」!

    腾小云
  • 京东购物小程序购物车性能优化实践

    它是小程序开发工具内置的一个可视化监控工具,能够在 OS 级别上实时记录系统资源的使用情况。

    WecTeam
    渲染JavaScripthttps网络安全缓存

扫码关注云+社区

领取腾讯云代金券