从Google线上故障,谈灰度发布的重要性

简介: cascasca

引言

2025 年 6 月 12 日,Google Cloud 经历了一次重大故障,导致 Gmail、YouTube、Google 搜索、Google Cloud API 以及众多依赖其服务的互联网应用出现大规模中断。这次故障从太平洋时间 10:51 开始,直到 18:18 才完全解决,持续了约 7 小时 27 分钟。

根因分析

据 Google Cloud 发布的报告,此次故障产生的根本原因是一个新功能在没有经过充分测试和灰度发布的情况下被直接部署到生产环境,并且处理推送关键配置没有灰度过程。具体来说有以下几个环节:

故障引入:新功能部署

Google Cloud 为 Service Control 系统添加了一个新功能,用于配额策略检查。这个功能在没有经过充分测试和灰度发布的情况下被直接部署到生产环境。

设计缺陷:错误处理不足

新添加的功能缺乏适当的错误处理机制,特别是对于意外的空字段(blank fields)没有进行处理。根据 Reddit 上的信息,代码中存在致命缺陷:无法处理策略数据中的意外空字段。

故障触发:空指针异常

推送新配置,当系统遇到空字段时,代码抛出了空指针异常(null pointer exception),导致 Service Control 实例完全无响应,并进入崩溃循环(crash loop)状态。

连锁反应:全球服务中断

由于推送新配置没有灰度过程,导致配置在全球范围几秒内迅速生效,且 Service Control 是 Google Cloud 的核心组件,负责 API 管理和配额控制,其故障导致了连锁反应,影响了众多依赖 Google Cloud 的服务和应用,造成了全球范围的互联网中断。

相关文章
|
6天前
|
Java Go 开发者
IDEA开发常用的快捷键
IntelliJ IDEA常用快捷键汇总:涵盖代码生成(如main、sout)、编辑(复制、删除、重命名)、导航(跳转、查找)、格式化、代码阅读及版本控制等高频操作,提升开发效率。熟练掌握可显著优化编码体验,是Java开发者必备技能。
132 1
|
6天前
|
Oracle Java 关系型数据库
Java命名规范
Java命名规范涵盖包、类、方法、变量等命名规则。包名全小写,类名首字母大写采用驼峰法,接口常用形容词,抽象类以Abstract/Base开头,异常类以Exception结尾,方法名小写驼峰,常量全大写用下划线分隔,枚举值按常量规范命名,提升代码可读性与一致性。
101 0
|
6天前
经典题:求一个数是否为质数
介绍质数判断与自幂数概念:质数为仅被1和自身整除的大于1的自然数;自幂数是n位数等于各位数字n次幂之和,如水仙花数(三位)、四叶玫瑰数(四位)等,体现数字的独特数学之美。(239字)
48 1
|
6天前
|
Java
经典题:贪吃蛇
一款基于Java Swing实现的贪吃蛇小游戏,通过方向键控制蛇移动,吃食物成长,撞墙或撞自身则游戏重置。代码结构清晰,适合学习GUI编程与游戏逻辑设计。
47 0
|
9天前
|
存储 安全 编译器
C++数据类型:
C++基本数据类型包括bool、char、int、float、double等,支持signed、unsigned、short、long修饰。wchar_t用于宽字符,typedef可为类型定义别名,enum定义枚举常量。支持static_cast、dynamic_cast、const_cast和reinterpret_cast四种类型转换,实现安全或强制类型变换。
52 1
|
9天前
|
存储 C++
C++变量类型
C++变量类型包括基本类型如bool、char、int、float、double等,支持整数、浮点数、字符和布尔值的存储。还包含指针、数组、结构体、类、共用体等复合类型。变量命名由字母、数字、下划线组成,首字符须为字母或下划线。支持变量声明与定义分离,局部变量需显式初始化,静态变量自动初始化为0。
49 1
|
9天前
|
C++
C++变量作用域
C++变量作用域分为局部、全局、块和类作用域。局部变量在函数内定义,仅内部可用;全局变量在所有函数外定义,整个程序可访问;块作用域变量存在于代码块内;类作用域变量属于类成员。同名时,内层作用域覆盖外层。全局变量自动初始化,局部变量需手动初始化。
37 1
|
10天前
|
监控 NoSQL 数据可视化
|
9天前
|
SQL 前端开发 Java
|
9天前
|
JavaScript 前端开发 关系型数据库

热门文章

最新文章