代码改变世界

后端系统性能优化经验总结

2011-07-08 10:50  后端技术  阅读(1588)  评论(3编辑  收藏  举报

一、关于性能优化

      性能优化这个词其实还是蛮火的,很多时候都会听很多人说过需要对系统进行优化,恰好自己经历过一个系统的优化周期,还算是有点小小的心得。

      为什么要优化系统性能,这个问题大家都心知肚明的。对于公司而言,如果一台机器可以做以前两台机器的活,老板能不高兴嘛,公司成本降低了;

      对于程序猿而言,性能优化应该是展现价值的所在,在优化的过程中更能提升自己的核心竞争力。

二、性能优化的关键

      看过很多哲人说过:过早的优化是万恶之源。这句话自己还是有一点点体会的,什么算是过早的优化。首先就是对于整体系统不熟悉,就拿后端系统举例子,如果不能说出query从进入系统后一步一步的操作,到最终结果输出出去,这就不能叫熟悉系统;熟悉系统只是可以进行系统优化的一个小小的前提,除此之外还需要找出当前系统的瓶颈所在。

系统性能优化并不是东一榔头西一棒子的那种做法,那样做的后果是你付出了很多,可能最终得到的收益少的让你自己都不敢相信。比如大家都看过河水的流动,当遇到河道狭窄的时候,河水的流量就会受限,尽管狭窄段的前部和后端都是比较宽广的,这就是传说中的瓶颈,当然这也符合木桶理论。只有真正找到系统的瓶颈,针对瓶颈进行优化,你的工作才能得到最大的收益。当时自己针对系统瓶颈进行优化后,系统整体系统提升了3倍。

三、寻找瓶颈与解决瓶颈

      在了解了系统瓶颈的重要性之后,我们需要学习如何寻找瓶颈。自己的做法是先人肉寻找可能的系统瓶颈,包括通过经验大胆判断,查询日志等,等有了大致的结论后,再采用工具检查系统的瓶颈,两者结合验证,基本就可以确定瓶颈所在。

在自己的系统优化中也得到一些经验需要分享一下:

1. 将需要处理的数据尽量集中,这可以最大发挥高速缓存的作用。高速Cache的工作原理是保存CPU最常用数据,当Cache中保存着CPU要读写的数据时,CPU直接访问Cache。由于Cache的速度与CPU相当,CPU就能在零等待状态下迅速地实现数据存取。

2. 能离线处理数据就不要在线处理。例如事先将数据排好序,在查询的时候采用折半或是其他查找算法以提高效率。

3. 合理的采用应用Cache。程序中的存在Cache可以很大的提高系统性能,自己必须根据系统的特点选择动态Cache还是静态Cache。个人推荐能采用静态Cache就采用静态Cache。

4. 作为后端系统,更应该把自己看成服务的提供者,应该多为前端调用者着想,将更多的复杂的逻辑放在后端执行,最后提供给调用者的是最简单,最实用的结果。

四、写在最后

     系统性能优化可以做的工作有很多,自己也在不断的摸索和提升。当系统的性能能力完全满足很长一段时期的需要时,个人推荐不要再强行进行性能优化。过度的性能优化的结果可能是导致代码可读性的下降,而提高的性能对应调用者来说无关紧要。这时候可以更多的关注系统功能性的丰富和可靠性的提高等。

自己告诉自己:优化到一定阶段需要压制一下自己内心盈动的热情。