高性能Java架构:核心原理与案例实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 高并发

一台服务器放在桌面上,它的CPU和内存的生产厂家及型号是确定的。但是代码(应用程序)放置在这台服务器中,其性能再优化也不可能超过服务器自身的承载能力。程序员可以靠各种设计手段和实现方式让这台服务器速度更快一些。例如,应用程序的开发自然是进程内的快于进程外的,进程外的快于服务器外的(服务器交互),多节点的集群承载力和可用性高于单节点的,异步多线程的设计优于同步的设计等。

因为应用程序不可能超过服务器自身的承载能力,所以每秒几万、几十万,甚至上亿数值的TPS完全没有参考意义(TPS为系统吞吐量,通常TPS数值越大,表示性能越高)。在性能测试过程中,如果不考虑最大返回时间和占比,只考虑TPS数值,则几乎没有参考意义。

高并发(High Concurrency)的本质指通过设计保证系统能够同时并行处理大量请求。在高并发性能测试时,需要综合参考以下因素才能得到相对真实的TPS数值。

• 最大返回时间和最小返回时间。最大返回时间不要设置得太大,尽可能减少最大返回时间,即程序中要着重设计超时时间,否则一次7000~8000秒没有结束的HTTP请求会直接拉低整体的TPS数值。

• 错误率。错误率相当于错误总数除以样本总数,错误率超过0.05%即为不合格。错误率可根据项目进行浮动,若错误率高于预期,则需无视此次性能测试结果,并进行优化和再测试。

• 返回时间(分位值)。90分位值通常为理想的最终值。服务器最后的10%、5%、1%和0.1%分位值的响应时间有可能几十万倍大于50分位值的响应时间,在性能测试中,通常以90分位值作为大量用户的响应结果。

• 服务器的CPU、I/O、带宽和内存。硬件配置越好,性能越高。

• 服务器地址。例如,当服务器都在阿里云上时,还要看是否在一个大区,地址越远,响应速度越慢。外网慢于内网,内网慢于同一大区。

• 在高压测试时服务器是反应速度缓慢,还是直接崩溃。若服务器崩溃,则无视此次性能测试结果,并进行优化和再测试。高并发项目要有削峰结果,即当并发超高、压力超大时,允许单台服务器返回速度变慢,但尽可能不要崩溃。在集群架构中,某个服务器崩溃之后通常有其他可以运行的服务器接管,并且自动对崩溃的服务器进行重启。