透过性能优化看系统架构的合理性.docx

? ? ? ? ? ? ? 透过性能优化看系统架构的合理性 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 本文首发于一年多以前,由当时十位民生银行的数据库专家合著,系统地从架构的角度对数据库性能问题进行分析解读,是多年项目开发和运维工作的经验总结。 综述 本文尝试在软件系统架构的众多组成部分中突出的讨论性能问题,尤其是数据库有关的性能问题。从架构的角度对这些数据库的性能问题进行评估,试着在架构的设计中找到答案。 首先我们会简单的认识一下何为架构、架构如何重要,在架构的通用语义中如何考虑性能问题,如何建立起性能模型。 接着,我们会深入的讨论数据库中的性能问题:性能模型的考虑、影响性能的各种因素、性能调优的原则和方法等等。 最后我们通过四个很有价值的实例,讨论了性能问题的发生和解决的方法。 1?架构 1.1 什么是架构 不论是不是真的理解架构或精通架构,每个从事软件系统实现这一工作的人员,肯定在自觉或不自觉的完成了设计或实现一个架构。也就是架构作为软件系统的灵魂,套用一句流行语:不管你认识或者不认识架构,架构就在那里,不可改变。就像建筑行业一样,不论建房之前是否有一个设计图纸,只要是建筑物,就不可避免的存在一个建筑架构,而且建筑物的特点、质量、功能都取决于这一架构。软件系统亦是如此。 本文引入架构这一概念,并非专门探讨架构这一主题,因此下面借鉴两个比较权威的架构定义,有兴趣深入的读者可以研究其相关内容。 IEEE 1471的定义为:架构是在组件,彼此间和与环境间的关系,引导设计发展原则中体现的系统的基本结构。 系统是为实现某个(些)特殊作用的组件的集合。 专用系统包括个人应用,传统概念上的系统,子系统,系统中的系统,产品线,产品系列,整个企业和其他利益集团。一个系统是为了实现一个或多个任务而存在。 环境决定了开发,操作,策略和其他影响系统的设置和条件。 任务是指系统为了实现对对象设置的使用或操作。 涉众是对于系统有利益关系或关注的个人,团队或组织。 卡内基梅隆大学软件研究所的定义为:软件架构是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。 下面我试着列出了在不同角度体现出的影响架构的因素。 影响架构的因素1:在软件系统生命周期的各阶段,影响架构的因素有如下图所示的各个方面 影响架构的因素2:从不同需求层次出发,影响架构的因素有如下图所示: 1.2 架构的重要性 上面在提到关于建筑这一示例时,尽可以体现架构对于建筑的重要性,如无合理的架构,建筑物就存在坍塌的危险。同理,在软件系统中,如果架构存在缺陷,则一样会影响软件系统正常功能,甚至是整体系统的生命。因此架构在软件系统中重要性是毋庸置疑的。 所以我们在建设一个软件系统时,绝对有必要事前建立一个合理的、高效的架构。这也是软件系统的核心角色:架构师的重要职责。 2?架构设计中的性能模型 架构的组成是多样的,相应的每一部分都很重要,而本文将会集中讨论架构中性能问题。最后会落实到数据库的性能问题。 作为软件系统非常重要的一项指标,性能不避免的成为架构设计中非常重要的一环,架构是由很多不同层次的组件组成的,具体到性能的设计,每个组成架构的组件,都会有不同角度的体现,为了从架构的角度和范畴来统一的规划和设计性能,目前比较普遍采用的方法是在设计架构时,同时规划或设计一个性能模型。由性能模型来指引和管理整个架构范围内的性能问题。 性能模型需要达成的目标如下: 管理性能相关的风险: ·将业务目标映射至性能目标 ·平衡性能与质量之间的关系 ·标识和分析典型性能场景 ·拟定具体指标和测试案例 ·评估模型并确保最终能实现性能目标 为了更好的表现性能模型,性能模型表现形式主要分为两类: ·一套结构化的信息,用于描述性能相关的各种元素。 ·一套过程,用于定义、获取上述的信息和处理方法。 为了实现性能模型的目标,性能模型应该包含如下的内容: ·关键程序路径及对性能的影响 ·如何利用计算资源及这些计算资源对性能的影响 ·最常用的代码或模块 ·访问关键资源的方法及资源竞争的解决 ·代码或模块的访问关系,标识本地与远程的不同 ·在性能实现中性能的折中 ·同步调用与异步调用的评估 ·梳理耗资源较高(I/O,CPU,MEM等)功能或模块 ·定义各性能目标的优先级别 ·性能目标对设计的影响 模型中对性能信息的描述可以参考下面的内容: ·根据业务确定系统的响应时间和各种资源的利用率目标 ·确定最终的部署环境(包括各种软

文档评论(0)

1亿VIP精品文档

相关文档