Bloom Filter로 API 응답 시간을 16배 개선한 사례
원제: Bloom filters: the niche trick behind a 16× faster API | Blog | incident.io
왜 중요한가
대용량 데이터 처리에서 확률적 알고리즘 활용으로 성능 혁신을 달성한 실용적 사례로 주목받는다.
incident.io가 경보 필터링 API의 P95 지연 시간을 5초에서 0.3초로 단축했다고 발표했다. 대규모 고객의 수백만 개 경보 데이터 처리 시 발생한 성능 문제를 Bloom Filter 알고리즘 적용으로 해결했다.
incident.io는 On-call 제품의 경보 필터링 기능에서 심각한 성능 문제를 겪었다. 대규모 고객들이 수백만 개의 경보 데이터를 필터링할 때 최대 12초까지 기다려야 했고, P95 응답 시간이 5초에 달했다. 문제의 원인은 Postgres 데이터베이스에서 복잡한 속성 기반 필터링을 수행할 때 발생하는 비효율적인 쿼리였다. 경보는 소스, 우선순위, 팀, 기능 등 다양한 속성으로 필터링 가능하며, 이들 속성은 JSONB 형태로 저장되어 있다. 회사는 이 문제를 해결하기 위해 Bloom Filter라는 확률적 데이터 구조를 도입했다. Bloom Filter는 특정 요소가 집합에 속하는지 빠르게 확인할 수 있지만, 거짓 양성(false positive)은 발생할 수 있고 거짓 음성(false negative)은 발생하지 않는 특징을 가진다. 이를 통해 먼저 빠른 필터링으로 후보를 줄인 후 정확한 검증을 수행하는 방식으로 전체 성능을 크게 개선했다.