피드로 돌아가기
Dev.toBackend
원문 읽기
PHP Fibers 도입을 통한 HTTP Fan-out 지연시간 2,050ms에서 440ms로 단축
PHP Fibers in Production: 4 Real Cases Where They Beat curl_multi and Queues
AI 요약
Context
기존 PHP 환경의 동기적 I/O 구조로 인한 순차적 API 호출 병목 발생. Queue 도입은 오버헤드가 크고 curl_multi는 API 복잡도가 높아 유지보수가 어려운 한계 존재.
Technical Solution
- Cooperative Multitasking 기반의 Coroutine인 Fiber를 도입하여 단일 프로세스 내 실행 스택 제어
- 각 HTTP 요청을 개별 Fiber에 할당하고 Fiber::suspend()를 통해 I/O 대기 시간 동안 제어권을 스케줄러로 반환
- curl_multi_exec()를 활용한 폴링 루프 스케줄러가 완료된 핸들을 감지하여 해당 Fiber를 resume()
- Promise나 Callback 체인 없이 동기적 코드 스타일을 유지하며 비동기 I/O 처리
- Try/Catch 구문을 그대로 활용하여 비동기 흐름 내 예외 처리 복잡도 제거
- Producer와 Consumer 간의 처리 속도 차이를 조절하는 Backpressure 메커니즘 구현
실천 포인트
- 병렬 HTTP Fan-out이 필요한 구간에 Fiber 기반 스케줄러 도입 검토 - CPU Bound 작업이나 PDO 연결과 같이 Suspend 지점이 불분명한 로직에는 적용 제외 - Fiber 내부 로직을 짧게 유지하고 복잡한 에러 핸들링 시 Result-style 객체 반환 패턴 사용 - 프레임워크 전체 교체 대신 특정 핸들러 단위로 Amp 또는 react/async를 통한 부분 적용 시도