요약:
Cloudflare는 최근 1.1.1.1 공용 DNS 확인자에서 사용하는 캐시 메모리를 크게 줄여 전체 네트워크에서 약 100TB의 메모리를 확보했습니다. 이러한 최적화에는 서버 하드웨어 교체나 메모리 모듈 제거가 포함되지 않지만 DNS 데이터를 캐싱하는 소프트웨어 저장 방법을 개선하여 달성됩니다.

이 작품은 주로 빅 파인애플을 중심으로 전개됩니다. Big Pineapple은 1.1.1.1 확인자, DNS 방화벽 및 기타 여러 DNS 서비스를 지원하는 Cloudflare의 캐싱 플랫폼입니다. Cloudflare 시스템 엔지니어 Sebastiaan Neuteboom은 기술 블로그에서 일반적인 단일 DNS 캐시 레코드가 차지하는 공간을 953바이트에서 420바이트로 줄이는 Rust 코드 기반의 5가지 조정 사항을 소개했습니다.
최적화된 시스템 실행 속도도 향상되었습니다. Cloudflare에 따르면 캐시 삽입 처리량은 초당 625,000개 항목에서 초당 893,000개 항목으로 증가했으며 쿼리 대기 시간은 828나노초에서 670나노초로 감소했습니다. 5월 중순부터 7월 초까지 배포 과정에서 인스턴스당 99번째 백분위수 메모리 사용량이 9.3GB에서 5.3GB로 감소했습니다.
Cloudflare는 Big Pineapple이 항상 2,500억 개 이상의 DNS 레코드를 캐시한다고 주장합니다. 이렇게 큰 규모에서는 레코드당 낭비되는 아주 작은 양의 메모리라도 상당한 양이 됩니다. 회사에서는 캐시 항목에서 차지하는 모든 불필요한 바이트에 대해 전체 서버 클러스터가 250GB 이상의 추가 메모리를 소비하는 것으로 추정합니다.
중요한 변경 사항 중 하나는 Rust의 Vec 및 String 유형과 관련이 있습니다. 이러한 컨테이너는 동적으로 확장되도록 설계되어 실제 데이터 외에 용량 등의 추가 정보가 저장됩니다. 그러나 DNS 레코드는 캐시에 입력된 후에 확장할 필요가 없습니다. 그런 다음 Cloudflare는 이러한 구조를 고정 크기 박스형 슬라이스로 대체하여 더 이상 유용하지 않은 메타데이터를 제거했습니다. 회사에 따르면 이번 조정만으로도 15TB 이상의 메모리가 절약됐다.
엔지니어들은 DNS 응답이 메모리에 정렬되는 방식도 재설계했습니다. 이전에는 Big Pineapple이 각 응답에 대해 세 가지 레코드 목록 세트를 저장했습니다. 새로운 디자인은 모든 레코드를 동일한 버퍼에 넣은 다음 2바이트 오프셋을 사용하여 각 레코드의 위치를 식별합니다.
이제 캐시는 단순히 쿼리 중인 도메인 이름과 중복될 때 소유자 이름을 더 이상 유지하지 않고 대신 응답이 반환될 때 다시 작성됩니다. 또한 시스템은 대신 길이 접두사가 있는 원시 DNS 라인 형식 바이트를 사용하여 레코드 데이터를 저장하여 이전 설계에서 낭비되는 공간 문제를 해결합니다. 이전에는 4바이트만 차지했던 IPv4 A 레코드가 144바이트를 차지했고, Cloudflare에서 캐시하는 가장 큰 DNS 레코드 유형인 비교적 희귀한 NAPTR 레코드도 마찬가지였습니다. 가변 길이 원시 데이터 형식으로 전환하면 가장 긴 레코드와 동일한 공간을 예약하기 위해 더 짧은 레코드가 필요하지 않습니다.
Cloudflare가 전체 서버 클러스터에서 회수한 100TB 메모리는 대략 13세대 서버 130대의 메모리 용량과 같습니다. 각 서버에는 768GB DDR5-6400 메모리가 장착되어 있습니다. Cloudflare는 이 세대의 서버에 1152GB 메모리 구성을 고려했지만 고용량 메모리 비용을 평가한 후 결국 포기했습니다.
이 메모리 공간을 통해 Cloudflare는 DNS 캐시 크기를 확장할 계획입니다. 더 많은 레코드를 로컬에 보관하면 캐시 적중률이 향상되고 권한 있는 DNS 서버에 대한 요청 트래픽이 줄어들 것으로 예상됩니다.
Cloudflare가 대규모 메모리 효율성 최적화를 수행한 것은 이번이 처음이 아닙니다. 작년에 이 회사는 또한 요청 처리를 담당하는 FL2 레이어를 Rust 코드로 다시 작성했습니다. 서버 메모리 가격이 상승함에 따라 소프트웨어 최적화를 통해 기존 인프라의 잠재력을 활용하는 것이 단순히 하드웨어를 추가하는 것보다 비용 효율적일 수 있습니다.
댓글