如何设计一个可用性4个9的系统

最近被问到一个问题,如果让你设计一个可用性为4个9的系统,你该如何做?

从我开始干程序员的时候,我就想过我在这个行业的目标是什么?后来我给自己定了一个目标:架构师。为什么是这个目标呢?
我觉得架构师具备全局的视野,能成体系地思考问题。很多时候系统不是孤立存在的,如果仅仅局限某一部分很有可能达不到最优的效果,而架构师的这种系统思维/整体思维正好能寻求最佳解决方案。
回到问题本身,我该怎么做呢?

4个9意味着什么?

4个9意味着全年系统不可服务时间只有53分钟

业务层面-从可用谈起

系统的存在必须是基于业务目标,高可用就要求业务能持续的提供服务。但是一定是所有的业务都要满足高可用吗?在有限的资源里这个结论估计是否定的
首先需要给业务分级,结合业务目标来制定不同的优先级别,对于高优先级的业务给予重点资源保障。

组织层面

系统的保障一般不是几个人完成的,大部分情况是多个团队会分别负责系统的某些方面,这样就需要从组织的角度来给予绑定,让系统可用性变为所有参与方的”kpi”

技术层面

系统架构/分层+微服务
负载均衡
限流
降级
熔断
异步
要提高系统的可用性,最终且惟一的手段就是保有足够的冗余- 主备/同城2机房/同城3园区/2地3中心/异地多活
前端保护后端
立体监控
混合云/多云

基础层面

基础设施/安全

系统外

有些时候功夫在诗外,跳出系统看系统- 混沌工程/fema