Cloudflare, Zstandard와 Pingora로 캐시 저장 공간을 페타바이트 단위로 절약할 수 있는 방법
We could save petabytes of cache storage with Zstandard and Pingora

Cloudflare는 인턴십 프로젝트로 Cache Transcoding 시스템을 프로토타이핑했습니다. 이 시스템은 Pingora 프록시에서 Zstandard(zstd) 압축을 사용하여 캐시에 저장되는 자산을 인코딩합니다. 초기 테스트에서 적격 자산의 평균 디스크 크기가 1/3로 줄었고, CPU 비용은 소폭 증가했지만 저장 공간과 데이터 센터 간 대역폭을 크게 절약할 수 있었습니다. 이 기사는 zstd의 선택 이유, 압축 대상 선정 기준, 캐시 계층 간 압축 전송 방식, 그리고 100만 건 이상의 요청을 통한 성능 테스트 결과를 자세히 설명합니다.
인코딩 비용은 자산이 캐시에 들어올 때 한 번만 지불되지만, 저장 공간 및 대역폭 절약 효과는 자산이 재사용될 때마다 계속해서 발생합니다.
HN 토론
26- r3trohack3r
주제와 약간 벗어나지만, 저도 몇 년 전에 비슷한 접근 방식으로 npm 레지스트리를 디스크에서 90% 이상 압축한 적이 있습니다. 패키지의 대부분 버전은 서로 비슷하기 때문에, 먼저 델타 인코딩을 적용한 다음 압축할 수 있습니다. 델타는 작고 원본 소스 파일과 함께 모아서 압축하면 잘 압축됩니다.
또 다른 사용 사례로, 압축하기 전에 롤링 해시를 적용하여 파일을 결정적으로 분할했습니다. 그런 다음 청크를 압축하고 CID 파일 시스템에 저장했습니다. 그 결과, 대체로 유사한 파일들은 압축된 청크를 공유하게 됩니다.
우리가 가진 컴퓨터를 훨씬 더 효율적으로 사용하기 위해 할 수 있는 일이 많지만, 엔지니어는 종종 하드웨어보다 비용이 더 듭니다. 최근 공급망 제약으로 그 계산이 바뀌고 있습니다!
- thinkindie
클라이언트가 압축을 지원한다면, 원본이 압축되지 않은 파일을 제공하더라도 파일을 압축하여 제공하지 않는 이유는 무엇인가요?
- CodesInChaos
이것이 범위 요청에 어떤 영향을 미치는지 혼란스럽습니다. 압축하지 않으면 캐시된 전체 파일의 관련 부분을 읽어 쉽게 충족할 수 있습니다. 그런데 지금은 어떻게 처리되나요? 기사에서는 "범위 요청은 변경되지 않습니다"라고 주장하지만, 캐시가 더 이상 압축되지 않은 데이터를 저장하지 않는다면 어떻게 가능한지 이해가 되지 않습니다.