Cloudflare에서 Nginx를 수년동안 사용하고 있었는데 Cloudflare가 점점 커지면서 한계를 느끼게 되었다고 합니다. 그동안은 잘 사용하고 있었지만 Nginx의 워커 구조 상 각 요청이
Cloudflare에서 Nginx를 수년동안 사용하고 있었는데 Cloudflare가 점점 커지면서 한계를 느끼게 되었다고 합니다. 그동안은 잘 사용하고 있었지만 Nginx의 워커 구조 상 각 요청이 하나의 워커에서만 처리가 되기 때문에 CPU 불균형도 발생하고 커넥션풀도 워커마다 할당되기 때문에 커넥션 재사용율이 좋지 않아서 한계를 느끼기 시작했다고 합니다. 이 문제를 해결하기 위해 Nginx를 포크해서 수정할 지 다른 오픈소스로 바꿀지 새로 만들지를 고민했습니다. Nginx에는 이미 전문성이 꽤 있었지만 위에 말한 한계 등으로 인해서 구조를 바꾸려면 쉽지 않아 보였고 Envoy 등의 다른 오픈소스가 있었지만 시간이 지나면 Nginx 와 똑같은 상황에 다다를 것 같아서 직접 Cloudflare의 요구사항에 맞게 만들기로 결정했다고 합니다. Rust로 HTTP 프록시 서버인 Pingora를 만들었고 멀티 스레딩을 이용해서 커넥션 풀을 공유하기로 했다고 합니다. Pingora 도입이후 TTFB(time-to-first-byte)의 중윗값이 5ms이 줄었고 95퍼센타일에서는 80ms 줄었으면 새로운 연결도 1/3로 줄었다고 합니다. 현재 Pingora는 Cloudflare에서 하루 1조 요청을 처리하고 있다고 합니다 .