본문 바로가기

개발/WebRTC

6. WebRTC 성능 비교(P2P vs SFU)

WebRTC 이론부터 구현까지
1. WebRTC 정리하기

2. WebRTC 구현 방식
3. WebRTC 구현하기(1:1 P2P)
4. WebRTC 구현하기(1:N P2P)
5. WebRTC 구현하기(1:N SFU)
6. WebRTC 성능 비교(P2P vs SFU)

1. 서론

지난 포스팅을 마지막으로 P2P(Mesh)와 SFU 방식의 1:N 화상회의 WebRTC 구현을 마쳤다. 구현의 마지막은 항상 성능 테스트 아닌가 해서 정말 간단하게 성능 테스트를 진행해봤다. 테스트를 위해서는 서버와 클라이언트가 독립적인 공간이 좋았겠지만 상황상 불가능했다는 것을 이해해줬으면 한다.

2. 성능 테스트(Performance Test)

2-1. 기기(Devices)

device description
CPU AMD Ryzen 5 3600 6-Core Processor 3.59GHz
RAM 32GB
CPU NVIDIA GeForce RTX 2060 SUPER
OS Windows 10 Pro

2-2. 환경 설정(Settings)

모든 client들과 server는 한 기기에서 실행됐다.

위에서 말하는 1:N 방식은 일반적인 화상 회의를 기준으로 한다.

2-3. Client Side Performance(Chrome browser CPU usage)

모든 client들이 한 기기에서 실행되므로 CPU 점유율은 Chrome browser를 기준으로 책정했다.

the number of users P2P/Mesh(Signaling Server) SFU(Media ServeR)
2 4% 5%
3 10% 8%
4 22% 9.5%
5 34% 18%
6 47% 25%
7 64% 30%
8 80% 30%

2-4. Server Side Performance(CPU usage)

server를 node.js로 구현했으므로 CPU 점유율은 Node.js 프로세스를 기준으로 책정했다.

the number of users P2P/Mesh(Signaling Server) SFU(Media ServeR)
2 0.1% 2%
3 0.1% 13%
4 0.1% 24%
5 0.1% 32%
6 0.1% 41%
7 0.1% 48%
8 0.1% 50%

 

3. 결과 정리(Results)

3-1. SFU Server(Media Server)

client가 6명이 되었을 때부터 몇몇 영상에서 실시간 성이 급격히 감소했다.

client가 7명 이상일 때는 몇몇 영상이 몇 초간 멈춰있는 등의 심한 부하가 발생했다.

Server Side에서는 Signaling Server에 비해 매우 높은 CPU 점유율을 보였다.

Client Side에서는 Signaling Server에 비해 절반 정도의 CPU 점유율을 보여, 확실히 Client 쪽 부하가 줄어든 것을 볼 수 있었다.

3-2. Signaling Server (P2P/Mesh)

client가 증가함에 따라 조금씩 영상들에서 delay와 실시간성 감소가 느껴졌지만 영상이 멈추진 않았다.

Server Side의 CPU 점유율이 client의 증가에 상관없이 0.1%로 유지됐다.

Client Side의 CPU 점유율이 client가 증가함에 따라 매우 크게 증가했다.

4. 느낀 점

이 포스팅으로 정말 정말 정말 WebRTC 관련 글은 끝이다. 미디어 서버는 돈 많은 사람들만 만드는 것인가 하는 느낌이 들기도 하지만 원래 SFU 서버는 다수의 화상회의보다는 실시간 스트리밍이 적합하기 때문에 관련 테스트도 해보고 싶긴 하다. YouTube 스트리밍이나 아프리카 TV, 트위치 등과 같이 스트리밍을 하는 경우 한 명이 송출하고 다른 사람은 받기만 하면 되는 구조이기 때문에 SFU 서버는 이보다 훨씬 성능이 좋게 나올 것이라 예상해볼 수 있다. 어쨌든 이러한 점들을 뒤로한 채 추후에 WebRTC를 써볼 일이 있으면 이어서 포스팅을 해보도록 하겠다. 사실 화면 공유, P2P 파일 공유 등과 같은 작업을 해보고 싶긴 했는 데 일단 바쁜 일이 마무리되면 해보도록 하겠다. 아무튼 작년부터 시작한 WebRTC 관련 포스팅을 올해 초에 마무리하게 돼서 기쁘고 이 포스팅들이 다른 사람들에게 도움이 됐으면 한다.

[GitHub]

1:N P2P WebRTC

 

Seung3837/Typescript-ReactJS-WebRTC-1-N-P2P

simple 1:N P2P WebRTC with ReactJS, Typescript, Node.js - Seung3837/Typescript-ReactJS-WebRTC-1-N-P2P

github.com

1:N SFU WebRTC

 

Seung3837/Typescript-ReactJS-WebRTC-1-N-SFU

simple 1:N SFU WebRTC as a MediaServer with ReactJS, Typescript, Node.js - Seung3837/Typescript-ReactJS-WebRTC-1-N-SFU

github.com

[관련 포스팅]

1:N P2P WebRTC

 

4. WebRTC 구현하기(1:N P2P)

WebRTC 이론부터 구현까지 1. WebRTC 정리하기 2. WebRTC 구현 방식 3. WebRTC 구현하기(1:1 P2P) 4. WebRTC 구현하기(1:N P2P) 5. WebRTC 구현하기(1:N SFU) 1. 서론 지난 시간에는 WebRTC를 이용한 1:1 P2P 통..

surprisecomputer.tistory.com

1:N SFU WebRTC

 

5. WebRTC 구현하기(1:N SFU)

1. 서론 지난 시간에는 WebRTC를 이용한 1:N P2P 통신에 대해서 포스팅했다. SFU 방식에 대해 포스팅을 할까 말까 고민을 했는 데 그래도 하는 게 낫지 않을까 싶어 이렇게 글을 남긴다. SFU는 Media Serve

surprisecomputer.tistory.com

WebRTC의 서버 구현 방식

 

2. WebRTC 구현 방식

WebRTC 이론부터 구현까지 1. WebRTC 정리하기 2. WebRTC 구현 방식 3. WebRTC 구현하기(1:1 P2P) 4. WebRTC 구현하기(1:N P2P) 5. WebRTC 구현하기(1:N SFU) 1. 서론  저번 포스트에서 작성했듯이 WebRTC는 ICE,..

surprisecomputer.tistory.com

 

'개발 > WebRTC' 카테고리의 다른 글

5. WebRTC 구현하기(1:N SFU)  (2) 2021.01.20
4. WebRTC 구현하기(1:N P2P)  (0) 2021.01.19
3. WebRTC 구현하기(1:1 P2P)  (9) 2021.01.18
2. WebRTC 구현 방식  (3) 2021.01.17
1. WebRTC 정리하기  (0) 2021.01.16