腾讯云公布4月8日故障原因:API套娃循环依赖了
4 月 8 日腾讯云出现大范围故障,此次故障主要影响产品控制台例如用户无法通过 Web 界面对服务器或其他产品进行操作,当然由于是 API 问题实际上也无法通过 API 执行各类操作。
此次故障对于服务器等产品本身是没有影响的,即服务器仍然是正常运行的只不过用户无法执行操作,其他产品例如 CDN 和域名解析等也是同理。
昨天腾讯云发布 4 月 8 日的故障复盘及情况说明,简单来说是发布新版 API 时出现了兼容性错误:
故障的直接原因是云 API 服务行版本向前兼容性考虑不够和配置数据灰度机制不足的问题。本次 API 升级过程中,由于新版本的接口协议发生变化,在后台发布新版本之后对于旧版本前端传来的数据处理逻辑异常,导致生成了一条错误的配置数据。
由于灰度机制不足导致异常数据快速扩散到了全网地域,造成整体 API 使用异常。
然后还有循环依赖问题:
发生故障后按照标准回滚方案将服务后台和配置数据同时回滚到旧版本并重启 API 后台服务,但此时因为承载 API 服务的容器平台也依赖 API 服务才能提供调度能力,即发生了循环依赖 (需要安装 WinRAR 时下载网站给你了个 WinRAR.rar)
发生循环依赖的后果就是服务无法自动拉起,最终运维通过手工启动方式才让 API 服务重启,完成了整个故障的恢复。
针对此次问题腾讯云也汲取教训制定了改进措施:
改进措施里就有针对循环依赖问题的解决方案,包括提供优化服务部署架构,通过分层架构、代码审查和监控等手段,避免 API 服务中存在的循环依赖问题。
同时还要提供 API 服务逃生通道,当故障发生后可以提供调用方法快速切换。
针对 Status 页面的透明度问题:
透明度问题目前是国内云计算提供商都存在的问题,即问题发生后状态页面还显示一切正常,这让很多用户看了状态页后以为是自己问题。
腾讯云此次故障状态页同样没有及时更新,原因是状态页也依赖 API,但此时 API 已经寄了,所以腾讯云计划将状态页解除对云 API 等云服务的依赖,确保云服务故障时状态页依然能准确及时传递 故障信息。