클라우드플레어(Cloudflare)가 자사의 인기 DNS 서비스인 1.1.1.1의 캐시 메모리 최적화를 통해 막대한 자원을 절약했다고 발표했습니다. 이번 개선으로 무려 100테라바이트(TB)의 메모리를 절감했으며, 이는 130대의 서버에 해당하는 RAM 용량입니다. 동시에 캐시 삽입 처리량(insert throughput)은 43% 증가하고 조회 지연 시간(lookup latency)은 19% 감소하는 등 성능 향상까지 이뤄냈습니다.
클라우드플레어의 '빅 파인애플(Big Pineapple)' 플랫폼은 1.1.1.1을 포함한 여러 DNS 서비스의 기반으로, 항상 2,500억 개 이상의 DNS 캐시 엔트리를 저장합니다. 이처럼 방대한 규모에서는 단 1바이트(byte)의 낭비도 전체 시스템에서 250기가바이트(GB) 이상의 메모리 손실로 이어집니다. 클라우드플레어는 캐시 엔트리 저장 방식을 다섯 단계에 걸쳐 최적화하여 엔트리당 메모리 사용량을 50% 이상 줄였습니다. 특히 EDNS 클라이언트 서브넷(ECS)을 사용하는 경우, 클라이언트 네트워크에 따라 다른 응답을 캐시해야 하므로 엔트리 수와 메모리 소비가 더욱 늘어나는데, 이번 최적화가 이런 환경에서 특히 큰 효과를 발휘했습니다.
주요 최적화 기법으로는 Rust 언어의 `Vec<T>`와 `String` 타입을 `Box<[T]>`와 `Box<str>`로 대체하여 불필요한 용량(capacity) 필드와 초과 할당된 힙(heap) 공간을 제거한 것이 있습니다. 이 변경만으로 엔트리당 64바이트를 절약하고 총 15TB 이상의 메모리를 확보했습니다. 또한, 여러 개의 레코드 리스트를 하나의 리스트와 오프셋(offset)으로 통합하여 포인터(pointer)와 길이 필드를 줄였고, 여러 불리언(boolean) 필드를 단일 비트플래그(bitflag)로 압축하여 패딩(padding)으로 인한 메모리 낭비도 최소화했습니다. 이처럼 세밀한 메모리 구조 개선을 통해 클라우드플레어는 대규모 분산 시스템에서 효율성을 극대화하는 모범 사례를 보여주었습니다.
