思考篇:如何构建一个稳健的系统

最后更新: 2025-09-28, 作者: hao022

该文章借鉴了一位大神的思路,但更具总结性。 稳健系统定义:一个稳健的系统,在负载压力增大,甚至超出理论最大负载时依然能够保持稳定的线性输出。

基础概念

先了解如下概念:

  1. 最大吞吐:绝大数情况下,我们的服务不会处于最大吞吐状态,它只是昙花一现。高负载状态下随着时间的推移,服务的队列和延迟会无限增加。
  2. 持续吞吐:服务延迟可控状态的下的可持续的性能吞吐。
  3. 目标吞吐:根据真实服务负载评估出的用于扩容的吞吐量。

构造方法

围绕上面的概念,无论设计基础软件,业务软件,还是集群软件,均可做如下思考:

  1. 系统指标:健壮的系统应该具备完善的表征系统负载,资源水位的指标,如资源,组件,任务,性能,队列,请求延迟等
  2. 拒绝服务:一个健壮的系统能够实时表征自己的服务负载,资源状态。当这些指标当超出服务能力上限时,能够拒绝超出服务能力的请求,而不是让系统进入不可控状态。(想想那些雪崩的系统,无效的集群扩容。)
  3. 反馈机制:服务端和客户端之间要有反馈机制,客户端能够知晓后端的负载情况,调整自己的策略。(想想网络拥塞,无损网络,RPC 策略,分布式系统的 backoff。)

几种关系

  1. 吞吐和延迟:吞吐更容易表现一个系统的负载,然而背后的延迟指标,是保证系统持续服务的关键,只有延迟保持在一定的范围才能保证服务的持续性,即延迟要有边界,可收敛。
  2. 延迟和队列:队列能够平滑突增的流量,避免系统瞬间击垮。队列通过牺牲一部分请求来保障系统整体的稳定性和吞吐量。本质上队列将突发的高延迟风险转化为了可控的、可预测的排队延迟。
  3. 队列:队列本身有局限性,并不完美,否则就没有优先级,抢占,丢弃策略。另外任何系统都有队列,如果不存在则可能被转嫁到了客户端或者服务端。

HUATUO

在构建稳健系统过程中,HUATUO 能够让你看清应用性能表现。https://huatuo.tech/quickstart/


篇尾: