개발 일지
디스코드의 웹소켓 트래픽 40% 절감 방법
음악
2024. 12. 3. 09:17
원문
https://discord.com/blog/how-discord-reduced-websocket-traffic-by-40-percent
How Discord Reduced Websocket Traffic by 40%
How we rolled out zstandard and other improvements across our gateway cluster to reduce the amount of bandwidth that’s used by our clients.
discord.com
새 프로젝트에서 웹소켓을 사용하고 있어 관련 정보를 검색하다가 많은 양의 트래픽을 처리하는 디스코드의 기술 블로그와 트래픽 절감에 대한 글을 발견했습니다.
디스코드는 음성, 텍스트 채팅과 영상 스트리밍이 가능한 앱으로 데스크탑, 모바일 기기 모두에서 사용할 수 있고 매우 많은 사용자를 보유하고 있습니다.
원문의 내용을 간단히 요약해보겠습니다.
요약
- 디스코드에서 주로 IOS, Android 등 모바일 클라이언트의 대역폭을 절감하고 응답 성능 개선을 위해 6개월 동안의 개선 작업을 시도
- 기존에 사용하던 zlib 보다 더 높은 압출률과 속도를 제공하는 zstandard로 변경 시 실제로 개선되는지 실험
- 스트리밍 압축을 사용하는 zlib과 그렇지 않은 zstandard의 차이로 인해 개선되지 않음
사실 zstandard는 스트리밍 압축을 지원하지만 디스코드의 게이트웨이 개발에 사용되는 elixir/erlang에서 스트리밍 압축이 지원되는 zstandard 라이브러리를 찾을 수 없었으므로 디스코드에서는 ezstd 라이브러리를 선택 후 스트리밍 압축이 지원되도록 직접 작업하여 기여함 - 스트리밍 압축을 사용하는 zstandard는 zlib보다 유의미하게 개선됨
원문 차트를 보면 페이로드의 압축 크기는 270 바이트 -> 166 바이트로 절반 가까이 감소하고 압축 속도는 바이트 당 100ms -> 45ms로 두배 이상 빨라짐 - 그 후 더 큰 개선 효과를 위해 zstandard의 다양한 압축 옵션을 실험
636 바이트의 원본 페이로드의 압축 크기가 466 바이트 -> 187 바이트까지 감소되는 결과를 얻었으나
실제 프로덕션에서는 오히려 압축 크기가 커지는 문제를 발견했고 큰 이점이 없어 실험 종료 - 그 후 zstandard의 스트리밍 버퍼를 조정하는 작업도 진행했지만 이득이 적어 롤백
- 개선 작업은 여기서 끝나지 않았고 zstandard 실험 후 우연히 디스코드의 패시브 세션에서 추가적인 개선점을 발견
- 불필요한 데이터 전송을 줄이고 전체 대역폭이 게이트웨이 대역폭의 35%에서 5%로 절감됨, 전체 클러스터 기준 20% 절감
결과적으로 zstandard 도입과 패시브 세션을 v2로 개선하여 네트워크 대역폭을 40% 절감할 수 있었다고 합니다.
아래의 이미지는 원문에서도 볼 수 있는 실제 디스코드 게이트웨이의 네트워크 대역폭 사용량 차트입니다.
오늘은 디스코드의 기술 블로그 글 중 하나를 살펴보았습니다.
트래픽 절감 외에도 대용량 트래픽 처리 환경에서 데이터베이스 선택 등 도움이 되는 다른 글도 있습니다.
이 글이 도움이 되셨다면 좋겠습니다.