Cloudflare, 수학과 Rust로 RAM 100TB 추가 절감

1 week ago 13

캐시 요청을 서버에 분배하는 Pingora Backend Router(PBR) 를 최적화해 전 세계에서 100TB 이상의 RAM 사용량을 줄임 서버별 부하를 고르게 나누고 저장 용량과 기능 차이를 반영하면서, 요청 배분에 쓰는 해시 데이터만 일부 경우 6GB까지 증가함 해시와 서버 번호를 저장하는 공간을 항목당 8바이트에서 6바이트로 줄여 해당 자료구조의 메모리 사용량을 25% 절감함 수학적 분석과 시뮬레이션으로 해시를 과도하게 늘리면 균등 분배 효과는 작아지고 충돌은 늘어남을 확인해, 부하 균형을 크게 해치지 않고 해시 수를 90% 줄임 요청을 담당하는 서버가 바뀌면서 캐시가 무용해지는 일을 막기 위해 기존 방식과 새 방식을 병행하고, 데이터센터와 트래픽 비율을 나눠 단계적으로 전환함 PBR의 메모리 사용량이 커진 이유 Cloudflare는 전 세계 수천 대의 서버에서 페타바이트 단위 RAM과 수백만 CPU 코어를 사용하며, 모든 노드에서 각 서비스를 실행해야 하므로 작은 낭비도 큰 비용으로 확대됨 1% 단위의 개선도 유효한 규모이며, 이번 절감은 DNS 팀의 앞선 100TB 메모리 절감과 별개임 성능 팀이 내부 부하 분산 서비스 PBR에서 예상보다 큰 메모리 사용량을 발견했고, 원인은 오픈소스 일관된 해싱 라이브러리 pingora-ketama 관련 자료구조에 있었음 일관된 해싱과 부하 편차 일관된 해싱(consistent hashing) 은 서버가 추가되거나 제거되어도 작업 배치를 크게 바꾸지 않고 여러 서버에 작업을 분산하는 방식임 Cloudflare는 캐시 가능한 요청을 URL에 따라 서버로 보내 데이터센터마다 파일 사본 하나만 저장하고, 각 파일의 위치를 안정적으로 찾는 데 사용함 해시 함수는 다양한 입력을 32/64/128비트 부호 없는 정수로 바꾸며, 서버와 작업을 같은 숫자 공간에 배치할 수 있음 서버는 IP 주소, 작업은 캐시 키 등을 해시해 위치를 정함 32비트 수직선 예시에서는 각 작업 왼쪽의 첫 서버에 작업을 할당하며, 마지막 서버의 담당 구간은 시작점으로 이어지므로 링으로 볼 수 있음 서버가 처리하는 요청 비율은 담당 구간의 크기에 비례하지만, 해시 위치가 사실상 무작위라 서버마다 구간 크기가 달라짐 서버 수가 (N)이고 서버당 해시가 하나라면 담당 구간 비율의 기댓값과 표준편차는 다음과 같음 (\mathrm{Exp}=1/N) (\mathrm{SD}=(1/N)\sqrt{(N-1)/(N+1...

Read Entire Article