피드로 돌아가기
How we found a bug in the hyper HTTP library
Cloudflare BlogCloudflare Blog
Infrastructure

hyper 라이브러리 Race Condition 해결을 통한 대용량 이미지 데이터 손실 방지

How we found a bug in the hyper HTTP library

Matt Lewis2026년 6월 22일16advanced

Context

Cloudflare Images 서비스의 응답 경로에서 FL 인터미디어리 서비스를 제거하고 Unix Socket 기반의 직접 연결 구조로 재설계함. 네트워크 스택 오버헤드 제거를 통해 성능을 개선했으나, 특정 조건에서 응답 데이터가 일부 누락되는 간헐적 버그 발생.

Technical Solution

  • FL 서비스의 릴리스 주기 의존성을 제거하기 위해 내부 Worker Binding을 통한 Unix Socket 통신 구조 도입
  • HTTP/1 구현체인 hyper 라이브러리가 내부 버퍼의 데이터를 Socket Outbound 버퍼로 완전히 flush 하기 전 Socket Shutdown을 수행하는 Race Condition 식별
  • 응답 데이터 크기가 크고 리더의 처리 속도가 느릴 때, 커널 버퍼 포화 상태에서 데이터 유실이 발생하는 병목 지점 파악
  • Socket 종료 전 poll_flush 호출을 강제하는 4라인의 코드 수정을 통해 잔여 데이터 전송 보장
  • Application 레벨 로그의 한계를 극복하기 위해 strace 커널 툴링을 사용하여 Socket 레벨의 실제 데이터 흐름 검증

- 고성능 통신 설계 시 Application Layer의 200 OK 응답과 실제 데이터 전송 완료 시점이 일치하는지 검증 - 간헐적 데이터 유실 발생 시 `strace` 등 시스템 콜 레벨의 트레이싱 도구를 활용한 커널 버퍼 분석 수행 - 외부 라이브러리 업데이트 시 Socket Shutdown 전 Flush 절차가 명시적으로 포함되어 있는지 확인

원문 읽기