大型应用系统性能调优的探索与实践
Posted 最美软件人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大型应用系统性能调优的探索与实践相关的知识,希望对你有一定的参考价值。
作者
廖文胜、蔡万清、朱晓艳
已刊载在《中国金融电脑》2018年9月刊
随着商业银行在服务全球化、运营集中化的不断推进,银行业务的开展对信息系统的依赖度在不断提高;相对系统的功能问题,性能问题往往更具有隐蔽性、交易高峰时刻突发等特点,一旦发生,其影响范围广、带来的副作用和损失巨大,将对银行服务连续性造成严重威胁。因此性能问题一直是银行系统必须要解决的重要课题。本文结合中国银行核心银行系统的调优工作,从了解性能问题产生的机理,逐步形成和完善了产品全生命周期的调优方法论,涵盖了性能设计和性能调优的多方面策略。
1
熟知性能问题机理,开启高效调优之路
性能问题通常与热点资源和应用系统底层技术组件有关。在处理服务请求时,会占用一些关键资源,当这些关键资源有限时就会产生竞争。这里所说的资源包括硬件资源(CPU、磁盘、网络等)和软件资源(线程、表、记录、锁等)。
银行大型应用系统的服务类型可大致分为三种,一种是联机同步(实时)服务,一种是联机异步服务,一种是批量服务。
联机同步服务性能问题的产生主要是底层技术组件对资源竞争引起的排队、延长等待时间造成的,即出现热点资源。当所需的资源被占满,服务响应时间显著延长,以致大量新上来的服务请求无法及时处理,就会出现热点资源瓶颈,进而引起交易堵塞和蔓延。依据被占满的资源情况,热点资源瓶颈可发生在特定的交易上,也可能发生在大范围的交易上。解决联机同步服务的热点资源问题需要依靠改进设计,如散列资源或改进资源访问方式等方法。
引起异步服务和批量服务性能问题的主要因素除并发服务产生了热点资源外,还有底层模块处理效率问题。在批量服务、联机异步服务中,处理效率是性能问题的关键。由于逻辑复杂,处理进程需要运行CPU、操作磁盘进行I/O,即使资源独占,其单位时间内处理的数据量也是有限的。解决处理效率问题除了硬件方面升级外,改进软件设计、优化算法、简化处理逻辑、减少I/O是重要的手段。
2
进行全生命周期性能调优
性能调优需要贯穿软件产品全生命周期,可以分为性能设计和调优两个不同阶段。性能设计贯穿于设计、编码环节,是产品生命周期的第一个阶段;而调优,通常是在现有系统和代码基础上所做的改进,属于产品生命周期的后续测试和验证阶段,它依托于业务非功能的要求进行深度分析、测试和调优,并形成调优结论报告,作为生产运维监控的依据。性能设计考验的是开发者正向建设的能力,而性能优化考验的是开发者正向验证和反向修复的能力。
在性能问题机理的理论指导下,结合日常工程活动经验,提炼出性能调优需要参考的性能设计规范和性能风险识别点。性能风险点的识别需要参考长期积累的性能容量资产库,包括性能指标设置、性能基线、数据量基线、业务量基线、系统容量信息、辅助分析工具等等,同时,在性能调优过程中,不断地完善、丰富性能容量资产库。
图2-1 核心银行系统全生命周期调优结构图
2.1 性能调优从需求分析开始
需求分析是软件生命周期的重要阶段,是业务需求向非功能需求转化的过程,而全面合理的非功能提取是保证性能设计和调优顺利进行的基础工作。通过在此阶段的介入,可以与业务需求方深入透彻的分析需求内容,了解业务的时效性、业务发起模式和场景、业务发起瞬时量和总量,再结合容量量化模型和设计识别规范,形成该需求的初步性能要求报告,作为后续性能设计和调优的依据。
2.2 性能设计贯穿整个需求设计和编码
高效运行的系统性能设计是基础,而性能调优只是补充,良好的性能设计,可以保障系统更安全的运行,缩减后期维护成本,所以在系统生命周期的初期阶段我们要重视性能设计。设计编码时,需要着重从以下几个方面考虑:
(1)选择正确的运行模式
运行模式从根本上决定了处理效率,在设计之初要结合系统需求、业务时间点等要求考虑好运行模式(联机同步运行模式、联机异步运行模式、批量运行模式)。
(2)分散热点资源设计
从机理研究结论看出,资源是否过热是一个相对概念,是由资源数量、使用效率、并发流量共同决定的。因此性能设计可以从这些方面寻找性能问题,并使用容量计算模型进行量化计算,采用一些技术手段,如表分区、热点散列等技术手段弱化该类问题:
识别热点资源:结合需求中单位时间的业务量要求,分析是否会出现单节点资源,或资源数量过少的热点问题,特别是公共资源访问的设计。
减少资源锁定时间:SQL使用不合理,会极大降低资源(表、记录)的使用效率;由于资源锁定时间变长,可能引发资源出现热点。
简化处理逻辑:复杂的处理也会降低资源使用效率,引发资源热点。
控制并发交易量:并发度过高,使得资源访问请求量过大,可能会引发资源出现热点问题。
合理设置系统参数:设计中存在高热点资源,需要考虑相关系统参数匹配设置。
2.3 持续的性能数据跟踪和性能调优
在应用系统开发阶段,面对当时的业务背景和资源环境我们做了最好的的性能设计,但随着系统运行生命周期的延续,系统承载的业务种类和规模不断扩大,应用系统需要在有限的资源环境下,不断进行性能调优来保障系统安全、高效的运行。性能后期的调优和性能设计有本质区别,但又相辅相成。
依据性能问题具有隐蔽性、难发现的特点,按照问题处理四部曲:问题的发现、分析、解决和验证,建立如下的性能调优方法论:
第一步,定位问题:性能问题的隐蔽性,使问题的发现增加了难度。当前我们主要采用有效的性能测试和静态分析工具来发现问题。主要方法论是结合生命周期前期阶段的初步分析和性能设计的特点,依托系统资产库,进行性能测试场景分析、测试数据及测试环境准备、性能测试,并使用性能数据采集工具生成性能数据报表,该报表是发现问题的依据,并进行后续调优分析的基础。
第二步,分析问题:基于性能测试过程中产生的数据报表,使用系统性能数据解析工具,生成本次性能问题各类指标维度数据,再结合资产库中积累的精细化指标体系,通过专家判断和类别的方法,分析出存在问题的指标数据,从而追索到相关程序和语句,形成问题分析报告。我行核心银行系统在上线初期就通过专家分析和经验总结建立了一套完善的性能指标字典,作为系统性能指标对比的基线,每个指标都是一个性能指示灯,提示了问题产生的原因和机理,并随着系统的运行不断积累和完善。
第三步,解决和验证问题:依据问题分析报告,知道了性能问题发生的原因和程序,再参考设计指南与阶段CHECKLIST进行重新设计和修改,对修改完的内容再重新验证。
整个性能调优的过程是需要持续跟踪和不断调整的,一个性能问题的解决又可能发现另外一个性能问题,每次的性能调优可能需要十几次甚至几十次的过程循环。如果把系统运行的数据流转比作河流流入大海,那么在河水流动过程中的各种沟沟坎坎就是我们需要排除的绊脚石,我们需要疏通一个坎再疏通一个沟,直到河流能够顺利流入大海。
3
完备的资产库体系是调优的基石
性能资产库是进行全生命周期调优的重要参考体系,为性能调优提供合理、有效的理论依据和数据参考,如性能指标、数据基线、辅助分析工具等;同时全生命周期调优又是性能资产库的一个重要输入,通过在不断地调优过程中总结经验,完善、丰富性能资产库。
3.1 精细化、多维度指标基线的建立
性能指标为定位交易性能问题确定了一个标尺,主要是以性能产生的机理为基础,通过专家分析、经验总结等不断积累而形成,是整个性能测试工作开展的基础,良好的性能指标基线直接影响到性能调优的结果。根据性能指标受环境影响的因素,银行大型应用系统的性能基线可分为硬性指标和动态指标两类。
硬性指标主要是指不受环境因素影响,反映交易性能情况的数据指标,例如:交易使用表个数、访问DML个数和访问路径分析等。动态指标是只因环境变化而随之变化的指标,例如:交易TPS、交易平均响应时间、平均CPU消耗、I/O消耗,各PACKAGE占比消耗等。两类指标在进行性能调优定位问题时都要关注,但硬性指标主要应用于与生产环境资源差异性较大,且资源使用不稳定的单元、组装和功能测试环境性能问题的定位,而动态指标主要用于性能测试阶段和系统投产运行问题的定位。
指标建立需要精细化、多维度。精细化是指尽量把指标设置到能够采集的不同业务场景的最小粒度。多维度是指建立一整套具有层次性、广泛性的多维度基线,其中层次性是指从系统架构到交易再到程序运行的每个环节的层次架构体系,为性能设计和调优提供完整的、关联性的指标依据;广泛性是指不仅涉及到应用系统的性能指标,还需要建立相关运行平台和使用中间件的指标,作为性能调优分析和解决问题的依据。当前核心系统重点指标为:核心系统整体指标、CICS、DB2的系统指标、重点交易指标、重点程序指标、重点数据表指标、I/O指标等。
图3-1 核心银行系统指标体系
3.2 高效的辅助调优分析工具
大型银行系统架构庞大,影响因素复杂,性能指标覆盖范围广泛,传统人工分析不仅效率低下,且较难第一时间发现并定位问题,风险不可控。因此,为能够大大提高系统调优分析的全面性、准确性和时效性,高效辅助调优分析工具的开发和使用就成为必须。
在不断的探索和积累的过程中,中国银行核心银行系统结合其自身的特点,自主研发了一系列专门用于调优数据分析的工具:
数据库访问路径自动化分析工具:在调优过程发现,核心系统的性能问题往往是由于某些SQL的访问路径不合理(或因统计数据)造成的。应用程序中的SQL语句成千上万,为快速准确地定位到访问路径较差的SQL,我们自主开发了“访问路径差异分析报表工具”,可自动识别访问路径较差的SQL,帮助性能调优人员快速定位问题。
核心系统批量监控平台:监控平台通过收集核心系统每日批量的执行信息,能够生成批量运行趋势、作业执行关键路径及变化、时间窗口资源消耗排名、波动分析等数据。根据这一平台提供的信息,可以反映批量功能的容量能力使用情况,为性能调优发现风险点提供量化的数据基础。
交易性能收集数据TRACE的解析工具:调优的过程需要分析大量的性能指标数据,人工分析效率低下,无法及时发现性能瓶颈,针对此问题,特别开发了针对性能监控工具采集数据的解析对比工具,可以实现两个不同测试场景的快速解析和比对,形成差异分析报告,提高调优人员发现瓶颈点的效率。
4
专业化调优队伍
为持续提升系统优化的专业化水平,我们组建了由多名不同方向的专业人员组成的调优队伍。队伍成员熟悉应用系统架构和部署、交易运行逻辑和各类资源使用情况,同时又熟悉数据库的访问原理,可熟练使用各类性能调优工具、性能指标采集工具和分析工具等,主要负责每个任务的场景分析、调优设计、性能数据分析调优等工作。
专门的调优队伍能够更全面、更深入地分析系统性能瓶颈,有效的保证了调优的完备性、有效性。
中国银行核心银行系统近几年来以全生命周期性能调优理论为指导,全面开展优化工作,取得显著的成绩。通过应用优化,在核心系统日均整体交易量增加3.3倍,最高TPS(交易量/秒)增长4倍的情况下,单笔交易的平均响应时间降低了38%,CPU消耗降低了30%,有效提升了客户使用体验,减少了维护运营成本。
金融服务是现代社会健康发展的血液,是经济建设的强有力保障,这也意味着商业银行需要肩负着更多的社会责任和担当。服务优化道阻且长,“打造优质产品,提供高效服务”是每一个银行人都将不断追求,并为之不懈努力的目标。中国银行在未来愿为我国的金融事业发展做出具有中行智慧的更多贡献!
撰稿:开发一部
编辑:办公室
以上是关于大型应用系统性能调优的探索与实践的主要内容,如果未能解决你的问题,请参考以下文章