pile·
인프라 / DevOps·vercel-blogVercel Blog·

Vercel CDN 리디렉트 무한 확장: 블룸 필터·이진 검색·샤딩 3단계 최적화

Vercel이 수백만 개의 리디렉트 규칙을 초저지연으로 처리하는 CDN 라우팅 시스템의 아키텍처 진화 과정을 공개했다. JSON 파싱 기반 선형 검색에서 발생하는 CPU 경합 문제를 블룸 필터, 이진 검색, 샤딩 3단계 최적화로 해결했다.

핵심 포인트
  • 블룸 필터로 리디렉트가 불필요한 대부분의 요청을 O(1)에 처리한다. false negative가 없어 "확실히 없다"로 판별된 요청은 탐색 비용 없이 바로 통과시킨다.
  • 기존 JSON 파싱이 CPU 집약적 경합의 원인이었다. 정렬된 키에 대한 이진 검색으로 교체해 파싱 오버헤드를 제거했다.
  • 리디렉트 경로를 해싱해 여러 샤드로 분산했다. 각 요청이 해당 샤드만 조회해 프로세스 메모리 부담을 외부 저장소·파일시스템 캐시로 이전했다.
  • JSONL 단일 파일→이진 검색→샤딩 3단계로 진화하며 프로덕션 데이터에 기반한 반복적 최적화를 보여준다.
  • CPU 경합 제거 후 레이턴시 스파이크가 사라지고 예측 가능한 성능을 달성했다.
상세 정리
  • 초기 문제: 리디렉트 규칙이 2,000개 한도에 도달하는 고객들이 늘어나면서 더 많은 규칙을 처리하면서도 성능을 유지해야 했다.
  • 1단계 JSONL + 블룸 필터: 리디렉트 규칙을 JSONL 형식으로 저장하고 블룸 필터를 함께 배포했다. 블룸 필터는 "결정적으로 없다" 또는 "아마 있다" 두 가지만 답해 대부분의 트래픽을 탐색 없이 처리한다.
  • 블룸 필터 핵심 특성: false positive는 가능하지만 false negative는 없다. 리디렉트가 없는 경로는 블룸 필터에서 확실히 걸러지므로 JSONL 탐색 자체를 건너뛴다.
  • 1단계 병목: JSONL 파일을 JSON으로 파싱하는 과정이 CPU를 집약적으로 사용했다. 여러 프로세스가 동시에 파싱하면서 CPU 경합이 발생해 레이턴시 스파이크가 나타났다.
  • 2단계 이진 검색: 리디렉트 규칙을 정렬된 형태로 저장하고 이진 검색을 적용했다. JSON 파싱 단계 자체를 제거해 CPU 경합의 근본 원인을 없앴다.
  • 3단계 샤딩: 리디렉트 경로를 해싱해 여러 샤드로 분산했다. 각 요청은 해당 샤드만 조회하면 되므로 전체 규칙 세트를 메모리에 유지할 필요가 없어졌다.
  • 메모리 전략: 프로세스 인메모리 대신 외부 저장소와 파일시스템 캐시를 활용해 수백만 규칙도 처리 가능한 구조로 전환됐다.
  • 결과: 레이턴시 스파이크 제거, 예측 가능한 성능 달성. 구체적 ms 수치는 공개되지 않았으나 CPU 경합 제거 전후 그래프로 명확한 개선을 시각화했다.
왜 읽나대규모 라우팅·리디렉트 시스템에서 블룸 필터와 이진 검색으로 CPU 경합을 해결한 CDN 아키텍처 최적화 패턴이 필요한 인프라·시스템 엔지니어에게 실전 레퍼런스다.
vercel-blog
Vercel Blog 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    대규모 도그푸딩: cdnjs를 Cloudflare 개발자 플랫폼으로 이전하다

    cdnjs는 하루 90억 요청을 처리하는 오픈소스 JS/CSS CDN으로, 전 세계 웹사이트의 12%가 의존한다. 2026년 6월, Cloudflare는 6년간 GCP에서 운영하던 발행 파이프라인을 Workers, Workflows, R2, KV, Queues, Containers, Durable Objects로 완전 전환했다. 성능 문제가 아닌 관측성·유지보수성 한계가 동인이었으며, 마이그레이션 과정에서 플랫폼 한도를 직접 끌어올렸다.

    #durable-objects#workflows#cloudflare-workers+2
  2. 인프라 / DevOps·github-engGitHub Engineering·

    Dependabot 길들이기: 업데이트 묶고, 주기 늦추고, 보안은 빠르게

    GitHub의 Dependabot은 의존성 업데이트를 자동화하지만, 기본 설정에서는 10개 업데이트 = 10개 PR이 쏟아져 메인테이너가 알림을 무시하게 된다. Microsoft의 GCToolkit 사례(578개 커밋 중 92개가 Dependabot 버전 범프)를 바탕으로, 그룹핑·주기 조절·보안 업데이트 분리 3가지 설정으로 노이즈를 줄이면서 보안 속도는 유지하는 방법을 다룬다.

    #github-actions#devops#supply-chain-security+2
  3. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    Cloudflare, 프라이버시 프로토콜 디버깅 CLI pvcli 오픈소스 공개

    Cloudflare가 OHTTP(Oblivious HTTP) 등 프라이버시 보존 프로토콜 디버깅을 위한 CLI 도구 pvcli를 오픈소스(Apache-2.0)로 공개했다. 기존에는 RFC를 참조하며 바이너리를 수작업으로 파싱해야 했는데, pvcli는 curl과 유사한 문법으로 이 과정을 단일 명령으로 줄인다. Apple Private Relay·Microsoft Edge Secure Network를 구동하는 실전 규모의 경험에서 나온 도구다.

    #rust#cli#ohttp+2