解决方案-汇总
参考文献
流量削峰
-
流量削峰的目的是在流量突增时,通过平滑处理请求,避免系统被过高的瞬时负载击垮.
-
开发层面:
- 限流,可以对每秒、每分钟、每小时等时间窗口内的请求数进行限制,避免短时间内请求量过大导致系统过载
- 队列处理:对于瞬时流量过高的请求,可以使用 消息队列(如 Kafka、RabbitMQ)将请求异步处理.请求先入队列,后台系统根据处理能力逐步消费队列中的任务.
- 请求排队与优先级调度:通过 线程池 和 优先级队列 控制处理请求的优先级,对于非关键请求,可以将其排队等待
-
运维层面
- 通过 Nginx、HAProxy 等负载均衡工具,均匀分配请求到不同的后端服务节点,避免单点压力过大.
- 在流量突增时,通过 自动扩容(Auto Scaling) 技术,动态增加处理节点(如 Kubernetes 自动扩容、AWS EC2自动扩容等).
延迟响应
- 在高并发系统中,当无法快速处理某些请求时,通过延迟响应可以缓解系统的压力并防止系统崩溃.
- 开发层面
- 异步处理:对于不需要立即返回的操作,使用异步处理,如使用 Java CompletableFuture 或 Spring Async.将请求交给后台线程去处理,减少主线程的负载.
- 后台任务与队列:使用消息队列(如 RabbitMQ 或 Kafka)将任务异步化,在响应中返回“处理中”提示,让用户感知到操作正在进行,后台继续执行.
- 返回延迟的提示:如果请求需要时间较长(如计算密集型操作),可以提前告诉用户大概的等待时间,并且给出 进度条 或 轮询查询 接口.
- 运维层面
体验降级
-
体验降级是指在系统过载或资源紧张时,主动选择降级某些功能,保证核心功能的正常运行,以提供基本的服务和稳定的用户体验.
-
开发层面
-
功能降级:根据系统的健康状况或负载,选择性地关闭一些次要或不必要的功能.例如,关闭一些非核心业务功能,或者返回简化版的数据:
- API 降级:在外部 API 请求失败时,返回默认值或简化响应.
- 功能开关:通过配置中心(如 Apollo 或 Spring Cloud Config)在系统负载过高时禁用某些功能.
-
缓存回退:对于一些可缓存的数据,使用 缓存回退机制,在数据获取失败时返回缓存中的数据,而不是直接失败.比如,采用 Hystrix 或 Resilience4j 实现熔断和回退策略.
-
-
运维层面
过载保护
- 过载保护旨在避免系统过载,防止服务崩溃或无法响应,确保系统的稳定性和可靠性。
- 开发层面
- 熔断器(Circuit Breaker):使用熔断器模式,当服务调用出现连续失败时,熔断器会中断请求流,避免进一步增加系统负担。例如使用 Hystrix 或 Resilience4j 实现熔断保护。
请求合并
https://www.holelin.cn/2024/12/17/solutions/%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88-%E6%B1%87%E6%80%BB/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!