Q. F 사이즈의 파일을 한 서버로 부터 N개의 peer들에게 distribute 하는데 얼마나 시간이 걸릴까?
-> Peer의 업로드/다운로드 용량은 정해져있다.
File distribution time : client-server
File distribution time : P2P
client-server vs P2P : example
파일이 256kb의 청크로 나누어 진다.(크기는 설정에 따라 달라질 수 있음)
토렌트(torrent) : 파일을 주고받는 peer들
-> 토렌트의 peer들이 파일 chunk들을 주고받는다.
트래커(tracker) : 일종의 서버 역할 - 어떤 피어들이 파일 distribution에 참여하고 있는지 트래킹(추적) 한다.
-> 트래커를 통해 peer들의 리스트를 받고, 토렌트의 peer들과 파일을 주고 받는다.
토렌트에 peer들이 참여하는 과정
-> 처음에는 chunk가 없다. 하지만 시간이 지나면서 다른 peer들로부터 축적된다.
-> 트래커에 등록 되고 주변 peer들(neighbor)과 커넥션을 맺어서 파일을 다운로드 한다.
다운로드 받는 동안에도 chunk들을 다른 Peer들에게 업로드 해 줄 수 있다.
파일을 다운로드 하는 중에 다운받는 peer를 바꿀 수도 있다.
-> churn : 다이나믹하게 peer가 바뀌는것.
peer가 파일 전체를 갖게 되면 떠나거나(이기적, 받을거 받고 안준다는 마인드) 토렌트에 남아(남아서 파일 제공)있을 수 있다.
BitTorrent : requesting, sending file chunks
chunk 요청
-> peer들이 가지고 있는 chunk들이 다를 수 있다.
-> 주기적으로 각각의 peer들에게 어떤 chunk를 가지고 있는지 물어본다.(chunk list 요청)
-> 요청 방식 : rarest first -> 희귀한 chunk 부터 먼저 요청한다. (가지고 있는 peer가 적은 chunk 먼저 요청, peer들이 떠날수도 있으니까)
chunk 보내기(tit-for-tat)
-> 요청 받으면 보내줘야 한다.(우선순위를 갖고 보내줌)
-> 자기한테 가장 높은 속도로 chunk를 보내주고 있는 peer들(많은 데이터를 주는 peer들)이 우선순위가 높다.
-> 그 중 상위 네명의 peer에게 보내준다.
-> 다른 peer들은 자신으로 부터 데이터를 못받는다.(choked 상태)
-> 10초 마다 상위 네 peer를 갱신한다.
-> 30초 마다 랜덤으로 peer를 고르고 chunk를 보내준다.(ooptimistically unchoked - 상위 네명 말고 다른 애를 랜덤으로 골라줌)
-> 새롭게 선택된 peer가 상위 네 peer에 들어올 수도 있다.
-> 자신도 랜덤으로 받아서 누군가의 상위 네 peer가 될 수도 있다.
BitTorrent : tit-for-tat
1. Alice와 Bob은 서로에게 탑 4가 아니다.
2. Alice가 Bob을 optimistically unchoke한다.
3. Bob에게 chunk를 보내준다.
4. Alice가 보내주는 속도가 생각보다 빨라서 Bob의 탑 4가 된다.
5. Bob은 이것에 대해 보답한다.(Alice에게 chunk를 보내주게 됨)
6. 근데 이것도 생각보다 빨라서 Bob 역시 Alice의 탑 4가 된다.
-> 계속해서 더 나은 파트너를 고르게 된다.
-> 파일을 더 빠르게 전송받도록 노력한다.
-> 파일 전송 속도가 빠를수록, 자신이 더 빨리 받을 수 있게 된다.
-> 비디오 스트리밍 상황
streaming multimedia : DASH
content distribution networks(CDNs)
CDN : 컨텐츠의 복사본들을 CDN 노드들에 저장한다.
예를 들어 넷플릭스가 매드맨이라는 영화를 여러 군데 분산 시켜 저장한다.
-> 구독자가 넷플릭스서버에 접속해서 영화 어딨는지 물어보면 넷플릭스에서 manifest 파일을 보내준다.
-> Manifest 파일은 각각의 chunk가 어떤 url에 있는지 list를 준다.
-> 이 파일을 보고 클라이언트가 url로 요청하여 chunk 받는다.
-> Near by copy(가까운데서 받아오는거) 선호하지만 network path가 congested의 경우 다른데서 받아오기도 한다.
CDN content access : a closer look
-> netcinema.com은 어떤 영화가 있는지 보여준다.(클라이언트는 여기에 비디오 요청)
-> CDN 전문 회사로 부터 서비스를 받을 수 있다.(실제 비디오는 kingCDN.com의 CDN에 저장되어 있음, 실제 스트리밍 하는 사이트)
동작과정
1. 사용자가 netcinema.com에서 동영상을 고름 -> 동영상의 url을 얻음
2. 이 url을 가져오기 위해 local dns서버에 url의 ip주소가 뭔지 물어봄
3. local dns 서버가 netcinema의 dns서버를 알려줌 -> netcinema는 어떤 url을 반환해 줘서 이쪽으로 가라고 알려줌
4. 그 url을 찾기 위해 kingCDN의 DNS 서버에 어디있는지 물어봄 -> 해당 url의 컨텐츠가 있는 서버를 반환해서 알려줌
5. 알게된 서버에서 http를 통해 스트리밍함
정리하자면 웹사이트 따로, 스트리밍하는 서버가 따로 있어서 Dns 서버를 이용하여 다른쪽 url을 돌려 줌으로써 거기로 가서 사용자가 거기의 서비스를 활용할 수 있도록 해 준다.
예시 Netflix
넷플릭스 - 계정관리, 영화관리
아마존 클라우드 - 실제 데이터 스트리밍
-> 넷플릭스에 로그인 하고
-> 아마존 클라우드에서 영화 고르고 manifest 파일을 받고
-> 아마존 클라우드의 CDN 서버로 가서
-> 그쪽으로 부터 스트리밍을 받는다.
정리
유저가 많으면 한 서버로 부터 데이터 서비스가 불가능하니까 여러 군데 서비스를 분산 시켜 놓고 사용자가 매니패스트 파일을 통해 그 url에서 데이터를 다운받을 수 있도록 한다.