天天看点

高并发问题

系统架构中高并发指的是同时处理大量请求的能力。

我们所说的高并发指两方面,第一个方面指的是同一时刻有大量的请求访问系统 第二个方面指的是有大量的请求在一个时间段内访问系统。

一般时间段有个指标,是一秒内能处理的请求数量。

解决高并发:

(1) 机器方面:

纵向:

首先,应该是提升机器的性能,提升硬件。单机性能,比如从8核提升大16核,从8G提升到16G。但是这种方式提升毕竟有限。

横向:

我们可以通过部署多台服务器来分担压力,这就需要负载均衡的帮助。同时要求你的程序需要支持负载均衡方式的部署。比如引入redis来统一存储session。

如果单机能承载的请求能力有限,远远打不到上限怎么办?

★ 数据库方面~~~缓存

我们需要解决一些性能瓶颈问题,比如数据库,大部分应用的瓶颈都在数据库,所以我们一般会采用读写分离、分库分表,多从架构等方式提升数据库的能力。

因为数据库毕竟是对磁盘的操作速度远远慢于cpu运转的速度,所以我们需要将数据尽可能的存储到内存中。虽然内存的速度也是慢于cpu速度,但是远远大于磁盘的速度。这时候就需要引入缓存机制。这就是大家最常用使用的手段。

先访问缓存,缓存没有再访问数据库,然后存入缓存。

(3)其他解决方案:

比如CDN,我们将静态资源放入CDN中加快访问,并且不消耗应用服务器的性能。

比如搜索使用es

比如系统架构设计使用微服务架构,将系统进行拆分,每一个模块独立部署,网关集群化、组件集群化等等思路。

(4) 代码方面:

多线程的方式,提高系统处理能力,

通过连接池(线程池)的方式降低数据库连接,远程调用连接频繁创建的开销。

当同一时刻有资源竞争的情况,即线程安全问题,这时候可以使用分布式锁,使用分布式锁是为了适应集群环境,当然有时候锁的方式会影响性能。同样可以使用mq的方式来避免锁的使用。