最近一年来一直做MS的一个产品的测试工作,结合之前的开发经验,谈一谈对大型软件产品的性能,可伸缩性和稳定性的看法。
我先来简单定义一下这三个概念:
性能就是执行任务的时间,任务执行的越快,性能就越好。
可伸缩性就是一个系统能够在同一时间内执行任务的数目,一般体现在系统能够支持的用户数目上,HP的LoadRunner是一个很好的测试工作。
稳定性体现在一个系统在使用的时候会有多少Error和Exception,越少则系统越稳定。
这三个属性是衡量一个系统的重要指标,它们互相影响,相辅相成。
性能不佳会影响可伸缩性
性能不佳意味着执行一项任务要花费更长的时间,这样当多个用户同时使用该系统的时候就会需要更多的共享资源,比如DB,从而减少了系统的可伸缩性。
性能不佳会影响稳定性
性能不佳意味着执行一项任务要花费更长的时间,这样就会增加更多用户同时使用该系统的可能性,这样会增加死锁和资源冲突的可能性,从而增大产生Error和Exception的几率。
可伸缩性不佳会影响性能
可伸缩性不佳就是说系统能够同时运行的任务数目比较少,这样如果有大量的任务就不得不通过排队来完成,这样性能就会下降。
可伸缩性不佳会影响稳定性
可伸缩性不佳意味着对系统的请求大于系统能够承受的能力,这时候系统有两个选择,把请求排队或者拒绝请求,拒绝请求一般会导致比较坏的用户体验,试想一下,如果你浏览一个网站却被告知这个网站打不开,你以后还会浏览这个网站吗?排队请求就会导致系统性能下降,从而会影响系统的稳定性。
稳定性不佳会影响性能
稳定性不佳意味着三件事情,
第一:错误会在系统中传递,从而增加CPU和内存的消耗。
第二:程序如果执行到一半出现了错误就会需要而外的逻辑处理这些错误,或者回滚到执行之前的状态,这些额外的逻辑或者回滚无疑会增加系统资源的消耗。
第三:当用户进行操作得不到想要的结果,一般会重新试一次,这样会加重对性能的影响。 稳定性不佳会影响可伸缩性稳定性不佳就会消耗更多的资源,这样用于支持可伸缩性的资源就会减少,从而最终影响能够支持的用户数量。
这给我们什么样的启示呢?
第一:在架构系统的时候设置这些系统属性的目标,在测试的时候确保完成了这些目标。
第二:这系统开发周期里尽早的发现这些性能,可伸缩性,稳定性问题,发现的越早,修复的代价越小。
QQ:281286841 本人对这方面比较关注,有兴趣的读者可以多多交流。