Uber에서는 최근 UberEats에서 광고를 추가했다.
이러한 변화는 새로운 과제를 만들어냈고, 이것들을 해결하기 위해 오픈소스를 활용하여 실시간 데이터에서의 이벤트를 정확히 한 번 처리하기 위한 시스템을 구축했다.
Problem Statement
모든 광고 플랫폼에서는 유저마다 이벤트가 발생한다. 이러한 광고 이벤트를 추적하고, 집계, 정렬처리를 해서 클라이언트(다른 광고 시스템)에 제공해야한다.
이때 아래의 요구사항을 충족시켜야 한다.
1. Speed
- Downstream ad System에서는 사용자에 의해 생성된 광고 이벤트의 실시간 컨텍스트가 필요하다.
- 고객들은 최소한의 딜레이로 그들의 광고 효과 지표를 얻을 것이다.
2. Reliability
- 시스템은 반드시 데이터 무결성 측면에서 신뢰할 수 있어야 한다. 광고 이벤트는 Uber의 수익으로 이어진다. 만약 이벤트를 잃는다면 Uber의 잠재적인 수익이 사라지는 것이다.
- Uber는 반드시 광고 효과를 고객들에게 정확히 표현해줘야 한다. 데이터 손실로 인해 광고의 성공이 제대로 보고되지 않아 고객 경험의 질이 나빠질 수 있다.
3. Accuracy
- Uber는 이벤트를 정확하게 카운팅 해야된다. 광고의 효과가 실제 결과보다 좋게 평가되면 고객 경험의 질이 나빠진다. 여기서 exactly-once가 요구된다.
Architecture
위 요구사항들을 처리하기 위해 4가지 오픈소스 기술로 강력한 신뢰성이 있는 구조를 만들었다.
Stream Processing with Apache Flink
실시간에 가까운 데이터 처리를 위한 Stream processing framework
- 다양한 기능 제공
- exactly once를 제공하여 광고성 데이터와 적합함