mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 11:26:25 +00:00
논리 아키텍처 메시지 브로커 변경: RabbitMQ → Azure Event Hubs
- 메시지 브로커를 Azure Event Hubs로 변경 - Consumer Group을 통한 Pub/Sub 패턴 적용 - Partition 기반 부하 분산 및 순서 보장 - Event Hub 구성 정의 (meeting-events, transcript-events, todo-events) - Throughput Units 자동 확장 설정 (2-10) - Message Retention 1-7일 설정 - AMQP over TLS 암호화 적용 - ADR-002 업데이트 (Azure Event Hubs 선택 이유) - Mermaid 다이어그램 업데이트 장점: - 완전 관리형 서비스로 운영 부담 제거 - 초당 수백만 이벤트 고성능 스트리밍 - Azure Speech, Azure AI와 완벽한 생태계 통합 - Kafka 프로토콜 호환성 - 자동 확장 및 고가용성 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
3405d233ee
commit
1b5efd76d8
@ -57,9 +57,9 @@
|
|||||||
- 비동기 작업 상태 저장
|
- 비동기 작업 상태 저장
|
||||||
|
|
||||||
**메시지 브로커**
|
**메시지 브로커**
|
||||||
- **RabbitMQ**: 이벤트 기반 통신 및 작업 큐
|
- **Azure Event Hubs**: 이벤트 기반 통신 및 스트리밍
|
||||||
- Topic Exchange를 통한 Pub/Sub 패턴
|
- Consumer Group을 통한 Pub/Sub 패턴
|
||||||
- 작업 큐를 통한 부하 분산
|
- Partition을 통한 부하 분산 및 순서 보장
|
||||||
|
|
||||||
**외부 서비스**
|
**외부 서비스**
|
||||||
- **Azure Speech**: STT (Speech-to-Text) 엔진
|
- **Azure Speech**: STT (Speech-to-Text) 엔진
|
||||||
@ -254,10 +254,10 @@
|
|||||||
| **TodoCompleted** | Meeting Service | Notification Service | 완료 알림 |
|
| **TodoCompleted** | Meeting Service | Notification Service | 완료 알림 |
|
||||||
| **TranscriptShared** | Meeting Service | Notification Service | 회의록 공유 알림 |
|
| **TranscriptShared** | Meeting Service | Notification Service | 회의록 공유 알림 |
|
||||||
|
|
||||||
**RabbitMQ Exchange/Queue 구성**:
|
**Azure Event Hubs 구성**:
|
||||||
- **Topic Exchange**: `meeting.events`, `transcript.events`, `todo.events`
|
- **Event Hub 네이밍**: `meeting-events`, `transcript-events`, `todo-events`
|
||||||
- **Queue 네이밍**: `{service}.{event-category}.queue`
|
- **Consumer Group**: 서비스별 독립적인 Consumer Group (예: `ai-service-group`, `notification-service-group`)
|
||||||
- **Routing Key 패턴**: `{event}.{action}` (예: `meeting.ended`, `todo.created`)
|
- **Partition Key**: `{meetingId}` 또는 `{userId}` (동일 회의/사용자 이벤트 순서 보장)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -553,19 +553,19 @@ HPA (Horizontal Pod Autoscaler) 설정:
|
|||||||
|
|
||||||
### 5.2 부하 분산 전략
|
### 5.2 부하 분산 전략
|
||||||
|
|
||||||
#### Queue-Based Load Leveling
|
#### Event Streaming-Based Load Leveling
|
||||||
**적용 대상**: 장시간 작업, 트래픽 급증 가능 작업
|
**적용 대상**: 장시간 작업, 트래픽 급증 가능 작업
|
||||||
|
|
||||||
| 서비스 | 큐 이름 | Worker 수 | 목적 |
|
| 서비스 | Event Hub | Consumer Group | Partition 수 | 목적 |
|
||||||
|--------|---------|----------|------|
|
|--------|-----------|---------------|-------------|------|
|
||||||
| STT Service | `stt.processing.queue` | 3-10 | 음성 변환 부하 분산 |
|
| STT Service | `stt-processing` | `stt-worker-group` | 4-8 | 음성 변환 부하 분산 |
|
||||||
| AI Service | `ai.processing.queue` | 2-5 | AI 처리 부하 분산 |
|
| AI Service | `ai-processing` | `ai-worker-group` | 4-8 | AI 처리 부하 분산 |
|
||||||
| Notification Service | `notification.queue` | 3-10 | 대량 알림 발송 |
|
| Notification Service | `notification-events` | `notification-worker-group` | 4-8 | 대량 알림 발송 |
|
||||||
|
|
||||||
**Queue 설정**:
|
**Event Hub 설정**:
|
||||||
- Max Length: 1000-2000 메시지
|
- Throughput Units: 2-10 (자동 확장 가능)
|
||||||
- Message TTL: 1-2시간
|
- Message Retention: 1-7일
|
||||||
- Consumer Concurrency: 동적 조정 (2-10)
|
- Partition Count: 4-8 (병렬 처리 수준)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -618,7 +618,7 @@ HPA (Horizontal Pod Autoscaler) 설정:
|
|||||||
|
|
||||||
#### 전송 중 암호화
|
#### 전송 중 암호화
|
||||||
- **HTTPS/TLS**: 모든 외부 통신 암호화
|
- **HTTPS/TLS**: 모든 외부 통신 암호화
|
||||||
- **RabbitMQ TLS**: 메시지 브로커 연결 암호화
|
- **Event Hubs AMQP over TLS**: 메시지 스트리밍 연결 암호화
|
||||||
|
|
||||||
#### 저장 암호화
|
#### 저장 암호화
|
||||||
- **민감 정보 암호화**: 사용자 인증 정보, 비밀번호
|
- **민감 정보 암호화**: 사용자 인증 정보, 비밀번호
|
||||||
@ -778,18 +778,22 @@ HPA (Horizontal Pod Autoscaler) 설정:
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### ADR-002: RabbitMQ 선택
|
### ADR-002: Azure Event Hubs 선택
|
||||||
**날짜**: 2025-01-22
|
**날짜**: 2025-01-22
|
||||||
**상태**: 승인
|
**상태**: 수정됨 (2025-01-23)
|
||||||
**결정**: 메시지 브로커로 RabbitMQ 사용
|
**결정**: 메시지 브로커로 Azure Event Hubs 사용
|
||||||
**이유**:
|
**이유**:
|
||||||
- Pub/Sub 및 Queue 패턴 모두 지원
|
- **완전 관리형 서비스**: 인프라 운영 부담 제거
|
||||||
- 성숙한 기술, 안정적 운영
|
- **고성능 스트리밍**: 초당 수백만 이벤트 처리 가능
|
||||||
- Spring AMQP와 원활한 통합
|
- **자동 확장**: Throughput Units 자동 조정
|
||||||
|
- **Azure 생태계 통합**: Azure Speech, Azure AI 서비스와 완벽한 연동
|
||||||
|
- **Kafka 호환**: 기존 Kafka 클라이언트 재사용 가능
|
||||||
|
- **메시지 보관**: 1-7일 이벤트 재처리 가능
|
||||||
|
|
||||||
**대안**:
|
**대안**:
|
||||||
- Apache Kafka: 고처리량이지만 운영 복잡도 높음
|
- RabbitMQ: 자체 운영 필요, 확장성 제한
|
||||||
- AWS SQS: 클라우드 종속성 발생
|
- Apache Kafka: 자체 운영 복잡도 높음
|
||||||
|
- AWS Kinesis: Azure 환경에서 최적화 부족
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -37,7 +37,7 @@ graph TB
|
|||||||
Redis["Redis<br/>- 분산 캐시 (Cache-Aside)<br/>- 작업 상태 저장<br/>- 세션 관리"]
|
Redis["Redis<br/>- 분산 캐시 (Cache-Aside)<br/>- 작업 상태 저장<br/>- 세션 관리"]
|
||||||
|
|
||||||
%% 메시지 브로커
|
%% 메시지 브로커
|
||||||
RabbitMQ["RabbitMQ<br/>- Pub/Sub 패턴<br/>- Queue-Based Load Leveling"]
|
EventHubs["Azure Event Hubs<br/>- Pub/Sub 패턴 (Consumer Groups)<br/>- Partition 기반 부하 분산<br/>- 이벤트 스트리밍"]
|
||||||
end
|
end
|
||||||
|
|
||||||
%% ========================================
|
%% ========================================
|
||||||
@ -79,18 +79,18 @@ graph TB
|
|||||||
%% ========================================
|
%% ========================================
|
||||||
|
|
||||||
%% ========================================
|
%% ========================================
|
||||||
%% 서비스 → RabbitMQ (이벤트 발행)
|
%% 서비스 → Event Hubs (이벤트 발행)
|
||||||
%% ========================================
|
%% ========================================
|
||||||
MeetingSvc ==>|"이벤트 발행"| RabbitMQ
|
MeetingSvc ==>|"이벤트 발행<br/>(meeting-events)"| EventHubs
|
||||||
STTSvc ==>|"이벤트 발행"| RabbitMQ
|
STTSvc ==>|"이벤트 발행<br/>(transcript-events)"| EventHubs
|
||||||
AISvc ==>|"이벤트 발행"| RabbitMQ
|
AISvc ==>|"이벤트 발행<br/>(transcript-events)"| EventHubs
|
||||||
|
|
||||||
%% ========================================
|
%% ========================================
|
||||||
%% 이벤트 구독 정보 (노트)
|
%% 이벤트 구독 정보 (노트)
|
||||||
%% ========================================
|
%% ========================================
|
||||||
Note1["📋 이벤트 구독 매핑<br/><br/>Meeting Service:<br/>- TranscriptSummaryCreated<br/><br/>STT Service:<br/>- MeetingEnded<br/><br/>AI Service:<br/>- MeetingCreated<br/>- MeetingEnded<br/>- TranscriptReady<br/><br/>Notification Service:<br/>- MeetingCreated<br/>- MeetingEnded<br/>- TranscriptCreated<br/>- TodoCreated<br/>- TodoCompleted"]
|
Note1["📋 이벤트 구독 매핑<br/><br/>Meeting Service:<br/>- TranscriptSummaryCreated<br/><br/>STT Service:<br/>- MeetingEnded<br/><br/>AI Service:<br/>- MeetingCreated<br/>- MeetingEnded<br/>- TranscriptReady<br/><br/>Notification Service:<br/>- MeetingCreated<br/>- MeetingEnded<br/>- TranscriptCreated<br/>- TodoCreated<br/>- TodoCompleted"]
|
||||||
|
|
||||||
Note1 -.->|"참조"| RabbitMQ
|
Note1 -.->|"참조"| EventHubs
|
||||||
|
|
||||||
%% ========================================
|
%% ========================================
|
||||||
%% 서비스 → 외부 시스템
|
%% 서비스 → 외부 시스템
|
||||||
@ -117,5 +117,5 @@ graph TB
|
|||||||
class STTSvc,AISvc special
|
class STTSvc,AISvc special
|
||||||
class NotifySvc support
|
class NotifySvc support
|
||||||
class Redis infra
|
class Redis infra
|
||||||
class RabbitMQ mq
|
class EventHubs mq
|
||||||
class AzureSpeech,LLM,EmailSMS external
|
class AzureSpeech,LLM,EmailSMS external
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user