전체 글
-
이코에코(Eco²) Streams & Scaling for SSE #8: Event Router 구현이코에코(Eco²)/Event Streams & Scaling 2025. 12. 27. 22:13
TL;DR이전 포스팅에서 Eco² Composite Event Bus의 구축 전반을 서술했습니다.이번 포스팅에서는 Event Router의 코드 구현을 상세히 살펴봅니다. 핵심 모듈:main.py: FastAPI 앱, 라이프사이클 관리core/consumer.py: XREADGROUP 기반 이벤트 소비core/processor.py: Lua Script 기반 멱등성 처리core/reclaimer.py: XAUTOCLAIM 기반 장애 복구1. 모듈 구조domains/event-router/├── main.py # FastAPI 앱 진입점├── config.py # 환경 설정├── core/│ ├── consumer.py # StreamConsumer ..
-
이코에코(Eco²) Streams & Scaling for SSE #7: Event Bus Layer이코에코(Eco²)/Event Streams & Scaling 2025. 12. 27. 21:51
TL;DR이전 포스팅에서 Fan-out 계층의 필요성을 도출했습니다. 이번 포스팅에서는 Event Bus Layer의 실제 구현 과정을 기록합니다.Eco² Event Bus는 Redis Streams를 Durable Buffer(신뢰성 버퍼)로, Pub/Sub를 실시간 전달 채널로 사용하여 SSE Gateway로 fan-out하는 Composite Event Bus 계층입니다. 핵심 내용:Redis Streams Consumer Group 기반 이벤트 소비Pub/Sub로 실시간 fan-out멱등성 보장을 위한 Lua ScriptKafka 패턴과의 비교 및 Redis 기반 재구현배포 과정에서 마주친 트러블슈팅1. 아키텍처 분류: Composite Event Bus1.1 용어 정의Router목적지 결정 (라..
-
이코에코(Eco²) Streams & Scaling for SSE #6: Event Router + Pub/Sub (Fan-out Layer)이코에코(Eco²)/Event Streams & Scaling 2025. 12. 27. 19:15
TL;DRSSE Gateway, 단일 Consumer에서 분산 Fan-out까지에서 Consistent Hash + StatefulSet으로 non-HA 연결 라우팅을 해결했지만, 수평확장을 적용할 경우 이벤트가 Dest Pod로 도착하는 것이 보장되지 않았습니다.Worker의 해싱과 Istio의 해싱이 일치하지 않아, Pod 수가 동적인 HA 환경에선 라우팅이 불가능했고, 해싱 불일치를 해결하기 위해선 Istio의 Consistent Hashing에 호응하도록 Woker 측 추가 구현 부담이 가해졌습니다. 이는 해시 기반 라우팅이 SSE HA를 위한 해법이 아님을 시사했고 결국 Fan-out 계층(Event Router+Pub/Sub)의 분리로 이어졌습니다.1. 지난 포스팅 정리1연결당 XREAD50 ..
-
redis-pubsub, event-router 노드 프로비저닝 실측 로그이코에코(Eco²)/Logs 2025. 12. 27. 18:35
기존 18-Node 클러스터에 2개의 새 노드를 추가:k8s-event-router (t3.small) - Redis Streams → Pub/Sub Bridgek8s-redis-pubsub (t3.small) - Realtime Event Broadcast아키텍처 배경┌─────────────────────────────────────────────────────────────────────────────┐│ SSE HA Architecture (Full) │├─────────────────────────────────────────────────────────────────────────────┤│ ..
-
Streams & Scaling 트러블슈팅: SSE Gateway Sharding이코에코(Eco²)/Troubleshooting 2025. 12. 27. 15:37
SSE(Server-Sent Events) 기반 실시간 스트리밍 아키텍처를 구축하는 과정에서 발생했던 이슈를 기록합니다. 주요 SSE Gateway 노드 배포 및 초기화샤딩 아키텍처 설계 문제 (할당 vs 라우팅 불일치)Race Condition (SSE 연결 전 이벤트 발행)Redis 클라이언트 분리 (Streams vs Cache)SSE 샤딩 아키텍처┌─────────────────────────────────────────────────────────────────────────┐│ SSE 샤딩 아키텍처 (B안) │├─────────────────────────────────────────────────────..
-
이코에코(Eco²) Streams & Scaling for SSE #5: SSE Gateway, 단일 Consumer에서 분산 Fan-out까지이코에코(Eco²)/Event Streams & Scaling 2025. 12. 27. 15:28
50+ VU(Virtual Users) 부하 테스트에서 발생한 SSE 연결 병목을 해결하기 위한 단계별 개발 과정을 기록합니다.요약연결당 XREAD → 50 VU에서 CPU 85% 병목단일 SSE-Gateway → 깔끔한 이벤트 수신, 수평확장 불가StatefulSet + Consistent Hash → 해싱 정합성 불일치Fan-out 계층 필요성 ← 현재 단계2. 단일 SSE-Gateway로 전환2.1. 이전 아키텍처 문제점연결당 XREAD 모델 (N:N):┌─────────────────────────────────────────────────────────────┐│ 연결당 XREAD (AS-IS) │├─────────────..
-
Sharding & Routing: 분산 데이터 파티셔닝과 라우팅이코에코(Eco²)/Foundations 2025. 12. 27. 14:27
분산 시스템에서 데이터를 여러 노드에 분산(Sharding)하고 요청을 올바른 노드로 라우팅(Routing)하는 기술.Eco²에서는 Redis Streams 샤딩과 Istio Consistent Hash로 분산 라우팅을 시도했습니다. (현재는 Pub/Sub로 전환)1차 지식생산자핵심 논문논문저자발표핵심 내용Consistent Hashing and Random TreesKarger et al. (MIT)STOC 1997Consistent Hashing 원본 논문Dynamo: Amazon's Highly Available Key-value StoreDeCandia et al.SOSP 2007Virtual Nodes, Quorum, 실제 적용Jump Consistent HashLamping, Veach (Go..
-
Consensus Algorithms: 분산 합의 알고리즘이코에코(Eco²)/Foundations 2025. 12. 27. 13:50
분산 시스템에서 여러 노드가 하나의 값에 동의하도록 하는 합의 알고리즘.Eco²에서는 Redis Sentinel (Quorum 기반)에서 사용합니다.1차 지식생산자핵심 논문논문저자발표핵심 내용In Search of an Understandable Consensus AlgorithmDiego Ongaro, John OusterhoutUSENIX ATC 2014Raft 합의 알고리즘Paxos Made SimpleLeslie Lamport2001Paxos 알고리즘 간소화 설명Impossibility of Distributed Consensus with One Faulty ProcessFischer, Lynch, PatersonJACM 1985FLP Impossibility (합의의 불가능성)공식 문서기술문서핵..