오디오 스트리밍 서비스의 시스템 디자인

오디오 스트리밍 앱의 시스템 디자인은 독특한 비즈니스 요구 사항을 처리하는 방식에서 차별화됩니다. 일반적으로 오디오 스트리밍은 네트워크 통신 채널의 제한된 대역폭 내에서 대량의 데이터 전송을 요구합니다.

성공적인 오디오 스트리밍 서비스는 다양한 지리적 위치에서 수백만 명의 활성 사용자와 수천 명의 콘텐츠 제공자를 처리해야 합니다. 다양한 장치와 플랫폼(스마트폰, 데스크톱, 스마트 스피커)은 MP3, FLAC, ALAC 등과 같은 서로 다른 오디오 형식을 지원할 수 있습니다.

이 블로그 포스트에서는 기능적 및 비기능적 요구 사항을 포함하여 이러한 복잡한 시스템 디자인의 뉘앙스를 탐구할 것입니다.

기능 요구 사항

기능 요구 사항은 콘텐츠 제작자와 오디오 사용자 또는 청취자에게 필요한 기능을 다룹니다.

  • 콘텐츠 관리. 콘텐츠 제작자는 모든 형식의 오디오를 업로드, 삭제 또는 업데이트할 수 있습니다. 각 오디오는 제목, 저자, 설명, 카테고리 및 메타데이터 태그와 같은 메타데이터를 가져야 합니다.
  • 알림. 콘텐츠 제작자는 업로드한 오디오의 성공 또는 실패에 대한 알림을 받습니다. 오디오 청취자 또는 사용자는 오디오의 성공적인 업로드에 대한 알림을 받습니다.
  • 원활한 스트리밍. 사용자는 선택한 형식의 오디오를 재생, 일시 정지, 되감기 및 다운로드할 수 있습니다.
  • 구독. 사용자는 원하는 오디오를 구독하여 새로운 또는 업데이트된 콘텐츠에 대한 알림을 받을 수 있어야 합니다.
  • 사용자 로그인. 콘텐츠 제작자는 인증되고 시스템에 액세스할 수 있는 권한이 있어야 합니다. 사용자는 시스템에 등록하여 프로필을 설정할 수 있습니다.
  • 검색. 사용자는 특정 속성이나 메타데이터를 기반으로 오디오를 검색할 수 있어야 합니다.

참고: 라이브 스트리밍 및 결제 서비스는 이 기사의 범위를 벗어납니다.

기능 사용 사례의 순서도

아키텍처 설계

기능 요구 사항을 지원하기 위한 서비스 구성 요소를 정의해 봅시다.

첫 번째 기능 요구 사항은 MP3, FLAC, ALAC 등의 형식을 사용하여 오디오를 업로드하는 것입니다. 이러한 오디오 파일은 많은 데이터를 보유할 수 있습니다. 오디오 코덱은 데이터를 효율적으로 저장, 전송 및 재생하는 데 중요한 역할을 합니다. 주로 두 가지 유형의 코덱이 있습니다:

  1. 무손실 코덱 – 데이터의 손실 없이 오디오를 압축하고 품질을 잃지 않고 완전히 복원할 수 있습니다.
  2. 손실 코덱 – 일부 데이터를 제거하여 크기를 크게 줄이는 데 도움을 줍니다. 이로 인해 음질이 손상될 수 있습니다.

콘텐츠 제공자는 일반적으로 녹음 및 편집을 위해 무손실 형식을 사용합니다. 이를 통해 오디오를 처리하고 효과를 적용하며 최종 제품을 마스터하는 과정에서 품질이 손실되지 않습니다. 간단히 말해, 오디오 마스터링은 오디오 제작 과정의 마지막 단계입니다.

최종 오디오가 마스터링된 후, 일반적인 배포를 위해 손실 압축 형식으로 변환됩니다. 손실 압축 형식을 사용하면 크기가 크게 줄어들어 스트리밍 및 다운로드가 쉽고 빠릅니다.

압축된 오디오는 지원되는 네트워크 대역폭을 통해 청취자 장치로 전송되어야 합니다. 대역폭은 사용자의 연결 수 또는 사용자가 오디오를 청취하는 동안 네트워크 존을 옮겨 다닐 때 변경될 수 있습니다.

변동하는 네트워크 대역폭을 지원하기 위해 코덱은 “적응 비트 속도” 메커니즘을 사용할 수 있습니다. 적응 비트 속도 스트리밍은 실시간으로 사용자의 대역폭을 감지하고 이에 따라 스트림을 조정합니다. 사용자의 현재 대역폭에 따라 비트 속도 스트리밍을 동적으로 전환할 수 있습니다. 이로 인해 버퍼링이 적어지고 시작 시간이 빨라지며 고급 및 저급 연결 모두에게 좋은 경험을 제공합니다.

인코더는 오디오 파일의 단일 소스를 다양한 비트 속도로 인코딩합니다. 이 바이트 스트림은 패키지화되어 청취자가 이용할 수 있도록 객체 저장소에 저장됩니다. 오디오가 성공적으로 업로드되면 알림 서비스가 콘텐츠 제공자에게 알림을 보냅니다.

 

콘텐츠 제작자는 오디오 업로드를 요청하면서 메타데이터를 추가로 제공하며, 이는 오디오 데이터 서비스를 통해 NoSQL DB에 직접 저장될 수 있습니다. 이 데이터는 오디오 청취자에게 더 나은 검색 기능을 제공하기 위해 색인화됩니다.

오디오 시스템은 새로운 사용자 등록, 사용자 자격 증명을 사용한 로그인, 그리고 사용자(청취자 및 콘텐츠 제공자)에 연관된 역할에 기반한 권한 부여를 처리하기 위한 인증 및 권한 부여 서비스가 필요합니다. API 게이트웨이 서비스를 통해 중앙에서 인증 및 권한 부여를 관리할 수 있습니다. 이 서비스는 요청 라우팅을 수행하고 프론트엔드에서 백엔드 서비스로의 프로세스 흐름을 조정하는 데 활용될 수 있습니다.

오디오 사용자(청취자)는 관심 있는 오디오를 검색할 수 있으며, 이는 오디오 데이터 서비스에 전달되어 관련 오디오의 위치를 반환하고, 오디오 메타데이터 저장소에서 정보를 가져옵니다. 사용자가 링크를 클릭하면 패키지 서비스에 의해 패키지되고 저장된 오디오 바이트가 반환됩니다.

사용자 프로필 서비스는 사용자 선호도, 팔로워 및 팔로잉을 관리합니다.

위 다이어그램은 콘텐츠 제공자에 의해 트리거된 기본 “오디오 업로드” 프로세스 흐름과 오디오 사용자/청취자에 의해 트리거된 “오디오 듣기” 프로세스 흐름을 보여줍니다.

파이프라인 및 필터링 설계 패턴과 메시지 대기열을 사용하여 서비스 간의 데이터 흐름을 지원하고 병렬 처리와 장애 허용성을 통해 프로세스를 효율적으로 확장하고 있습니다.

이제 비기능 요구 사항으로 이동합시다.

비기능 요구 사항

  • 확장성. 시스템은 수천 명의 동시 사용자를 지원하고 성장 및 축소할 수 있어야 합니다.
  • 장애 허용성. 시스템은 장애 허용성이 있어야 하며 일반적으로 중복 데이터를 사용하여 다운타임을 최소화해야 합니다.
  • 성능. 시스템은 콘텐츠 재생 중 낮은 지연 시간과 높은 응답성을 가져야 합니다.
  • 보안. 시스템은 무단 액세스나 DDoS와 같은 해로운 공격으로부터 안전해야 합니다.

확장성 

오디오 시스템은 수천 명의 활성 콘텐츠 제작자를 지원할 수 있어야 합니다. 부하를 관리하기 위해 설계에는 로드 밸런서가 앞에 있는 API 게이트웨이 서비스, 앱 웹 서비스 및 오디오 데이터 서비스의 여러 인스턴스를 실행하는 것이 포함되어 있습니다.

그러나 콘텐츠 제작자 수가 증가함에 따라 확장성이 부족할 것입니다. 오디오 파일은 일반적으로 크며, 여러 서비스 구성 요소를 통과하는 동안 높은 네트워크 및 컴퓨팅 파워를 사용할 것입니다. 시스템 자원 사용을 최적화하기 위해 사전 서명된 URL(사전 서명된 URL로도 알려짐)을 사용하여 오디오 파일을 직접 업로드할 수 있는 객체 저장소에 대한 시간 제한된 액세스를 제공할 수 있습니다. 이를 통해 트래픽을 API 게이트웨이 및 API 웹 서비스를 통해 경유할 필요가 없어집니다. 서명된 URL은 더 나은 보안을 위해 세밀한 권한 및 만료 규칙으로 구성할 수 있습니다.

이는 콘텐츠 제공업체가 오디오 파일을 업로드하는 확장성 요구 사항을 다룹니다.

오디오 청취자로부터 수백만 개의 검색 요청이 시스템에 도래할 수 있어 오디오 데이터 서비스가 과부하될 수 있습니다. 이 거대한 검색 작업을 지원하는 시스템을 확장하기 위해 콘텐츠 쿼리 책임 분리(CQRS) 디자인 패턴을 사용할 수 있습니다. 데이터 저장소로의 읽기 및 쓰기 작업을 독립적으로 관리하여 서로 다른 지연 시간, 확장성 및 보안 요구 사항을 지원할 수 있습니다.

 

장애 허용성

장애 허용성 디자인에는 다양한 차원이 있습니다. 그 중 일부는 이미 디자인에 포함되어 있습니다.

  • 확장성 및 장애 허용성을 위해 서비스의 여러 인스턴스 사용
  • 파이프라인 처리를 통한 메시지 대기열 처리를 통한 데이터 흐름 수준의 장애 허용성 지원
  • 트랜스코더 서비스와 패키지 서비스의 분리
  • 복제본을 사용한 여러 DB 인스턴스
  • 미국 동부, 미국 서부 및 아시아 태평양과 같은 지리적 지역에 맞는 가용 영역을 사용하여 특정 지역과 사용자 집합을 지원하는 전체 시스템의 배포.

성능

콘텐츠 전송 네트워크(CDN)는 오디오 및 비디오 파일과 같은 콘텐츠를 더 빠르고 효율적으로 전달하기 위해 그룹화된 분산 서버 네트워크입니다. 엣지 서버에서 콘텐츠를 캐시하여 낮은 지연 시간으로 더 나은 성능을 제공합니다. 

보안

CDN은 DDoS 방어 및 기타 몇 가지 보안 조치를 제공하여 보안을 향상시킵니다.

패키지 서비스는 오디오 파일을 엣지 서버에 캐시하기 위해 CDN에 배포할 것입니다. 오디오 데이터 서비스는 CDN의 위치를 메타데이터에 업데이트하여 사용자가 쿼리할 수 있도록 검색 서비스로 라우팅될 것입니다.

 

위 다이어그램은 전형적인 오디오 시스템의 고수준 구성 아키텍처를 보여줍니다.

결론

좋은 오디오 시스템의 핵심은 확장성, 성능 및 오류 허용성으로 최소 왜곡, 낮은 지연 및 신뢰성을 제공하여 사용자가 좋은 경험을 할 수 있습니다.

Source:
https://dzone.com/articles/system-design-of-an-audio-streaming-system