在衡量一个系统性能时,一定要有可量化的指标,无法量化就无法有效的优化系统性能。系统每秒可以承载多大请求量,每个请求的响应时间,并发数都是衡量一个系统的关键性能。
吞吐量
吞吐量指的是单位时间内的事务处理数。在衡量系统性能一直作为一个经典和重要的指标,适用于多用户的交互式应用,比如Web服务器的多用户访问和数据库的多请求操作。常用的测试单位是每秒事务数(TPS)或者每秒请求数(QPS)。
事务和请求
用户一个完整有意义的操作。比如,对于Web服务器,用户对某一个页面的一次请求,用户对某系统的一次登录,用户对商品的一次确认支付过程;对于数据,一次查询、修改、新增、删除。这些我们都可以看作一个事务或者请求。
响应时间或者延迟
这个指标用于事务所需的整体时间。根据具体的应用,测试的时间单位可能是微秒、毫秒、秒或者分钟。根据不同的时间单位计算出平均响应时间、最小响应时间、最大响应时间和所占百分比。最大响应时间通常意义不大,因为测试时间越长,最大的响应时间也可能越大。而且其结果通常不可重复,每次测试都可能得到不同的最大响应时间。因此,通常使用百分比响应时间(percentile response time)来替代最大响应时间。例如,如果95%的响应时间都是5毫秒,则表示95%的请求都可以在5毫秒之内完成。
并发性
Web服务器的并发性更准确的度量指标,是在任意时间有多少同时发生的并发请求。 而且,Web服务器的并发性也不等同于数据库的并发性,而仅仅只表示会话存储机制可以处理多少数据的能力。
Web服务器的高并发,一般也会导致数据库的高并发,但服务器采用的语言和工具集对此都会有影响。注意不要将创建数据库连接和并发性搞混淆。一个设计良好的应用,同时可以打开成百上千个MySQL数据库服务器连接,但可能同时只有少数连接在执行查询。所以说,一个Web站点“同时有50000个用户”访问,却可能只有10~15个并发请求到MySQL数据库。
可扩展性
简单地说,可扩展性指的是,给系统增加一倍的工作,在理想情况下就能获得两倍的结果(即吞吐量增加一倍)。或者说,给系统增加一倍的资源(比如两倍的CPU数),就可以获得两倍的吞吐量。当然,同时性能(响应时间)也必须在可以接受的范围内。大多数系统是无法做到如此理想的线性扩展的。随着压力的变化,吞吐量和性能都可能越来越差。 可扩展性指标对于容量规范非常有用,来帮助发现应用的瓶颈。
吞吐量、响应时间和并发数的关系
三者推导公式: QPS(TPS)= 并发数/平均响应时间
从上面的公式推出,只要不断增大并发数,平均响应时间保持不变下,系统的吞吐量将不断增大。但是受限于系统硬件、软件等硬性条件,当并发数不断增大,并发线程的上下文切换次数和内存空间使用将越来越多,反而导致请求排队等待,最终增大响应时间,整体而言对于吞吐量的提升帮助不大,甚至会降低吞吐量。所以系统吞吐量有一个相对极限值,此时不断增大并发数,反而降低吞吐量。
当系统吞吐量到达一个峰值,如果系统具备可扩展性,横向扩展服务器,将可以应对更多的并发数,提升集群的吞吐量。