参考文献

流量削峰

  • 流量削峰的目的是在流量突增时,通过平滑处理请求,避免系统被过高的瞬时负载击垮.

  • 开发层面:

    • 限流,可以对每秒、每分钟、每小时等时间窗口内的请求数进行限制,避免短时间内请求量过大导致系统过载
    • 队列处理:对于瞬时流量过高的请求,可以使用 消息队列(如 KafkaRabbitMQ)将请求异步处理.请求先入队列,后台系统根据处理能力逐步消费队列中的任务.
    • 请求排队与优先级调度:通过 线程池优先级队列 控制处理请求的优先级,对于非关键请求,可以将其排队等待
  • 运维层面

    • 通过 NginxHAProxy 等负载均衡工具,均匀分配请求到不同的后端服务节点,避免单点压力过大.
    • 在流量突增时,通过 自动扩容(Auto Scaling) 技术,动态增加处理节点(如 Kubernetes 自动扩容、AWS EC2自动扩容等).

延迟响应

  • 在高并发系统中,当无法快速处理某些请求时,通过延迟响应可以缓解系统的压力并防止系统崩溃.
  • 开发层面
    • 异步处理:对于不需要立即返回的操作,使用异步处理,如使用 Java CompletableFutureSpring Async.将请求交给后台线程去处理,减少主线程的负载.
    • 后台任务与队列:使用消息队列(如 RabbitMQKafka)将任务异步化,在响应中返回“处理中”提示,让用户感知到操作正在进行,后台继续执行.
    • 返回延迟的提示:如果请求需要时间较长(如计算密集型操作),可以提前告诉用户大概的等待时间,并且给出 进度条轮询查询 接口.
  • 运维层面

体验降级

  • 体验降级是指在系统过载或资源紧张时,主动选择降级某些功能,保证核心功能的正常运行,以提供基本的服务和稳定的用户体验.

  • 开发层面

    • 功能降级:根据系统的健康状况或负载,选择性地关闭一些次要或不必要的功能.例如,关闭一些非核心业务功能,或者返回简化版的数据:

      • API 降级:在外部 API 请求失败时,返回默认值或简化响应.
      • 功能开关:通过配置中心(如 ApolloSpring Cloud Config)在系统负载过高时禁用某些功能.
    • 缓存回退:对于一些可缓存的数据,使用 缓存回退机制,在数据获取失败时返回缓存中的数据,而不是直接失败.比如,采用 HystrixResilience4j 实现熔断和回退策略.

  • 运维层面

过载保护

  • 过载保护旨在避免系统过载,防止服务崩溃或无法响应,确保系统的稳定性和可靠性。
  • 开发层面
    • 熔断器(Circuit Breaker):使用熔断器模式,当服务调用出现连续失败时,熔断器会中断请求流,避免进一步增加系统负担。例如使用 HystrixResilience4j 实现熔断保护。

请求合并