TIL

6장 광고 클릭 이벤트 집계

1단계: 문제 이해 및 설계 범위 확정

2단계: 개략적 설계안 제시 및 동의 구하기

질의 API 설계

데이터 모델

ad_id click_minute count
ad001 202101010000 5
ad001 202101010001 7

올바른 데이터베이스의 선택

개략적 설계안

graph LR
    A[로그 모니터] -->|원시 데이터| B[[메시지 큐]]
    B --> C[데이터베이스 기록 프로세스]
    C --> D[(원시 데이터 DB)]
    B --> E[데이터 집계 서비스]
    E -->|집계 데이터| F[[메시지 큐]]
    F --> G[데이터베이스 기록 프로세스]
    G --> H[(집계 결과 DB)]
    I[질의 서비스] -->|집계 결과 질의| H

집계 서비스

3단계: 상세 설계

스트리밍 vs 일괄 처리

데이터 재계산

graph LR
    A[로그 모니터] -->|원시 데이터| B[[메시지 큐]]
    B --> C[데이터베이스 기록 프로세스]
    C --> D[(원시 데이터 DB)]
    B --> E[데이터 집계 서비스]
    E -->|집계 데이터| F[[메시지 큐]]
    F --> G[데이터베이스 기록 프로세스]
    G --> H[(집계 결과 DB)]
    I[질의 서비스] -->|집계 결과 질의| H
    
    J[재계산 서비스] -->|1| D
    J -->|2| K[재계산 전용 데이터 집계 서비스]
    K -->|3| F

  1. 재계산 서비스는 원시 데이터 저장소에서 데이터를 일괄 처리로 검색한다.
  2. 추출된 데이터는 전용 집계 서비스로 전송한다. (전용 집계 서비스를 두는 이유는 실시간 데이터 처리 과정이 재처리 프로세스와 간섭하는 것을 막기 위함)
  3. 집계 결과는 두 번째 메시지 큐로 전송되어 집계 결과 데이터베이스에 반영된다.

시간

집계 윈도 (aggregation window)

전달 보증

sequenceDiagram
    participant UpstreamKafka as 업스트림 (카프카)
    participant AggregationNode as 집계 서비스 노드
    participant DownstreamKafka as 다운스트림 (카프카)
    
    AggregationNode->>UpstreamKafka: 1. 이벤트 폴링
    UpstreamKafka->>AggregationNode: 2. 오프셋 100부터 소비
    AggregationNode->>AggregationNode: 3. 100부터 110까지의 이벤트 집계
    AggregationNode->>DownstreamKafka: 4. 집계 결과 전송
    DownstreamKafka->>AggregationNode: 5. 수신 응답
    AggregationNode->>UpstreamKafka: 6. 110까지 소비했음을 응답 (X)

sequenceDiagram
    participant UpstreamKafka as 업스트림 (카프카)
    participant AggregationNode as 집계 서비스 노드
    participant Store as HDFS/S3
    participant DownstreamKafka as 다운스트림 (카프카)
    
    AggregationNode->>UpstreamKafka: 1. 이벤트 폴링
    UpstreamKafka->>AggregationNode: 2. 오프셋 100부터 소비
    AggregationNode->>Store: 3.1 오프셋 확인
    AggregationNode->>AggregationNode: 3. 100부터 110까지의 이벤트 집계
    AggregationNode->>DownstreamKafka: 4. 집계 결과 전송
    DownstreamKafka->>AggregationNode: 5. 수신 응답
    AggregationNode->>Store: 5.1 오프셋 저장
    AggregationNode->>UpstreamKafka: 6. 업스트림에 새 오프셋 110 응답

메시지 큐의 규모 확장

집계 서비스의 규모 확장

데이터베이스의 규모 확장

핫스팟 문제

flowchart LR
    A[입력데이터] --> B((분배_맵))
    B -->|초과 이벤트 발행| C((집계 서비스))
    C -->|1.추가 자원 요청| D[자원 관리자]
    D -->|2.추가 자원 할당| CA
    C -->|3.이벤트 분할| CA
    CA -->|4.축약 결과| C
    
    subgraph CA[추가 자원]
        C1 --> E((축약_리듀스))
        C2 --> E
        C3 --> E
    end
    
    C --> F((축약_리듀스))
    

결함 내성

데이터 모니터링 및 정확성

대안적 설계안