常见的可靠性设计方法有如下四个:

避错设计

软件架构师需要和SRE,运维工程师一同针对具体的业务系统特征,应用合理的软件工程,架构技术,运维技术及管理工具,避免出现先天性问题。避错设计的目标是尽可能的通过事前的设计预防可靠性问题,避免引入缺陷。

  1. 简化设计
    控制程序复杂度,尽量使用微服务架构,实现低耦合,高内聚。用服务治理模式实现自动化调用管理。使用中间件,降低耦合影响。不依赖特定的IT基础设施部署,具备良好的环境适应性,例如使用容器部署业务。业务模块尽量细分,不要有复杂的超大模块。
  2. 健壮性设计
    当业务系统遇到已知或未知的异常或错误时,有自我保护的能力。例如对可能发生的错误或异常进行预处理,不能一有异常就报错并终止服务。同时遵循零信任原则,对上下游的调用者都要做身份都要校验,避免安全问题。
  3. 隔离设计
    主要时为了发生故障时压缩影响范围,避免故障蔓延。常见的有物理隔离和逻辑隔离。物理隔离是指把核心服务和非核心服务部署在不同的机房或可用区或网络域。逻辑隔离指软件组织概念上的隔离,如进程隔离,租户隔离,集群隔离,数据隔离

查错设计

主要指我们监控和定位故障能力的设计。百密一疏,无论事先如何设计,上线后出故障时必然的。我们需要有能力快速的处理故障,降低MTTR

  1. 外部检查
    主要时通过业务系统外部的工具对业务系统进行探测和监控,以定位故障。常见方式如zabbix,EFK日志,APM,链路追踪,健康检查等
  2. 内部检查
    在业务系统内部的关键流程设置检测机制,捕获到异常或错误时将信息输出到错误日志文件,以方便定位问题。 例如校验输入内容的合法性,校验数据的合理性等

容错设计

指系统发生故障后,仅仅是部分模块异常,没有发生全面的崩溃或不可用。即能够在故障发生时,对系统做一定程度的保护。

  1. 结构冗余
    在软件和硬件结构上实现冗余设置,避免单点故障。尽量减少软件模块之间的依赖关系,同时以多实例运行,在硬件上实现多可用区部署,异地容灾等
  2. 信息冗余
    通过缓存,分布式数据库,raid等技术实现数据,配置信息等冗余和安全存储
  3. 时间冗余
    通过异步处理,离线处理等操作实现解耦,使业务系统有充分的时间和自由度处理用户请求
  4. 降级措施
    降级,限流,熔断措施可以避免故障范围扩大

纠错设计

指业务系统的自愈能力的设计。 发生故障后,业务系统可以自行修复。例如某个机房故障,业务系统自动将流量导入到正常机房。停电重启后数据损坏,业务系统可以从备份盘自行恢复数据,当用户请求量上升时,系统可以自行扩容以适应用户量等


千里之行
1 声望2 粉丝

SRE体系践行者