这家软件届的爱马仕,遭遇了成立 5 年来的最大故障,元凶还是它

Hermes Agent极简部署指南:WSL2+国产镜像+桌面级AI智能体 AI智能体(Agent)是大模型落地的关键形态,其核心在于将LLM能力封装为可调度、可交互、可集成的运行时系统。Hermes Agent作为轻量级智能体运行时,以原生二进制替代Docker容器,显著降低部署门槛;依托WSL2实现Windows/Linux跨平台兼容,并内置双源国产镜像(CDN+CNB.cool),彻底解决网络不稳定痛点;更通过深度操作系统集成(如macOS Keychain、Windows Toast通知、displayplacer多屏控制),构建真正‘桌面级’AI生产力工具。本文聚焦Her 阅读详情

软件里的爱马仕

file
file

Linear 是硅谷这两年涌现出的一家明星公司。它做的是类似于 Jira, Asana 的项目管理工具,但定位聚焦在软件研发的项目管理上。Linear 很早就实现盈利了,Vercel,Arc 浏览器,Mercury 这些当红公司也都是 Linear 的客户。

file

因为创始人强大的设计背景,其在创办 Linear 前曾先后负责过 Coinbase 和 Airbnb 的设计团队。所以 Linear 的产品设计尤其突出,以致于在行业里掀起了 Linear style 的设计潮流。

file

而就是这样一支全身散发着光环的顶级硅谷团队,也在前不久迎来了 5 年公司历史上最大的一次故障。而元凶依然是我们熟悉的桥段「删库跑路」

故障时间线

file

目前 Linear 团队已经在官网公开了完整的复盘报告。下面我们来详细梳理一下时间线:

1 月 24 日

  • 04:47: 全量备份完成 (事发前)。
  • 07:01: 造成数据丢失的变更合并入主干。
  • 07:20: 变更完成。
  • 07:52: 发现异常,开始自查。
  • 08:10: 启动严重事故预案,呼叫更多的工程师。
  • 08:36: 更新公开渠道, 包括 status page 和 X,提示正在调查数据访问问题。
  • 09:20: 进一步更新。
  • 09:56: Linear 进入维护模式,防止进一步的变更操作,并且开始从备份进行恢复。
  • 10:48: 数据库恢复到 4:47 的备份,Linear 重新开始可以访问。
  • 11:09: 更新 Status page 到观察状态。
  • 11:30: 开始恢复 4:47 到 9:56 之间的数据。
  • 13:50: 给 4:47 到 9:56 之间新建了 workspace 的用户发送了邮件,因为 Linear 无法重建这些 workspace。
  • 15:35: 给所有受到影响的用户和 workspace 管理员发送邮件,告知故障的信息和恢复方式。

1 月 25 日

  • 14:00: 通知管理员上线了专门的数据还原页面。
  • 14:25: 修复了数据还原页面的 bug,强制客户端刷新 (这又打挂了 API 导致了应用加载的问题).
  • 16:40: 数据恢复试运行启动。
  • 17:49: 正式的数据恢复开始。
  • 19:48: 恢复了 98% 受影响的 workspace。
  • 23:20: 恢复了 99% 受影响的 workspace。

1 月 26 日

  • 07:37: 除了一个 workspace 之外,所有的都恢复了。
  • 08:39: 完成了最后一个 workspace 的恢复。

读着时间线应该也能感受到紧张。事实上 Bytebase 也是 Linear 的用户,受到了波及。这是当时我们收到的邮件。

file

用户故障群里也有比较着急的用户

file

故障原因

Linear 使用的是 PostgreSQL 数据库,它官网上没有提。但在另一个生成 PG 测试数据的产品 snaplet.dev 的官网上,列了 Linear。

file

导致删数据的是这条语句

file

CASCADE 关键词会把所有有外健关联到 new_table 的表数据都清空掉。

file

上面我们简单模拟了一下场景,可以看到当我们 TRUNCATE t CASCADE 后,会把 ref_t 的数据也都清空。我们看到通过命令行操作是有提示的,但是变更生产环境的流程通常不会采用命令行直连的方式。

file

Linear 采用的是主干开发,要变更的 SQL 脚本是保存在代码仓库里的。每次变更时,先提交 SQL 语句进行审核,审核会进行一些 CI 的自动检查和人工审核,没有问题后,SQL 脚本合并入主干,然后触发变更。因为代码发布和数据库变更是分离的,为了保持代码能同时兼容新旧两个数据库版本,会使用 feature flag。

Linear 的 CI 自动检查没有捕捉到这个问题,因为 CI 里没有针对 TRUNCATE 的规则。而在本地测试和人工审核时也都没有发现这个问题,也是因为这个 TRUNCATE 的隐蔽性更强。Linear 这次是在开发一个新功能时从现有的生产数据库表里创建了一份测试数据库表。工程师在测试完成后,打算清理测试数据库表。但因为生产数据表也关联了测试数据表的外键。所以 TRUNCATE 测试数据表时,也把生产数据表跟端掉了。

故障排查和恢复

因为 Linear 使用了好几层缓存,所以在误删了生产数据后,客户端因为缓存的关系,还没有直接报错,识别到问题的时间就靠后了些。不过 Linear 因为本身要实现同步的需要,把用户的每一次操作都以日志的形式记录了下来,这部分的数据是单独存放的,所以他们可以基于 4:47 的全量备份,回放所有的用户操作。但还是会有少部分操作,因为冲突的原因是无法自动回放的,这就还是需要用户手动介入。另外 Linear 的 PostgreSQL 数据库是开启了 Point-in-time recovery (PITR),但因为团队之前没有测试过 PITR,所以在恢复时没有选择这个方案,不然的话,其实可以通过 PITR 恢复到 7:01 这个变更发生的时间点,然后再回放接下来的用户操作。这样可以缩小回放的数据量。

故障影响面

所有用户都经历了 1 个小时的不可用,这段时间 Linear 在从备份中恢复数据。Linear 在 36 小时内恢复了 99% 的误删数据,剩下的因为冲突的原因没有办法自动解决。Linear 也说这是它 5 年历史上最严重的一次故障。

file

从故障发生的 1.24 到发出复盘报告的 1.30,整个团队显然是在连轴转 (work around the clock)。

file

故障反思

Linear 自己列了如下的改进措施:

  • 剥夺所有用户在生产数据库上的 TRUNCATE 权限。
  • 改进如何创建和执行数据库的变更操作。其中包过通过 DBA 的审核实践,和代码审核分离,以及自动检查高危操作。
  • 改进预发环境的数据库变更测试流程。
  • 构建和演练使用 PITR 的数据恢复流程。
  • 改进内部事故处理的流程。
  • 改进数据完整性检查。
  • 给 Linear 添加只读模式。这样即使数据库不可写时,依然可以能让用户访问。

而作为 Linear 的用户,我们对于 Linear 这次事件的应对是满意的。Linear 在意识到问题的第一时间就完全公开了所有情况,整个复盘报告也非常详细,对于其它研发团队也是一份很好的参考。

前车之鉴,后世之师。我们要是看 Linear 之前的流程,已经有审核,有自动 CI 检查,还有定期的备份恢复演练。但数据库变更就是一个高危又精细的操作流程,专业性极强。这也是 Bytebase 扎根这个方向的原因,看似 1 个人 2 周时间可以糊出来的 SQL 工单平台,背后有数不清的细节,而漏掉任何一个,都可能引起误操作,导致公司历史上最大的故障。事实上我们从 Linear 的这次事故中,也吸取了教训,添加了关于 TRUNCATE 操作的自动检查,也会在下一版中发布出来。

file

读罢 Linear 的整个报告,还是要感慨它的透明度,所谓的 blameless postmortem(对事不对人的复盘)在这个报告中体现的淋漓尽致。再联想到去年国内上热搜的大故障,即使到现在,好多官方也没有一个正式的故障复盘。可能因为定责到个人,个人背后有主管,会影响到绩效,绩效挂钩奖金和晋升,各种利益夹杂在一起,就很难开诚布公地聊了。定责在国内是一种约定俗成,现阶段也很难去改变它,下次再写写怎么样让定责可以更加的客观吧。


💡 更多资讯,请关注 Bytebase 公号:Bytebase

图谱后端选型:Memgraph vs Neo4j vs 嵌入式 SQLite,什么时候该切换? 本文通过脚本自动探测代码图谱规模,对比SQLite、Memgraph与Neo4j在不同节点量级下的性能表现。实测表明:10万节点内嵌入式SQLite凭借低延迟和轻量部署仍具竞争力;超15万节点后,Memgraph适合低延迟、高并发场景;而Neo4j仅在百万级图谱且需复杂查询时才具备优势。配套提供一键测试延迟与平滑迁移后端的Python工具链,实现按需选型与无缝切换。 阅读详情

相关推荐

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档)

本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。

招风的黑耳优快云 295

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 476

【AI蛋白预测实战】零门槛在Colab上运行AlphaFold2全流程解析

本文为零基础用户提供了在谷歌Colab平台上运行AlphaFold2进行蛋白质结构预测的完整实战指南。通过ColabFold项目,用户无需本地高性能硬件,即可免费利用云端GPU完成从序列输入到3D结构生成和结果可视化的全流程,大幅降低了AI蛋白预测的技术门槛。

mqtt6iot的博客 913

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 432

Vue3 + OpenLayers 开发指南(一) - 环境搭建与基础配置

本文详细介绍了如何从零开始搭建Vue3与OpenLayers的集成开发环境。通过项目初始化、核心依赖安装、目录结构规划及基础配置,手把手引导开发者创建一个结构清晰、可维护的现代化WebGIS应用骨架,为后续添加地图图层和交互功能奠定坚实基础。

weixin_28049429的博客 342

Office 365部分安装及同时安装Visio的方法

From MWeb Win版本的Office 365安装包默认安装所有组件,没有选择的页面,在安装Office 365后再安装下载的Visio 2016专业版时,会显示计算机上已经安装了即插即用Office,Visio不可安装,因此可以考虑使用Office部署工具来解决这两个问题。 下载安装Office365和Visio 下载Office部署工具 修改配置 部署工具使用方法...

weixin_30737363的博客 2万+

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 250

第1讲|AI产品经理全景图谱:不是“会用AI工具”,而是能对AI产品结果负责

本文从岗位本质出发,系统拆解 AI 产品经理的职责、岗位类型与能力模型,帮助读者理解 AI PM 与传统 PM 的核心差异,明确自己适合的转型方向,并建立“对 AI 产品结果负责”的产品认知。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1018

C++算法(七)

C++ stack算法题和一些客观题

2503_94479566的博客 378

芒果YOLOv8改进52:主干Backbone篇之GhostNetV2:提出原创GhostNetV2 架构升级版:引入长距离注意力机制增强廉价操作,构建更强端侧轻量型骨干,打造高效轻量级检测器

长距离注意力机制增强廉价操作,打造轻量级检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1612

Python调用CANoe

我们可以创建CANoe应用程序对象,打开配置文件,启动模拟,发送和接收消息,并在完成后关闭CANoe应用程序。这使得我们能够使用Python自动化执行测试任务,并集成CANoe的功能到我们的Python应用程序中。CANoe是一款功能强大的汽车网络仿真和测试工具,它能够模拟和分析汽车网络通信,并提供丰富的测试功能。通过Python编程语言,我们可以方便地调用CANoe的API,实现自动化测试和集成CANoe的功能到我们的Python应用程序中。在CANoe中,我们可以为不同的汽车网络创建配置文件。

AzqLinux的博客 1288

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 294

[深入研究4G/5G/6G专题-31]: 5G NR开机流程5.2 - UE Attach流程(Registeration Request/Accept/Complete)

目录前言:前置条件:第1章 5G NR UE attach流程(从UE log的视角看)1.0 NAS消息解析器1.1 消息交互流程1.2 UE Registeration Request消息(AMF->基站->UE)1.3 AMF Registeration Accept消息(AMF->基站->UE)1.4 UE Register complete消息(UE->基站->AMF)第2章 UE Register...............

文火冰糖(王文兵)的博客 7万+

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 176

4.Simulink基础建模操作——加减乘除运算

加减乘除运算

FPGA/MATLAB学习教程/源码/项目合作开发 9553

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

TransactionInactiveError:await 之后事务已经不活跃了

TransactionInactiveError 出现于 IndexedDB 事务已结束(非 active 状态)时调用 put、get 等操作。常见于 await 后或 setTimeout 中执行请求,因任务已完成,事务已提交或进入 finished 状态。请求必须在创建事务的同一任务中挂起,否则无效。解决方法:在 onsuccess 回调内同步发起后续操作,或提前将所有请求挂入事务。避免在异步上下文中使用事务操作,确保请求在事务活跃期内完成。

qq_40822000的博客 159

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

云计算课程小组PPT汇报任务书

36人分为6组,每组6人;形式:生活案例调研 + 理论解读;汇报时长7‑9min;PPT建议10‑14页。

Michelle8023的博客 207

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 295

软件项目交付时,源代码之外还应该交付哪些技术资料?

软件项目交付时,除可运行程序外,还应核对源代码、数据库结构、接口文档、部署运维、测试验收和账号资产。本文从实际交付环节拆解完整资料清单,并说明合同如何约定交付范围、知识产权与维护边界。

chengduyoushu的博客 305

Axum 初步入门学习笔记

)自定义错误实现后,可以直接作为Result的ErrAxum 是一个构建在 Tokio、Tower、Hyper 之上的 Rust Web 框架,核心能力是:Router 路由、Extractor 提取器、Tower 中间件、IntoResponse 响应机制、State 共享状态。那张分层架构图是“地图”不是“说明书”:它帮你建立全局观,但 Service、Repository、数据库、Redis、MQ 都是你自己在 Handler 内部调用的业务/基础设施层,不是 Axum 自带的。

weixin_43219667的博客 177

MySQL报Too many open files?句柄耗尽的排查与参数配置

文章讲清 max_connections 与 open_files_limit 两个额度、句柄被谁占走、分区表为什么最容易踩,给出从 error log 到 /proc/pid/limits 的定位顺序与句柄预算算法。

「一个在数据库赛道上边学边分享的学妹」——聚焦国产数据库/信创方向、分享学习笔记、踩坑经验和行业观察。 336

SQL Server 数据库双备份:简化配置,兼顾本地留存与异机归档

本文针对中小企业SQLServer数据库备份难题,提出简化配置与本地+异机双副本方案。传统原生备份依赖手动脚本,存在配置复杂、传输易中断、日志分散、静默失败等问题。推荐使用图形化工具实现备份、本地留存与异机同步一体化管理,支持断点续传、加密传输、自动清理与版本控制,降低运维负担。双副本策略提升数据安全性,本地快速恢复,异地防硬件故障。建议定期验证恢复流程,确保备份可用性。

2501_93776716的博客 291

Redis 入门详解:核心特性、重要文件与全局命令实战

本文系统介绍了Redis的核心特性、重要文件及全局命令。Redis凭借内存存储、C语言实现和单线程设计,具备极高的读写性能;支持持久化(RDB/AOF)、主从复制与集群架构,适用于缓存、排行榜、计数器等场景,但不适合存储海量冷数据。文中还解析了常见面试题,如为何快速、单线程原理、持久化机制、KEYS *禁用原因及过期键处理策略,强调其在高并发场景下的优势与局限。

2303_77004089的博客 205

Agent 安全实战:间接提示注入的四个攻击面与防御体系

当 Agent 从 "生成内容" 走向 "执行动作",安全边界就从内容合规变成了权限越界。本文拆解间接提示注入在网页抓取、工具返回值、MCP 连接器、长期记忆四个位置的真实攻击路径,对照 Claude、GPT、Gemini 在工具调用权限模型上的设计差异,给出可直接落地的五层防御体系。

阡陌数智,专注大模型网关与 LLM 工程落地 281

【FDE前沿部署工程师实战教程】第62章:Enterprise AI Developer Platform——企业级 AI 开发者平台与低代码 AI 应用工厂

企业从AI能力平台迈向AI应用生产平台,需构建统一的企业级AI开发者平台,将模型、RAG、Agent、Workflow等能力封装为可视化、可复用的开发工具。通过PromptIDE、AgentBuilder、WorkflowBuilder等模块,实现低代码与专业代码协同,降低开发门槛。平台覆盖应用全生命周期管理,集成测试评估、安全治理与CI/CD发布体系,推动AI应用规模化、标准化交付。最终形成“需求→设计→开发→测试→发布→运营”的企业AI应用工厂模式,助力制造等行业的智能化转型。

IT古董 314
上一篇: Bytebase 签约 Vianova,助力欧洲城市交通智能平台中 Snowflake 和 PG 的变更自动化及版本控制
下一篇: 研发误删的库,凭什么要 DBA 承担责任
Bytebase
博客等级 码龄5年 1349粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值