Skip to content

마감 임박 행의 claim 을 걸러 폐기될 실행을 막는다 #822

Description

@m-a-king

claim(dispatch)·revive(recover)가 created_at 을 보지 않아, 마감(3분)이 임박한 행도 그냥 집는다. 집힌 뒤 실행이 마감을 넘기면 그 결과는 expire 에 선점돼 100% 폐기된다 — extractor 를 호출하고 LLM 비용을 태운 뒤 버리는 것이다.

실측 기준(#802 당시):

슬롯 8개가 전부 최악(read timeout 55초) 작업 중 → 평균 6.9초마다 슬롯 1개 회전
마감 180초, 실행 55초  →  t > 125 에 집히면 결과는 폐기 확정
그 창(125~180)에 회전하는 슬롯 = 약 8건

지속 과부하에서는 백로그 뒤쪽이 계속 이 경로를 타므로, 부하가 심할수록 헛된 호출이 늘어난다.

무엇을

claim·revive 대상에서 "마감 잔여 < 임계" 행을 제외하고 바로 마감 종결로 넘긴다.

단, 착수 전에 트레이드오프를 먼저 판단해야 한다.

  • 임계값이 곧 "전형 실행시간" 추정이다. 파싱 되살림 판정을 heartbeat 기반으로 전환 - 느린 워커 stale 오판 제거 #802 가 통째로 제거한 것이 바로 그 시간 추정("단건 ≤60s")이었다. 고정 상수를 박으면 같은 종류의 가정이 되돌아온다.
  • 대안: 고정 상수 대신 관측된 실행시간 분위수(p95 등) 를 쓰거나, extractor 응답 지연 추세에 연동
  • 선행 조건: reason=deadline 메트릭으로 실제 빈도를 먼저 관측한다. 빈도가 무시할 수준이면 이 이슈는 닫는 게 맞다 — 헛된 호출 8건을 막으려고 추정 상수를 되살릴 가치는 없을 수 있다.

관련: #802 (마감 도입 및 이 한계를 인지하고 남긴 곳)

Metadata

Metadata

Assignees

Labels

perf성능 개선 (측정 가능, 외부 동작 불변)

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions