摘要:随着金融创新和金融改革的不断推进和深化,大型金融企业正面临前所未有挑战和变革,生产系统稳定运行成为衡量企业服务质量的重要标准。为确保系统的建设成功与可持续发展,在系统的建设与技术方案设计时应遵循正确的设计原则。针对大型金融企业科技管理需求出发,结合大量生产运维经验,提出了架构设计七项原则,并进行逐项剖析,提出相应实施建议。
关键词:业务连续性;应用系统;设计;原则;架构
中图分类号:TP311
文献标识码:A
文章编号:1009-3044(2020)04-0218-03
收稿日期:2019-12-05
作者简介:刘鑫璐(1985—),男,上海人,工程师,主要研究方向为大型金融生产系统管理。
The Design Principles of Large Financial Production System
LIU Xin-lu
(China Securities Investor Services Center,Shanghai 200135,China)
Abstract:With the promotion of financial innovation and reform,large financial enterprises are facing unprecedented challenges and changes.The stable production systems have become an important standard to measure the service quality.In order to ensure the success and sustainable development of the system construction,the correct design principles should be followed in the system construction and technical scheme design.According to requirement of IT management of large-scale financial enterprises,combined with a lot of production and operation experience,the paper puts forward seven principles of architecture design,does corresponding analysis,and provides implementation suggestions.
Key words:business continuity;application system;design;principle;architecture
1 背景
系统架构设计是根据新系统的逻辑模型建立物理模型,在用户提供的环境条件下,设计出一个能在计算机网络环境上实施的方案。如果说需求分析解决了系统“是什么”和“干什么的问题,那么系統设计则解决“怎么干”。系统设计的好坏在根本上决定了软件系统的优劣。可以说“差的系统设计必定产生差的软件系统”,但是不能保证“好的系统设计必定产生好的软件系统”。
什么是优秀的系统设计?这个问题颇有争议,但几乎每个软件工程师和架构师都追求优秀的系统设计。当然,系统设计并不代表结果,系统设计只是架构师或者带头程序员的工作,优秀的系统设计必须经由良好的项目管理和团队努力,经过分析需求、设计、开发、测试、分发、维护,以及迭代或重构的过程。中间哪个环节出了问题,再好的设计都将功亏一篑。
可能每个人都对自己设计的系统很自信很满意,但“实践是检验真理的唯一标准”。如果一个系统设计经过实践证明,大家(指客户或用户)公认为优秀的系统,那就是一个优秀的系统设计,在大型金融企业中更是如此,优秀的系统设计可以经得起大业务交易量和大业务并发量的考验,可以完美支撑生产系统稳定运行,为科技部门赢得高效工作效率和业务部门的充分认可。下文介绍大型金融企业生产系统的应用设计原则。
2 设计原则
大型金融生产系统为满足业务连续性要求,应着重考虑应用设计。应用设计除注重功能性需求外,应需遵循以下七大原则,包括:高可用、可扩展、高安全、高性能、易维护、可理解、经济性[1]。
下面将对各设计原则进行详细描述。
2.1 高可用
系统可用性是应用研发人员在整个系统设计研发、测试、投产过程中都必须重点考虑的问题,可用性程度的高低直接影响到业务系统持续对外提供服务的能力。可以说,高可用是大型金融企业系统需要具备的最基本的要求之一。
实现系统的高可用需要对应用设计和基础架构两个层面进行统一考虑。针对基础架构层面的高可用性进行长期、深入、与时俱进的研究,并借助基础架构高可用的设计思路和过往的运维经验,提出以下三点建议:
第一,冗余设计[2]。尽可能避免单点风险,即系统中任何一个模块出现异常停止服务时,不会影响整个系统持续对外服务。根据以往经验,总控程序、公共服务数据库等模块容易成为单点。
第二,检错设计。当系统中某些模块出现故障未能按预期执行时,系统应能够自动恢复或提示运维人员手工处理,以此提高系统的可靠性。例如,日终批量执行、定时调度执行和核心数据库备份等重要操作就有必要进行检错设计。
第三,降低系统复杂度。系统复杂度越高,可能出现故障的环节也就越多,潜在的风险点就越多,因此在设计过程中,应本着以简为美的原则,通过降低系统复杂度来提升系统的可用性。
另外需要加以说明的是,应用系统的高可用性并非依赖于某个硬件设备或者软件产品的可靠性来保证的,高可用是一个全局性问题,需要综合考虑软件设计、基础架构设计、软硬件产品特点等多个方面。
2.2 可扩展
大型金融企业的应用系统面临着较大的并发访问压力,并且当前正处于并发访问数量快速增长的阶段。一方面大型金融企业客户数量巨大,另一方面随着服务种类的增多以及服务渠道的便利,实际业务量正在不断增长。因此,在应用设计之初就要将可扩展性作为最重要的设计原则之一。关于可扩展性,需要从程序和数据两个层面来考虑,有如下两点建议:
第一,程序上实现集群架构[3]。利用负载均衡技术,将应用系统设计成多应用节点并行的集群架构。集群中各个应用节点不依赖于某个应用节点的内部资源,如内存数据、IP地址端口、文件等,即各个节点完全独立且对等,不存在相互依赖或者调用关系,使得集群规模可按需实现动态、弹性扩展。
第二,数据上按照业务逻辑进行拆分。进行数据拆分的目的是为了提升系统的并发访问能力,更好地满足并发访问需求,拆分粒度需视具体情而定。例如,应用系统支持将数据库拆分成联机库与历史库,或者按照地区、客户号、业务类型等进行拆分;在单个数据库内部,可以使用分区技术对若干大表或热表进行逻辑或物理上的拆分。
2.3 高安全
随着大型金融企业信息化进程的不断推进,业务运营及日常办公都依托于信息化平台,各类重要文件及敏感数据需要通过计算机和网络进行存储和传输,信息安全问题受到内部管理层及外部监管部门的高度重视。从系统运维及管理的角度出发,有以下安全性建议:
第一,敏感数据加密。对于业务系统中的敏感数据,如用户名称、密码、账户信息、身份证、交易金额等数据在传输、存储过程中必须进行加密。对于配置文件中的敏感字段,如IP地址、各类用户及口令等也应该进行加密保存,参数化管理。密钥应满足一定复杂度,且定期(三个月或更短)进行更改。
第二,采用加密方式进行文件传输和访问。对于信息传输和访问,建议使用SSL等安全性较高的协议替代Http、FTP等高风险协议,保证数据在传输及系统访问过程中的安全和可靠。
另外,大型金融企业信息系统的分级分类管理规范及开源软件使用的指导意见都与系统安全性相关,下文分两个小节给出主要内容。
2.3.1 系统分级分类
按照系统的服务对象、服务时间、监管要求及安全等保要求,来考虑应用系统的可用性及安全性设计,并配置相匹配的基础架构和资源。如直接面向外部客户服务、7x24小时、等级保护三级以上的应用系统与面向内部经营管理、5x9小时、等级保护三级以内的系统,在高可用设计、安全性要求及资源配置上会有较大的差异。对于同类型系统,可按照使用频度再进行细分,如使用频度较高的联机业务系统和使用频度较低的历史查询系统有必要在设计之初就予以考虑。
2.3.2 开源软件使用
除了商业软件外,共享软件、免费软件和开源软件已成为软件行业不可或缺的组成部分,越来越受到企业级用户的关注和使用。结合大型金融企业的实际情况,对这三类软件的管理和使用,建议如下:
1)限制使用共享软件。共享软件往往在使用时间或者功能上有一定限制,因此仅限于短时间、小范圍的试用或验证,不宜大范围使用。如需大规模使用,则同商业软件相同,需购买使用。
2)谨慎使用免费软件。使用免费软件时,必须提前研究清楚相关的协议声明,明确“免费”所指范畴是个人使用还是商业使用,只有对商业使用免费的软件才能使用。
3)稳妥使用开源软件。建议优先选择成熟的、主流的开源软件。第一,若所选核心基础软件(如Linux)为开源软件时,应同时购买相应的技术支持和服务,以降低使用风险。而对于开源的辅助工具类软件(如Eelipse等开发工具,或是Firefox等浏览器),一般无须技术支持;第二,采用或基于开源软件源代码开发大型金融企业专有软件,应注意开源许可证类型,建议选择商业友好的开源软件及其源代码;第三,开源软件版本往往变化较快,新老版本的兼容性、稳定性、升级频度要做好合理评估,有必要做好开源软件的版本管理[5]。
2.4 高性能
评价应用系统的性能好坏主要有两个指标,一是吞吐量,即单位时间内能够处理的交易量,二是响应时间,即用户执行一笔交易所需的时间。
对于某个特定的业务,应用系统的性能与以下两方面因素密切相关,一是应用设计的水平,二是基础软硬件产品的支撑能力。前者具有主观能动性,后者为前者提供服务的同时自然也形成了约束,二者相辅相成,不可分割,需要综合考虑,统筹规划。
当前,大型金融企业为适应业务发展需要和应用系统特点,不断丰富、完善基础软硬件产品体系,努力改善由基础软硬件能力不足所造成的功能缺失或者性能瓶颈等问题,但仅仅依靠更换高端设备和提升资源配置来提高应用系统性能是远远不够的,这种做法治标不治本,且成本消耗巨大。通常来讲,采用提升资源配置的方式来提升性能,投入产出比是小于1的,即资源配置增加一倍所获得的性能提升小于一倍,其效果是边际效应递减而且存在拐点,即资源扩充到一定程度反而导致整体性能下降。因此,提升应用及架构设计水平才是解决性能问题的关键。
2.5 易维护
系统投产上线后仍会面临各种业务功能及基础架构方面的变更,因此为了减轻应用和系统运维工作量,减少变更所需时间,应用系统有必要朝着易于维护的方向设计,尽量避免在运行过程中出现修改代码等情况。鉴于此,提出如下四条建议:
第一,高内聚、低耦合。高内聚,即应用中单个模块内部应尽可能完成一系列极为相关的功能,高内聚设计能够提升系统的可维护性和可重用性。低耦合,即尽量降低两个模块之间的依赖程度,比如,程序中应尽量使用DNS或主机别名,而不是固定的IP地址,这样当IP地址变化时对应用无影响6。
第二,参数化配置。建议将系统或环境变量以参数形式统一放在配置文件或数据库中管理,当需要进行调整时,仅需要修改对应配置项即可。
第三,良好的日志设计。日志能够帮助应用或系统维护人员在问题诊断时快速定位,通过参数化的配置可以调整日志的详简程度。例如日志输出问题代码所在的模块或函数,甚至能具体到某一行,并且能根据参数设置不同级别的日志输出。
第四,自我状态检测。建议应用具有自我状态检测功能,提供状态检测接口,并能及时、有效地与公共的集中监控系统通信,便于较早发现运行中的各种异常情况,将问题化解于萌芽状态。
2.6 可理解
架构是系统成败的关键,只有内聚单一的架构才能足够的简单,这样系统就变得更容易理解,才能更好保证架构的正确性。架构的正确性是设计出来的,而不是测试出来的。如果设计时候架构不够内聚单一,可理解性就不是很强,而是单单靠功能测试来验证架构的正确性,就会出现海森堡的测不准原理带来的问题,即潜在问题无法预知。比如在一个高吞吐流量处理的场景下,设计一个无锁架构,如果架构不能完全看懂,仅通过测试去保证正确性几乎不可能,测试时是无法穷尽所有场景的。
不易理解的架构一般都是复杂耦合的内部组成从而带来的晦涩性,往往都是架构抽象的广度和深度不足导致的,对问题的本质缺乏足够理解。如果抽象层次不够,就会对业务中重复的部分没有消重合并,造成架构不够清晰。
当然架构一步抽象到位很难,是一个逐步推荐演变的过程。建议做好架构持续演进,做好简单的架构设计,逐步丰满和实现,往往更容易激发出其新的抽象思路。
2.7 经济性
在此背景下,金融企业为增加生存能力,必然采取降低成本,扩大利润的做法来应对。追求以最小的投资获取最大的利益,IT的投人也同样如此。表现在IT部门需要加强基础软硬件使用的精细化管理,为应用系统设计出最合理的基础架构支撑环境;应用研发部门需要考虑在适应新的基础架构的同时满足业务的需求,以最合适的基础架构和应用架构来支撑业务发展,从而不断提升系统架构的性价比和投资回报率,降低IT成本。
经济性的原则主要是根据应用系统的重要性等级制定相匹配的架构设计。例如,对直接面向外部客户服务或直接影响对外服务的这类应用,其停止服务成本极高,影响巨大,因此不论从应用设计还是基础架构选型都应优先考虑成熟、稳定、高可用、高性能的解决方案,而对于内部服务且可用性要求相对较低的这类应用在架构设计时要控制投人,满足业务运营要求即可。當然,如果能够采取投资不高,而可用性、可扩展性高的方案是最为理想的,当前互联网企业广泛采用廉价的IT基础架构构建集群服务系统值得参考借鉴,在软件研发投人和基础架构投入方面寻求比较合理的均衡点,以获得最佳投资回报率应该是我们共同追求的目标。
3 结束语
本文结合大型金融企业应用系统设计实践和经验,制定了系统架构设计规范中的七项设计原则。其中,高可用、可扩展和高安全是大型金融企业系统的根本属性,在应用设计过程中应始终关注,必须确保系统上线后能够平稳运行,并且能够满足监管部门日趋严格的安全性要求;高性能和易维护是大型金融企业系统的关键属性,直接关系到生产运营的效率;可理解是架构抽象程度的表现,对于架构设计的传承和理念普世起到了关键的作用;经济性是指在满足系统需求的前提下,还必须考虑系统架构的性价比和投资回报率,防止过度设计造成不必要的浪费。七项设计原则代表了架构设计中的不同考量维度,在实际工作中需要综合评判和认定,设计出优秀的应用系统架构不再是难事。
参考文献:
[1]高岳.浅谈银行操作风险管理系统的设计原则与总体架构[J].信息系统工程,2013(12):62-63.
[2]孟剑萍.高可用性软件架构设计和实现[J].微型机与应用,2011,30(17):19-21.
[3]赵峡策.基于Nginx和Memcache的负载均衡集群架构设计[J].电子技术与软件工程,2014(5):39-40.
[4]赵玲.浅析数据加密技术[J].电大理工,2008(4):45-46.
[5]车路,张焕远,夏亚东.基于开源软件的云监控平台设计与实现[J].计算技术与自动化,2015,34(1):136-140.
[6]程春蕊,刘万军.高内聚低耦合软件架构的构建[J].计算机系统应用,2009,18(7):19-22.
[通联编辑:谢媛媛]