文档章节

谈谈软件的高扩展性、高可用性、高可维护性-------针对网银接入项目的思考

凯文加内特
 凯文加内特
发布于 2016/01/28 10:46
字数 4014
阅读 87
收藏 1
点赞 1
评论 0

个人随笔,如请转载,请注明出处:http://blog.csdn.net/dingwood/article/details/7540988

 

高扩展性

我理解的高扩展性就是在需求变动或新增需求时,开发人员能够基于以前的系统架构做出快速开发。

1.1例子:

项目经理李峰把JAVA EE项目架构搭建好后,实习生张飞就按照工作安排进行ABCD四个模块的开发。由于维护需要,在编写业务逻辑处理的代码时,需要将用户的操作记录下来,以方便维护。张飞在写完A模块的日志记录及业务逻辑后,就老老实实的将日志记录代码拷贝到BCD等模块,代码的复用变成了代码的粘贴复制,随着工作的进展,客户提出需求,将用户的操作记录下来,权限高的用户可以查看权限低的用户,此时,小张听到这个消息立马傻掉了,因为他的记录日志方法以硬编码的方式散落在各个业务对象中,数十个业务对象都需要修改,即便是修改了一个业务对象,粘贴复制到其他对象也够累的,此时,项目经理李峰说,要用OO思想看世界,将公用的系统需求(比如记录日志、权限验证)进行封装,以方便在每个业务对象中进行调用。在张飞奋斗了一天后,终于把他所负责的模块改完了。------整体架构稳固,公共功能进行封装,提供各模块调用,好比bizware的通讯适配层被封装起来,将报文处理函数(接收8字节、发送8字节函数)以数据库形式记录,主控程序通过读取数据库配置来调用通讯函数,以满足各种不同的并且多变的通讯接口要求。

1.2 针对网银项目的理解

传统网银包括老三样:查询、转账和理财。网银所有的功能都是基于这三类发展和演变的。针对这三类交易,网银接入系统的一般处理流程为:接收并解析报文-->校验(如果有需要)-->记录数据库(方便查询问题)-->数据字典转换-->通讯(转发至核心或其他系统并接收返回信息)-->更新数据库-->数据字典转换-->返回报文 。 

针对报文解析模块进行分析,我们会发现,解析报文的过程就是将收到的报文按照某种规则进行截取并赋值给对应的变量的过程(这种规则我们称为通讯协议,有公用的如ISO8583协议,还有各个系统私有的如定长、分隔符、XML协议等)。解析报文的动作是公共特性,但解析规则是各个交易特有的。针对公共特性进行封装形成公共模块,这个模块能够解析各类通讯协议的报文,但解析的规则还得由各个交易告诉主控程序,可以将每个交易的通讯协议及规则保存在文件或数据库中,主控程序从文件或数据库获取对应交易的解析规则,然后进行解析。

针对校验模块进行分析,我们会发现,每个交易校验的内容可能不一致,甚至有的交易不需要校验,没有公共特性可言,校验模块应由每个交易的自身处理。

针对记录数据库模块进行分析,我们会发现,记录数据库的方式多种多样,有的需要记录下整个交易报文(方便根据数据库检索日志);有的需要详细记录交易的每个字段(如账务交易可能需要进行统计)。记录整个交易报文可以说是公共特性,进行封装。无法封装的记录数据库由各个交易自身处理。

针对数据字典转换模块进行分析,我们会发现,每个交易都会用到数据字典的转换(如将核心成功的返回码ESS0000转换成农信银的成功返回码000000),将此模块进行封装,还是老习惯,要么通过配置文件,要么通过数据库,保存数据字典和数据字典值的对应及转换关系。

针对通讯模块进行分析,我们会发现,每个交易的通讯目的地有可能不一样,有的发送到核心,有的发送到支付系统,有的可能发送到短信平台,有的还有可能与两到三个系统通信。但多数交易只是发送到核心,并且只是发送单条交易请求,然后接收核心单条返回信息。

还有一部分交易需要涉及到多条明细返回,如查询账户交易明细交易;还有少数交易涉及到发送多个系统。针对此模块,我们可以采取两种方案。方案一:一刀切。交易主控只负责调用通讯接口,具体逻辑由各个交易自身实现;方案二:分而治之。针对大多数通讯逻辑相似的交易形成通讯的公共模块,供主控程序调用,通讯逻辑比较特殊的则由各个交易实现。

接下来的流程分别为更新数据库-->数据字典转换-->返回报文,这三个模块就不做分析了,因为和之前的流程有很多相似甚至相同的地方。

最后,我们在主控程序中,调用每个流程环节中抽象出的公共模块,在每个流程环节中,每个交易的个性化处理进行单独开发,将个性化处理程序和交易名称进行一一对应,实现配置化(文件或DB方式记载),主控程序通过读取配置获取对应关系,根据不同交易调用调用不同的个性化处理程序。

当需求变动或增加时,主控程序(所谓架构)基本不用变动,只要针对每个交易的个性化处理进行插件式的开发(如验证),增加一些交易配置即可(如解析报文模块)。如果主控程序无法满足需求变动,可以增加另外一套主控程序,针对不同的需求调用不同的主控程序即可。当然,具体的实施需要根据实际情况而定。

这就是我理解的软件的高扩展性。即在需求增加或变动时,程序的架构基本不动或做一些很优雅的变动,然后针对每个功能的个性化处理进行插件式的开发,增加若干配置,即实现相应功能。

高可用性

2.1 例子

这两天重新安装了foxmail,发现已经升级到了版本7,原来需要设置的发送服务器和接收服务器,而现在软件本身都会根据用户输入的邮箱名自动设置发送服务器和接收服务器。去繁就简,设置一步搞定,这就是高可用性的体现。

2.2 针对网银项目的理解

就个人理解,作为网银接入这类交易转发的系统,高可用性主要表现在以下两个方面:一是转发的效率,二是转发的稳定性。

先谈谈效率。用户登录网银并发起交易请求到农信银网银,交易通过internet传送到农信银网银的服务器(这个时间记为T1),经过农信银网银系统处理后再转发至我方的网银接入系统(农信银网银的处理时间记为T2,转发至网银接入系统的时延为T3),网银接入系统处理后(处理时间为T4),与核心进行通讯并返回农信银网银(与核心通讯时延为T5,返回农信银网银的时延记为T6)

我们得出如下公式:T(整个交易的处理时间) T1+T2+T3+T4+T5+T6

我们能控制的只是T3T4T5T6,如何能让T3在合理的范围内变动,并且网络的花费不会太高(拉个100G的光纤也没必要),首先我们获取行内现有的银行卡用户,大致估算出推广后的网银用户,然后针对网银用户再估算出日常的在线用户数,进而估算出日常的交易请求数,再针对各种报文,估算出日常发送的交易报文的大小。从而计算出网络带宽,再加上1/4的带宽冗余。这样就得出大致的网络带宽。(这种评估方法缺乏数据的支持,有待推敲)。

保证T3在合理范围内变动后,在推敲T4(网银接入系统处理交易的时间,是不是忘记了?呵呵),为了保证用户的并发访问,我们设计出多线程或多进程的程序来处理用户的请求,针对第一节中高扩展性的流程分析,抓住主要矛盾,忽略次要矛盾(如验证这样的操作),整个转发过程中无非做了三个大的方面:报文转换、通讯和数据库操作。针对报文转换,如果采用读取配置文件的方式,则需要用文件缓冲流以提高读取速度,如果采用数据库配置的方式则需要进行优化(包括建索引、设立分区表等);针对通讯,则需要设置好超时时间,确保与核心的通讯时间小于农信银网银系统与网银接入系统的时间,防止交易超时;针对数据库操作,则需要进行优化(包括建索引、设立分区表等);当然,数据字典的转换虽然做成公共模块,但每次都要读取数据库获取转换关系也比较耗时,让数据字典转换更高效的做法是将其做成系统服务,数据字典的对应关系保存在系统缓存中,每次读取缓冲区进行数据字典转换。当然,同时产生的问题就是数据同步的问题------同步数据库(也有可能是配置文件)与缓冲区中的数据,同步的方案有很多,有自动同步方式(如凌晨3点自动同步),手工同步方式(最简单的就是重启服务,当然智能点,可以设置标志位进行同步)。综上所述,T4也可以保证在合理范围内变动。

由于网银接入系统与核心同属于一个局域网,所以T5考虑的意义不大。

针对T3已经做出考虑,所以T6也不做重复讨论。

当然,提高效率需要考虑很多方面,比如机器性能、硬件设备的横向和纵向的扩展带来效率的提升等。由于能力有限,这里不做赘述。

接着谈谈对稳定性的理解,我的想法很简单,就是确保不会发生单点故障。这里就会考虑使用各种集群软件。当然,这是架构上的设计。当然,如果设计的软件具有这部分功能,客户就不会操心买集群软件了,对客户是个吸引。 由于集群技术的专业性以及自身知识的匮乏性,就不出丑了。呵呵。

 

这就是我对基于网银接入系统的高可用性的理解,当然,我觉的不同的软件对高可用性的要求不一样。并有一个一概而论的统一标准。

高可维护性

3.1 例子

笔者在使用QQ软件或PL/SQL的过程中,出现异常或错误时,都会弹出一个提示界面,让用户将错误信息提交到给后台。供后台的工程师进行优化及处理。这就是高可维护性的体现。当然这只是一方面,QQ软件很少出错,即便出错重启仍能正常运行,这本身就是高可用性的体现。

3.2 针对网银项目的理解

个人觉的,网银目前还没做到高可维护性。系统在生产上运行。当客户做交易出现异常了,反映到业务部门,业务部门再反映到科技部门,科技部门才会去查询相关交易的异常,查证问题时还可能会和农信银网银、核心系统、支付系统等技术人员的沟通,当科技部门查证完后反映给业务部门异常原因,业务部门再对客户进行反馈。整个流程不仅繁杂,而且耗时,在消息流转的过程中,可能存在失真,加大了工作难度。 当然,整个流程有优化的必要,虽然属于流程银行的内容,但不可避免的会和软件相挂钩(目前行内也在做一些流程银行的工作,如数据应用平台的研发,将数据统一下发,查询交易独立出来,确保柜面最大限度的处理账务交易,大大优化了柜面业务处理能力,个人认为也属于流程银行的内容)。分析整个流程,不难发现,问题的查询或业务咨询无非是在客户与技术人员、业务人员之间搭建一个透明的沟通桥梁,借鉴人人网、FACKBOOK的做法,可以在网银界面上开发出基于WEB的聊天功能,在农信银网银的内管中开发出针对业务、技术人员的服务端。客户发现交易异常或遇到业务问题时,无需转移视线,即可在线的沟通业务技术问题。沟通距离缩短了,用户体验感加强了。

当然这种办法属于被动防御型的,目前大多数系统都是基于客户反馈,进行问题排查的。那么有没有主动进攻型的办法呢?答案是肯定的。针对目前统计的问题进行分类,将出现次数最多的拎出来。比如问题是交易超时。可以在交易的开始记录交易开始时间,结束时记录交易结束时间,当出现多笔交易都超过某个时间时,交易存在问题的可能性就大,就通过短信平台通知运维人员。当然这只是一个案例,举一反三,我们也可以再目前的管理台做出一些优化,比如针对操作人员提出的一些问题,形成小贴士,记录入库,每当操作人员点击管理台的某支交易时,会将对应的贴士返显在比较显眼的地方,让用户可以注意到常见问题。(类比浩方对账平台的DOTA游戏进入后,会提示游戏玩家某些攻略技巧等)

 这是我对高可维护性的一些理解。

 

 

 

纵观整篇文章,不乏我个人过于理想化的一些想法,主观愿望稍强烈了一些,有的地方可能我过几天看,都可能会发现不成熟甚至幼稚。

希望路过的人,对不满意的地方提出批评指点。


本文转载自:http://blog.csdn.net/dingwood/article/details/7540988

共有 人打赏支持
凯文加内特
粉丝 326
博文 667
码字总数 87615
作品 0
青岛
后端工程师
弘积科技:银行负载均衡其实可以这么做!

业务的稳定性和高可用性可谓是银行的生命线。很难想象,银行的业务系统一旦中断,将会带来怎样的严重后果。为了应对网上银行、手机银行等业务的快速发展对数据中心所带来的处理压力,某省级城...

玄学酱
04/16
0
0
Apache HBase高可用性的新阶段

  【IT168 技术】Apache HBase是一个面向线上服务的数据库,其原生支持Hadoop的特性,使其成为那些基于Hadoop的扩展性和灵活性进行数据处理的应用显而易见的选择。   在Hortonworks数据平...

hortonworks
2015/02/13
0
0
阿里云Overlay的SDN 实践: 架构设计与产品实现

在不久前的Open Network Summit洛杉矶峰会上,阿里云网络资深技术专家程钢博士发表演讲 SDN Practice for Cloud Overlay Network: From Infrastructure to Products。详细介绍了阿里云Overl...

伟耘
04/25
0
0
域名到站点的负载均衡技术一览(主要是探讨一台Nginx抵御大并发的解决方案)(转)

继上一篇文章Http://www.cnblogs.com/EasonJim/p/7807794.html中说到的,Nginx虽然很强大,但是面对大并发时,一台Nginx总是有限的。即使后端有多台Nginx组成的集群时,前端毕竟只有一台Ngi...

easonjim
2017/11/12
0
0
超级网银上线在即 支付宝等未进接入名单

据悉,被称为“超级网银”的央行网银互联应用系统或将于今年8月份上线运行,届时该网银系统 将接入包括国内十多家银行在内的网银系统,首批十多家试点的主要商业银行正紧张进行接入系统开发,...

红薯
2010/04/27
1K
5
分布式数据存储的CAP理论的理解

分布式现在是很流行的名词,尤其分布式数据处理领域,随着海量数据的产生,大家都在研究更高效、可扩展性好、高可用性的数据存储系统,虽然大家想尽各种办法,基本上还没有什么产品能超越分布...

小李飞刀008
2013/10/18
0
0
系统架构师-基础到企业应用架构-系统设计规范与原则[上篇]

一、上章回顾 在上篇中我们讲解了几类UML2.0语言新推出的建模图形,总体来说通过这些图形能更详细的将某类信息表达出来。在这里我们简单回顾上篇讲解的内容。 上图中已经简单介绍了上章讲述的...

wbf961127
2017/11/12
0
0
实时数据传输平台--TimeTunnel

什么是TimeTunnel !TimeTunnel(简称TT)是一个基于thrift通讯框架搭建的实时数据传输平台,具有高性能、实时性、顺序性、高可靠性、高可用性、可扩展性等特点。 高性能 2k大小的消息,峰值每...

小网客
2014/02/24
3.4K
1
架构选型必读:集中式与分布式全方位优劣对比

由于历史原因,集中式架构多用于传统银行、电信等行业。主机资源集中在大型主机或小型机上。集中式架构下,包括操作系统、中间件、数据库等“基础软件” 均为闭源商用系统。集中式架构的典型...

蚂蚁技术团队
06/14
0
0
利用分层思想进行嵌入式项目设计,你试过吗?

在一个初学者从入门走向精通的途中,像这种 发现问题 → 投入思考 → 提出方案 的学习模式是非常有效的。 1 遇到的问题  通过这一段时间的编码实践,积累了一些编码经验,但也体会到了之前的...

dp29sym41zygndvf
05/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
10分钟前
0
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
20分钟前
0
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
30分钟前
0
0
设计模式:代理模式

代理模式可以分为三种:静态代理,动态代理,cglib代理 1.静态代理:被代理的类需要实现一接口或是继承一父类 委托类(被代理的类): package com.java.pattern.proxy.staticdemo;publ...

人觉非常君
32分钟前
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
38分钟前
0
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
39分钟前
0
0
TensorFlow,从一个 Android Demo 开始

TensorFlow Android Demo 项目地址 Machine Learning 既然提到了 TensorFlow,那是不是得神经网络、机器学习了解下? 如果你能坚持把 机器学习速成课程 给啃完了,觉得还挺有兴趣的,那可以考...

孟飞阳
40分钟前
0
0
JVM学习笔记二:内存结构规范

1、JVM基本结构图 2、java堆(Heap) 3、方法区(Method Area) 4、程序计数器 5、JAVA栈图解 局部变量表:八大基本类型,还可以存储引用类型 上一篇:JVM学习笔记一:类加载机制介绍...

刘祖鹏
46分钟前
0
0
mui集成微信H5支付(返回白屏问题已经解决)

一.项目需求 因为公司人员缺少,没有专门开发安卓和ios的人员,为了项目尽早上线采用了混合APP开发的方式,我选择了MUI混合开发框架,项目中需要在用户购买VIP会员的时候进行支付,所以需要在项目...

银装素裹
50分钟前
0
0
SpringBoot集成Redis--配置自定义的RedisCacheManager

配置自定义的RedisCacheManager--1自定义键生成规则 默认的键生成器 当不指定缓存的key时,SpringBoot会使用SimpleKeyGenerator生成key。 SimpleKeyGenerator SimpleKey 查看源码可以发现,它...

karma123
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部