小谈系统性能优化

小谈系统性能优化

谈起性能优化,我也是老调重弹,尽管相关文献满天飞,但是都是具体到某一软件、产品的优化。是不是有比较通用的优化策略、方法,能够帮助我们系统地考虑问题,这个想法一直困扰着我。经过几年的积累,我也小有心得,拿出来和朋友们共享。

要进行性能优化首先得弄清什么是性能优化?

我觉得确切的提法应该是系统的性能优化。首先要有系统的观念,系统是一个整体,所谓此消彼长,如果你要进行优化,那你就要付出代价,系统结构进行调整,处理方式进行改变,存储方式进行修改,你要划分额外的时间,金钱。目前我们经常谈的性能优化都是系统运行时间的优化(系统响应时间)。即在最短的时间内给出用户反馈结果。但我认为系统的优化应该是在两个维度上进行的(时间、空间)或者说是对资源的占用角度来看待问题。例如;系统响应时间、系统的运行时间、系统的稳定运行时间、系统内存占用、存储空间占用等等。其次,要有折衷的观念。系统的优化要进行合理的取舍,要在各个相关因素之间取得平衡。我们不可能为了系统提高1um,花费几人年的工作(除非你认为是值得的),任何项目都讲投资回报率的问题,经济因素是非常重要的。

 那究竟什么是系统性能优化。我觉得:是在系统不改变对外提供功能的前提下,通过软硬件的改进,达到预期优化目标的过程。这个定义与重构的定义非常类似,性能优化也是重构要解决的一个问题。只不过,目前的重构主要的研究方向都集中在代码结构的组织上,倡导可扩展可重用的通用设计规范。而这种通用性又导致性能优化难度的增加。 原则让测试说明问题,让测试检验结果。通过测试找到系统的瓶颈,通过测试来检验优化的效果。这是一个循环往复的过程。要求我们的系统有很好的可测试性。测试粒度的选择与发现问题手段,解决问题的能力密切相关。

 如何组织系统性能优化过程? 目前通常有这样的三种过程: 1,单元控制。每一个模块单元在设计、实现过程中都要严格遵守优化指标,通过这种有限元的方式保证系统总体的优化效果。嵌入式系统的开发通常采用这种方式。因为他对时间、空间都很敏感。 2,让设计实现人员在工作中自己去把握。这种方式对个人能力要求很高,不适合大规模软件的开发过程。 3,先不管系统性能优化的问题,直到性能问题变成了真正的问题再去解决。这种过程通常是用于时间不敏感的系统。 大家也看得出来,采用何种优化过程,其关键是由系统的特点决定的。

系统性能优化的方法有哪些呢?

毫无疑问应当从软硬两方面下手:

硬件方法:

通过系统硬件的垂直扩展、水平扩展性两方面对系统硬件进行升级。由于目前系统硬件价格持续走低,这种方法带来的效果是非常明显的。这种方法不是我要讨论的重点,如果有兴趣,可以去查找相关的资料,这方面的资料很充分的。如果必要可以将一部分的软件功能以硬件的方式来实现。

软件方法:

1,算法的改进。任何科学只有通过数学的方法进行描述,那么它才能够算得上科学。任何学科解决问题的复杂程度,取决于他对数学知识的利用程度。计算机科学也毫无例外,算法的改进,是系统优化的原始推动力。算法是IT的核心技术。你可以看到国内许多的公司现在所面临的尴尬境地。

2,系统功能的优化。功能消减我曾经参与过一个系统,他的一个处理过程又非常复杂的处理逻辑,正是这个逻辑消耗了大量的处理时间。是不是我们可以少完成一部分功能呢?你一定会说:不行。这个是写在客户需求说明书中的。其实并没有什么绝对不变的需求。我当时的做法是将这个复杂的过程中对用户不是非常要的功能去掉,简化逻辑,当然这需要很多与客户沟通的技巧。有人做过统计,如果你少完成了系统20%的功能,你的效率就可以提高50%。我不知道这个数据的准确性,但我相信这20%的功能如果是在你的处理的关键路径上至少可以提高20%的效率。功能调整计算机是将人类的日常活动自动化,但绝不是对过程完全再现,计算机之所以在今天占据很重大的位置,是因为它改变了我们日常的工作方式,生活方式。我们要做的是按照计算机的方式看待这个世界,看待这个世界浮华表面下面真正关注的东西。我曾经做过一个工作流系统,各个部门出于各自的目的都想按照自己的目的设定流程。太多的特例存在的系统,是无法优化的。我建议他们优化系统的功能,对特例进行特殊化处理。毕竟通用的流程占他们工作的90%。我也可以对这90%的工作进行优化。

3,系统结构的调整系统结构的调整涉及到许多设计架构方面的问题。对于架构的调整的可能性微乎其微。因为我们之所以做成架构就是希望这部分内容是能够在一定时期内不变的。所以我们作结构时,就要充分考虑到架构的适应能力。尽管,我们有N-Tiers结构可供选择,但系统的特点将使我们选择技术构架的主要决定因素。面向对象为我们提出的层次划分是一把双刃剑。作为一个项目的设计人员,有很多的问题值得研究。例如:架构层次,加载方式,处理过程等等。

4,数据的优化在企业级应用程序设计中数据存储将占用大量的数据,目前大部分系统都是基于数据库的,不论是文件数据库,关系数据库也好。数据资源的占用与协调都是一个大课题。关于数据库我们主要考虑优化的的是:数据处理方式(例如:先加载后处理,边加载边处理),加载方式(全部加载,部分加载,加载尺寸),数据的重复利用率,数据的有效性(当数据发生修改时),数据一致性(多用户并发),检索的方便性(冗余数据),数据的存储结构(原数据/类型划分) 。

关于关系型数据库优化,我会在以后的时间里,为大家整理。欢迎大家指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值