CDN은 단일 장애점이다

CDN 집중화로 하나의 장애가 수천 개 사이트를 동시에 내린다. 분산 복원력을 중앙화된 편의로 교환했다.

CDN이 웹을 더 회복력 있게 만들 거라고 했다.

좁은 의미에서는 맞다. 트래픽을 흡수하고, 콘텐츠를 사용자 가까이 캐싱하고, 오리진 장애를 매끄럽게 처리하고, 부하나 공격에 무너질 사이트를 보호한다. 오리진이 죽어도 캐시가 서빙하면 CDN이 영웅처럼 보인다.

그다음 CDN 자체가 안 좋은 하루를 보낸다.

갑자기 영웅이 폭발 반경이 된다.

집중은 미묘하지 않다

소수의 CDN 제공자가 웹 트래픽의 막대한 비율 앞에 앉아있다. Cloudflare만으로 수백만 도메인의 트래픽을 프록시한다. Akamai, Fastly, Amazon CloudFront가 나머지 대부분을 처리한다. 시장이 공격적으로 통합됐다 — 엣지 노드가 많을수록 성능이 좋고 고객이 늘고 엣지 노드가 늘기 때문이다.

결과: 인터넷의 상당 부분이 서너 개 회사의 인프라에 달려있다.

다운되면 모두가 안다

2021년 6월. Fastly에 고객 변경이 유발한 설정 버그가 있었다. 약 한 시간 동안 Reddit, New York Times, 영국 정부 사이트, Amazon, Twitch, Stack Overflow 같은 주요 사이트가 접근 불가였다. 느려진 게 아니다. 사라졌다.

Cloudflare도 비슷한 사건이 있었다. 2022년 6월 BGP 이슈로 네트워크 상당 부분이 약 30분간 다운됐다.

가정이 아니다. 정기적으로 일어난다. 단일 CDN 장애의 폭발 반경이 이제 대부분의 개별 사이트 장애가 줄 수 있는 것을 넘어선다.

아이러니

CDN은 오리진 장애에 대한 복원력을 추가한다. 하지만 다른 장애 모드를 도입한다: “CDN 자체가 실패.” 많은 사이트가 같은 CDN을 공유하기 때문에 이 장애 모드는 상관된다. Fastly가 다운되면 하나가 아니라 수천 개의 관련 없는 사이트가 같은 이유로 동시에 실패한다.

옛 인터넷은 비상관 장애가 있었다. 내 사이트가 다운돼도 네 사이트에 영향 없었다. 다른 서버, 다른 네트워크, 다른 DNS.

새 인터넷은 상관 장애가 있다. 내 사이트와 네 사이트와 만 개의 사이트가 같은 CDN을 골라서 동시에 다운된다. 성능을 얻었다. 독립성을 잃었다.

멀티 CDN은 있지만 아무도 안 쓴다

해결책: 여러 CDN을 DNS 기반 페일오버로 쓴다. Cloudflare가 다운되면 Fastly로. 세련되다. 회복력 있다.

또한 복잡하고 비싸다. 캐시 무효화를 제공자 간에 관리하고, SSL 인증서를 동기화하고, 다른 설정 API를 처리하고, CDN 청구서를 두 장 내야 한다. 연간 몇 시간의 장애를 위해 엔지니어링 비용을 정당화하기 어렵다.

합리적 계산: 리스크를 수용한다. 이게 맞는 수학이다. 집중이 계속 심해지는 이유이기도 하다 — 합리적 개별 선택이 취약한 집단 결과를 만든다.

바뀌어야 하는 것

솔직히? 아마 바뀌지 않을 것이다. 경제학이 너무 설득력 있다. CDN이 하는 일을 진짜 잘한다.

하지만 업계가 트레이드오프에 솔직해야 한다. 성능과 편의를 복원력보다 선택했다. 단일 CDN 뒤의 모든 사이트가 그 CDN의 가동률에 암묵적 의존성을 갖는다.

다음에 CDN이 다운되고 인터넷 절반이 깨질 때, 기억하라: 이건 선택이었다. 합리적이었을 수 있다. 하지만 선택이지 사고가 아니다. 속도를 위해 웹을 중앙화하고 취약성으로 대가를 치렀다.

토론 참여

← 블로그로 돌아가기