高并发问题
系统架构中高并发指的是同时处理大量请求的能力。
我们所说的高并发指两方面,第一个方面指的是同一时刻有大量的请求访问系统 第二个方面指的是有大量的请求在一个时间段内访问系统。
一般时间段有个指标,是一秒内能处理的请求数量。
解决高并发:
(1) 机器方面:
纵向:
首先,应该是提升机器的性能,提升硬件。单机性能,比如从8核提升大16核,从8G提升到16G。但是这种方式提升毕竟有限。
横向:
我们可以通过部署多台服务器来分担压力,这就需要负载均衡的帮助。同时要求你的程序需要支持负载均衡方式的部署。比如引入redis来统一存储session。
如果单机能承载的请求能力有限,远远打不到上限怎么办?
★ 数据库方面~~~缓存
我们需要解决一些性能瓶颈问题,比如数据库,大部分应用的瓶颈都在数据库,所以我们一般会采用读写分离、分库分表,多从架构等方式提升数据库的能力。
因为数据库毕竟是对磁盘的操作速度远远慢于cpu运转的速度,所以我们需要将数据尽可能的存储到内存中。虽然内存的速度也是慢于cpu速度,但是远远大于磁盘的速度。这时候就需要引入缓存机制。这就是大家最常用使用的手段。
先访问缓存,缓存没有再访问数据库,然后存入缓存。
(3)其他解决方案:
比如CDN,我们将静态资源放入CDN中加快访问,并且不消耗应用服务器的性能。
比如搜索使用es
比如系统架构设计使用微服务架构,将系统进行拆分,每一个模块独立部署,网关集群化、组件集群化等等思路。
(4) 代码方面:
多线程的方式,提高系统处理能力,
通过连接池(线程池)的方式降低数据库连接,远程调用连接频繁创建的开销。
当同一时刻有资源竞争的情况,即线程安全问题,这时候可以使用分布式锁,使用分布式锁是为了适应集群环境,当然有时候锁的方式会影响性能。同样可以使用mq的方式来避免锁的使用。
本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/16548570.html