RAM 100TB 추가 절감

2 weeks ago 12

Cloudflare가 내부 부하 분산 서비스 Pingora Backend Router(PBR) 의 일관된 해싱 구현을 최적화해 전 세계에서 100TB 이상의 RAM을 회수함 서버별 부하를 고르게 나누기 위한 해시, 저장 용량에 따른 가중치, 기능 조합별 별도 링이 겹치면서 해시 저장 공간이 일부 경우 6GB까지 커짐 Rust 구조체의 정렬 제약을 피해 해시와 서버 인덱스를 6바이트 배열에 저장하면서 일관된 해싱의 메모리 사용량을 25% 절감함 해시를 늘릴수록 부하 균등화 효과는 줄고 32비트 해시 충돌은 늘어남을 확인해, 유의미한 오차 증가 없이 서버별 해시 수를 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}=(...

Read Entire Article