P2P 애플리케이션 / 비디오 스트리밍과 CDN

P2P 애플리케이션 / 비디오 스트리밍과 CDN

단순 P2P구조

클라이언트-서버 구조의 확장성 문제로 등장한 P2P구조

항상 접속 가능한 서버가 없다.

임의의 종단 시스템 간에 자율적인 통신이 가능하다.

peer들 간에 비정기적으로 통신하고 IP주소를 수시로 변경한다. (모니터링 안됨)

사례로는 비트토렌트(파일배포), 스카이프(VoIP)가 있다.

파일 분배

P2P가 등장하게 된 가장 큰 이유는 파일 분배이다.

크기 F인 파일을 한 대의 서버에서 N개의 peer한테 배포할 때 소요시간을 계산한다고 하자.

만약 클라이언트-서버 구조의 경우라면 아래의 이미지와 같은 흐름으로 데이터가 전송될 것이다.

각각의 클라이언트들은 서버가 가지고 있는 파일을 다운로드 한다. 이 때, N개의 컴퓨터가 모두 다운로드를 위해 서버를 접속하므로 병목지점은 서버쪽에서 데이터를 내려주는 지점(Us)이 된다. N번의 다운로드가 발생한다.

(우분투가 실제 파일 크기는 2-3기가 밖에 되지 않으면서 다운로드 시간이 오래 걸리는 이유이다.)

그렇다면 P2P구조는 어떻게 데이터를 전송할까?

1번 컴퓨터가 서버에서 파일을 다운로드했다고 가정하자. 그렇다면 그 옆의 2번 컴퓨터는 서버에서 직접 다운로드를 하는 것이 아니라 1번으로부터 다운로드한다. 이런 순서대로 i번 컴퓨터는 2번 컴퓨터에서 파일을 가져오고, 마지막의 n번 컴퓨터는 서버에서 가지고 오든, 피어에서 가지고 오든 상관없이 아무곳에서 파일을 다운로드 할 수 있다.

이런 과정으로 파일이 전송되기 때문에 병목 현상을 해결할 수 있고, 파일 분배 시간을 줄일 수 있다는 이점이 있다.

클라이언트-서버 구조와 P2P구조의 파일 분배 시간을 비교

클라이언트-서버구조 : 클라이언트가 늘어남에 따라서 파일 다운 시간이 선형으로 증가한다.

P2P구조 : 클라이언트가 늘어나더라도 그만큼 다운 제공이 가능한 피어들이 늘어나기 때문에 증가폭이 좁다.

비디오 스트리밍

비디오 트래픽은 인터넷 대역폭의 주요 사용자라고 한다.

(비디오 트래픽은 횟수는 적지만 데이터 내용이 많다)

특히나 비디오 플랫폼으로 핫한 넷플릭스나 유튜브 등으로 가정 ISP 트래픽에서 다운 스트림의 50퍼센트 이상을 차지한다. 전 세계 유튜브 사용자는 10억명이라고 한다.

그렇다면 10억명이 동시에 동일한 영화를 보려고 할 때 엄청난 비디오 트래픽이 발생할텐데,

이를 어떻게 지원할 수 있을까? 이것은 '확장성'의 문제이다.

고성능의 단일 비디오 서버로 엄청난 규모의 트래픽을 감당할 수 있을까?

절대적으로 불가능하다. 그정도 성능의 컴퓨터는 세상에 없기 때문이다.

그리고 '이질성'에 대한 문제도 고려해야한다.

사용자마다 네트워크가 다를 수 있고, 비디오를 시청하고 있는 위치가 다를 수 있고.. 등등 사용자마다 항상 같은 조건이 아니기 때문에 비디오 스트리밍은 복합적으로 고려해야 할 사항들이 더 많다.

결론을 말하자면,해결책은 애플리케이션 수준의 분산 하부 구조를 구축하는 것이다. (DNS구조와 비슷하다)

뒤에서 추가적으로 설명하도록 하겠다.

스트리밍 비디오

비디오를 시청하는 방법은 두 가지가 있다.

(1) 통째로 다운로드 받은 후 읽어본다.

편하지만 시간이 오래 걸린다는 단점이 있다.

공간이 많이 필요하여 클라이언트에게 부담이 된다.

다운로드를 하면 소유권이 넘어갈 수 있기 때문에 컨텐츠 제작업자가 선호하는 방식이 아니다.

(2) 시간단위로 계속 화면을 다운받아서 읽어본다.

이것을 스트리밍 이라고 한다.

이라고 한다. 통째로 다운로드받는 방법의 문제점들을 해결한다.

보통 우리는 이 방식을 사용한다.

컨텐츠 전송 네트워크

수 많은 동영상들을 동시에 다수 사용자들에게 어떻게 전달할 것인가?

이 문제에 대해 고민한 것이 컨텐츠 전송 네트워크이다.

위에서 말했던 것처럼, 단일 초대형 서버를 어느 특정지역에 위치시킨 뒤 전 세계로 뿌려준다고 가정하자.

해당 서버가 죽거나, 그 지역의 전기가 나가면 문제가 생길 수 있다. 네트워크 혼잡 지점, 멀리 떨어진 클라이언트 처리 등등.. 이 옵션은 확장성이 없기 때문에 사용하지 않는 방법이다.

그럼 생각해볼 수 있는 또 다른 방법은 무엇일까?

지역적으로 분산된 여러 사이트에 여러 개의 복사된 동영상을 저장하고 제공하는 것이다.

우리는 이것을 Content Delivery Network(CDN)라고 부른다.

왼쪽은 사용자고, 오른쪽은 넷플릭스가 있다. 이 둘을 제외한 나머지들은 CDN노드라고 하지만 여기서는 이해하기 쉽게 카피본 서버라고 하겠다.

원리는 컨텐츠 복사본을 CDN이라고 하는 별도의 네트워크를 만든다음에 그곳에 서버를 두고 넷플릭스로부터 복사를 해오는 것이다.

1. 사용자가 넷플릭스 서비스에 원하는 동영상을 시청하기 위해 넷플릭스에 먼저 접속을 한다.

2. 넷플릭스는 자신이 정보를 줄 수도 있지만 사용자의 근처에 위치한 카피본의 위치를 사용자에게 알려준다.

3. 카피본 서버에도 여러 트래픽이 몰리면 속도 저하가 발생할 수 있다. 그런 경우 두 번째로 가깝게 위치한 카피본의 위치를 알려준다.

CDN와 DNS가 함께 동작하는 과정

이미지에 보면 파란색얼룩같이 보이는 두 지점이 있을 것이다.

왼쪽 부분(netcinema)은 컨텐츠를 보관하고 있는 기관이고,

오른쪽 부분(KingCDN)은 컨텐츠를 뿌려주는 네트워크를 관리하는 기관이다.

netcinema는 원본 컨텐츠를 가지고 있는 서버이고 KingCDN는 카피본을 가지고 있는 서버이다.

1. 사용자인 Bob이 netcinema.com에게 원하는 동영상을 요청하고, netcinema.com은 'http://netcinema.com/6Y7B23V'라는 도메인 이름을 회신해준다.

2. 'http://netcinema.com/6Y7B23V'도메인을 Bob의 local DNS server에 전달한다.

3. local DNS server는 netcinema의 책임 DNS서버에게 해당 도메인을 질의하고, netcinema의 책임 DNS서버는 '/6Y7B23V' 컨텐츠는 'http://KingCDN.com/NetC6y&B23V;'에 있다는 것을 local DNS server에 알려준다.

4. local DNS server는 KingCDN의 책임 DNS서버에게 해당 도메인을 질의하고, KingCDN의 책임 DNS서버는 실제 컨텐츠를 저장하고 있는 KingCDN.com의 ip주소를 local DNS server에 전달한다.

5. local DNS server는 Bob에게 최종적으로 얻어온 ip를 전달한다.

5. Bob은 해당 컨텐츠가 있는 KingCDN.com의 ip주소에 접속하여 컨텐츠를 이용한다.

이 과정만 봐도 요청한 컨텐츠를 찾아오는 작업을 주로 DNS서버들이 수행한다는 것을 알 수 있다.

from http://taetoungs-branch.tistory.com/180 by ccl(A) rewrite - 2021-10-17 18:27:01