mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2026-06-13 17:39:10 +00:00
edit outer sequence
This commit is contained in:
@@ -10,11 +10,13 @@ participant "Analytics Service" as Analytics
|
||||
participant "Redis Cache\n(TTL 5분)" as Redis
|
||||
participant "Analytics DB" as AnalyticsDB
|
||||
participant "Kafka\n(Event Topics)" as Kafka
|
||||
box "외부 시스템" #LightGray
|
||||
participant "우리동네TV API" as WooriAPI
|
||||
participant "지니TV API" as GenieAPI
|
||||
participant "SNS APIs\n(Instagram/Naver/Kakao)" as SNSAPI
|
||||
end box
|
||||
|
||||
note over AnalyticsDB
|
||||
**배치 처리로 수집된 데이터**
|
||||
- 외부 채널 통계는 배치 작업으로
|
||||
주기적으로 수집하여 DB에 저장
|
||||
- 목업 데이터로 시작, 점진적으로 실제 API 연동
|
||||
end note
|
||||
|
||||
== 1. 대시보드 조회 - Cache HIT 시나리오 ==
|
||||
|
||||
@@ -83,56 +85,28 @@ AnalyticsDB --> Analytics: 이벤트 통계\n- 총 참여자 수\n- 예상 ROI\n
|
||||
deactivate AnalyticsDB
|
||||
|
||||
|||
|
||||
== 2.2. 외부 채널 API 병렬 호출 (Circuit Breaker 적용) ==
|
||||
== 2.2. 배치 수집된 채널 통계 데이터 조회 ==
|
||||
|
||||
par 병렬 채널 API 호출
|
||||
Analytics -> WooriAPI: GET /stats/{eventId}\n+ API Key\n[Circuit Breaker]
|
||||
activate WooriAPI
|
||||
Analytics -> AnalyticsDB: SELECT channel_stats\nWHERE event_id = {id}
|
||||
activate AnalyticsDB
|
||||
|
||||
alt Circuit Breaker CLOSED (정상)
|
||||
WooriAPI --> Analytics: 200 OK\n- 노출 수: 5,000\n- 조회 수: 1,200
|
||||
deactivate WooriAPI
|
||||
note right of Analytics
|
||||
**배치 처리 방식**
|
||||
- 외부 API는 별도 배치 작업으로 주기적 수집
|
||||
- 수집된 데이터는 DB에 저장
|
||||
- 대시보드에서는 DB 데이터만 조회
|
||||
- 응답 시간 단축 및 외부 API 의존성 제거
|
||||
end note
|
||||
|
||||
note right of Analytics
|
||||
**Resilience 패턴**
|
||||
- Circuit Breaker: 실패율 50% 초과 시 Open
|
||||
- Timeout: 10초
|
||||
- Retry: 최대 3회 (지수 백오프)
|
||||
- Fallback: 캐시된 이전 데이터 반환
|
||||
end note
|
||||
AnalyticsDB --> Analytics: 채널별 통계 데이터\n- 우리동네TV: 노출 5,000, 조회 1,200\n- 지니TV: 노출 10,000, 클릭 500\n- Instagram: 좋아요 300, 댓글 50\n- Naver: 조회 2,000\n- Kakao: 공유 100
|
||||
deactivate AnalyticsDB
|
||||
|
||||
else Circuit Breaker OPEN (장애)
|
||||
Analytics -> Analytics: **Fallback 실행**\n캐시된 이전 데이터 사용
|
||||
note right of Analytics
|
||||
Circuit Breaker OPEN 상태
|
||||
- 빠른 실패로 응답 시간 단축
|
||||
- 30초 후 Half-Open으로 전환
|
||||
end note
|
||||
end
|
||||
|
||||
else
|
||||
Analytics -> GenieAPI: GET /campaign/{eventId}/stats\n+ API Key\n[Circuit Breaker]
|
||||
activate GenieAPI
|
||||
|
||||
alt 정상 응답
|
||||
GenieAPI --> Analytics: 200 OK\n- 광고 노출 수: 10,000\n- 클릭 수: 500
|
||||
deactivate GenieAPI
|
||||
else Timeout (10초 초과)
|
||||
Analytics -> Analytics: **Timeout 처리**\n기본값 반환 (0)
|
||||
note right of Analytics
|
||||
Timeout 발생
|
||||
- 리소스 점유 방지
|
||||
- Fallback으로 기본값 설정
|
||||
end note
|
||||
end
|
||||
|
||||
else
|
||||
Analytics -> SNSAPI: GET /posts/{eventId}/insights\n+ Access Token\n[Circuit Breaker]
|
||||
activate SNSAPI
|
||||
|
||||
SNSAPI --> Analytics: 200 OK\n- Instagram: 좋아요 300, 댓글 50\n- Naver: 조회 수 2,000\n- Kakao: 공유 수 100
|
||||
deactivate SNSAPI
|
||||
end
|
||||
note right of Analytics
|
||||
**목업 데이터 활용**
|
||||
- 초기에는 목업 데이터로 시작
|
||||
- 점진적으로 실제 배치 작업 구현
|
||||
- 배치 주기: 10분마다 수집
|
||||
end note
|
||||
|
||||
|||
|
||||
== 2.3. 데이터 통합 및 ROI 계산 ==
|
||||
|
||||
Reference in New Issue
Block a user