层级
| 类型
| 问题
| 描述
|
应用层
| 性能下降
| 响应时间增加
| 当系统无法处理高并发请求时,响应时间会显著增加,用户需要更长时间才能得到反馈
|
吞吐量降低
| 系统的整体吞吐量(每秒处理的请求数)会减少,无法充分利用硬件资源
|
数据库
| 锁争用和死锁
| 锁争用
| 在高并发环境下,多个事务可能同时争用相同的资源,导致锁争用问题,影响事务的执行
|
死锁
| 高并发情况下,多个事务可能相互等待对方释放锁,导致死锁,进而导致事务无法完成
|
数据不一致
| 数据竞争
| 高并发请求可能导致数据竞争问题,多个请求同时修改相同的数据,导致数据不一致
|
脏读、不可重复读和幻读
| 在高并发环境下,事务隔离级别不足可能导致脏读、不可重复读和幻读等问题,影响数据的正确性
|
服务层
| 资源耗尽
| CPU过载
| 高并发请求可能导致CPU使用率过高,影响系统的整体性能
|
内存耗尽
| 大量并发请求可能导致内存耗尽,尤其是在没有进行有效的内存管理和优化时
|
磁盘I/O瓶颈
| 频繁的磁盘读写操作可能导致磁盘I/O瓶颈,进一步影响系统性能
|
服务器崩溃
| 服务器过载
| 高并发请求可能导致服务器过载,最终导致服务器崩溃或宕机,无法提供服务
|
资源泄漏
| 未正确释放的文件句柄、数据库连接、网络连接、锁资源等会致系统性能下降,甚至系统崩溃
|
类型
| 方案
| 描述
|
限流
| 业务限流
| 根据具体业务场景进行限流,例如抢购前答题、活动过量时限购。
|
技术限流
| 使用算法在应用层面(API网关)进行限流,例如基于漏桶、令牌桶算法等限流。
|
异步
| 调度任务
| 先把数据暂存下来,定期或者特定条件下(闲时)进行批量的处理
|
消息队列
| 削峰:将瞬时高峰流量平滑处理,使得后台服务可以按照自己的处理能力逐步处理消息,从而避免系统崩溃
|
异步化:系统可以将需要长时间处理的任务(如视频、音频处理、数据分析等)异步化,避免主线程阻塞,提升系统的响应速度和用户体验
|
冗余
| 集群
| 负载均衡:通过多个服务器节点分担压力,避免单个服务器压力过载。不局限于API应用,也可以是数据库一主多从
|
故障转移:如果集群中的某个节点发生故障,负载均衡器可以将请求重新分配给其他健康节点,从而保证服务的连续可用
|
缓存
| 把热数据存放到高性能存储系统进行读写处理,以此降低数据库访问量,提高系统响应速度。
|
静态化
| 将动态产生的数据保存成静态文件,或者将固定计算规则数据事先计算好存放。从而降低系统的计算负荷和数据库访问压力。
例如 介绍页静态化、报表数据静态化。
|