2007년 8월 16일 목요일, 당시 이베이가 소유하고 2억 2천만 명의 사용자를 보유했던 룩셈부르크 기반 인터넷 전화 서비스 스카이프가 하루 대부분의 시간 동안 작동을 멈췄고, 장애는 거의 이틀에 걸친 장기 중단으로 이어졌다. 발단은 평범했다. 마이크로소프트의 월간 패치 화요일이 재부팅을 요구하는 보안 업데이트를 배포했고, 수백만 대의 윈도우 머신이 몇 시간 안에 서로 재시작하여 스카이프의 피어 투 피어 네트워크에 다시 로그인하려 했다. 스카이프는 이를 '매우 짧은 시간 안에 전 세계 사용자 컴퓨터의 대규모 재시작'이라고 표현했다.
스카이프의 피어 투 피어 아키텍처에는 그들의 표현대로 '자가 치유 능력이 내장'되어 있었고, 클라이언트가 접속하고 이탈하는 변동은 보통 자동으로 흡수되었다. 재부팅 폭풍은 네트워크 자원 할당 알고리즘에 있던 이전에 보지 못한 소프트웨어 버그를 드러냈고, 이로 인해 자가 치유가 신속하게 작동하지 못했다. 복구 기구 자체가 한 번도 겪어보지 못한 규모의 장애 앞에서 실패한 것이다. 스카이프의 표현대로 서비스는 '약 이틀 동안 대다수 사용자에게 이용 불가능'했다.
장애가 길어지면서 보안 연구자들은 같은 주에 공개된 서비스 거부 취약점이 원인이라고 추측했으나, 스카이프는 이를 부인했다. 네트워크가 공격받은 것이 아니라 단지 충분히 빠르게 치유될 수 없었을 뿐이라는 것이다. 이 사건은 분산되어 있다는 것이 장애에 강하다는 뜻은 아니라는 초기의 대표적 교훈이 되었다. 피어 투 피어 시스템도 전 세계적으로 상관된 사건에 직면하며, 자가 치유 능력은 그러한 사건에 맞추어 규모를 산정하고 시험해야 한다는 것이다.
무엇을 치렀나
스카이프의 2억 2천만 사용자 대다수에게 약 이틀간 서비스가 제공되지 않았고, 유선 전화를 해지했던 소규모 사업체들은 전화 서비스를 잃었다
왜 일어났나
패치 화요일은 전 세계적으로 상관된 사건을 만들어냈다. 수백만 대의 윈도우 머신이 몇 시간 안에 재부팅하고 다시 로그인했으며, 이는 네트워크가 평소 흡수하던 변동을 훨씬 넘어섰다.
네트워크 자원 할당 알고리즘에 있던 이전에 보지 못한 버그 때문에 폭풍이 닥친 뒤 내장된 자가 치유 기능이 '신속하게 작동하지' 않았다. 즉 복구 경로 자체가 부하 앞에서 실패했다.
장애 규모는 한 번도 시험된 적이 없었다. 자가 치유 능력은 전체 클라이언트 기반의 동기화된 재시작이 아니라 일상적인 접속/이탈 패턴을 암묵적으로 전제로 산정되어 있었다.
같은 주에 공개된 서비스 거부 취약점이 진단을 흐려, 스카이프는 자사 소프트웨어를 디버깅하는 동안 공격설을 공개적으로 부인해야 했다.
교훈
피어 투 피어는 유지보수가 필요 없다는 뜻이 아니다. 하나의 패치 주기가 모든 클라이언트를 한꺼번에 강타할 수 있으므로 상관된 사건에 대비해 복구 경로의 규모를 산정하고, 전체 네트워크가 그것에 의존하기 전에 시험해야 한다.
후속 상황
서비스는 복구되었고 스카이프는 자사의 Heartbeat 블로그에 상세한 사후 분석을 게시하며 책임을 인정했다. 발단은 마이크로소프트의 패치 주기였지만 결함은 스카이프 자체의 자원 할당 코드였으며, 회사는 보안과 관련된 것은 아무것도 없다고 강조했다. 이 장애는 여전히 피어 투 피어 네트워크에서 상관된 실패의 교과서적 사례로, 그리고 '분산되어 있으므로 복원력이 있다'는 것과 실제로 시험된 복원력 사이의 간극을 보여주는 사례로 인용된다.
근거 확인하기
출처
- Patch Tuesday update triggered Skype outage The Register · theregister.co.uk ·
- Windows Users Caused Skype Outage TechCrunch · techcrunch.com ·
- Error in Skype's Software Shuts Down Phone Service The New York Times · nytimes.com ·