性能测试除了为获取性能指标外,更多是为了发现性能问题和性能瓶颈,然后针对性能问题和性能瓶颈进行分析和调优。在当今互联网高速发展的时代,结合传统软件系统模型以及互联网网站特征,性能调优的模型可以归纳总结为如图1-5-1所示的知识框架。
图1-5-1
系统模型中相关的组件说明如下:
(1)网络分发:网络分发是高速发展的互联网时代常用的降低网络拥塞、快速响应用户请求的一种技术手段,最常用的网络分发就是CDN(Content Delivery Network,即内容分发网络),它依靠部署在世界各地的边缘服务器,通过中心平台的负载均衡、源服务器内容分发、调度等功能模块,使世界各地用户就近获取所需内容,而不用每次都到中心平台的源服务器获取响应结果。比如,南京的用户直接访问部署在南京的边缘服务器,而不需要访问部署在遥远的北京的服务器。
(2)Web服务器:Web服务器用于部署Web服务。Web服务器负责请求的响应和分发以及静态资源的处理。
(3)Web服务:Web服务指运行在Web服务器上的服务程序。最常见的Web服务就是Nginx和Apache。
(4)Web Cache:Web Cache指Web层的缓存。一般用来临时缓存HTML、CSS、图像等静态资源文件。
(5)应用服务器:应用服务器用于部署应用程序,如Tomcat、WildFly、普通的Java应用程序(如jar包服务)、IIS等。
(6)应用程序服务:应用程序服务指运行在应用服务器上的程序,比如Java应用、C/C++应用、Python应用。一般用于处理用户的动态请求。
(7)应用缓存:应用缓存指应用程序层的缓存服务,常用的应用缓存技术有Redis、Memcached等,这些技术手段也是动态扩展的高并发分布式应用架构中经常使用的技术手段。
(8)数据库(DB):用于数据的存储,可以包括关系数据库以及NoSQL数据库(非关系数据库)。常见的关系数据库有MySQL、Oracle、SQL Server、DB2等,常见的NoSQL数据库有HBase、MongoDB、ElasticSearch等。
(9)外部系统:指当前系统依赖于其他的外部系统,需要从其他外部系统中通过二次请求获取数据,外部系统有时候可能会存在很多个。
图1-5-1中所示的系统模型,是一个互联网中常见的用户请求的分层转发和处理的过程。这个性能调优就是不断采集系统中的性能指标,以及系统模型中各层的资源消耗,从中发现性能瓶颈和性能问题,然后对瓶颈和问题进行分析诊断来确定性能调优方案,最后通过性能压测来验证调优方案是否有效;如果无效,则继续重复这个过程进行性能分析,直到调优方案有效,瓶颈和问题得到解决。这个过程一般非常漫长,因为很多时候性能调优方案往往不是一次就能有效,或者一次就能解决所有的瓶颈和问题,或者一次就解决了当前的瓶颈和问题,但是继续执行性能压测又可能会出现新的瓶颈和问题。