Server性能提升趣谈

来源:互联网 发布:网络协同是什么意思 编辑:程序博客网 时间:2024/05/29 16:30

问题一,你有一个service, 对外提供两个接口,operationA需要执行20ms, operationB需要执行200ms, 然后可以将operationA的性能从20ms提升到18ms, 将operationB的性能从200ms提升到180ms. 如果我们只能提升一个,我们提升哪个呢?


从现在的信息来看,我们可以去将operationB提升到180ms,因为这样节省的时间是20ms大于A的2ms。但是如果我告诉你,根据分析operationA和operationB的被调用次数不一样,operationA的TPS是50,operationB的TPS是1, 你决定提升哪个呢?


因为:50*2ms > 1*20ms, 所以我们决定提升A的性能。那么现在如果告诉你提升A的性能需要的effort是20个man-week,而提升B的性能需要的effort是1个man-week, 你提升哪个呢?

根据ROI(Return On Investment)的话:

ROI(A): 50*2ms/20man-week = 5ms/man-week

ROI(B): 1*20ms/1man-week = 20ms/man-week

显然B的投入产出比更高,我们决定提升B的性能而不是A。


所以我们在解决问题的时候,一定要跳出自己的思维定势,要从宏观出发,找到bottleneck,然后按照优先级来决定我们先决定哪些问题,后解决哪些问题,不解决哪些问题,因为资源有限,可以利用剩余的资源做一些更重要的事情上。


问题二,根据性能报告,发现升级完应用程序后的性能比升级完应用程序的性能差很多。用控制变量法我们现在很容易的知道是因为升级了应用程序造成的。但是一定是应用程序的性能更差导致的吗?


答案是不一定的,有可能是因为应用程序的性能更好导致的。为什么这么说呢?比如你的应用程序后边连接了数据库,之前的数据库已经快over-loaded了。然后升级了应用程序之后,因为性能更好了,所以可以有更多的并发操作同时执行了,然后这些更多的并发操作就同时对数据库进行操作了,因为数据库本身就已经达到最大负载了,这时候更多的负载将超出数据库可以承受负载,最终导致性能恶化,使得每一个请求时间都比之前的长,从而导致整体的系统性能变差。

原文:http://blog.csdn.net/hongchangfirst/article/details/69400441

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst



0 0