最近,国内一家大型公有云服务提供商经历了一次大规模的故障,引起了广泛的关注。分析人士指出,该公司在处理此次事故时,在故障通报、公关处理、事后复盘等环节都存在问题,暴露出在应对此类事件方面的经验缺乏。
事实上,由于云服务本身比较复杂,全球大大小小公有云服务商都难免会出故障。对于用户来说,偶尔的突发故障并不是最可怕的,缺少及时、透明且成熟的应对流程才是最可怕的。对于云服务商来说,除了要持续提高服务可用性,还应该提高处理故障的能力。
如果想让服务的可用性和故障的处理能力维持在很高的水平,则需要大量的经验积累。对此,亚马逊云科技常说的“经验没有压缩算法”就很合适。
作为全球最大的公有云服务商,亚马逊云科技服务着数不清的全球顶级大企业和80%的初创独角兽,自然是积累了非常丰富的经验。
亚马逊高级副总裁兼杰出工程师James Hamilton是这一领域的专家,他在服务器和数据中心基础设施、数据库以及云计算技术方面经验丰富,在20多个国家拥有超过200项专利。
他从2009年开始负责亚马逊云科技在基础设施效率、可靠性和服务扩展方面的工作。
James Hamilton是一位计算机领域的专家,拥有滑铁卢大学计算机科学硕士学位和维多利亚大学计算机科学荣誉学士学位。较早的工作经历中,他是一名服务于意大利豪车品牌,比如玛莎拉蒂、法拉利、兰博基尼等豪车的专业汽车技师。
加入亚马逊之前,他在IBM工作了11年,领导IBM C++编译器团队,担任IBM DB2的首席架构师。随后,在微软工作的12年中,先后担任任微软Exchange托管服务的领导者、SQL Server WebData团队的总经理,还负责微软SQL Server的相关工作。
James Hamilton曾撰文分享了提高IT韧性的三种方法。
第一种,尽可能扩大自动化范围。
Uptime Institute 的数据显示,大约70%的数据中心和服务中断是由人为错误造成的。而James预测这个比例会更高,这也是亚马逊云科技如此专注于自动化的原因。因为手动操作会带来风险,为此从备份到测试需要尽可能地自动化,自动化是创建韧性架构的关键。
James提到了一家叫CalvertHealth的医院,原本这家医院电子健康记录的数据备份是在企业数据中心服务器上手动管理的,恢复时间目标(RTO)数值曾为48至72小时。而当应用恢复系统迁移到亚马逊云科技后,RTO降至两小时以下,缩短了97%。
James认为,在部署前就识别和解决代码中的问题,也是构建高可用性、高韧性应用的重要组成部分。手动审查依赖于审查人员的专业知识和能力。但是,借助机器学习的代码审查工具,企业可以实现这一过程的自动化,甚至还能优化应用性能。
Cognizant是世界领先的专业服务提供商之一,它使用亚马逊云科技的自动化代码审查功能来帮助开发和运营团队主动识别和解决问题,并确保其部署的性能、安全性和合规性超出了来自不同行业和地区的客户的要求。
第二种,持续测试来应对未知。
持续测试是工程师理解系统如何应对未知情况的方法。实现这个目标的做法之一是故意搞“破坏”。通过这种方法,企业能够执行故障注入实验,帮助团队营造真实世界所需的条件,来发现分布式系统中难以甄别的隐藏错误、盲点和性能瓶颈。
自21世纪初以来,亚马逊一直在不会对客户产生影响的精准控制的情况下,有意注入故障。这提高了其应变能力,确保能为最坏的情况做准备。如果能触发罕见事件,并更频繁地调整应对措施,那就做好了准备。
另一种流行的测试方法是韧性“游戏日”(game days),它通过模拟一个失败或其他事件来测试系统、流程和团队的响应。这种方法的目的是尽可能逼真地演习,如果异常事件真的发生,团队会采取行动。企业可以在亚马逊云科技中使用其生产环境的完整副本进行游戏日演练。
第三点,统一可观测性指标。
了解系统的运行情况对提高IT韧性至关重要。企业不断收集和分析应用数据,才能更快地检测和解决应用可用性和性能方面的问题,从而改善用户体验。但随着应用复杂性的日益增加,问题出现时很难快速定位并解决。
Docebo是一家学习管理系统软件供应商,由于系统太复杂,排除故障经常需要耗费几天时间。当使用亚马逊云科技的分析服务,把所有日志记录和跟踪数据进行结合,创建了单一事实来源。随后,Docebo将故障排除时间缩短了90%,修复时间从70%-80%减少到15%以下。过去几天的工作现在只需要几分钟。
James提到的这三种方法中,尽可能扩大自动化范围主要是减少故障出现的可能,持续测试来应对未知,这部分主要是未雨绸缪做准备,而统一可观测性指标则是为了提高定位和解决问题的速度。
事实上,亚马逊云科技通过在基础设施设计、服务部署、运营流程和机制中深度融入韧性原则,构建了世界上最可靠的云服务之一。这些做法征服了纳斯达克、道琼斯、美国金融监管局(FINRA)、默沙东等对数据高度敏感的组织。
如果要简单总结亚马逊云科技做对了什么,我认为关键的有以下几个方面。
首先,亚马逊云科技在其服务设计阶段就已经考虑到了防止中断和事故的策略。这种前瞻性的设计意味着,一旦发生中断,能够最小化对客户影响。此外,亚马逊云科技通过在运营文化中深植韧性,确保其团队始终准备应对各种挑战。
亚马逊云科技的全球基础设施是其可靠性策略的核心,在全球33个地区有105个可用区。这些区域由多个相互独立且物理上分隔的可用区组成,同一区域内的可用区之间具有足够的距离。这种设计既保证了足够的距离来防止相关故障,同时又能实现单位毫秒级的同步复制。
亚马逊云科技是唯一一个在每个区域内提供三个或更多可用区的云提供商。而且,每个可用区都有独立的电力、制冷和物理安全设施。通过增加冗余和改善隔离,亚马逊云科技最大限度地减少了故障的影响面。
亚马逊云科技鼓励客户将其应用程序设计为在多个可用区中运行,以获得更高的可用性和容错能力。亚马逊使用了静态稳定性来提高韧性,即使发生故障或依赖项不可用时,系统可以继续以静态状态正常运行。例如,EC2实例启动后即具备与数据中心中物理服务器相同的可用性。
在用户能接触到的层面,亚马逊提供了一系列定制的服务,这些服务够轻松集成到用户的工作流中,帮助客户增强自身的韧性。
比如,用户首先通过使用Amazon Resilience Hub设定韧性目标和评估当前状态。随后,根据Amazon Well-Architected Framework和Amazon Trusted Advisor的建议进行改进。然后,就使用Amazon Resilience Hub来进行实验评估和测试,通过测试来应对未知。
当故障发生后,可以使用Amazon Backup、Amazon DRS和Route 53 ARC这些服务来快速响应中断并恢复业务。这一系列工具和服务确保了用户能够在面对挑战时保持业务的连续性和稳定性。