문제
현재 문서 Embedding은 실제 PDF 실측으로 batch-size와 read-timeout을 조정했지만, 모델 실행 경계에 전역 동시성 제한과 bounded queue가 없다. 여러 Worker 또는 검색 요청이 동시에 BGE Provider에 유입되면 같은 모델 프로세스에서 계산이 중첩되어 Peak RSS 증가, OOM, 긴 대기 후 timeout이 발생할 수 있다.
고정 batch-size는 청크별 문자·토큰 편차도 반영하지 못한다.
작업 범위
- 문서 청크의 문자 수와 저장된 token count를 함께 사용하는 adaptive batch
- Provider 모델 실행 semaphore 기본값 1
- 실행 1건과 대기 1건을 허용하는 bounded queue
- 대기열 초과 요청의 HTTP 429 빠른 실패
- Provider 과부하와 연결·응답 장애의 오류 분류 분리
- 단일·동시·과부하 부하에서 메모리·OOM·응답 지연 검증
- 실제 PDF v1→v2→v3 검색 가능 버전 전환 회귀 검증
- 설계 문서와 실측 결과 기록
기본 안전 설정
- 최대 batch item: 4
- 최대 batch code points: 4,000
- 최대 estimated tokens: 900
- Provider 최대 동시 실행: 1
- Provider 최대 대기 요청: 1
- 대기 permit timeout: 15초
- 문서 read timeout: 기존 30초 유지
완료 기준
- adaptive batch가 입력 순서와 응답 결합 순서를 보존한다.
- 실제 모델 encode 최대 동시 실행 수가 1을 넘지 않는다.
- 대기열이 가득 찬 추가 요청은 timeout 전에 HTTP 429로 거절된다.
- 실행 예외 후에도 semaphore permit이 반환된다.
- 실제 PDF 반복·동시성 1/2 부하에서 성공률 100%, OOM 0건을 달성한다.
- 동시성 4 과부하에서 429가 관측되고 Provider가 생존하며 OOM이 발생하지 않는다.
- Job 성공률, 재시도, 요청 p95/p99, 문서 전체 처리시간, Peak RSS, OOM, 처리량, 최신 검색 버전 전환을 개선 전후로 기록한다.
- 실행 결과는
docs/test-results/, 설계는 docs/design/에 기록한다.
제외 범위
- 지수 backoff·jitter·circuit breaker
- Container restart policy·resource limit
- Prometheus 지표·운영 경보
문제
현재 문서 Embedding은 실제 PDF 실측으로 batch-size와 read-timeout을 조정했지만, 모델 실행 경계에 전역 동시성 제한과 bounded queue가 없다. 여러 Worker 또는 검색 요청이 동시에 BGE Provider에 유입되면 같은 모델 프로세스에서 계산이 중첩되어 Peak RSS 증가, OOM, 긴 대기 후 timeout이 발생할 수 있다.
고정 batch-size는 청크별 문자·토큰 편차도 반영하지 못한다.
작업 범위
기본 안전 설정
완료 기준
docs/test-results/, 설계는docs/design/에 기록한다.제외 범위