브라이트코브가 첫 바이트까지의 시간을 단축하기 위해 빠르게 사용하는 방법

알렉스 버신 사진
알렉스 버신

거의 모든 비디오 재생 세션의 시작점인 Playback API는 가장 트래픽이 많은 브라이트코브 서비스 중 하나입니다. 또한 약 10년 동안 브라이트코브의 비디오 스트림을 지원해온 가장 오래된 서비스 중 하나이기도 합니다.

이 블로그 게시물에서는 사용자가 브라이트코브에 기대하는 높은 수준의 가용성과 확장성에 부합하도록 서비스를 완전히 재작성하고, 재설계하고, 투명하게 교체한 방법을 살펴볼 것입니다.

재생 API란 무엇인가요?

사용자가 브라이트코브 플레이어가 포함된 웹페이지를 로드하면 가장 먼저 재생 API를 호출하여 비디오 다운로드 및 재생을 시작하는 데 필요한 모든 정보를 검색합니다.

플레이어가 호출하는 URL은 다음과 같으며, 여러 동영상의 사전 정의 또는 검색 기반 재생 목록을 허용하는 변형이 있습니다:

API URL

그 대가로 동영상에 대한 메타데이터와 동영상 매니페스트 파일의 URL이 포함된 대용량 JSON 블록을 받게 됩니다.

보안

이 API에 대한 보안은 특정 상황에서만 특정 동영상을 재생할 수 있도록 계정 ID, 지역 허용 및 거부 목록, 도메인 이름 목록을 포함할 수 있는 인코딩된 JSON 블롭인 PolicyKey를 통해 제공됩니다. 이러한 키 중 하나가 없으면 항상 재생이 거부됩니다.

이러한 제한 사항은 브라이트코브의 CMS에 계정별 및 비디오별 수준으로 저장할 수도 있습니다.

왜 변경해야 할까요?

Playback API의 첫 번째 화신은 오랫동안 잘 작동했지만, 동영상 재생 흐름을 구성하는 다른 동적 전송 서비스와 비교했을 때 노후화된 모습을 보이기 시작했습니다. 특히나 그랬죠:

  • 미국 내 단일 지역에서 호스팅됩니다. 따라서 이 지역에 문제가 발생하면 전 세계 사용자에게 재생이 실패할 수 있었습니다. 또한 호주나 일본과 같은 지역에서 호출할 때 비디오 시작 시간이 많이 지연되었습니다.
  • 캐싱이 어렵고 업데이트 반영 속도가 느립니다. 부분적으로 콘텐츠 전송 네트워크(CDN)를 사용했지만, 사용자가 동영상 메타데이터나 매니페스트의 변경 사항을 확인하기 위해 너무 오래 기다리지 않도록 짧은 시간 동안만 캐싱할 수 있었습니다.
  • 다른 동적 전송 서비스(Go)와 다른 언어 (Clojure)로 작성되었습니다.
  • 확장하기 어려움특히 지역 차단 또는 IP 화이트리스트를 사용하는 동영상의 경우 더욱 그렇습니다. 특정 재생 요청의 출처를 조회하고 동영상의 제한 사항과 일치시키기 위해 타사 서비스를 사용했기 때문에 이러한 제한이 적용될 때마다 CDN을 우회해야 했습니다:빈 다이어그램(2)

동영상을 전송할 때 시청자가 가장 원활한 스트리밍 환경을 위해 지리적으로 가까운 곳에서 동영상을 다운로드할 수 있도록 최대한 많은 콘텐츠를 캐싱하기 위해 CDN에 크게 의존하고 있습니다. 재생 API 요청은 시청자와 선택한 동영상이 재생되기 시작하는 사이에 위치하기 때문에 콘텐츠가 캐시되지 않으면 시청자가 다른 콘텐츠를 보기 위해 이탈할 가능성이 커지고 대기 시간이 길어집니다.

동영상이나 오디오 청크의 경우 CDN 캐싱은 비교적 간단하지만, 시청자 위치, IP, 동영상을 시청하는 웹사이트, 프록시 또는 VPN 사용 여부에 따라 요청을 허용하거나 거부할 수 있는 API의 응답(예: "비디오 X에 대한 정보 가져오기")을 캐시하려고 하면 문제가 더 복잡해집니다.

또한 이러한 제한 사항을 올바르게 적용하려면 클라이언트 측 정책 키와 서버 측 계정 구성 및 동영상 메타데이터를 결합해야 합니다.

비전 - 모든 것을 항상 캐시

특히 강력한 VCL 언어를 통해 오리진에 다시 요청할 필요 없이 고급 로직을 수행할 수 있는 Fastly를 동적 전송 내 CDN 중 하나로 사용하고 있습니다.

모든 요청에 지리적 위치 변수 집합을 추가하여 CDN에서 재생 API 응답을 무기한 캐시하고 응답 액세스와 관련된 모든 로직을 Fastly 내에서 수행할 수 있는 설계를 생각해냈습니다.

오리진에서 지역 제한 결정을 내리는 데 필요한 모든 데이터를 응답 본문과 함께 CDN에 반환하도록 하여 이를 수행했습니다:PAPI 1먼저 CDN은 요청된 동영상이 이미 캐시에 있는지 확인합니다. 그렇지 않은 경우 재생 API를 호출하여 검색합니다.PAPI 2그런 다음 재생 API는 CMS API를 호출하여 동영상에 대한 모든 정보와 동영상별 또는 계정별 수준에서 저장될 수 있는 모든 시청 제한 사항을 검색합니다.PAPI 3재생 API는 정책 키를 디코딩하고 CMS API에서 발견한 제한 사항 위에 정책 키의 제한 사항을 오버레이한 다음 표준 응답 본문과 함께 HTTP 헤더로 반환합니다.PAPI 4이제 Fastly는 방금 요청한 시청자에게 응답을 반환하거나 거부하고 응답과 헤더를 캐시에 저장하므로 다음에 이 동영상에 대한 요청이 들어올 때 Fastly 내에서 모든 로직을 수행하여 원본으로 이동하는 것을 피할 수 있습니다.

캐시 무효화 - 쉬운 문제

이제 CDN에서 무기한 캐싱을 하고 있었으므로 다음 문제는 동영상에 변경 사항(설명 수정, DRM 활성화, 지역 제한 변경 등)이 발생하거나 동영상을 소유한 계정에 변경 사항(예: IP 화이트리스트에 새 IP 추가)이 발생하는 등 필요한 경우 해당 캐시를 삭제하는 방법이었습니다.

이전 시스템의 순진한 접근 방식은 20분 후에 새 복사본을 가져오는 헤더를 설정하는 것이었는데, 이는 사용자가 변경 사항이 반영될 때까지 기다려야 하는 최대 시간을 의미했습니다.

새로운 아키텍처와 Fastly의 대리 키를 통해 무기한 캐싱과 변경 사항 발생 시 거의 즉각적인 업데이트라는 두 가지 장점을 모두 제공할 수 있도록 개선했습니다.

첫 번째 단계는 이러한 대리 키 사용을 시작하는 것이었습니다. 재생 API는 서로게이트 키 헤더 세트가 포함된 응답을 반환하는데, 이 헤더 세트는 Fastly가 CDN 캐시 항목에 포함된 값(예: 서로게이트 키: video-id-132413 account-id-938456)으로 태그를 지정하도록 지시합니다. 이제 한 번의 Fastly API 호출로 특정 동영상 ID 또는 특정 계정 ID에 대한 모든 동영상을 자동으로 삭제할 수 있습니다.

다음으로, 동영상이나 계정에 변경 사항이 있을 때마다 알려주는 CMS API가 전송하는 변경 피드에 재생 API를 구독했습니다:PAPI 5

이 퍼지 작업이 완료되면 다음 요청이 들어올 때 변경 사항이 포함된 새 복사본이 재생 API에서 수신됩니다.

요약 - 성공했나요?

예!

Go로 작성되고, 컨테이너화되어 여러 글로벌 지역에 배포되며, 필요에 따라 자동 확장되는 새로운 Playback API를 통해 기존 시스템의 한계를 극복할 수 있었습니다.

새로운 CDN 아키텍처를 통해 이제 모든 재생 API 요청을 캐시할 수 있으며, 높은 캐시 적중률이 시청자의 '첫 바이트 도달 시간'을 크게 개선하는 것으로 이어지고 있습니다. 특히 아시아 및 호주 지역에서 플레이어 데이터를 공유하는 한 고객은 응답 시간이 평균 300ms에서 50ms 이하로 단축된 것으로 나타났습니다. 동영상이 빠르게 재생되기 시작하면 모두가 더 행복해지기 때문입니다.

공유 

브라이트코브는 가장 유명한 자동차 시장에서 방대한 레거시 비디오 라이브러리를 관리하고 수익을 창출할 수 있도록 지원합니다....
브랜드 무결성을 유지하기 위해 리테일 브랜드는 색상, 글꼴 등을 조정할 수 있는 맞춤형 동영상 플레이어가 필요합니다.
시청자에게 특별한 동영상 콘텐츠를 제공하는 Savoir média

시작할 준비가 되셨나요?

브라이트코브로 영상 마케팅 성과와 ROI를 높이는 방법을 알아보세요. 지금 문의하시면 자세히 상담해드립니다.