피드로 돌아가기
InfoQInfoQ
Backend

p95 Latency 140ms → 85ms, Bloom Filter로 해결한 I/O 병목

Article: Bloom Filters: Theory, Engineering Trade‑offs, and Implementation in Go

Gabor Koos2026년 4월 7일19intermediate

Context

추천 파이프라인의 중복 콘텐츠 제거를 위해 매 요청마다 대규모 membership check 수행. 전체 쿼리의 97-98%가 negative 결과인 불균형한 워크로드 특성 보유. 모든 후보군에 대해 원격 저장소 조회를 수행하며 네트워크 I/O 및 인프라 비용 증가 발생.

Technical Solution

  • 원격 저장소 조회 전 단계에 인메모리 Bloom Filter를 'membership gate'로 배치하는 설계
  • Bloom Filter의 probabilistic 특성을 활용해 definite negative 항목을 즉시 제거하는 방식
  • Filter에서 positive로 판별된 항목만 실제 저장소에서 검증하는 2단계 검증 구조
  • Bit array 크기(m)와 Hash 함수 개수(k)를 조정하여 메모리 사용량과 False Positive Rate 간의 최적점 도출
  • Go 언어의 저수준 제어 능력을 활용해 효율적인 비트 연산 및 메모리 레이아웃 구현
  • 데이터 포화도에 따른 False Positive 확률 증가를 방지하기 위한 Lifecycle 정책 수립

Impact

  • p95 Latency: 140ms에서 85ms로 감소
  • 초당 처리량: Peak 시점 기준 약 216만 건의 membership check 처리
  • 워크로드 특성: 쿼리의 97-98%가 negative인 환경에서 I/O 비용 대폭 절감

Key Takeaway

데이터 분포가 극단적으로 편향된 경우, 결정론적 조회 전 단계에 확률적 데이터 구조를 배치하여 고비용 리소스 접근을 원천 차단하는 전략이 유효함.


False Positive Rate를 낮추기 위해 m ≈ -n ln P / (ln 2)² 공식을 사용하여 비트 배열 크기를 산정하고, CPU 비용과 정확도 사이의 균형을 위해 k ≈ (m/n) ln 2로 해시 함수 수를 설정할 것

원문 읽기