이 출시되었습니다! 11월의 새로운 기능 및 수정 사항을 읽어보세요.

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 파일을 감시하고 파일 시스템의 캐시에 있는 모든 종속성의 타입 선언 파일을 자동으로 설치합니다. 잘 알려진 클라이언트 측 라이브러리에 대한 참조를 찾을 때도 동일하게 작동합니다.

이 기능을 Insiders 빌드에서 2주 동안 활성화한 후, 사용자에게 유용하다는 판단을 내리고 VS Code 1.7에서 모든 사용자에게 ATA를 출시하기로 결정했습니다.

무슨 일이 있었나요?

11월 2일 오후 1:57경 PST VS Code 1.7을 출시했습니다. 취리히 팀은 퇴근했고, 레드먼드 팀은 1.8 계획을 시작했습니다.

11월 2일 오후 4:12경 PST npm으로부터 연락을 받았습니다. @types 범위 아래에 존재하지 않는 패키지에 액세스하려는 클라이언트로부터 엄청난 레지스트리 활동 급증을 보고 있었습니다. 최고조에 달했을 때, 이러한 요청은 전체 트래픽의 약 10%를 차지했습니다(재미있는 사실: VS Code 사용자는 인도에서 npm이 보는 요청과 거의 동일한 양의 요청을 보내고 있었습니다). 잠시 동안 서비스가 과부하되었습니다.

npm dev ops는 신속하게 비의도적인 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경 PST 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.