参加你附近的 ,了解 VS Code 中的 AI 辅助开发。

1.7 版本回滚事件报告

2016 年 11 月 3 日,Wade Anderson,@waderyan_

昨晚,即 11 月 2 日星期三,我们将 Visual Studio Code 的 1.7 版本回滚到 1.6.1。如果您已升级到 1.7,系统会提示您更新回 1.6.1。今天早上,我们实施了一个缓解性修复并发布了一个新版本,现在您应该使用的是 VS Code 1.7.1。如果您不确定自己使用的是哪个版本,可以在“关于”对话框中找到版本信息

对于这些更新给您带来的不便,我们深表歉意,并希望解释所发生的事件以及我们正在采取的措施,以确保您拥有出色的 VS Code 体验。

自动类型获取

在 VS Code 1.7 中,我们发布了一项名为“自动类型获取”(ATA)的功能。ATA 的目的是改善 JavaScript IntelliSense 体验。

VS Code 使用 TypeScript 语言服务为 JavaScript 提供 IntelliSense。TypeScript 语言服务使用称为类型声明文件(也称为类型文件)的特殊文件,这些文件发布在 npm 的 @types 范围下。过去,您必须手动安装类型声明文件才能点亮 package.json 中依赖项的 IntelliSense。我们知道这不是一件容易的事,因此我们与 TypeScript 团队合作开发了 ATA。

启用 ATA 的 TypeScript 语言服务会监视您的 package.json 文件,并自动将所有依赖项的类型声明文件安装到文件系统上的缓存中。当它找到对知名客户端库的引用时,也会执行相同的操作。

在 Insider 版本中启用此功能两周后,我们认为它对用户很有用,并决定在 VS Code 1.7 中向所有人发布 ATA。

发生了什么?

11 月 2 日下午 1:57 左右(太平洋标准时间) 我们发布了 VS Code 1.7。苏黎世团队上床睡觉,雷德蒙德团队开始制定 1.8 的计划。

11 月 2 日下午 4:12 左右(太平洋标准时间) 我们收到了 npm 的联系。他们发现客户端尝试访问 @types 范围下不存在的包,导致注册表活动出现巨大峰值。在其峰值时,这些请求约占所有流量的 10%(有趣的事实:VS Code 用户发送的请求量大约与 npm 从印度看到的请求量相同),并短暂地使他们的服务不堪重负。

npm 运维人员迅速采取行动,减轻了非故意的 DDoS 攻击,并将问题诊断为来自 VS Code 1.7 版本。关键问题是由于以下算法导致的大量请求不存在的包的洪水

  1. TypeScript 语言服务器对照其应用程序缓存检查 package.json 中列出的模块。
  2. 对于应用程序缓存中不存在的每个模块,TypeScript 语言服务器都会向 npm 发送请求 @types/{module}
  3. 存在的模块将添加到应用程序缓存中。
  4. 由于预计新类型声明文件将添加到 @types 范围中,每次打开项目或文件夹时都会请求不存在的模块,这会导致 npm 以 404 响应。

鉴于 @types 范围下不存在的模块数量,大量 404 错误短暂地影响了 npm 的可用性。

11 月 2 日下午 5:45 左右(太平洋标准时间) 在适当的背景下并应 npm 的要求,我们取消了 1.7 版本的发布,并将用户回滚到 VS Code 1.6.1。我们更新了网站,提供了我们掌握的事实,并卷起袖子分析最佳的下一步措施。

未来展望

您应该已收到安装 VS Code 1.7.1 的提示。此版本已禁用 ATA,但所有其他 1.7 功能均可使用。在接下来的几天里,我们将与 TypeScript 团队合作,为 ATA 找到令人满意的修复方案(昨晚已在此 PR 中开始),我们将在更新可用时通知您。

#HappyCoding

Wade Anderson,VS Code 团队成员
@waderyan_

© . This site is unofficial and not affiliated with Microsoft.