什么是复合 SLA?
现代系统由众多环节协同构成——负载均衡器、数据库、第三方 API、CDN 等等。每个环节都有自己的服务等级协议(SLA),用可用率百分比表示,例如 99.9%。所谓复合 SLA(综合 SLA),就是把这些环节串接起来之后,整个系统真实可达的可用性。本计算器会把各组件的单独可用率合并成一个端到端的整体可用性数值,并换算成每天、每月、每年的具体停机时长。
串联与并联两种拓扑
组件之间的连接方式会极大地改变最终结果。在串联(依赖链)结构中,请求要想成功,每个组件都必须正常,因此可用率需要相乘——整体结果总是低于最薄弱的那一环。计算公式为:
$$A_{\text{total}} = \text{A}_1 \times \text{A}_2 \times \text{A}_3 \times \text{A}_4$$
而在并联(冗余)结构中,只要还有一条路径能用,系统就能保持在线,因此要相乘的是各组件的故障概率;冗余设计能让整体可用性高于任何单个组件。计算公式为:
$$A_{\text{total}} = 1 - \left(1-\text{A}_1\right)\left(1-\text{A}_2\right)\left(1-\text{A}_3\right)\left(1-\text{A}_4\right)$$
使用方法
先选择拓扑类型,再依次填入各组件的可用率百分比(例如 99.95)。最多支持四个组件;如果组件较少,留空可选字段即可。计算结果会显示综合可用性,以及在常见时间周期内的预期停机时长。
实例演算
假设你的应用依赖三个串联组件,每个的可用率都是 99.9%。先换算成小数:\(0.999 \times 0.999 \times 0.999 = 0.997002999\),即 99.7003%。对应的停机比例约为 0.2997%——大约每年 26.26 小时。把三个「三个九」的服务串联起来,整体只能达到「两个九」,这正是冗余设计如此重要的原因。
常见问题
为什么串联结果比每个输入值都低? 因为每多一个依赖,就多一份故障概率;把若干个小于 1 的数相乘,结果只会越来越小。
并联真的能把可用性提升这么多吗? 是的——两条相互独立、各自 99% 的路径可得到 \(1 - (0.01 \times 0.01) = 99.99\%\),前提是两者的故障确实彼此独立。
99.9% 换算成时间是多少? 大约每年停机 8.77 小时,或每月约 43.8 分钟。