1.背景
我们技术服务团队经常会遇到这样的状况,随时随地收到紧急电话,开始紧张地排查问题,处理故障以及恢复服务。硬盘故障、网络不通、大量不到终态、水位高、流量激增等问题不胜枚举,也许因为一个很小的变更,因某种不可预期的场景,引起蝴蝶效应,导致了大面积的系统混乱、故障和服务中断,对客户的业务造成严重影响。故障往往带来巨大的损失,然而由于分布式系统的特性,各种不可预期的突发事件在所难免,单靠人力并不能够百分之百地阻止其发生。与其担惊受怕系统会出现什么样的问题,不如化被动为主动,提前模拟线上环境可能出现的各种情况,来检验我们的系统是否能做到容错,是否在出现问题时仍然具有对外提供服务的能力。
模拟驾驶的初衷就是通过实验性的方法,主动找出系统中的脆弱环节,让人们建立起复杂分布式系统在生产中抵御突发事件的信心。任何足够复杂的系统都不可避免地带有让人意想不到的暗债,暗债是现代软件系统逐步复杂化进程中的副产品,它会威胁系统的正常运转。模拟驾驶的意义就在于,它会帮助你发现暗债,从而在暗债变成系统的严重问题之前加以应对,避免造成损失。
2.模拟驾驶
模拟驾驶是GTS-SRE混合云团队遵循混沌工程实验原理,并融合团队内部多年高可用体系沉淀下来的经验而打造的一款技术服务,提供丰富的故障场景、异常仿真的实现,能够帮助分布式系统提升容错性和可恢复性,以期帮助更多的政府和企事业单位做好稳定性建设。
2.1基础服务内容
图1:模拟驾驶基础服务内容框架
2.1.1混沌工程课程培训
混沌工程学培训课程涉及三个专题,共八章,20小节的内容。课程从混沌工程学的理论出发,融合阿里内部实践,通过由混合云历史故障库和故障能力库中精炼总结得来的经典案例,深入浅出地解释了如何完成混沌工程实验,包括所需要面对的挑战、推进的准备项、采用的工具以及模拟驾驶的实施方法,是混沌工程学实践的入门课程。通过课程的学习,可以帮助用户达到以下的目标:
- 了解混沌工程学基本的概念、原则、前提、作用以及应用;
- 了解混合云在混沌工程学实践的工具包;
- 了解具体实施混沌工程实验的方法;
- 了解各场景的模拟驾驶演练操作方法;
- 参与混合云混沌工程的社区共建。
2.1.2模拟驾驶工具包
- 实验注入工具-Apsara Chaos Platform
Apsara Chaos Platform(简称ACP)是混合云一款遵循混沌工程原理和混沌实验模型的实验注入工具,帮助企业提升分布式系统的冗余容错能力、故障隔离能力、可观测性,并且在企业上云或往云原生系统迁移过程中提供弹性能力和易用性能力的保障。ACP可支持丰富的异常仿真场景,包括边界异常仿真(如docker异常等)、应用层仿真(如进程假死、异常退出等)、系统层仿真(如CPU、内存、磁盘空间等系统资源消耗)、硬件层仿真(如网卡抖动、带外重启等),并且在异常场景编排的异常类型节点,可以对此模拟能力进行实例化。 - 监控告警工具-TAM Alarm Center
TAM Alarm Center(简称TAC)是SRE团队为混合云精心打造的一站式告警运维平台,覆盖混合云所涉及的云产品、大数据、云实例以及用户所涉及的站点应用等告警,提供告警生命周期管理以及报警外发等解决方案。帮助混合云快速发现、定位异常问题。目前,中国区100+项目已部署TAC,其中有40%+的项目可以通过钉钉、短信或邮件的方式实现告警外发。有效地提高了告警处理效率,减少因告警未及时处理导致故障的情况,大幅提高项目运维质量,减少项目人力投入成本。 - 故障诊断工具-SRE-CLI
Site Reliability Engineer - Command-Line Interface(简称SRE-CLI)是一款黑屏化控制台的故障诊断工具,能够根据异常场景从场景库中匹配检查项进行自动诊断并确认异常原因,归档异常详细信息,最终给出处理建议。SRE-CLI可帮助混合云快速发现、定位异常问题的原因,提供从问题描述、故障定位及诊断、输出诊断报告、提供解决建议的全方位“问诊”服务。目前,云平台底座产品天基的40%问题已经能够通过SRE-CLI工具进行诊断定位,从而减少了人工手动排查的时间,有效地提高了故障处理效率,大幅提高项目运维质量,减少项目人力投入成本。 - 巡检及问题诊断工具-铜雀
铜雀专注于智能化巡检及问题诊断,是TAM和驻场服务团队日常工作中的首要工具。它能让TAM和驻场服务团队从日常繁琐的巡检工作中解放出来,将精力投入到更有价值的客户服务中去,通过打通云平台侧、租户侧及应用侧的信息,辅助应用运维及优化,并通过工具化手段提升现场问题分析定位的能力和速度。铜雀目前作为混合云企业版的标准输出产品,已经能够100%覆盖V3平台的局点。目前铜雀的功能主要是以巡检为中心,后续将逐渐将故障应急、高频变更、问题诊断能力补充上来,并将铜雀的基础能力开放出来,使产品、驻场、TAM等人员的经验不断沉淀到系统中,打造以铜雀为中心的运维生态圈。
2.2服务案例
2.2.1背景
某电力集团客户想验证云平台的高可用性以及阿里的故障应急能力,在沟通之后了解到SRE-TAM团队有专业完善的模拟驾驶能力,遂提出服务申请,邀请技术服务团队至业务现场进行赋能培训及演练服务。
2.2.2目标
技术服务团队希望通过本次服务提升客户对混沌工程这一理念的认知和对云平台的了解,同时帮助现场同学和客户提升故障的应急处理能力,提振平台稳定性信心。
2.2.3服务概述
- 技术服务团队调研并收集项目现场信息;
- 赋能客户,进行混沌工程培训课程的讲授(包括混沌工程概述、混合云混沌工具包介绍、模拟驾驶三个专题);
图2:客户现场进行赋能培训
- 进行工具的准备及部署工作,在业务现场部署了ACP和SRE-CLI工具,对已部署的TAC工具进行了升级工作;
- 客户提供了演练时间窗口,技术服务团队按照标准流程(前期检查、故障注入、告警查看、故障诊断&恢复)进行了五个场景的模拟驾驶演练;
- 指导客户使用工具进行操作演练并答疑;
图3:客户现场指导操作并答疑
2.2.4成果
通过本次模拟驾驶的服务,加强了客户对混沌工程实验的认知和加深了客户对云平台高可用性的了解:
- 通过手把手地指导并且协同客户一起从故障注入到故障发现最后到解决故障的实验全流程实践,客户对模拟驾驶的影响范围和爆炸半径有明显的体感,对混沌工程的原则有了一定的认知;
- 模拟驾驶演示后,客户对云平台的自愈能力和健壮性表示深度认可,并且对后期进行常态化、机制化的演练意向比较强烈;
- 客户很乐意参与混合云模拟驾驶的共建。
3.总结及思考
伟人说“实践是检验真理的唯一标准”,然而在开展模拟驾驶之旅的过程中,是无法一蹴而就地达到实验的最理想状态的,那我们可以按照怎样的路径去实施第一次模拟驾驶实验呢?
首先,所谓模拟驾驶的实验性是为了探索“未知”的风险,找到暗债,但是实践中不妨先从“已知”开始。通过对“哪里最可能出问题”的思考和讨论,我们评估出系统潜在的弱点和预期结果,这可以让你对演练的优先级有所把握:哪些潜在问题更有可能发生或后果更严重。团队可以通过记录并总结历史故障类型、发生频次以及对应的依赖项等,从而对“哪里最可能出错”有初步的认识。当你觉得某一项可能存在问题时,先从这类场景注入故障会是一个好的开始。
其次,在实验实施前我们需先创建一个假设,这会是一个很好的团队思维练习。通过讨论这个场景,你可以在运行它之前对预期结果进行假设,比如这个失败对客户、企业或对你的依赖项有什么影响?在运行第一个实验之后,你可能会遇到两个结果之一:验证了系统对引入的故障是否具有弹性,或者发现需要修复的问题。这两个结果都很好。如果是第一种情况,你增强了对系统及其行为的信心;如果是后者,你则在系统导致停机之前发现了问题。
最后,模拟驾驶实验主张“在离生产环境越近的地方进行实验越好越真实”,但我们认为从实际情况的角度来看,这取决于组织对这一理念的接受程度。那么让各方都比较放心的一种比较温和的实验路径是从线下逐渐走到生产。不过对于分布式系统而言,部署不同、流量不同都会带来不一样的结果,唯有在生产环境中进行实验才能真正验证,否则会大大地削弱这些实践的价值。
就如同人类要打疫苗才能免除未知的病痛,系统的稳定性建设也离不开模拟驾驶,希望我们的团队可以更多地将模拟驾驶技术能力输出,赋能更多的客户,来提升反脆弱性和系统稳定性的信心!
原文链接
本文为阿里云原创内容,未经允许不得转载。
来源:oschina
链接:https://my.oschina.net/yunqi/blog/4700591