본문 바로가기
네트워크

[네트워크] 2.5 P2P 파일 분배

by Lizardee 2023. 10. 1.
  • Client-Server 구조
  • P2P(Peer-to-Peer) 구조
    : 항상 켜져 있는 인프라스트럭처 서버에 최소한으로 의존한다. 대신 간헐적으로 연결되는 호스트 쌍들(peer)이 서로 직접 통신한다.

Clinet-Server 파일 분배에서 server는 파일 복사본을 각 피어들에게 보내야 한다. (server에게 커다란 부하를 주고, 많은 양의 서버 대역폭을 소비한다.)
P2P 파일 분배에서 각 peer는 수신한 파일의 임의의 부분을 다른 peer들에게 재분배할 수 있어서 서버의 분배 프로세스를 도울 수 있다. 

 

P2P 구조의 자가 확장성

파일 분배 문제의 예

한 파일을 고정된 수의 피어들에게 분배하는 간단한 양적 모델을 고려한다.

 

파일 분배 시간: client-server 구조 vs. P2P 구조

  • Client-Server 구조: 피어의 수가 증가함에 따라 분배 시간이 선형적으로, 한계 없이 증가한다.
  • P2P 구조: 각 피어들이 서버가 파일을 분배하는 데 도움을 줄 수 있다.
    P2P 구조의 경우 최소 분배 시간이 클라이언트-서버 구조의 분배 시간보다 항상 작지는 않다. 하지만 임의의 피어 수 N에 대해 한 시간보다 작다. 따라서 P2P 구조를 가진 애플리케이션은 자가 확장성을 갖는다. 이 확장성은 피어가 비트의 소비자이자 재분배자인 것의 직접적인 결과이다.

 

비트토렌트

비트토렌트는 파일 분배를 위한 인기 있는 P2P 프로토콜이다.

  • 토렌트(torrent): 특정 파일의 분배에 참여하는 모든 피어들의 모임
  • 청크(chunk): 토렌트(피어들의 모임)에 참여하는 피어들은 서로에게서 같은 크기의 청크를 다운로드한다. 피어가 청크를 다운로드할 때, 피어는 또한 청크를 다른 피어들에게 업로드한다.
  • 트래커(tracker): 각 토렌트(피어들의 모임)은 트래커라고 부르는 인프라스트럭처 노드를 갖고 있다. 한 피어는 토렌트에 가입할 때 트래커에 자신을 등록하고, 주기적으로 자신이 아직 토렌트에 있음을 알린다. 이러한 방식으로 트래커는 토렌트에 참여하는 피어들을 추적한다. 주어진 토렌트는 어느 순간에 수백 혹은 수천의 피어들이 참여하고 있을 수 있다.
  1. 트래커는 참여하고 있는 피어 집합에서 임의로 피어들의 부분집합(50개)을 선택하여, 이 50개의 피어들의 IP 주소를 앨리스에게 보낸다.
  2. 이 피어들의 목록을 보고 나서, 앨리스는 이 목록에 있는 모든 피어와 TCP 연결을 설정한다.
    앨리스가 성공적으로 TCP 연결을 설정한 모든 피어를 '이웃 피어'라고 부르자.
  3. 시간이 지남에 따라 이러한 피어들 중 일부는 떠나고, 다른 피어들(초기 50개 피어들 외에)이 앨리스와 TCP 연결을 시도한다. 

임의의 주어진 시간에 각 피어는 파일 청크들의 일부를 갖고 있을 것이며, 서로 다른 피어들은 다른 부분을 갖고 있을 것이다. 주기적으로 앨리스는 이웃 피어들 각각에게 (TCP 연결을 통해) 그들이 갖고 있는 청크 목록을 요구한다.

 

▷ 이웃으로부터 어느 청크를 먼저 요구할 것인가?

: 가장 드문 것 먼저(rarest first) --> 가장 드문 청크들은 더 빨리 재분배될 수 있어서, 토렌트에 각 청크의 복사본 수가 대략적으로 동일해진다.

 

▷ 이웃들 중 어느 피어에게 청크를 요청할 것인가?

: 가장 빠른 속도로 데이터를 제공하는 이웃에게 우선순위를 준다.