1.2 系统如何支撑高并发
从一个完整的架构来考虑,一个架构整体支撑的并发数无非就是由硬件和软件两个方面来决定的,当然最根本的还是硬件性能,软件的本质是最大限度地利用硬件资源来完成计算工作。
而硬件的组成无非就是CPU、网卡、带宽、内存、磁盘等。所以对性能提升来说,关键是要提升硬件的基础性能,比如CPU核心数由16核增加到32核、网卡升级到万兆字节、使用更高效的SSD硬盘、扩大内存等。
有了硬件作为基础,软件方面就可以有更多的发挥空间,比如对于I/O性能要求较高的场景,可以尽可能使用内存来存储,而内存足够大的情况下,可以把更多的数据存到内存,减少和磁盘的交互以提升I/O性能。对于运算性能较高的场景,可以采用多线程的方式来处理。CPU核心数越多,并行计算的性能就越高。
当单个计算机的硬件资源达到瓶颈时,就可以采用水平扩展的方式来提升性能。所谓水平扩展就是横向增加服务器,利用多个计算机资源组成一个分布式计算机,也就是我们熟知的分布式架构体系。但是架构由单体变成分布式之后,整个系统的复杂度会增加,比如涉及服务治理、服务监控、服务高可用等。
对于一个高并发的应用,系统架构最核心的问题就是如何让更多用户在最短的时间内获得想要的信息及完成想要的操作,对于这个过程一般用RT(Response-Time)作为衡量指标,RT的数值大小反映了整个系统的快慢,因此本质上还是和硬件资源瓶颈有关系。
当然,在软件系统层面还有一些其他优化方案。
• 使用集群化部署,通过多个计算机节点来分摊请求流量,从而降低单节点的计算瓶颈,最终达到提升性能的目的。
• 对于某些特定场景,采用多线程异步执行的方式进行优化,简单来说就是服务端针对当前请求先返回一个正在处理中的标识,让用户先收到返回结果,然后服务端这边异步运行该任务,当任务处理完成后再发给用户一个通知。
• 引入缓存机制,减少应用直接和数据库之间的交互及计算工作,提升I/O性能,使得客户端能够更快地收到任务的执行结果。
• 通过CDN(内容分发网络)让用户访问最近的节点来获得需要的内容。
总之,系统支撑多少并发的决定因素非常多,而线程是最基础、最重要的机制,因为它能够利用多核CPU机制来提升程序的计算速度。