현(peer-to-peer)
Chord (peer-to-peer)컴퓨팅에서 코드(Coord)는 피어투피어(Peer-te-to-peer(Peer-to-peer)분산 해시 테이블은 키를 다른 컴퓨터("노드"라고 함)에 할당하여 키 값 쌍을 저장하며, 노드는 자신이 담당하는 모든 키에 대한 값을 저장한다.현은 키를 노드에 할당하는 방법과 해당 키를 담당하는 노드를 먼저 찾아 노드가 해당 키의 값을 검색하는 방법을 지정한다.
Coord는 CAN, Tapestry, Pastry와 함께 4개의 원래 분산 해시 테이블 프로토콜 중 하나이다.2001년 이온 스토이카, 로버트 모리스, 데이비드 카거, 프란스 카쇼에크, 하리 발라크리쉬난에 의해 도입되었으며, MIT에서 개발되었다.[1]2001년 코드 페이퍼는[1] 2011년 ACM SIGCOMM Test of Time 상을 받았다.[2]
파멜라 자브의 후속 연구는 원래의 코드 알고리즘(2001 SIGCOMM 논문, 2001년 기술 보고서,[1][3] 2002년 PODC 논문,[4] 2003년 TON 종이)이 링의 순서를 잘못 정하고 여러 개의 링을 생산하고 링을 파손할 수 있다는 것을 보여주었다.[6]
개요
노드와 키에는 일관된 해싱을 사용하여 -bit 식별자가 할당된다.SHA-1 알고리즘은 일관된 해싱을 위한 기본 해싱 기능이다.키와 노드(사실상 IP 주소)는 모두 동일한 식별자 공간에 균일하게 분포하고 충돌 가능성은 거의 없기 때문에 일관된 해싱은 코드의 강건성과 성능에 필수적이다.그러므로, 그것은 또한 노드가 중단 없이 네트워크에 가입하고 나갈 수 있도록 한다.프로토콜에서, 노드라는 용어는 모호함 없이 노드 자체와 그 식별자(ID)를 모두 지칭하기 위해 사용된다.열쇠라는 말도 그렇다.
코드 조회 프로토콜을 사용하여 노드와 키는 {\부터 - 1 1에 이르는 displaystyle 2^{m}-의 노드를 가진 식별자 원 안에 배치된다({\이러한 노드 중 일부는 컴퓨터나 키에 매핑되며 다른 노드(대부분)는 비어 있다.
각 노드에는 후계자와 전임자가 있다.노드의 후속 노드는 시계방향으로 식별자 원의 다음 노드다.전임자는 시계 반대다.가능한 각 ID에 대해 노드가 있는 경우, 노드 0의 후속 노드는 노드 1이고, 노드 0의 이전 는 - 12^{이지만 일반적으로 순서에 "구멍"이 있다.예를 들어, 노드 153의 후속은 노드 167이 될 수 있다(154부터 166까지의 노드는 존재하지 않는다). 이 경우 노드 167의 이전 노드는 노드 153이 될 것이다.
후계자 개념은 키에도 활용될 수 있다.키 {\의 후속 노드는 ID가 과 같거나 식별자 원의 k 을(를) 따르는 첫 번째 노드로서, s r( {\으로 표시된다 모든 키는 노드에 할당되어 k disk를 찾아보십시오.은(는) () 을(를) 쿼리하는 것이다
노드의 후속(또는 이전) 노드가 네트워크에서 사라질 수 있으므로(실패 또는 이탈로 인해), 각 노드는 노드에 인접한 원의 전체 세그먼트(즉, 앞의 노드와 그에 r 노드)를 기록한다.이 목록은 해당 네트워크가 높은 고장률에 시달리더라도 노드가 그 후계자 또는 전임자를 정확히 찾을 수 있는 높은 가능성을 초래한다.
프로토콜 상세 내역
기본 질의
코드 프로토콜의 핵심 용도는 클라이언트(일반적으로 노드도 포함)로부터 키를 쿼리하는 것이다. 즉, r(를 찾는 것이다기본 접근방식은 로컬로 키를 찾을 수 없는 경우 노드의 후속자에게 쿼리를 전달하는 것이다.이렇게 하면 ( ) 쿼리 시간이 발생하며 서 N 은 (는) 링에 있는 시스템 수입니다.
핑거 테이블
위의 선형 검색을 피하기 위해 코드는 각 노드가 항목을 포함하는 핑거 테이블을 유지하도록 요구하여 더 빠른 검색 방법을 구현하며, m이(가) 해시 키의 비트 수임을 호출한다. n i의 i h {\ 에는 s c s r((+ i - 2 ) 이 포함됩니다핑거 테이블의 첫 번째 항목은 실제로 노드의 직접적인 후계자(따라서 추가적인 후계자 필드는 필요하지 않다).노드가 키 을(를) 조회할 때마다 노드가 키가 i에 저장된 것을 알 때까지 해당 노드는 핑거 테이블(가 k k보다 작은 원의 "최대")에 있는 k의 가장 가까운 후속 또는 이전(손가락 테이블에 따라 다름) 쿼리를 전달한다직계 후계자
이러한 핑거 테이블을 사용하여 N-노드 네트워크에서 후속 장치를 찾기 위해 연결해야 하는 노드 수는 ) N이다아래 증명 참조).
노드 결합
새 노드가 가입할 때마다 세 개의 불변성을 유지해야 한다(첫 번째 두 개의 불변성은 정확성을 보장하고 마지막 한 개는 빠르게 쿼리한다).
- 각 노드의 후속 노드는 즉시 후속 노드를 올바르게 가리키고 있다.
- 각 키는 ( k) 에 저장된다
- 각 노드의 핑거 테이블이 정확해야 한다.
이러한 불변성을 만족시키기 위해 각 노드에 대해 선행 필드를 유지한다.후임자가 핑거 테이블의 첫 번째 항목인 만큼 이 분야를 더 이상 별도로 유지할 필요가 없다.새로 가입된 n 에 대해 다음 작업을 수행해야 한다
- 노드 이전 버전과 핑거 테이블)을 초기화하십시오.
- 이전 노드와 핑거 테이블을 업데이트하도록 다른 노드에 알리십시오.
- 새 노드는 후임자로부터 책임 있는 키를 넘겨받는다.
의 이전 버전은 c s r(){\앞서 원)에서 쉽게 구할 수 있다.핑거 테이블은 초기화 방법이 다양하다.가장 간단한 것은 모든 항목에 대해 후속 쿼리 찾기 실행으로 로그 ) 초기화 시간이 발생하는 것이다.더 좋은 방법은 핑거 테이블의 i i 항목이(+ ) h 항목에 대해 여전히 올바른지 확인하는 것이다.이렇게 O 2N ){\}N가 된다가장 좋은 방법은 가까운 이웃에서 핑거 테이블을 초기화하고 일부 업데이트를 하는 것인데, ) N이다
안정화
정확한 조회를 위해 모든 후속 포인터가 최신 상태여야 한다.따라서 안정화 프로토콜은 핑거 테이블과 후속 포인터를 업데이트하는 백그라운드에서 주기적으로 실행된다.
안정화 프로토콜은 다음과 같이 동작한다.
- 안정화()=n은 전임 p를 위해 후임자에게 물어보고 대신 p가 n의 후계자가 되어야 하는지를 결정한다(p가 최근 시스템에 합류한 경우).
- 통지() : n의 후임자에게 그 존재를 통지하여, 전임자를 n으로 변경할 수 있도록 한다.
- 수정_핑거(): 핑거 테이블 업데이트
잠재적 용도
- 공동 미러링: 로컬 네트워크 외부의 컴퓨터에서 사용할 수 있는 로컬 네트워크 호스팅 정보에 의한 로드 밸런싱 메커니즘.이 계획은 개발자들이 그들의 제품의 가용성을 보장하기 위해 중앙 서버 대신 많은 컴퓨터들 사이의 부하를 균형 있게 조절할 수 있게 할 수 있다.
- 시간 공유 저장소:네트워크에서, 일단 컴퓨터가 네트워크에 가입하면, 사용 가능한 데이터는 그 컴퓨터가 네트워크에서 분리될 때 검색을 위해 네트워크 전체에 배포된다.다른 컴퓨터의 데이터는 물론 네트워크에 더 이상 연결되지 않을 때 오프라인 검색을 위해 해당 컴퓨터로 전송된다.주로 네트워크에 풀타임 연결 기능이 없는 노드용.
- 분산 인덱스:검색 가능한 데이터베이스 내에서 네트워크를 통해 파일 검색(예: P2P 파일 전송 클라이언트)
- 대규모 조합 검색:문제에 대한 후보 솔루션인 키와 이를 솔루션으로 평가하는 노드 또는 컴퓨터에 대한 각 키 매핑(예: Code Breaking)
- 안정성을[7] 위해 무선 센서 네트워크에서도 사용됨
교정 스케치
높은 확률로 Coord는 ) O 노드에 연결하여 N -node 네트워크에서 후속자를 찾는다.
노드 이(가) 키 의 후속 키를 찾기를 원한다고 가정합시다 의 이전 단계인 경우 가 n n에서 }(로 라우팅되는 데 걸리는 단계 수에 대한 상한 값을 찾기를 원함. 은 (는) 핑거 테이블을 검사하고 요청을 보유한 k {\의 가장 가까운 이전 버전으로 전달한다.이 노드 을를) 호출하십시오 의핑거 테이블에서 이 i - f}의 거리에 있는 경우 원을 따라 n 따라서 이 을 따라 f 과 사이의 거리는 최대 i - 1 2이다따라서 에서 p 까지의 거리는 에서 까지의 거리보다 작다 까지의 새로운 거리는 초기 거리의 최대 절반이다.
이 남은 거리를 절반으로 줄이는 과정이 반복되기 에 t 단계 후 {\까지 남은 는 2m/ 2 특히 N N단계 후 남은 는 2m에 있다. 노드는 식별자 원을 따라 무작위로 분산되기 때문에 이 길이의 간격 내에 포함되는 예상 노드 수는 1이며, 높은 확률로 노드 N보다 적다.메시지는 항상 적어도 하나의 노드로 진행되기 때문에, 가 이 남은 거리를 이동하려면 최대 로그most N 단계를 한다.따라서 총 예상 라우팅 시간은 ) O N 입니다
Coord가 = O ) N개의 이전/성공자를 추적하면 높은 확률로 각 노드가 1/4의 고장 확률을 가진 경우 find_sucercessor(아래 참조) 및 find_predecessor(아래 참조)가 올바른 노드를 반환한다.
간단히 말해서 r 노드가 실패할 확률은 ( ) = O( N) {인데, 이는 낮은 확률이기 때문에 둘 중 하나 이상이 살아 있고 노드가 정확한 포인터를 가질 수 있다.
가성음
- 유사 부드에 대한 정의
-
- 손가락[k]을 대다
- 성공하는 첫 번째 노드 + 2k - )는 k m{\}}}}{}}}}}{}}}}{{}mboxleq k\
- 후계자
- 식별자 링에 있는 해당 노드의 다음 노드
- 전임의
- 식별자 링에 있는 해당 노드의 이전 노드
ID의 후속 노드를 찾기 위한 유사 노드는 다음과 같다.
// 노드 n에 ID n.find_sucercessor(id) // 예, 개구부 괄호와 일치하도록 닫는 사각형 대괄호가 되어야 한다.// 반쯤 닫힌 간격이다.id id (n, successful)을 반환한 다음 후계자를 반환하거나 n0 := close_node(id)를 중심으로 쿼리를 전달하면 n0.find_nd(id) 반환 // i = m down to 1(손가락[i] ] (n, id)을 검색한 다음 f를 반환한다.귀금하다[귀금하다]
노드 결합 후 코드 링/순환을 안정화하기 위한 유사코드는 다음과 같다.
// 새로운 코드 링 생성. n.create() 전임자 :=nil 후계자 :=n.join(n') 전임자 :=nil 후계자 :=n'.find_successor(n) // 주기적으로 호출.n은 후임자 //에게 그 전임자에 대해 묻고, n의 즉시//후속자가 일치하는지 확인하고, 후임자에게 알려준다.n.stabilize() x = successor.properties.properties.properties:=x defender.properties.properties.n, successor(n)가 nil 또는 n'∈(n)이면 n.puter :=n' //는 주기적으로 호출된다./다음에는 지수를 저장한다.다음에 n.fix_properties를 고치는 손가락은 다음 :=다음 + 1을 고치고, 다음 :=1 손가락[다음] := find_n(n+ e - 2}); //를 주기적으로 호출한다.전임자가 실패했는지를 확인한다. n.check_properties 만약 전임자가 실패했다면, 전임자 := nil
참고 항목
참조
- ^ a b c Stoica, I.; Morris, R.; Kaashoek, M. F.; Balakrishnan, H. (2001). "Chord: A scalable peer-to-peer lookup service for internet applications" (PDF). ACM SIGCOMM Computer Communication Review. 31 (4): 149. doi:10.1145/964723.383071.
- ^ "ACM SIGCOMM Test of Time Paper Award". Retrieved 16 January 2022.
- ^ Stoica, I.; Morris, R.; Liben-Nowell, D.; Karger, D.; Kaashoek, M. F.; Dabek, F.; Balakrishnan, H. (2001). Chord: A scalable peer-to-peer lookup service for internet applications (PDF) (Technical report). MIT LCS. MIT. 819.
- ^ Liben-Nowell, David; Balakrishnan, Hari; Karger, David (July 2002). Analysis of the evolution of peer-to-peer systems (PDF). PODC '02: Proceedings of the twenty-first annual symposium on Principles of distributed computing. pp. 233–242. doi:10.1145/571825.571863.
{{cite conference}}
: CS1 maint: 날짜 및 연도(링크) - ^ Stoica, I.; Morris, R.; Liben-Nowell, D.; Karger, D.; Kaashoek, M. F.; Dabek, F.; Balakrishnan, H. (25 February 2003). "Chord: a scalable peer-to-peer lookup protocol for Internet applications". IEEE/ACM Transactions on Networking. 11 (1): 17–32. doi:10.1109/TNET.2002.808407.
{{cite journal}}
: CS1 maint: 날짜 및 연도(링크) - ^ Zave, Pamela (2012). "Using lightweight modeling to understand chord" (PDF). ACM SIGCOMM Computer Communication Review. 42 (2): 49–57. doi:10.1145/2185376.2185383.
- ^ Labbai, Peer Meera (Fall 2016). "T2WSN: TITIVATED TWO-TIRED CHORD OVERLAY AIDING ROBUSTNESS AND DELIVERY RATIO FOR WIRELESS SENSOR NETWORKS" (PDF). Journal of Theoretical and Applied Information Technology. 91: 168–176.