Rust intern saved TikTok $300K
- TikTok Live 결제 서비스의 Go 기반 백엔드가 높은 CPU 사용률(90% 이상)로 인해 성능 병목 현상을 겪고 있었음. 🚨
- 인턴 Woo는 이 문제를 해결하기 위해 CPU 집약적인 Go 엔드포인트를 Rust로 재작성하기로 결정함. 🧑💻
- Rust의 제로 비용 추상화, 정밀한 메모리 제어, 가비지 컬렉션 오버헤드 없음 등 성능 이점을 활용하고자 함. ✨
- 새로운 Rust 마이크로서비스 대신, 기존 Go 서비스와 동일한 이름으로 별도의 Rust 클러스터에 CPU 집약적 엔드포인트를 배포하고 트래픽을 점진적으로 전환하는 방식을 채택함. 🛣️
- 이 접근 방식은 상위 서비스 코드 변경 없이 기존 테스트 재사용 및 문제 발생 시 Go 서비스로의 쉬운 롤백을 가능하게 함. 🛡️
- Rust 재작업 시 Go의 제로 값과 Rust의
Option enum 처리, 소유권 규칙에 따른 데이터 구조 조정 등 언어 간 미묘한 차이에 주의를 기울여야 했음. 🧩
- 불필요한 메모리 할당을 줄이고 데이터 지향 설계를 통해 캐시 사용을 최적화하여 성능을 극대화함. ⚙️
- 실제 프로덕션 트래픽을 스테이징 환경에서 재현하여 Go와 Rust 버전의 응답을 비교하고, 부하 테스트로 성능과 CPU 사용량을 검증함. 📊
- 결과적으로 Rust 서비스는 평균 지연 시간을 약 30% 단축하고, P99 지연 시간을 76% 감소시켰으며, 동일한 처리량에서 CPU 리소스를 절반만 사용함. 📉
- 이 Rust 구현으로 TikTok은 연간 30만 달러의 컴퓨팅 비용을 절감할 수 있을 것으로 추정됨. 💸
- Woo는 Rust가 마법이 아니며, 성능 향상과 개발 생산성 감소라는 트레이드오프가 존재한다고 강조함. ⚖️
- Go는 "80/80 언어"로, 80%의 성능과 80%의 개발 생산성을 제공하여 좋은 균형을 이룬다고 평가함. 🧘
- Rust는 기존 구현 최적화 후, 높은 사용량으로 재작성 노력이 정당화되는 "규모의 경제"가 있거나 자주 수정되지 않는 핵심 컴포넌트에 적합하다고 제안함. 💡
- 핵심은 Go 대 Rust의 대결이 아니라, 특정 작업에 가장 적합한 도구를 현명하게 선택하는 스마트 엔지니어링에 있음. 🛠️