内容提要
全球850万台运行Microsoft Windows操作系统的计算机遭遇史上最大规模的软件故障,由网络安全公司CrowdStrike的常规软件更新引起。故障原因是配置文件问题,导致Windows系统崩溃。CrowdStrike在配置部署中存在问题,导致恢复时间较长。文章提出了预防类似事件的方法,包括测试和验证、部署和提高弹性。配置文件需要同样严谨对待,因为它不仅仅是内容,而是代码。
延伸解读
配置更新为何比代码更新更需谨慎
文章指出,配置更新比代码更新更频繁、部署更快,因此需要更加小心。CrowdStrike的Channel Files每天更新多次,但缺乏严格的测试和验证,导致错误配置引发全球故障。这提醒我们,配置变更应被视为代码变更,必须经过同样的测试和发布流程,不能因为其“数据”属性而降低标准。
分阶段部署与回滚机制的关键作用
CrowdStrike的配置更新未逐步部署,导致故障影响所有目标,且检测和回滚耗时1小时18分钟。文章建议采用分阶段部署,如内部试用、金丝雀发布,并设置足够的观察时间,以便监控发现问题。同时,必须建立快速回滚机制,确保配置更改能迅速撤销,减少故障影响。
功能标志为何不足以防止此类故障
虽然功能标志常用于分阶段发布,但文章认为它无法完全防止CrowdStrike事件。原因有三:一是全面分阶段部署需要与监控和CD管道深度集成,实施复杂;二是CrowdStrike的配置结构复杂,需要模式支持和端到端类型安全;三是根本在于配置是代码的一部分,必须用同样的工程严谨性对待,而非依赖外部工具。
提升系统弹性:配置隔离与快速失败
即使有测试和分阶段部署,坏配置仍可能进入生产环境。文章建议关键组件应具备更高弹性,例如使用eBPF交付更新,或实现“配置隔离”:新配置在组件健康运行一段时间后才被视为稳定,否则自动拒绝。同时,系统应能快速失败并大声报错,以便及时检测和恢复,避免演变为重大事故。
Q&A
CrowdStrike的故障是如何发生的?
故障是由于CrowdStrike的常规软件更新引起的,具体是配置文件问题导致Windows系统崩溃。
这次故障影响了哪些关键业务?
故障影响了航空公司、银行、紧急服务和医院等关键业务。
如何预防类似的配置故障?
可以通过测试和验证、分阶段部署和提高系统弹性来预防类似故障。
CrowdStrike的配置文件有什么特别之处?
CrowdStrike的配置文件被称为“Channel Files”,其内容不当导致了内存越界读取,进而引发系统崩溃。
功能标志能否防止CrowdStrike的故障?
虽然功能标志可以帮助防止故障,但在CrowdStrike事件的规模和复杂性下,功能标志不足以完全避免问题。
配置文件应如何处理以避免故障?
配置文件应被视为代码,更新时需谨慎处理,进行充分的测试和验证。