전체 글
-
Blacklist에 Outbox 패턴을 도입하고 잠시 잡담잡담 2025. 12. 30. 18:44
ext-authz의 성능을 극대화하는 방향으로 기존 로그아웃 로직(Redis 직접 조회)을 로컬 캐시 조회로 수행하도록 디벨롭했다.위 작업이 기존의 Persistence Layer(Redis) 직접 접근과 동일하게 수행되려면 로컬 캐시와 레디스 간의 정합성을 맞춰야한다. 절차를 안내하면 아래와 같다.Logout 엔드포인트 호출Auth에서 Redis에 직접 접근해 Blacklist에 JWT 저장Logout Event 발행 (Publisher)RabbitMQ에서 Fanoutext-authz에서 Event 수신 (Subscriber)로컬 캐시 업데이트위 방식으로 Eventual Consistency를 구성하면, 대다수의 케이스에서 정합성이 유지가 된다. 성능은 RPS 기준 1200->1500으로 +25% 상승..
-
이코에코(Eco²) Eventual Consistency #4: Blacklist Relay Worker 구현이코에코(Eco²)/Eventual Consistency 2025. 12. 30. 15:35
1. 전체 디자인1.1 시스템 개요①auth-api → RabbitMQ정상 발행 (99%+)②auth-api → RedisMQ 실패 시 Outbox 적재③Redis → auth-relay1초마다 폴링④auth-relay → RabbitMQOutbox 이벤트 재발행⑤RabbitMQ → ext-authzFanout 브로드캐스트1.2 데이터 흐름단계컴포넌트동작①Redis BlacklistSETEX token:blacklist:{jti} {ttl}②Publisherbasic_publish() 시도③Outbox → Relay실패 시 LPUSH → RPOP → republish④RabbitMQFanout 브로드캐스트⑤ext-authzcache.Store(jti, entry) 2. 주요 컴포넌트2.1 컴포넌트 의존성..
-
이코에코(Eco²) Eventual Consistency #3: ext-authz 로컬 캐시 일관성 보장 설계이코에코(Eco²)/Eventual Consistency 2025. 12. 30. 15:12
1. 문제 정의1.1 현재 아키텍처에서 발생할 수 있는 불일치┌─────────────────────────────────────────────────────────────────────────────┐│ 현재 아키텍처 (Best Effort) │├─────────────────────────────────────────────────────────────────────────────┤│ ││ User Logout ..
-
Eventual Consistency 트러블슈팅: Character Rewards INSERT 멱등성 미보장 버그 픽스이코에코(Eco²) Context/Troubleshooting 2025. 12. 30. 14:32
날짜: 2025-12-30영향 범위: my.user_characters 테이블, 캐릭터 인벤토리 조회심각도: Medium (데이터 중복, UX 영향, 해결 전 표기 13/13)0. 부하테스트 수행 기록이 버그는 12월 28-29일간 집중 부하테스트 과정에서 발견.총 13회의 k6 부하테스트를 수행하며 Scan SSE 파이프라인의 성능을 검증했고, 그 과정에서 캐릭터 보상 중복 저장 문제가 발생.부하테스트 요약#VUsDurationScan TotalCompletion RateSuccess Rate11002m1,15096.0%100%21002m1,02098.5%100%32002m1,83199.8%100%42502m2,13199.9%100%53002m2,53899.9%100%64002m3,38598.2%100..
-
이코에코(Eco²) Eventual Consistency #2: ext-authz 2500 VUs 부하 테스트이코에코(Eco²)/Eventual Consistency 2025. 12. 30. 12:11
테스트 실행: Locust VUs 2500/ramp-ups: 250, Observability: Prometheus/Grafana, Locust 1. 테스트 환경https://snapshots.raintank.io/dashboard/snapshot/JbEhJRXD1vCt77ZOfCxy9N72wXJ3ZyKj GrafanaIf you're seeing this Grafana has failed to load its application files 1. This could be caused by your reverse proxy settings. 2. If you host grafana under subpath make sure your grafana.ini root_url setting includes su..
-
이코에코(Eco²) Eventual Consistency #1: ext-authz Blacklist 로컬 캐시 및 Fanout 구현이코에코(Eco²)/Eventual Consistency 2025. 12. 30. 11:48
이전 글: ext-authz 로컬 캐싱 설계개요설계 문서에서 제안한 로컬 캐시 + MQ 브로드캐스트 아키텍처를 구현하고 검증한 과정을 기록합니다.1. 구현 결과 요약1.1 메트릭 검증ext_authz_blacklist_cache_size 7 ← 캐시에 7개 유지ext_authz_blacklist_cache_evictions_total 0 ← eviction 없음ext_authz_mq_events_received_total 1 ← MQ 이벤트 수신ext_authz_mq_events_processed_total 1 ← 처리 성공1.2 동작 흐름┌────────────────────────────────────────────────────..
-
이코에코(Eco²) Eventual Consistency #0: ext-authz 로컬 캐싱 설계이코에코(Eco²)/Eventual Consistency 2025. 12. 29. 20:55
아이디어: Worker 로컬 캐시와 RabbitMQ Fanout 기반 동기화관련 부하 테스트: ext-authz 부하 분석개요ext-authz의 JWT Blacklist 조회를 Redis 원격 호출에서 로컬 캐시 + MQ 브로드캐스트 방식으로 전환하여 인증 레이턴시와 Redis Single Queue 병목을 해소하는 것이 목표입니다.1. 현재 아키텍처 분석1.1 현재 흐름┌──────────────────────────────────────────────────────────────────┐│ 매 요청마다 Redis 호출 │└─────────────────────────────────────────────────────────..
-
Scan API 600 VUs Load Test: 처리량 포화 분석 리포트이코에코(Eco²) Context/Performance 2025. 12. 29. 20:36
Date: 2025-12-29 19:30~19:40 KSTTest Duration: 270.1s (4m30s)Result: 33.2% Completion Rate (Throughput Saturation)Overviewhttps://snapshots.raintank.io/dashboard/snapshot/AIAkKSCF1y6UbA4URziiwD0bbdLPOvBe GrafanaIf you're seeing this Grafana has failed to load its application files 1. This could be caused by your reverse proxy settings. 2. If you host grafana under subpath make sure your grafana...