[AI] FastAPI 서버가 사용하는 임베딩 캐시와 GPU 요청 메시지 큐도 Backend 서버와 같은 Redis에 함께 올려도 될까? - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
1. 문제 제기
[ "현재 VPC에는 백엔드 서버에서 사용하는 Redis 서버가 이미 존재하는데, FastAPI 서버가 사용하는 임베딩 캐시와 GPU 요청 메시지 큐도 같은 Redis에 함께 올려도 될까?” ]
2. 다중 인스턴스 환경에서의 인메모리 임베딩 캐시의 한계
-
FastAPI 서버가 단일 인스턴스일 때는, 임베딩 결과를 인스턴스의 로컬 메모리에 저장(LRU 캐시 등)하여 빠르게 재사용하는 것이 가장 효율적이다.
-
하지만 서비스가 수평 확장되어 여러 인스턴스로 분산되면 문제가 발생한다:
문제점 설명 캐시가 인스턴스마다 분리됨 인스턴스 A에서 계산한 임베딩을 인스턴스 B에서는 사용할 수 없음 중복 연산 발생 같은 이미지가 여러 인스턴스에 들어오면 중복 임베딩 계산이 발생 후속 작업이 실패할 수 있음 임베딩 결과를 기반으로 하는 카테고리 분류, 중복 사진 판별 등에서 캐시 miss 발생 가능 -
즉, 인메모리 캐시는 단일 인스턴스 환경에서는 최적이지만,
다중 인스턴스 환경에서는 캐시 일관성이 깨지므로 한계가 있다.
3. 해결책: 임베딩 캐시를 중앙 Redis 서버에 저장
-
서비스가 확장된 이후에는, 임베딩 캐시도 중앙 Redis 인스턴스에 저장하여 모든 인스턴스가 공통으로 조회할 수 있도록 설계하는 것이 필요하다.
-
장점
항목 설명 중복 계산 제거 임베딩된 이미지를 재사용 가능 → GPU 부하 감소 후속 작업 일관성 확보 어떤 인스턴스든 동일한 임베딩에 접근 가능 메시지 큐와 함께 Redis에서 통합 관리 가능 Redis의 공간만 나누면 됨 ( cache:
,queue:
등)
4. Redis 하나를 백엔드와 FastAPI가 같이 써도 될까?
-
기술적으로는 가능하지만, 다음과 같은 이유로 분리 운영을 권장한다
이유 설명 용도/패턴 차이 백엔드는 세션 캐시 ( GET/SET
), FastAPI는 메시지 큐 (LPUSH/BLPOP
), embedding (pickle
저장 등)장애 전파 위험 큐 작업 폭주 시 전체 Redis 지연 → 백엔드에도 영향 운영 설정 분리 eviction, maxmemory, RDB 설정 등을 용도에 맞게 최적화 가능 모니터링 방식도 다름 백엔드는 latency 중심, AI Redis는 처리량/큐 길이 중심
5. 권장 구성
Redis 인스턴스 | 용도 | 사용 서비스 |
---|---|---|
redis-backend |
세션 캐시, 로그인 정보 등 | 백엔드 서버 |
redis-ai |
이미지 임베딩 캐시, GPU 요청 메시지 큐 | FastAPI 서버, Worker |
6. 결론
-
단일 인스턴스 환경에서는 인메모리 캐시로도 충분했지만,
다중 인스턴스로 확장된 이후에는 임베딩 캐시 역시 중앙 Redis에 저장하는 구조로 전환해야 한다.
-
또한 Redis는 용도에 따라 **AI용(캐시 + 큐)**과 **백엔드용(세션)**으로 나누어 운영하는 것이 안정성, 확장성 모두에서 유리하다.