2024년 Veltrix 이벤트 비정규화 참사
요약
대규모 사용자 생성 이벤트를 처리하는 과정에서 발생한 지연 시간과 데이터 일관성 문제를 해결하기 위한 아키텍처 전환 사례를 다룹니다. 기존의 샤딩된 분산 아키텍처 대신 비정규화된 이벤트 스토어 방식을 도입하여 성능을 획기적으로 개선했습니다.
핵심 포인트
- 샤딩된 분산 아키텍처의 한계와 이벤트 큐 지연 문제 확인
- 비정규화된 이벤트 스토어 도입을 통한 지연 시간 70% 감소
- 이벤트 처리량 4배 증가 및 시스템 안정성 확보
- 향후 비동기 큐 처리를 통한 결합도 완화 필요성 제언
우리가 실제로 해결하려 했던 문제
우리가 해결하고자 했던 것은 단순히 문제에 더 많은 하드웨어를 투입하거나 설정 파일의 몇 가지 옵션을 조정하는 것이 아니었습니다. 우리는 훨씬 더 근본적인 문제에 직면해 있었습니다. 즉, 대규모의 사용자 생성 이벤트(user-generated events)를 처리할 때 발생하는 이벤트 기반 아키텍처(event-driven architectures) 고유의 지연 시간(latency) 및 데이터 일관성(data consistency) 문제였습니다. 1초의 지연과 단 하나의 이벤트 누락도 보물찾기 경험에 직접적인 영향을 미쳤으며, 이는 우리 플랫폼을 경쟁사와 차별화하는 핵심 요소였습니다. 이해관계자들은 플랫폼이 원활하게 확장(scale)되지 못한다면, 우리 비즈니스가 신뢰도와 수익을 모두 잃을 위험이 있다고 경고했습니다.
우리가 처음 시도했던 것 (그리고 실패한 이유)
처음에는 이벤트 기반 시스템에 대한 관습적인 지식을 따라 샤딩된 분산 아키텍처(sharded, distributed architecture)를 채택했습니다. 사용자 ID별로 이벤트 스트림(event streams)을 파티셔닝하고, 이벤트 큐(event queues)를 샤딩했으며, 다양한 샤드에 읽기 및 쓰기 부하를 분산하기 위해 로드 밸런서(load balancer)까지 구현했습니다. 합리적으로 들리지 않나요? 불행히도, 우리의 성능 지표(performance metrics)에 따르면 이 접근 방식이 지연 시간은 줄였을지 모르지만, 이벤트 큐는 기하급수적으로 계속 증가했으며 일부 큐는 최대 5초의 지연을 겪었습니다. 우리는 로드 밸런싱만으로는 이벤트 스트림 내에서 증가하는 경합(contention)을 완화하기에 충분하지 않다는 것을 곧 깨달았습니다.
아키텍처 결정
몇 주간의 분석 끝에, 우리는 접근 방식을 전환하여 비정규화된 이벤트 스토어(denormalized event store) 아키텍처를 선택하기로 결정했습니다. 이 결정은 이벤트를 처리하는 방식에 있어 근본적인 변화를 요구했습니다. 이제 우리의 이벤트 스토어는 이벤트를 저장할 뿐만 아니라 집계(aggregations)를 계산하고 주요 이벤트 속성(event attributes)을 인덱싱(indexing)하는 역할까지 담당하게 되었습니다. 이는 시스템에 상당한 복잡성을 더하는 사소하지 않은 변화였지만, 샤딩된 아키텍처의 필요성을 우회하고 우리가 겪고 있던 지연 시간을 줄일 수 있게 해주었습니다. 또한, 이벤트 스토어에 가중되는 부하를 완화하기 위해 정교한 캐싱 레이어(caching layer)를 구현했습니다.
수치가 말해주는 것
전환 이후, 수치는 놀라운 이야기를 들려주었습니다. 지연 시간(latency)은 70% 감소했고, 이벤트 처리 처리량(throughput)은 4배 증가했습니다. 더 이상 큐(queue)가 통제 불능 상태로 늘어나는 현상은 나타나지 않았으며, 전체 시스템은 사용자 활동의 거대한 피크(peak)를 흐트러짐 없이 처리할 수 있었습니다. 우리의 지표(metrics)에 따르면, 사용자는 더 이상 이벤트 누락이나 지연 현상을 겪지 않았으며, 이는 보물찾기 엔진(treasure hunt engine)이 의존하는 핵심 요소였습니다.
다르게 시도했을 점
만약 제가 이 작업을 다시 한다면, 외부 메시지 브로커(message broker)의 도움을 받아 더 많은 비동기 큐 처리(asynchronous queue processing)를 도입함으로써, 이벤트 처리를 임계 경로(critical path)에서 더욱 공격적으로 분리하는 것을 고려할 것입니다. 우리의 이벤트 스토어(event store)가 대부분의 이벤트 처리를 담당하고 있었지만, 더욱 결합도를 낮추고(decouple) 더 예측 가능한 방식으로 확장(scale)할 수 있게 해주는 기술들이 분명히 존재하기 때문입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기