작업 이력에 완료 표시는 정상인데 로그가 비어 있는 건들이 있었다. 전송이 실패했는데 조용히 넘어간 것으로 보고 마켓 이미지가 깨져 있으리라 판단했다.
Table of contents
Open Table of contents
검토하던 대량 재전송
깨진 것을 고치려면 다시 보내야 하는데 대상이 하루치만 462건이고 전 기간이면 훨씬 많았다. 실행 전 검토에서 재전송 전에 실제 파손 규모부터 측정하라는 지적을 받았다.
맞는 말이었다. 조용하면 깨진 것이라는 전제를 세워 놓고 그것을 확인하지 않은 상태였다.
전수 검증의 비용
먼저 전체를 시험 실행으로 돌려 보니 48분이 넘게 걸렸고 입출력에 묶여 있었다. 이유를 보니 정상인 1천여 건까지 저장소를 전부 조회하고 있었다.
정상인 것을 확인하는 데 대부분의 시간을 쓰는 구조였다. 의심 대상만 좁혀서 변환본이 있는지를 저장소에 존재 여부로만 물으니 수십 초 만에 끝났다. 같은 결론에 도달하는데 100배 차이가 났다.
0.34퍼센트라는 실측
검증 대상 1천여 건 중 실제 파손은 4건이었다. 0.34퍼센트였고 그 4건이 전부 같은 상품이었다.
그 상품을 더 보니 원본은 있고 변환본만 없었다. 업로드는 됐고 변환만 실패한 것이므로 전송 실패가 아니라 변환 파이프라인 문제였다.
뒤집힌 전제와 붕괴한 규모
조용한 것은 전송 실패가 아니라 로그 기록 누락이었고 이미지는 대부분 멀쩡했다. 브로커가 결과를 로그 컬럼에 안 남기는 관찰성 문제였다.
계획이 완전히 달라져서 며칠치 462건씩의 대량 재전송이 상품 하나에 대한 소규모 배치가 됐다. 규모가 붕괴하면서 되돌릴 수 없는 외부 재전송과 워커 과부하라는 두 위험도 함께 사라졌다.
진짜 산출물과 싼 확인
그러면 이 조사의 산출물이 무엇인가를 다시 정했다. 브로커가 결과를 로그에 안 남기는 것을 고치는 일이었고 그러면 앞으로 이런 의심 자체가 안 생긴다.
진짜 문제는 파손이 아니라 안 보이는 것이었다. 규칙으로 둘을 남겼는데 조용한 것을 파손으로 전제하지 않고 재전송 전에 실제 파손 수를 측정하며 전수 시험 실행 대신 의심 모집단만 좁힌다는 것이다. 되돌릴 수 없고 부하가 큰 행동을 할지 정하는 확인이 수십 초였고 비가역 행동 전의 싼 확인은 거의 항상 값어치를 한다.
정리
- 조용하다는 것이 깨졌다는 뜻이 아니고 관찰성 문제일 수 있다
- 비가역 재전송 전에 실제 파손 규모를 잰다
- 전수 시험 실행은 정상인 것을 확인하는 데 시간을 다 쓴다
- 의심 모집단만 좁혀 존재 여부만 확인한다
- 파손이 한 대상에 몰려 있으면 복구 규모가 붕괴한다
- 원본은 있고 변환본만 없으면 전송이 아니라 변환 문제다
- 진짜 산출물이 복구가 아니라 로그 수정일 수 있다
- 비가역 행동 전의 싼 확인은 거의 항상 값어치를 한다