This repository has been archived by the owner on May 1, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
미디어 서버 선택하기
Heedong Kim edited this page Dec 31, 2021
·
3 revisions
- updated at : 2021.12.31.
- updated by : 희동
- 미디어 서버를 사용하는 이유 : WebRTC 기반 서비스를 지원하기 위한 서버의 종류
- 여러 가지 오픈 소스 중에 활용해볼만한 미디어 서버는 크게 3가지였다.
- 비용을 고려할 때 무료로 활용할 수 있는 오픈 소스 중에서 선택
Kurento | Mediasoup | Janus |
---|---|---|
- 이 중에서 어떤 기준에 의해 미디어 서버를 선택할 것인가?
- 성능
- 지원 언어
- 러닝 커브 및 참고 자료
- 설치 방법
- 모든 미디어 서버에 대해 직접 설치하고 테스팅을 진행할 수 있다면 좋겠지만 시간적 제약이 있기 때문에 조사를 하던 중 2018년 미디어 서버들에 대해 테스팅을 진행한 자료를 찾아볼 수 있었다.
- 앞단에 동일한 환경을 구성하고 각 미디어 서버에 대해서 500명의 사용자를 초대(한 방에 7명)해서 테스팅을 진행
- Jitsi Meet (JVB version 0.1.1077),
- Janus Gateway (version 0.4.3) with its video room plugin,
- Medooze (version 0.32.0) SFU app,
- Kurento (from OpenVidu Docker container, Kurento Media Server version 6.7.0),
- Mediasoup (version 2.2.3)
- 다른 미디어 서버와 비교했을 때 성능이 매우 좋지 못함
- 500명을 수용하기 위한 테스트에서 50명을 수용하는 지점부터 문제가 발생
- 좋음
성능을 고려할 때에는 mediasoup 또는 janus gateway를 활용하는 것이 바람직하다.
Kurento | Mediasoup | Janus |
---|---|---|
Java | Javascript | Java |
- 결국 미디어 서버를 실행시켜도 연결할 시그널링 서버와 같이 개발할 때를 고려해야한다.
- 현재 언어를 Java를 기반으로 개발을 진행하고 있기 때문에 mediasoup을 사용하는 경우 js기반의 node 애플리케이션을 개발해야 한다.
언어적인 측면에서 볼 때 현재 Java를 활용하고 있기 때문에 kurento 또는 janus를 활용하는 것이 바람직하다.
물론 node로 충분히 개발할 수 있기 때문에 완전히 배제할 필요는 없다고 생각된다.
Kurento | Mediasoup | Janus |
---|---|---|
Good | Normal | Bad |
- kurento의 경우 참고할만한 자료가 많다. 공식 사이트에서 제공하는 tutorial 및 상황별 demo 코드가 존재하고 관련된 포스트가 많다.
- mediasoup의 경우 kurento에 비해서는 아니지만 참고할만한 자료들이 존재한다. WebRTC 애플리케이션의 코드를 확인하면 대부분의 포스트나 자료들이 js 기반의 애플리케이션이기 때문에 참고할만한 자료들이 있다.
- janus의 경우 거의 없다.
기간이 정해져 있고, 스트리밍 기능 외에 다른 기능들을 구현하고 성능을 개선하는 것을 고려할 때 빠르게 학습하고 활용할 수 있는 kurento가 바람직하다.
Kurento | Mediasoup | Janus |
---|---|---|
Good | Normal | Bad |
- Kurento의 경우 우분투 환경에서 명령어 한 줄로 미디어 서버를 설치할 수 있다.
- mediasoup도 이미지를 당겨받아서 실행할 수 있다.
- janus의 경우 미디어 서버인 janus gateway를 실행하기 위해 설치해야 할 별도의 라이브러리가 매우 많다.
janus를 활용하는 경우 설치 및 실행이 까다롭기 때문에 기한 내에 오픈 소스의 이해를 바탕으로 한 실행이나 확장이 힘들 것으로 보인다.
항목 | Kurento | Mediasoup | Janus |
---|---|---|---|
성능 | Bad | Good | Good |
지원 언어 | Java | JavaScript | Java |
러닝 커브 및 참고 자료 | Good | Bad | Bad |
설치 방법 | Good | Normal | Bad |
- 이 외에도 클라이언트와 협업할 때 클라이언트에서 편하게 개발하고 접근이 가능한지, 계속 버전이 업데이트 되고 관리되는지 등 추가적으로 고려해야 할 사안이 많다.
- 다만 현재 조사한 내용과 기간 내의 목표를 바탕을 고려해서 미디어 서버를 선택하고자 한다.
- 이번 프로젝트에서 내 목표는 서버 아키텍처에 대한 전반적인 이해와 성능 개선의 경험이 목적이다.
- 따라서 목표를 바탕으로 했을 때 내가 선택한 미디어 서버는 Kurento이고, 이유는 다음과 같다.
- 서버 아키텍처에 대한 전반적인 이해가 MSA를 활용한 아키텍처도 있고, 스트리밍 서비스를 지원하기 위한 구조도 존재한다. 그 점을 고려했을 때 어떤 미디어 서버를 활용하던 미디어 서버를 활용한 아키텍처를 설계한다는 것은 본질에서 벗어나지 않는다.
- 고려하고 있는 미디어 서버들이 모두 OSS이고, 내가 커스터마이징할 수 있는 폭이 그렇게 넓지 않을 것을 예상했을 때 사실상 성능 비교는 오픈 소스로 존재하는 미디어 서버 간의 성능 비교일 뿐 내가 개선한 성능이 아니다.
- 정해진 기간 내에 학습, 개발, 완성을 고려해야 한다.
- 이 부분에서 절감한 시간을 채널 관리나 메세지 관련 기능에서 고민 및 노력을 통해 내 주도적으로 성능 개선을 경험해보자.
- 미디어 서버 부하 테스트 비교 : https://webrtchacks.com/sfu-load-testing/