Skip to content

[Fix] Embedding 재시도 Jitter 집중 완화 #370

Description

@Gimini-3

배경

IndexingRetryDelayPolicy는 지수 Backoff를 최대 지연으로 제한한 뒤 양방향 Jitter를 적용하고, 초과분을 다시 최대 지연으로 잘라낸다. 이 때문에 Backoff가 상한에 도달하면 상한을 넘은 난수 결과가 모두 같은 retryMaxDelay로 합쳐진다.

또한 Circuit OPEN 또는 Provider Retry-After가 애플리케이션 Backoff보다 길면 max(jitteredDelay, minimumRetryDelay)가 최소 지연을 그대로 반환한다. 같은 최소 지연을 받은 Job은 동일한 재시도 시각에 가까워져 Circuit HALF_OPEN 시점 또는 Provider 허용 시점에 DB Claim과 상태 전이가 집중될 수 있다.

목표

  • 최대 지연 이하의 유효 구간 안에서 Jitter를 선택해 retryMaxDelay 한 점으로의 집중을 제거한다.
  • Provider가 요구한 최소 대기를 위반하지 않는 방향으로 제한된 Jitter를 적용한다.
  • 난수 입력을 통제할 수 있게 해 하한·중간·상한 경계값을 반복 가능한 단위 테스트로 검증한다.
  • 기존 지수 Backoff, Jitter 비활성화, 입력 검증 계약을 유지한다.

완료 조건

  • Backoff가 최대 지연에 도달해도 Jitter 결과가 허용 구간에 분산된다.
  • Circuit·Retry-After 최소 지연보다 이른 시각은 반환하지 않는다.
  • 긴 최소 지연에 과도한 추가 지연을 붙이지 않도록 양의 Jitter 폭을 제한한다.
  • 결정적 단위 테스트와 관련 Backend 테스트가 통과한다.

비범위

  • Sync Outbox 재시도 정책 변경
  • Circuit Breaker 분산 상태 저장
  • Circuit·지연 Job Micrometer 메트릭
  • Grafana 대시보드
  • Retry-After HTTP-date 지원

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions