스트리밍 CDN에서 총 사용량 구하기
여기 하나의 회사가 있다고 가정해보겠습니다. 이 회사는 라이브 이벤트를 진행하는 회사로 CDN을 통해 스트리밍 서비스(HLS)를 구축하였으며 이벤트 당일 단일 스트림으로 1.25Mbps(비트레이트)로 영상 송출을 하였습니다.
여기서 올바른 모니터링 데이터가 산출되고 있는지 확인하기 위해 동일한 시간의 피크 트래픽과 동시접속자 수를 확인 및 비교하였습니다. 예를 들어 15:30 피크 트래픽이 1.71Gbps
이고 동시 접속자 수가 624명
이라면 1.25Mbps * 624 = 780Mbps(0.78Gbps)
라는 결과를 얻게 됩니다. 하지만 0.78Gbps는 실제로 피크 트래픽으로 찍힌 1.71Gbps의 반도 못미치는 결과입니다.
여기서 간과한 사실은 무엇일까요?
이러한 수치 차이가 나는 이유는 HLS 통신의 특성상 m3u8 내 ts 파일 리스트를 미리 버퍼에 채워 놓기 때문입니다. 그래서 비트레이트는 1.25Mbps일지라도 2 ~ 3개 이후의 ts 파일을 선수신해야 하므로 트래픽이 대략 2배 정도 차이가 나거나 HLS 설정에 따라 더 차이가 날 수도 덜 날수도 있습니다.
HLS 특징
HLS(HTTP Live Streaming) 통신의 특성상 동영상 스트리밍에서 발생하는 트래픽은 단순히 비디오 비트레이트와 동시접속자 수를 곱해서 계산한 것보다 더 높을 수 있습니다.
세그먼트 방식
: HLS는 미디어 파일을 여러 개의 작은 세그먼트(ts 파일)로 나누어 전송하며 일반적으로 이 세그먼트의 길이는 2 ~ 10초 사이입니다.m3u8 플레이리스트
: 클라이언트는 m3u8 플레이리스트 파일을 주기적으로 다운로드하여 다음에 재생할 세그먼트의 정보를 가져옵니다.버퍼링
: 클라이언트는 재생을 시작하기 전에 여러 개의 세그먼트를 미리 다운 로드하여 버퍼에 저장합니다. 이렇게 함으로써 네트워크 지연이나 장애가 발생했을 때도 재생을 계속할 수 있습니다.
즉, 비트레이트와 동시접속자 수를 곱한 값이 실제 피크트래픽과는 차이가 있을 수 있는데 이 차이에는 세그먼트 길이, 네트워크 상태, 플레이어 설정(버퍼 크기, 세그먼트 수)에 따라 차이가 더 날 수도 덜 날 수도 있게 됩니다.
여기까지 위 HLS 특성을 고려하면 실제 피크 트래픽을 동시접속자수와 비트레이트를 곱한 값과 비교하였을 때 차이가 난다는 것을 알게 되었습니다.
그렇다면 어떻게 정확한 CDN 사용량을 측정할 수 있을까요?
CDN 사용량의 정확한 측정을 위해서는 요청 수 대비 받아간 총 전송량을 비교해야 합니다.
예를 들어, 위에서 15:30 시간대의 데이터를 비교하였지만 여기서는 11:00 시간대의 데이터를 비교한다고 가정하겠습니다. 모니터링 데이터를 확인한 결과, 11:00 시간대의 요청 수는 380,480일 때 올바른 데이터인지 검증하기 위해 먼저 (1.25Mbps)메가로 표현된 비트레이트를 비트단위(1,250,000bps)로 표현합니다. 380,480과 1,250,000을 곱한 뒤에 8로 나눕니다. 그러면 59,450,000,000Byte(59,45Gbyte)임을 알 수 있습니다.
- 전송량(byte) = 요청 수 * 초당 비트레이트(bps) / 8