P2P architecture

youngwiki

상위 문서: Application Layer

개요

많은 애플리케이션들은 항상 켜져 있는 인프라 서버에 크게 의존하는 클라이언트-서버(client-server) 구조를 사용한다. 하지만, P2P 구조에서는 항상 켜져 있는 인프라 서버에 거의 (또는 전혀) 의존하지 않는다. 대신 간헐적으로, 임의로 연결되는 호스트 쌍, 즉 피어(peer)들이 서로 직접 통신한다. 이 피어들은 서비스 제공자가 소유한 것이 아니라, 사용자들이 제어하는 데스크탑과 노트북이다.

해당 문서에서는 P2P 애플리케이션이 하나의 파일을 단일 서버로부터 다수의 호스트(피어)에게 배포하는 것을 살펴본다.

Scalability of P2P Architectures

클라이언트-서버 아키텍처와 P2P 아키텍처를 비교하고, P2P의 scalability을 설명하기 위해, 고정된 수의 피어에게 파일을 배포하는 경우를 살펴보자.

서버와 피어들은 인터넷에 접속 링크로 연결되어 있다. 서버의 업로드 속도를 us, i번째 피어의 업로드 속도를 ui, 다운로드 속도를 di라고 하자. 또한 배포될 파일의 크기를 F(비트 단위), 파일을 받고자 하는 피어의 수를 N이라고 하자. 배포 시간은 N개의 피어가 모두 파일을 받을 때까지 걸리는 시간이다. 이떄 core network는 충분한 대역폭을 가지고 있고, bottleneck link는 access network에만 존재한다고 가정하자.

Server-Client 구조의 배포시간

서버-클라이언트 구조에서는 오직 서버 혼자서 모든 파일을 배포한다. 이때 서버는 각 피어에게 파일 사본을 하나씩 보내므로, 총 NF bit를 us의 업로드 속도로 배포한다. 따라서 배포시간은 약 NF/us이다. 또한, dmin을 모든 피어의 가장 낮은 다운로드 속도라고 하면, 해당 피어는 F bit를 다운로드하는데 약 F/dmin초가 걸린다. 이를 통해 서버-클라이언트 구조의 배포시간은 다음과 같이 나타내어질 수 있다.

Dc-s  max{NF/us, F/dmin}

위 식에서 알 수 있는 것은 NF/us가 F/dmin을 압도할 정도로 커진다면, Dc-s의 최솟값은 N이 증가함에 따라 선형적으로 증가한다. 즉, 피어의 수가 1,000명에서 100만 명으로 1,000배 증가하면, 파일을 모두에게 배포하는 데 걸리는 시간도 1,000배 증가한다.

P2P 구조의 배포시간

P2P 구조에서는 각 피어가 서버를 도와 파일을 배포한다. 피어가 일부 파일 데이터를 받으면, 자신의 업로드 대역폭을 이용해 다른 피어들에게 그 데이터를 재배포한다. 이 때문에 P2P 구조의 배포 시간을 계산하는 것은 클라이언트-서버 구조보다 더 복잡하다. 왜냐하면 피어들이 파일의 일부를 어떻게 배포하느냐에 따라 배포 시간이 달라지기 때문이다. 그럼에도 불구하고 최소 배포 시간에 대한 단순한 식을 도출할 수 있다. 이때 다음과 같은 관찰을 한다:

  • 배포 초기에 파일을 가진 건 오직 서버뿐이다. 따라서 파일의 모든 비트는 최소 한 번은 서버의 접속 링크를 통해 전송되어야 하므로, 최소 배포 시간은 F/us 이상이다. 하지만 한번 전송된 비트는 피어들이 재배포 하므로, 전송된 비트를 서버가 다시 전송할 필요는 없다.
  • 다운로드 속도가 가장 느린 피어는 파일을 최소 F/dmin 초 이상 걸려야 받을 수 있다.
  • 시스템 전체의 업로드 속도는 서버의 업로드 속도 us과 모든 피어의 업로드 속도 u1,..., uN의 합이다. 따라서 이 시스템은 NF 비트를 모든 피어에게 전송해야 하므로, 최소 NF / (us + u1 + ... + uN)의 시간이 소요된다.

위 세 가지를 종합하면 P2P 구조의 배포시간은 다음과 같이 나타내어진다.

DP2P  max{F/us, F/dmin, NF/(us + i=1Nui)}

P2P 구조의 배포시간

각주