写点什么

单机房故障自愈 -- 运维的春天

  • 2019-09-10
  • 本文字数:2358 字

    阅读完需:约 8 分钟

单机房故障自愈--运维的春天

在单机房故障自愈–黎明之战中,我们介绍了单机房故障自愈的准备工作和基础设施,包括容灾能力建设、监控平台以及流量调度平台。本篇主要介绍单机房故障自愈的具体解决方案,内容包括:


  • 单机房故障止损的能力标准

  • 单机房故障自愈的整体架构

  • 单机房故障自愈的常见问题和解决方案

单机房故障止损的能力标准

在单机房容灾能力、故障发现能力、流量调度能力基础上,业务线具备了通过流量调度进行单机房故障止损的条件。理想情况下,我们希望构建一套完整、自动、智能的自愈方案,但各个业务线的服务特点不同和基础能力参差不齐,很难一蹴而就,所以我们建立起一套自愈能力的等级标准,业务线根据自身情况制定相应建设计划,逐步提升自愈能力。


自愈能力等级标准划分为 5 级,从 Level 0 的完全人工止损,到 Level 4 的自动化、智能化止损。对于 Level0、Level1,人工感知止损面临着速度慢、误操作、场景覆盖不全、风险控制能力不足等问题;、Level2 则实现了止损操作的平台化、预案化,一定程度上提升了止损效率;Level3 则实现了自动化报警联动故障止损,实现了止损效率的进一步提升。2016 年,百度大部分核心产品线已经实现了 Level 2、Level 3 的自动止损能力,但在场景覆盖与风险控制上仍存在不足。由此,Level 4 智能自愈方案应运而生。


单机房故障自愈的架构

针对传统故障自愈方案中存在的问题,我们构建了单机房故障自愈整体解决方案。


自愈方案通过抽象、规范处理流程实现单机房故障自愈的自动化,即将止损过程划分为统一的感知、决策、执行三个阶段;同时通过运维知识库解决基础数据、基础设施差异化问题;通过策略框架支持智能化异常检测、策略编排、流量调度问题,同时支持用户自定义策略需求。实现单机房故障自愈的标准化、智能化。



在单机房故障自愈–黎明之战提到的百度网络与业务架构情况,我们将整体流量调度止损架构拆分为 3 层:接入层、服务层、依赖层。



针对这 3 层的监控感知、止损决策与故障止损方式的不同,将止损自动决策拆分为外网止损自动决策与内网止损自动决策。


  • 外网止损自动决策:覆盖接入层。基于外网、内网监控信号;触发外网止损决策器进行止损决策;执行 DNS 流量调度止损。

  • 内网止损自动决策:覆盖服务层、依赖层。基于内网监控、基础监控、业务监控提供的故障信号;触发内网止损决策器进行止损决策;执行流量调度、主备切换、弹性降级等止损操作。

单机房故障自愈的常见问题和解决方案

传统的流量调度自动止损方案存在如下问题:

1 容量风险控制能力不足

【问题描述】


传统流量调度的模式有两种:固定比例模式与容量保护模式。



  • 固定比例模式:按照预先设定的固定预案,一个机房故障,该机房的流量按照预先设定的比例分配到其他的机房。很可能某个机房的容量或剩余机房的总容量不足,切流量后导致多个机房发生故障。

  • 容量保护模式:针对固定比例模式存在的容量风险问题,改进的流量调度方式为执行前判断容量是否充足,容量充足则进行流量调度,否则不进行调度并通知人工介入处理。但此种方案面对的问题是:


  1. 容量仍有 buffer 可以进行部分止损。期望能够在不超过容量保护的情况下进行尽可能的调度,减少对用户的影响。

  2. 即使按照容量进行调度,服务过载仍可能发生,容量数据本身存在一定误差,流量成分的变化以及变更等导致的容量退化,都可能导致原先容量无法完全可信。


【解决方案】


  • 基于容量水位的动态均衡



在流量调度时,对于容量不准确存在的风险,我们划分两条容量警戒线。


  • 安全水位线:流量处于在安全线以下则风险较小,可以一步进行切换。

  • 水位上限:该水位线表明服务的最大承载能力,一旦流量超过故障水位线,很大概率会导致容量过载。


如果安全水位线提供的容量不足以满足止损,那我们期望使用上两条中间的容量 buffer,同时流量调度过程中进行分步试探,避免一次性调度压垮服务。


  • 基于快速熔断的过载保护


在流量调度时,建立快速的熔断机制作为防止服务过载的最后屏障。一旦出现过载风险,则快速停止流量调度,降低次生故障发生的概率。


  • 基于降级功能的过载保护


在流量调度前,如果已经出现对应机房的容量过载情况,则动态联动对应机房的降级功能,实现故障的恢复。

2 业务线止损策略需求差异大

【问题描述】


我们实现了基础的单机房故障流量调度止损算法,但在部分业务线中仍存在较大的需求差异,比如:


  • 分步动态调度需求:业务存在充 Cache 的情况,过程中服务能力降低,需要控制切换速度。

  • 优先级调度需求:产品对延迟敏感,止损时需要优先切到同地域机房;业务服务于多个上游,多个上游的重要程度不同,优先保证重要上游服务稳定。

  • 容量负载计算需求:请求成分不同,不同成分请求带来的容量负载不同。


这部分需求一部分与业务强相关,不具备通用性,另一部分则存在不同产品线需求冲突的情况。


【解决方案】


针对以上问题,我们推出了故障止损流量调度策略开放框架。支持用户根据业务需求自定义策略实现。同时将较为通用的策略开放为插件,使业务线可以根据需求自由插拔策略。



基于以上两点,结合智能运维开发框架(详见 AIOps 时代,你准备好了吗?),单机房故障自愈框架无缝支持不同业务线,使得研发者可以更关注策略本身,而无需关注不同业务线运维模型、底层平台适配成本。

总结

通过单机房故障自愈系列文章,我们详细介绍了单机房故障止损的必要性、准备工作,并构建了基于容量动态分步流量调度的单机房故障自愈框架,实现自动化智能化故障止损。对整体单机房故障自愈解决方案不同阶段的改进总结如下:



若您有任何疑问或想进一步了解百度单机房故障自愈相关问题,欢迎给我们评论、留言!


作者介绍:


运小辰,百度高级研发工程师,负责百度运维智能故障自愈方案相关设计研发工作,致力于降低单机房故障自愈风险、提高故障自愈效率,为业务可用性保驾护航。


本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。


原文链接:


https://mp.weixin.qq.com/s/2UdpQxSkj4iqsD1IzvyrSA


2019-09-10 09:551822

评论

发布
暂无评论
发现更多内容

一文了解greenplum

数据社

数据库 greenplum MPP

微服务架构的思考

Season

week10 学习总结

任小龙

架构师训练营第十周作业

一剑

Flink 支持的重启策略有哪些

奈学教育

flink

什么是死锁?如何解决死锁?

奈学教育

微服务和DDD总结

周冬辉

微服务 DDD

Jira 和 Confluence 企业最佳部署方式

Atlassian

项目管理 敏捷开发 Atlassian Jira

django-admin和manage.py用法

BigYoung

Python django django-admin manage.py

数据库的那些事

数据社

数据库 大数据

报警不响,黄金万两的“稳定性成熟度”干货

滴滴普惠出行

聊聊数据库

数据社

数据库 大数据

华章科技好书5折优惠,满99再减10元

华章IT

Python AI 数字化转型 Java 25 周年 计算机科学丛书

只加两行代码,为什么用了整整两天时间?

程序员生活志

编程 bug

35岁腾讯员工被裁员感叹:北京一套房,存款700多万,失业好焦虑

程序员生活志

程序员

架构师训练营 week10 summary

Nick

第十周作业

方堃

Flink 支持的重启策略有哪些

古月木易

flink

Kubernetes 网络通讯模型解析

ninetyhe

Django如何编写自定义manage.py 命令

BigYoung

Python django manage.py

关于微服务架构的思考和认知

任小龙

解决 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

邵俊达

Linux SSH

数据中台建设方法论

数据社

大数据 数据中台

架构师训练营 week10 homework

Nick

微服务

石刻掌纹

一周信创舆情观察(8.3~8.9)

统小信uos

CDH部署指南

数据社

大数据 CDH

Dubbo微服务框架请求流程

GalaxyCreater

架构

anyRTC 4.0 以心铸造,以梦相承

anyRTC开发者

anyRTC 4.0 官网升级

什么是死锁?如何解决死锁?

古月木易

死锁

凉了!张三同学没答好「进程间通信」,被面试官挂了....

小林coding

操作系统 计算机基础 进程

单机房故障自愈--运维的春天_软件工程_运小辰_InfoQ精选文章