小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
可靠性手段
1 冗余设计
冗余包括结构冗余(硬件、软件)、信息冗余(纠错)、时间冗余(重试)。通常我们使用复制手段,建立副本,主备、互备、集群等形式。
2 容错设计
有容错和修复能力,系统的异常不能总是依赖于“人”去恢复,让系统本身具备“容错”能力,Design for Failure,包括业务层面的容错,补偿方案等。自动降级、同步转异步、延迟执行等。
3 容灾设计
单机房故障,SET化,二地三中心,多活等。
4 自我保护设计
限制连接数、线程数、并发数、内存占用,防重入、防刷、熔断、流控等进行资源保护。
5 故障隔离设计
服务使用的资源(CPU、线程、IO等)隔离,使用舱壁模式,对每个依赖项都划分出单独的线程池等,服务解耦、物理隔离。
6 灰度设计
要有灰度发布能力,流量灰度能力。
可用性手段
1 监控报警,及时发现故障
我们要建立基础设施健康监控,对服务运行状况进行,关注流量、错误率、延迟和饱和度,建立业务监控、系统监控,及时发出预警。
要从问题管理转化到风险管理,从报警转化到预警,从日常的运维中不断的收集硬件和软件平台的运行数据,通过数据分析找出潜在的性能问题点并有针对性的进行改进。
2 自愈,自我恢复
故障自愈,是让系统从故障中恢复到正常的工作状态。想要做到自愈,首先要发现错误,所以我们必须对各种失败进行故障恢复,包括自动降级(failback),自动屏蔽非核心分支异常;失效转移(failover),摘除异常服务,从请求路由到正常服务;快速失败(failfast),自动执行预案等。
3 人工降级
依据依赖服务的重要性或依赖程度(强、弱),同步变成异步,使用降级开关去掉非核心功能等。
4 运维四板斧
系统每次变更发布后,都必须具备可回滚、可重启、可弹性扩容、可备份恢复能力。