KR101752928B1 - 객체 저장부들의 네트워크상의 스웜-기반의 동기화 - Google Patents

객체 저장부들의 네트워크상의 스웜-기반의 동기화 Download PDF

Info

Publication number
KR101752928B1
KR101752928B1 KR1020117028444A KR20117028444A KR101752928B1 KR 101752928 B1 KR101752928 B1 KR 101752928B1 KR 1020117028444 A KR1020117028444 A KR 1020117028444A KR 20117028444 A KR20117028444 A KR 20117028444A KR 101752928 B1 KR101752928 B1 KR 101752928B1
Authority
KR
South Korea
Prior art keywords
chunk
swarm
node
updated
neighbor
Prior art date
Application number
KR1020117028444A
Other languages
English (en)
Other versions
KR20120018178A (ko
Inventor
아담 사펙
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20120018178A publication Critical patent/KR20120018178A/ko
Application granted granted Critical
Publication of KR101752928B1 publication Critical patent/KR101752928B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/289Object oriented databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/161Computing infrastructure, e.g. computer clusters, blade chassis or hardware partitioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Transfer Between Computers (AREA)
  • Computer And Data Communications (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

객체의 집합은 각각이 대응되는 객체들의 로컬 표현을 저장하도록 설정된 컴퓨터들의 집합에 의해서 중복적으로 저장될 수 있다. 컴퓨터가 객체 집합을 변경할 때(예를 들면 객체의 추가 또는 변경), 업데이트된 객체는 반복적으로 업데이트된 객체를 저장하는 노드의 이웃들로부터 즉석 스웜 네트워크를 형성하고 사용함으로써 컴퓨터들 전체에 동기화될 수 있다. 이 스웜 네트워크는 협동적으로 가동될 수 있고, 여기서 각각의 노드는 개체 청크들을 다른 노드들로 가능한 빠르게 분배하고, 공평함 및 부정행위 방지와 같은 경쟁적 스웜 네트워크들의 개념들을 고려하지 않을 수 있고, 이는 협동적 스워밍(swarming)에는 적용되지 않을 수 있고 그렇지 않다면 객체의 전파를 저하할 수 있다. 대안적 "문의(ask)" 기술은 누락된 객체 업데이트들을 복구하고 식별하기 위해서 포함될 수 있고, 컴퓨팅 환경 호스트는 권한 있는 객체 소스 및/또는 객체 저장부의 마지막 수단으로 포함될 수 있다.

Description

객체 저장부들의 네트워크상의 스웜-기반의 동기화{SWARM-BASED SYNCHRONIZATION OVER A NETWORK OF OBJECT STORES}
컴퓨팅 분야에서, 많은 시나리오가 가끔은 객체들의 집합으로 표현되는 데이터를 저장하도록 설정된 컴퓨터들 또는 장치들의 집합을 포함하고, 이때 컴퓨터들은 네트워크상에서 연결되어 있다. 일부 시나리오들에서, 컴퓨터들 또는 장치들의 집합은 특정 객체의 로컬 표현(local representation)을 각각 저장할 수 있다. 네트워크상의 통신을 통해서 객체의 하나의 로컬 표현상의 변화들을 다른 컴퓨터들 또는 장치들 안에 저장된 대응되는 객체의 다른 로컬 표현에 전파시키는 것이 바람직할 수도 있다. 더욱 복잡한 시나리오들에서는, 공유되는 객체들의 집합이 클 수 있고, 변경들이 빈번할 수도 있다. 그러나 특정 컴퓨터 또는 장치의 사용 가능한 네트워크 대역폭은 한정적일 수 있고, 이는 컴퓨터 또는 장치가 변경된 객체에 대한 데이터를 수신하거나 로컬 표현에 대한 변경에 관한 데이터를 다른 컴퓨터들 또는 장치들에 송신하는 속도(rate)를 제한하는 기능을 수행할 수 있다. 따라서, 컴퓨터들 또는 장치들이 이런 객체들의 변경들에 대한 통지를 주고 받고 이런 데이터 객체의 변경에 대한 효과적인 전파의 달성을 위해 네트워크의 제한된 대역폭을 할당하는 신뢰성 있는 메커니즘을 설정하는 것은 어려울 수 있다.
이 요약은 아래의 상세한 설명에서 추가적으로 서술되는 선택된 개념들을 간략화된 형식으로 소개하기 위해서 제공된다. 이 요약은 주장되는 발명의 핵심 요소들 또는 핵심 특징들을 식별하는 의도는 가지지 아니하고, 청구된 발명의 범위를 제한하기 위해 사용되는 의도 또한 가지지 않는다.
객체들을 동기화하는 하나의 메커니즘은 네트워크의 노드들 사이의 배열을 포함하고, 노드가 새로운 객체의 기록 또는 존재하는 객체의 변경과 같은 객체의 로컬 표현의 변경을 감지할 때(임의의 이런 변경은 여기서 "업데이트된 객체"로 지칭된다), 노드는 업데이트된 객체를 완전히 상호 연결된 노드들("이웃들")의 부분집합에 통지하고, 업데이트된 객체를 가지지 않는 이웃들을 식별한다. 그 뒤에 그것은 예를 들면 피어-투-피어(peer-to-peer) 네트워크를 통하는 것과 같은, 효율적인 방법으로 이들 이웃들에게 객체를 전송하도록 설정할 수 있다. 특히, 이웃들의 작은 집합은 "스웜(swarm)" 형식의 피어-투-피어 네트워크를 형성할 수 있고, 여기서 각각의 이웃은, 소스(즉 피어-투-피어 네트워크를 개시했고 업데이트된 객체의 완전체를 가지는 노드)로부터 객체의 일부를 수신하는 도중에, 객체의 수신된 부분을 다른 이웃들에게 전달할 수 있고, 동시에 다른 이웃들로부터 객체의 다른 부분들을 수신할 수 있다. 따라서 이런 기술은 소스로부터 각각의 이웃에게 객체의 중앙화된 전송과 비교할 때 객체의 보다 빠른 분배를 달성할 수 있도록 스웜 네트워크를 구성하는 노드들의 업로딩 및 다운로딩 대역폭을 모두 활용한다. 더 나아가, 경쟁적 공평함(competitive fairness)(예를 들면, 교환될 중요한 데이터 부분들을 가지는 노드들 사이에 업로드 용량의 "공평한" 분배를 촉진하는 BitTorrent의 측면들)을 촉진하도록 설정된 다른 스웜 네트워크와는 대조적으로, 이들 장치를 연결하는 스웜 네트워크는 업데이트된 객체의 빠른 분배를 달성하기 위해서 더 큰 업로드 용량을 가진 노드들로부터 더 많은 대역폭을 활용하도록 설정될 수 있다. 추가적인 특성들은 다양한 시나리오들 안에서 경제성과 강건함(robustness)을 촉진하기 위해서 선택적으로 포함될 수 있다(예를 들면, "문의(ask)" 기술은 새롭게 연결된 또는 재연결된 컴퓨터 또는 장치로 하여금 컴퓨터 또는 장치가 오프라인일 때 분산된 변경들을 수신할 수 있도록 포함될 수 있고, 컴퓨팅 환경 호스트와의 통신이 객체 집합에 대한 중앙화되고 권한 있는 소스와 객체들의 동기화를 위해서 포함될 수 있다).
앞에서 논의된 관련 목표들을 달성에 대하여, 뒤따르는 서술들과 첨부된 도면들은 특정 도해적 측면들과 실시예들을 제시한다. 이들은 하나 이상의 측면들이 구현될 수 있는 다양한 방법들의 극히 일부를 나타낸다. 본 발명의 다른 측면들, 장점들, 그리고 신규적 특성들은 첨부된 도면들과 함께 고려될 때 뒤따르는 상세한 설명으로부터 명확해질 것이다.
도 1은 네트워크상에서 객체를 노드들의 집합으로 전송하는 소스 노드의 도해이다.
도 2는 네트워크상에서 객체를 노드들의 집합으로 전송하는 소스 노드의 다른 도해이다.
도 3은 네트워크상에서 객체를 노드들의 집합으로 전송하는 소스 노드의 다른 도해이다.
도 4는 네트워크상에서 객체를 노드들의 집합으로 전송하는 소스 노드의 다른 도해이다.
도 5는 네트워크상에서 객체를 노드들의 집합으로 전송하는 소스 노드의 다른 도해이다.
도 6은 컴퓨팅 환경 호스트에 의해 그것들 사이에서 저장된 객체의 로컬 표현들을 동기화하도록 설정된 컴퓨터들의 집합의 도해이다.
도 7은 네트워크상에서 객체를 동기화하는 노드들의 집합의 도해이다.
도 8은 컴퓨터에 의해 저장된 객체 집합의 업데이트된 객체를 네트워크상에서 접속 가능한 적어도 하나의 노드에 의해 저장된 대응되는 객체들과 동기화하는 예시적 방법을 도시하는 플로우 차트이다.
도 9는 컴퓨터에 의해 저장된 객체 집합의 업데이트된 객체를 네트워크상에서 접속 가능한 적어도 하나의 노드에 의해 저장된 대응되는 객체들과 동기화하는 다른 예시적 방법을 도시하는 플로우 차트이다.
도 10은 컴퓨터에 의해 저장된 객체 집합의 업데이트된 객체를 네트워크상에서 접속 가능한 적어도 하나의 노드에 의해 저장된 대응되는 객체들과 동기화하는 예시적 방법을 도시하는 요소 블록도이다.
도 11은 여기서 제시된 하나 이상의 실시예들을 구현하도록 설정된 프로세서-실행 가능 명령들을 포함하는 예시적 컴퓨터-판독 가능 매체의 도해이다.
도 12는 스웜 청크 지도를 사용하여 객체의 로컬 표현을 동기화하도록 구성된 컴퓨터들의 집합의 도해이다.
도 13은 컴퓨터에 의해 저장된 객체 집합의 업데이트된 객체를 네트워크상에서 접속 가능한 적어도 하나의 노드에 의해 저장된 대응되는 객체들과 동기화하는 다른 예시적 방법을 도시하는 플로우 차트이다.
도 14는 명세서에 설명된 하나 이상의 내용이 구현될 수 있는 예시적인 컴퓨팅 환경을 도시한다.
청구되는 발명은 도면들을 참조해서 서술되고, 도면들의 동일한 참조 번호는 전체에 걸쳐서 동일한 요소들을 나타내는데 사용된다. 후술 되는 서술에서, 설명의 목적으로, 다양한 특정 세부사항들이 본 발명의 완전한 이해를 제공하기 위해서 제시된다. 그러나 본 발명이 이들 특정 세부사항 없이도 구현될 수 있음은 명백하다. 다른 경우들에서, 본 발명의 서술을 용이하게 하기 위해서 구조들과 장치들은 블록도 형태로 도시된다.
컴퓨팅 분야에서, 많은 시나리오가 네트워크상에서 통신할 수 있고 다양한 데이터 집합들을 저장하는 컴퓨터들(예를 들면, 서버들, 워크스테이션들, 노트북들, 휴대 전화들, 그리고 다른 장치들)의 집합을 포함한다. 이들 시나리오들 중 일부에서, 둘 이상의 컴퓨터들은 하나 이상의 객체들(예를 들면, 파일들, 데이터베이스 기록들, 투플즈(tuples), 클래스 인스턴스들(class instances))과 같은 특정 데이터 집합의 표현을 각각 저장할 수 있다. 예를 들면, 객체는 예를 들면 로컬 사용, 빠른 접속, 및/또는 네트워크의 연결 해제 또는 분할되는 경우에 객체로의 접속을 유지하기 위해서 객체에 로컬 접속을 제공하기 위해서 여러 컴퓨터들 사이에서 복제될 수 있다. 추가적으로, 컴퓨터들은 하나의 컴퓨터상의 객체의 로컬 표현상의 변경이 다른 컴퓨터들 상의 다른 표현들로 전파될 수 있도록, 객체의 다양한 표현들의 동기화를 시도할 수 있다.
더 일반적으로는, 각각의 컴퓨터들은 하나 이상의 네트워크들(예를 들면 컴퓨터들 A, B, 그리고 C는 제 1 네트워크상에서 상호 접속 가능할 수 있고, 반면에 컴퓨터 A는 제 2 네트워크상에서 컴퓨터들 D 및 E와 연결되어 있을 수 있다) 상에서 연결되어 있을 수 있고, 각각의 컴퓨터들은 제 1 컴퓨터의 제 1 객체 저장부 내의 특정 객체가 제 2 컴퓨터의 제 2 객체 저장부 내의 특정 객체와 대응되는, 객체들의 집합을 저장하도록 설정된 객체 저장부를 포함할 수 있다. 이들 컴퓨터들 사이에서, 객체 상의 변경들은 다른 컴퓨터들의 각각의 객체 저장부들 내에 저장된 대응되는 객체들과 동기화될 것이다. 컴퓨터들은 네트워크상의 이 동기화를 달성하기 위해서 협력할 수 있다. 그러나 각각의 컴퓨터들은 종종 제한된 업로드 및/또는 다운로드 용량을 가지고, 일부 경우들에서는(예를 들면 휴대용 기기들), 제한된 처리 전력 및/또는 배터리 수명을 가진다. 이들 제한들은 변경들의 전파 속도를 제한할 수 있고, 이 동기화 달성에 있어서 일부 컴퓨터들에 지나치고 잠재적으로 비효율적인 부담을 부과할 수 있다.
도 1-4는 부적절하게 설계된 동기화 전략들에 의해 드러날 수 있는 네트워크 비효율성들의 네 가지 예시들을 도시한다. 이들 각각의 시나리오들에서, 소스 노드(12)는 하나 이상의 네트워크상에서 하나 이상의 노드들로 전달될 객체(14)를 저장한다. 동기화될 객체(14)는 예를 들면 노드들의 객체 저장부 내에 아직 포함되지 않는 새로운 객체, 또는 노드들에게 전달된 변경들로 소스(12)에서 업데이트된 객체, 또는 동일 또는 다른 네트워크상의 다른 노드로부터 소스(12)가 수신한 객체(새로운 또는 업데이트된 형식)를 포함할 수 있다.
도 1의 제 1 예시(10)에서, 소스(12)는 객체(14)를 네트워크(16) 상에서 노드들(18)의 집합으로 송신하려고 시도하고, 네트워크(16)에서 소스(12)는 비교적 큰 업로드 용량을 가진다. 그러나 제 1 예시(10) 내의 소스(12)는 객체(14) 전부를 각각의 노드들(18)에 송신하고, 그에 따라 객체(14) 송신에 관련된 업로드 대역폭을 다섯 배로 확대시킨다. 만약에 소스(12)의 네트워크 연결(16)이 비교적 큰 업로드 용량을 포함한다 할지라도, 업로드 용량은 노드들(18)의 수가 증가할수록 빠르게 소모될 수 있으며, 객체(14)를 노드들(18)에 전송함에 있어서 늦어지는 또는 실패가 발생할 수 있다.
도 2의 제 2 예시에서, 소스(12)는 네트워크 연결(16) 상의 객체(14)를 노드들의 적은 집합에 전송 시도할 수 있고, 노드들의 집합은 제 1 노드(22), 제 2 노드(24), 그리고 제 3 노드(26)를 포함한다. 그러나 제 1 노드(22)와 제 3 노드(26)는 이미 객체(14)를 수신했다(예를 들면 소스(12)는 소스(12)에 통지하지 않고 객체(14)를 제 1 노드(22)와 제 3 노드에 송신하는 것을 달성한 업스트림 노드(upstream node)로부터 객체(14)를 수신했을 수 있다). 객체(14)를 제 2 노드(22) 및 제 3 노드(26)로 전송하는 것은 따라서 중복적일 수 있고 소스(12)의 업로드 용량의 비생산적인 사용일 수 있다.
도 3의 제 3 예시에서, 소스 노드(12)는 제 1 네트워크(34) 상에서 객체(14)를 제 1 노드(32)로 송신하고 제 2 네트워크에서 제 2 노드(36)로 송신하도록 조직화될 수 있다. 제 1 노드(32)와 제 2 노드(36) 모두 객체(14)가 역시 보내질 제 3 노드(40)에 연결될 수 있다. 소스(12)는 객체(14)를 각각 제 1 네트워크(34)와 제 2 네트워크(38) 상에서 제 1 노드(32)와 제 2 노드(38)에 전송하는 것을 달성할 수 있고, 이들 노드들은 객체(14)를 제 3 노드(40)에 전송 시도할 수 있다. 비효율성의 하나의 예시로써, 노드들 둘 다 객체(14)를 제 3 노드(40)로 전송할 수 있고, 그에 따라 중복 전송 및 대역폭의 비생산적 사용을 유발할 수 있다. 비효율성의 다른 예시로서, 제 1 노드(32)와 제 2 노드(36)는 중복을 방지하기 위해서 통신할 수 있고, 이때 객체(14)를 먼저 수신하는 노드가 객체(14)를 다른 노드를 제외하고 제 3 노드에 전송할 수 있다. 이런 방식(coordination)은 중복성은 회피할 수 있지만, 어떤 노드가 제 3 노드(40)에 객체를 전송할지에 대한 판단은 용량들의 평가가 아니라 임의적 경주 조건(race condition)에 기초할 수 있다. 예를 들면, 만약 제 1 노드(32)가 객체(14)를 제 2 노드(36)에 앞서 수신하면, 제 1 네트워크(34) 상에 제 1 노드(32)의 업로드 용량이 제 2 네트워크(38) 상의 제 2 노드(36)의 업로드 용량보다 작은 경우에도, 제 1 노드(32)는 객체(14)를 제 3 노드(40)에 송신할 것을 결정할 수 있다. 따라서 객체(14)를 제 3 노드(40)에 전송함에 있어서 피할 수 없는 지연이 발생할 수 있다. 추가적으로, 더 풍족한 제 2 노드(36)의 업로드 용량 대신에 더 제한된 제 1 노드(32)의 업로드 용량이 과도하게 사용될 수 있고, 예를 들면 이것은 제 1 네트워크(34) 상에서 제 1 노드(32)에 의해 도달 가능하지만 제 2 네트워크(38) 상에 제 2 노드(36)에 의해서는 도달될 수 없는 추가적 노드로 객체(14)를 송신하는 것을 상당히 지연시킬 수 있다.
도 4의 제 4 예시에서, 소스(12)는 큰 네트워크의 노드들(18)로 전송될 객체(14)를 저장한다. 객체(14)의 전송이 도 1-3의 예시들보다 더 효율적인 방식으로 노드들(18) 사이에서 조직화되었다고 할지라도, 노드들(18)은 그럼에도 불구하고 소스(12)로부터 객체(14)에 관한 정보를 요청할 수 있다. (대안적으로, 소스(12)는 각각의 노드(18)에 업데이트된 객체(14)를 통지할 책임을 가질 수 있다.) 객체(14)를 송신하는 비용을 고려하지 않더라도, 객체(14)에 대한 문의들을 처리와 객체(14)에 대한 정보 제공에 있어서 네트워크와 프로세싱 비용들이 소스(12)를 압도할 수 있고 객체(14)를 노드들(18)에 전파하는 것을 상당히 지연시킬 수 있다.
도 1-4의 예시들은 다양한 종류의 네트워크 비효율성을 도시하나, 많은 이들 결핍들은 소스(12)의 업로드 용량과 노드들(18)의 다운로드 용량에 대한 과도한 의존에서 유발된다. 이들 병목 현상들은 네트워크의 스케일링에 의해 악화될 수 있고, 추가적인 지연 및 객체(14)를 노드들(18) 모두에게 전송하는 능력의 잠재적 실패를 유발할 수 있다. 이들 네트워크 장애들 측면에서, 대안적 동기화 전략들이 적어도 하나의 네트워크에 의해 연결된 컴퓨터들 집합 전체에 객체를 보다 효율적으로 전송할 수 있도록 수정되고 있다. 노드들(18)의 업로드 용량(예를 들면 객체(14)의 재분배 또는 그 일부를 다른 노드들(18)로 재분배) 및/또는 소스의 다운로드 용량(예를 들면 노드들(18) 사이의 객체(14)의 수신 상태 파악)의 활용을 통해 개선된 스케일링이 달성될 수 있다. 추가적으로, 네트워크 대역폭의 할당은 각각의 노드들(18)에게 위임될 수 있고, 그에 따라 네트워크의 노드들(18) 전체에서 컴퓨팅 전력이 분배되고 이런 할당들을 로컬(local)로 감지된 네트워크 용량들과 성호 연관시킬 수 있다. 이들 전략들은, "스웜 네트워크(swarm network)" 기술을 뒤따라서, 객체(14)의 빠른 분배를 달성하기 위해서 네트워크 리소스의 사용을 확장하고, 할당 위임은 노드들(18)의 수와 객체들(14)의 수가 스케일들 사이에서 교환됨에 따라 상당한 개선들을 가져올 수 있다.
도 5는 BitTorrent로 알려진 이런 스웜 네트워크의 간략화된 예시(60)를 나타낸다. 일반적인 BitTorrent 네트워크에서, 객체(14)는 각각이 객체(14)의 동일한 복사본을 저장하는 하나 이상의 "시드(seed) 노드들에 의해 각각이 객체(14)의 불완전 복사본을 저장하는 "리치(leech)" 노드들의 집합으로 전송된다. 객체(14)를 리치 노드들에 전송하기 위해서, 시드 노드들은 객체(14)를 청크들(chunks)로 분할하고, 이때 청크들은 크기, 유용성(예를 들면 객체(14)를 구성하는 분리된 서브-객체들의 집합), 임의의 "조각화(chunking) 알고리즘 등을 기초로 선택될 수 있다. 더 나아가, BitBorrent 네트워크의 노드들은 완전히 상호 연결되어 있어서, 임의의 노드가 임의의 다른 노드와 네트워크(16) 상에서 연락될 수 있다. 따라서 BitTorrent 스웜 네트워크의 상호 연결된 노드들은 일부 노드들로부터 수신한 청크들을 저장하는 방식에 의해, 그리고 청크들을 다른 노드들에 재분배하는 방식에 의해서 객체(14)의 청크들을 교환하는데 협력할 수 있다. BitTorrent 스웜에 연결된 경우, 리치 노드들은 객체(14)를 구성하는 청크들의 목록, 객체(14)의 모든 청크들을 저장하는 시드 노드들의 목록, 그리고 각각의 노드들에 의해 저장된 객체의 리치 노드들 및 청크들의 목록을 수신할 수 있다. 따라서 리치 노드는 다양한 시드 및 리치 노드들로부터 객체(14)의 청크들을 요청할 수 있고, 수신받은 청크들을 다른 리치 노드들에 재분배할 수 있다. 리치 노드가 객체를 구성하는 모든 청크들을 수신하면, 그것은 BitTorrent 스웜 네트워크 안에서 시드 노드로 유지될 수 있다.
도 5에서 도시된 BitTorrent 스웜 네트워크의 간략화된 예시(60)에서, 객체(14)는 제 1 시드(62)와 제 2 시드(64)로부터, (각각은 객체(14)의 완전하고 동일한 복사본을 저장한다) 제 1 리치(74), 제 2 리치(76), 제 3 리치(78), 그리고 제 4 리치(80)를 포함하는 리치들의 집합으로 분배된다. 객체(14)는 제 1 청크(66), 제 2 청크(68), 제 3 청크(70), 그리고 제 4 청크(72)를 포함하고, 각각의 청크들은 제 1 시드(62)와 제 2 시드(64)에 의해 저장되어 있고, 리치 노드들 사이에서 고르지 않고 불완전하게 분배되어 있다(예를 들면 제 1 리치(74)는 제 2 청크(68)를 저장하고, 제 2 리치(76)는 제 1 청크(66) 및 제 4 청크(72)를 저장한다). 객체(14)의 신속한 보급을 촉진하기 위하여, 제 1 시드(62)는 체 1 청크(66)를 제 1 리치(74)로 전송하고, 제 2 시드(64)는 제 3 청크(70)를 제 1 리치(74)로 전송한다. 제 1 시드(62)에게 제 2 시드(68) 또는 제 3 시드(70)를 제 2 리치(76)에 전송할 능력이 있지만, 제 1 시드(62)는 그 대신에 이들 청크들을 제 2 리치(76)에 분산시키기 위해서 다른 노드(예를 들면 제 1 리치(74)에 의존할 수 있다. 유사하게, 제 2 시드(16)는 제 2 청크(68)를 제 2 리치(76)에 전송하는 일을 건너뛸 수도 있는데, 이것이 제 2 청크(68)를 제 1 리치(74)로부터 획득할 수 있기 때문에다. 그와 동시에, 제 1 리치(74)와 제 2 리치(76)는 일부 초기 청크들을 제 3 리치(78)와 제 4 리치(80)에 전송할 수 있고, 이들 각각은 초기에는 어떤 청크들도 저장하고 있지 않다(예를 들면 BitTorrent 네트워크 접속시). 이런 방식으로, 제 1 시드(62)와 제 2 시드(64)는 리치 노드들과 분배 비용을 나누는 방식에 의해 리치 노드들과 협력하여 객체(14)의 청크들을 분배시킨다.
BitTorrent 네트워크들은 비교적 신뢰성이 없는 노드들의 집합들 사이에서 피어 투 피어 방식 내의 객체의 동기화, 그리고 분배를 "타당한" 방식으로 할당하는 방식으로 동기화하는데 능숙하다. 제 1 예시로서, 노드(18)의 오퍼레이터는 일반적으로 그곳에서 교환되는 특정 객체를 취득하기 위해서 하나의 BitTorrent 스웜 네트워크를 접속하고, 임의의 시간에 BitTorrent 스웜 네트워크를 떠나는 선택을 할 수 있다(객체(14)를 완전히 수신하기 전이라 할지라도). 또한 노드의 각각의 오퍼레이터들은 독립적으로, "이기적으로", 가동한다고 가정될 수 있고, 즉 참여가 오퍼레이터에게 혜택을 주는 범위 안에서만 네트워크상에서 참여한다(스웜 네트워크에 대한 노드의 업로드 및 다운로드 용량에 기여한다). 예를 들면, 노드의 오퍼레이터는 객체의 수신으로부터 혜택을 받으나, 객체를 다른 노드들로 전송하는데 있어서는 직접 혜택을 받지 않으며, 특히 만약에 업로드 용량이 제한적으로 다른 사용들로부터 전환되는 경우에 그러하다. 노드의 오퍼레이터는 객체의 빠른 소신을 달성하기 위해서 노드의 다운로드 용량을 전부 활용하나, 더 바람직한 작업들을 위한 업로드 용량을 보전하기 위해서 노드의 업로드 용량을 제한 또는 제거하는 방식을 통해서 협력적 동기화 안에서 "부정행위(cheat)"를 시도할 수 있다. BitTorrent 스웜 네트워크는 객체(14)의 청크들의 전송을 리치(14)에 의한 청크들의 재분배 속도에 비례하는 속도로 리치에 할당하도록 함으로써, "부정행위"를 감소시키도록 설정된다. 따라서, 업로드 용량을 조이는 리치 노드는 낮은 속도에서 객체(14)의 새로운 청크들이 제공된다. 이와 반대로, BitTorrent 스웜 네트워크들은 청크들의 재분배에 능숙한 리치 노드들을 인식하고 이런 재분배에 대하여 높은 속도에서 객체(14)의 새로운 청크들을 제공을 통해 보상하는 방식으로 청크들의 노드들로의 분배 사이에서 "공평함"을 촉진하도록 설정되고, 잠재적으로 이런 전송을 덜 효과적으로 수행되는 노드들로 청크를 전송하는 것보다 우선순위에 놓는다. 추가적으로, BitTorrent 네트워크들 상에서 일반적으로 교환되는 많은 객체들이 모든 청크들이 수신되기 전까지는 노드 오퍼레이터들에게는 무용할 수 있기 때문에, 네트워크는 거의 모든 청크들을 수신한 리치로 청크들을 전송하는 것을 너 적은 청크들을 저장하는 리치들로 청크를 전송하는 것보다 우선할 수 있다. 이와 반대로, 노드들은 적은 또는 어떤 청크들로 저장하지 않은 최근에 접속한 리치들로 전송되는 청크들의 속도를 상당히 제한할 수 있다(특히 이런 리치들의 오퍼레이터들은 객체의 완성에 가까운 리치들의 오퍼레이터들에 비해서 스웜 네트워크로부터 접속 해제될 가능성이 크다).
제 2 예시로써, BitTorent 스웜 네트워크들은 객체의 변경된 또는 손상된 버전들을 분배하는 악의 또는 하자 있는 노드들을 감지, 보고, 그리고 완화하도록 설계된다. 많은 실시예들에서, 객체를 구성하는 청크들은 스웜 네트워크의 형성물에서 고정되고, 청크들의 권한 목록이 각각의 청크들에 대한 해시 코드(hashcode)를 나타내는 하나 이상의 지정된 시드 노드들("추적(Tracker)" 노드들로 식별되는)에 의해 모든 노드들한테 제공된다. 노드로부터 청크를 수신한 경우에, 수신한 노드는 청크의 해시 코드에 따라서 청크의 콘텐츠를 확인한다; 만약에 청크가 변경되었거나 손상되었다면(예를 들면 분산 노드에 의해), 수신 노드는 추적 노드에게 송신 노드가 잠재적 결함 또는 악성이라는 것을 보고할 수 있고, 그리고 추적 노드는 이런 노드들을 스웜 네트워크로부터 축출할 수 있다.
BitTorrent 스웜 네트워크의 이들 전문화들은 부정행위의 감소, 공평함의 촉진, 그리고 악성 또는 결함이 있는 노드들의 감지 및 축출을 통해서 신뢰성 없는 스웜 노드들 사이에서 정적 객체의 분배를 촉진할 수 있다. 그러나 다른 시나리오들에서, BitTorrent 스웜 네트워크와 같은 스웜 네트워크의 이들 측면들은, 쓸모없거나 불필요할 수 있고, 객체의 효율적인 분배를 감소시킬 수 있다. 도 6은 하나의 이런 시나리오의 예시적 도해(90)를 나타내고, 여기서 스웜 네트워크의 노드들은 사용자(92)에 의해 운용되는 컴퓨터들의 집합을 포함한다. 컴퓨터들은 예를 들면 워크 스테이션(94), 노트북 컴퓨터(96), 그리고 휴대 전화(98)를 포함할 수 있다. 사용자(92)는 이들 컴퓨터들 각각에서 객체(14)의 로컬 표현을 저장을 원할 수 있고, 컴퓨터들이 네트워크상에서 통신할 때 모든 컴퓨터들 사이에서 객체(14)의 동기화를 원할 수 있다. 더 나아가, 사용자(92)는 사용자(92)의 컴퓨팅 환경(102)의 권한 버전(authoritative version)을 저장하는 컴퓨팅 환경 호스트(100)를 활용할 수 있고, 이는 파일들, 애플리케이션들, 애플리케이션 설정 정보, 사용자 프로파일, 보안 자격(예를 들면 사용자 이름과 패스워드, 자격증, 그리고 공공 및 사적 암호화 키)과 같이 사용자에 의해 사용되는 객체들의 완전한 집합을 포함하고, 컴퓨팅 환경 호스트(100)에 의해 각각의 컴퓨터들에 배치될 수 있다. 컴퓨팅 환경 호스트(100)는 또한 객체의 로컬(잠재적 권한) 표현을 컴퓨팅 환경(102) 안에 포함할 수 있고, 객체(14)의 동기화에 참여할 수 있다.
예시적 시나리오(90)는 BitTorrent 스웜 네트워크가 여러 측면들에서 커스토마이즈된 시나리오와는 다르다. 제 1 예시로서, 사용자(92)는 임의의 컴퓨터들 또는 컴퓨팅 환경 호스트(100)를 사용하여 객체(14)를 변경할 수 있고, 이런 변경들은 모든 컴퓨터들과 컴퓨팅 환경 호스트(100) 사이에서 전파된다. 이 측면은 정적인 객체(14)를 가정하는 많은 스웜 네트워크들(BitTorrent를 포함)과 다르며, 그런 점은 객체(14)의 악성 또는 결함 있는 변경의 증거로 특정 노드에 의해서 객체(14)를 변경시킨다. 제 2 예시로써, BitTorrent 스웜 네트워크 내의 각각의 노드는 전문적으로 스웜 네트워크에 참여하기로 선택하는 반면에, 도 6의 예시적 시나리오(90) 내의 컴퓨터들은 객체(14)의 업데이트를 수신하기 위해서 새롭게 형성된 스웜 네트워크로 "당김(pulled)" 당할 수 있다(특히 만약에 업데이트가 예기지 못한 것이거나 즉흥적일 때). 제 3 예시로써, BitTorrent 네트워크들은 네트워크 용량 소모에 있어서 "공평함"을 설정하고 노드 오퍼레이터들에 의한 부정행위(cheating)를 감소시키려고 하지만, 도 6의 사용자(92)는 스웜 네트워크의 노드들을 완전히 신뢰하고, "공평함" 및 부정행위 방지를 위한 추적과 조정 대신에 객체(14)의 빠르고 완전한 배치를 선호할 수 있다. 예를 들면, BitTorrent 네트워크는 청크들의 노드에 대한 전송을 노드에 의해 재전송되는 청크들의 속도에 비례하도록 조정하려하지만, 이 네트워크의 사용자(92)는 예를 들면 모든 노드들의 업로드 용량들을 최대한 달성가능한 만큼 활용하여 객체(14)가 모든 노드들에게로 빠른 속도의 전송을 달성하는 것을 선호할 수 있다. 제 4 예시로써, BitTorrent 스웜 네트워크 내의 각각의 노드들이 노드 오퍼레이터의 목표 달성을 위해서 비교적 이기적이고 개인화된 방식으로 운용되는데 반해서, 도 6에서 도시된 스웜 네트워크의 노드들은 전체적으로 운용될 수 있다; 예를 들면 모든 노드들 사이에서 객체(14)의 분배를 촉진하기 위해서, 객체의 청크들을 수신하는 속도가 느리거나 존재하지 않는 경우라 할지라도, 높은 업로드 용량을 가진 노드는 객체(14)의 분배를 위해서 업로드 용량 전부 또는 다수를 할당하는 것을 선택할 수 있다.
협력 네트워크의 이들 구별되는 특성들 관점에서, 기술들은 효율적인 방법으로 각각 객체 집합의 로컬 표현을 저장하도록 설정된 컴퓨터들의 집합 전체에서 객체 집합을 동기화하도록 수정될 수 있다. 이 협업 네트워크에서, 임의의 노드는 객체에 변경을 생성할 수 있고, 변경들은, 부정행위 감소, "공평함" 촉진, 밸런싱, 그리고 악성 또는 결함 있는 노드들 감지와 같은 경쟁적 측면들을 반드시 고려하지 않고도, 네트워크 전체에서 빠르고 신뢰성 있게 전파될 수 있다. 이런 스웜 네트워크들은 "말하기(tell)" 아키텍처를 활용할 수 있고, 여기서 각각의 노드는 객체 집합 내의 업데이트된 객체의 식별 시에 다른 노드들에게 통지하고, "푸쉬(push)" 아키텍처를 활용할 수 있고, 여기서 노드는 업데이트된 객체를 저장하지 않는 노드들로 업데이트된 객체의 전송을 개시한다. 따라서, 상호 작용을 제어하는 노드(18)는 업데이트된 객체들(14)을 수신하도록 설정된 클라이언트들처럼 행동하는 노드들(18)에게 업데이트된 객체들(14)(또는 그들의 청크들)을 전달하는 서버처럼 행동한다. 더 나아가, 네트워크의 노드들이 완전히 상호 연결되어 있고 균일한 속도로 통신할 수 있는 경우에도, 업데이트된 객체의 네트워크 전파는 스케일링 상 장애들을 감소하기 위해서 노드들의 작은 집단(이웃 노드들)에서 발생할 수 있다(도 4의 제 4 예시(50)).
도 7은 네트워크(16)를 통해서 연결된 노드들(18)(문자로 식별됨, 예를 들면 NA=node A 그리고 NB=node B)의 집합 전체에서 객체(14)의 동기화를 포함하는 예시적 시나리오(제 1 시점(110), 제 2 시점(112), 그리고 제 3 시점(114)에서 도시)를 도시한다(예를 들면 각각 객체(14)의 로컬 표현들을 저장하고 객체(14)의 변경을 다른 컴퓨터들과 동기화하도록 설정된 컴퓨터들의 집합). 객체(14)는 예를 들면, 노드에 의해 생성된 새로운 객체, 또는 노드들 전체에서 존재했지만 노드에서 업데이트된 객체, 또는 다른 소스로부터 노드에게 수신된 객체를 포함할 수 있다. 상호 연결이 도 7에서 완벽하게 도시되어 있지는 않지만, 노드들(18)은 완전히 상호 연결되어 있고 임의의 두 노드들(18)은 네트워크(16) 상에서 상호 접속 가능하다는 점을 이해해야할 것이다.
도 7의 예시적 시나리오의 제 1 시점(110)에서, 노드 C는 객체(14)를 수신하고 객체(14)를 다른 노드들(18)과 동기화 시도를 한다. 객체(14)를 노드들(18) 전부와 동기화 시도하거나, 또는 모든 노드들(18)에게 객체(14)의 업데이트를 통지하려고 시도하는 것은, 도 4에서 도시된 바와 같이, 동기화 속도를 제한하는 상당한 네트워크 혼잡을 유발할 수 있다. 오히려, 노드 C는 우선 상호 접속 가능한(즉 각각의 노드가 모든 선택된 이웃들에게 접속 가능) "이웃"으로 노드들(18)의 부분 집합을 선택한다. 예를 들면, 노드 C는 노드들 B, D 그리고 H를 이웃들로 선택할 수 있다. 이웃들의 집합을 선택하고 나서, 노드 C는 어떤 이웃들이 업데이트된 객체(14)를 저장하지 않고 있는지를 판단한다. (예를 들면, 노드 C는 각각의 이웃들에게 업데이트를 통지하고 이웃에게 업데이트된 객체(14)의 전송을 제안할 수 있고, 이웃은 적극적 또는 부정적으로 응답할 수 있다.) 만약에 이웃이 업데이트된 객체(14)를 저장하고 있다면, 노드 C와 이웃 사이에 더 이상의 동기화는 관련되지 않는다. 그러나 도 7의 제 1 시점에서, 선택된 이웃들 B, D, 그리고 H가 업데이트된 객체(14)를 저장하지 않고 있고, 노드 C에게 표시한다.
도 7에서 추가로 도시된 바와 같이, 어떤 노드들(18)이 업데이트된 객체(14)를 저장하지 않는지를 판단한 후에, 노드 C는, 각각이 업데이트된 객체(14)를 저장하지 않는 상호 접속 가능한 이웃인 스웜 네트워크(116) 내의 스웜 노드들(118)로 지정된, 스웜 네트워크(116)를 형성한다. (노드 C 또한 스웜 노드(118)로써 참여할 수 있으나, 노드 C가 스웜 노드(118)의 창설자인바, 어떤 청크도 수신할 필요가 없고, 스웜 네트워크(116) 내의 업데이트된 객체(14)의 소스로 인식될 수 있다.) 노드 C(18)는 스웜 노드들(118)에게 스웜 네트워크(116)의 형성을 통지하고, 업데이트된 객체(14)를 스웜 네트워크(116)의 스웜 노드들(118)에게 전송하기 시작한다. 예를 들면, 그리고 제 2 시점(112)에서 도시된 바와 같이, 노드 C는 객체(14)를 청크들의 집합, 또는 개별적으로 전송될 수 있는 객체들(14)의 데이터 유닛으로 분할 또는 "청크" 한다. 도 7의 객체(14)는 네 개의 청크들로 "청크" 되고, 노드 C는 객체(14)의 다양한 청크들을 스웜 노드들(118)에게 전송하기 시작한다. 동시에, 각각의 스웜 노드(118)(노드들 B, D, 그리고 H)는 청크들을 수신하고 그들을 스웜 노드(118)의 객체 저장부에 저장할 수 있고, 청크들을 다른 스웜 노드들(118)로 재전달할 수 있다. 예를 들면, 제 2 시점(112)에서, 노드 H는 제 2 청크(68)를 저장하고 노드 B가 제 2 청크(68)를 가지지 않는다는 것을 식별할 수 있고, 따라서 제 2 청크(68)를 노드 B로 재분배할 수 있다. 청크들의 이런 스워밍(swarming) 전달은 모든 스웜 노드들(118)이 객체(14)의 모든 청크들을 가질 때까지 계속될 수 있고, 이때 스웜 네트워크(116)는 종료될 수 있다.
그러나 스웜 네트워크(116)가 종료될 때, 이전 스웜 네트워크(116)의 각각의 스웜 노드들(118)은 이제 각각의 객체 저장부들에 저장된 업데이트된 객체(14)를 식별할 수 있다. 그 결과, 각각의 노드들 B, D, 그리고 H는 새로운 이웃 집합을 선택할 수 있고, 각각의 이웃이 업데이트된 객체(14)를 저장하는지 여부를 판단할 수 있다. 예를 들면, 노드 B는 노드들 A, F, 그리고 G를 이웃들로 선택할 수 있고, 이들 노드들 중 어느 것도 업데이트된 객체(14)를 저장하지 않는다는 것을 판단할 수 있고, 이들 노드들(18)을 업데이트된 객체(14)의 동기화를 위한 스웜 노드들(118)로 지정하는 방식으로 스웜 네트워크(116)를 형성할 수 있다. 그 뒤에 노드 B는 각각의 스웜 노드들(118)에게 스웜 네트워크(116)를 통지하고 그들 사이의 재분배를 위해서 청크들을 스웜 노드들(118)에게 전송을 시작할 수 있다. 유사하게, 노드 H는 노드들 L, M, 그리고 N을 이웃들로 선택할 수 있고, 이들 노드들(18)이 업데이트된 객체(14)를 저장하지 않는다는 것을 판단한 후에, 이들 노드들(18)을 스웜 노드들로 지정하는 스웜 네트워크(116)를 형성할 수 있다; 그리고 노드 D는 노드들 E, I, 그리고 J를 이웃들로 선택할 수 있고, 이들 노드들 또한 업데이트된 객체들(14)을 저장하지 않는다는 것을 판단하고, 이들 노드들의 스웜 네트워크(116)를 형성할 수 있다. 제 3 시점(114)에서, 이들 세 가지 스웜 네트워크들(116)은 업데이트된 객체(14)를 노드들(18) 전체에 대략적으로 분배하도록 운용되고, 즉흥적 스웜 네트워크들(예를 들면 노드들 K 및 O에게)에 의한 추가적인 전파가 모든 노드들(18) 사이의 객체(14)의 동기화를 완결할 수 있다.
이 기술들의 몇 가지 추가적 측면들이 도 7의 예시적 시나리오를 기초로 도시 및/또는 인식될 수 있다. 제 1 예시로써, 노드(18)는 이웃이 이미 업데이트된 객체(14)를 저장하고 있다는 것을 발견할 수 있다. 이것은 예를 들면 이웃이 다른 스웜 네트워크를 통해서 업데이트된 객체(14)를 수신 중이거나 수신한 경우에 발생할 수 있다. 이 경우에, 노드(18)는 단순히 이웃을 스웜 네트워크에서 제외할 수 있다. 대안적으로, 스웜 네트워크 내에 이웃을 추가적인 "시드(seed)"로 포함하는 것이 유리할 수 있고, 특히 만약 이웃이 여유 업로드 용량을 가지는 경우에 그러하다. 제 2 예시로써, 스웜 노드(118)는 스웜 노드(118)가 업데이트된 객체(14)의 청크들을 수신하는 속도와 무관하게, 청크들을 최대한 빨리 분배하기 위해서 그 업로드 용량의 전부 또는 대부분을 스웜 네트워크(116)에 기여하도록 설정될 수 있다. 이런 분배는 스웜 노드(118)에게 "공평"하지 않을 수 있지만, 스웜 네트워크들(116)은 업데이트된 객체(14)의 노드들로의 빠른 동기화를 촉진하도록 형성되었고, BitTorrent 스웜 네트워크의 독립 노드들의 오퍼레이터들이 신경 쓰는 것과 같은 부정행위(cheating) 감소 또는 "공평함"을 장려하기 위해서 형성된 것이 아니다. 제 3의 예시로써, 노드 C는, 업데이트된 객체(14)의 스웜 네트워크(116)의 스웜 노드들(118)로의 전송 완료 시에, 데이터 교환의 참여를 종료할 수 있다(예를 들면 네트워크(16)의 노드들(18)의 네트워크 활용 또는 컴퓨팅 전력의 로드 밸런싱 촉진을 위해서). 이런 변형은 유용할 수 있고, 예를 들면 이웃 선택은 컴퓨터 적으로 어렵고 및/또는 리소스-집중 프로세스일 수 있기 때문이고, 특히 만약 이웃들의 선택이 비교적 균일한 방법으로 네트워크(16)의 노드들(18)을 클러스터 하도록 설계되었다면; 따라서 각각의 노드(18)는 업데이트된 객체(14)를 그의 이웃들 사이에서 네트워크 전체 동기화에 대한 그의 기여로써 동기화한다. 대안적으로, 만약에 노드(예를 들면 노드 C)가 특정 객체(14)의 동기화를 위해 이웃을 즉흥적으로 선택하는 것이 허용된다면, 이때 노드는 제 1 이웃 집합과의 동기화 완료 후에, 업데이트된 객체(14)를 아직 저장하지 않고 있는 새로운 이웃들의 집합의 선택을 시도할 수 있고, 그들 사이의 교환을 위해서 제 2 스웜 네트워크(116)를 형성할 수 있다.
도 8은 여기서 논의된 기술들의 제 1 실시예를 나타내고, 적어도 하나의 네트워크(16) 상에서 접속 가능한 적어도 하나의 노드(18)에 의해 저장된 객체 집합들의 대응되는 객체들을 포함하는 프로세서를 가지는 컴퓨터에 의해 저장된 객체 집합의 객체들(14)의 동기화의 예시적 방법(120)을 포함한다. 예시적 방법(120)은 122에서 시작하고 동기화를 수행하도록 설정된 명령들을 프로세서에서 실행하는 단계(124)를 포함한다. 명령들은 126에서 노드들(18)로부터 적어도 하나의 네트워크(16) 상에서 컴퓨터 및 이웃 집합의 다른 이웃들을 접속할 수 있는 적어도 하나의 이웃을 포함하는 이웃 집합을 선택할 수 있다. 명령들은 또한, 객체 집합 내의 업데이트된 객체(14)의 식별(128) 시에, 이웃들이 업데이트된 객체(14)를 저장하지 않는다는 것을 판단(130)하도록 설정될 수 있고; 업데이트된 객체(14)를 저장하지 않는 이웃들을 포함하는 스웜 노드들(18))의 스웜 네트워크(116)를 형성(132)하도록 설정될 수 있고; 스웜 노드들(118)에게 업데이트된 객체(14)를 위해 형성된 스웜 네트워크들을 통지하도록 설정될 수도 있고; 그리고 스웜 네트워크(116)를 사용해서 업데이트된 객체(14)를 스웜 노드들(118)에게 전송하도록 설정될 수도 있다. 객체(14)를 스웜 네트워크(116)를 포함하는 노드들(18)로 전송을 달성하고나서, 예시적 방법(120)은 그렇게 함으로써 객체의 동기화를 달성할 수 있고, 138에서 종료한다.
도 8의 예시적 방법(120)이 컴퓨터에 의해 업데이트된 객체(14)를 노드들의 집합으로 전송을 달성할 수 있지만, 만약에 컴퓨터가 업데이트된 객체(14)의 소스로 가동되는 다른 노드(18)에 의해 형성된 스웜 네트워크(116) 내에 참여하는 방식에 의해 업데이트된 객체(14)를 수신하도록 설정된다면 추가적인 장점들이 달성될 수 있다(즉 컴퓨터는 동기화 기술의 서버뿐만이 아니라, 클라이언트로 설정될 수도 있다). 도 9는 객체 저장부 내의 객체들(14)을 동기화하는 과정에서 업데이트된 객체(14)를 수신하는 예시적 방법(140)을 도시하며, 이는 예를 들면 프로세서상에서 실행되는 명령들을 추가적으로 설정함으로서 달성될 수 있다. 이 예시적 방법(140)에서, 명령들은, 업데이트된 객체(14)를 위한 컴퓨터를 포함하는 스웜 네트워크(116)의 소스에 의해 형성이 통지(144)된 경우에, 142에서 시작하도록 설정될 수 있고 객체 저장부 내에서 대응되는 업데이트된 객체(14)를 형성(146)하도록 설정될 수 있다. 명령들은 또한, 스웜 노드들(118)이 객체(14)를 수신할 때까지, 스웜 네트워크(116)에 참여하도록 설정될 수 있다. 이 참여는, 객체(14)의 수신 시에, 객체 저장부에 객체(14)를 저장하는 단계(150)와 객체(14)를 저장하지 않는 스웜 노드(118)에 객체(14)를 전송하는 단계(152)를 포함할 수 있다. 마지막으로, 명령들은, 스웜 노드들(118)이 객체(14)를 수신했음을 판단한 경우에, 스웜 네트워크(116)를 종료하도록 설정될 수 있다. 스웜 네트워크(116)를 사용하여 객체(14)의 수신과 재분배를 달성한 후에, 예시적 방법(140)은 추가로 노드들(18) 전체에서 객체(14)의 동기화를 촉진할 수 있고, 156에서 종료한다.
도 10은 적어도 하나의 객체(14)를 저장하도록 설정된 객체 저장부(166)와 프로세서(164)를 가지는 컴퓨터(162)를 포함하는 예시적 시나리오(160) 안에서 논의된 기술들의 다른 실시예를 도시한다. 컴퓨터(162)는 네트워크(16)에 연결될 수 있고 네트워크(16) 상에서 노드들(18)의 집합과 상호 접속 가능할 수 있고, 이들 각각은 또한 객체들(14)의 대응되는 로컬 표현들을 저장하는 객체 저장부(166)를 포함할 수 있다. 예시적 컴퓨터(162)는 따라서 객체 저장부(166) 내의 업데이트된 객체들(14)을 동기화하기 위해서 노드들(18)과 협력할 수 있다. 이 협력은 여기서 논의된 기술들을 활용하도록 설정된 예시적 시스템(168)을 컴퓨터(162)에 포함함으로써 달성될 수 있다. 예를 들면, 예시적 시스템(168)은 이웃 선택 요소(170)를 포함할 수 있고, 이는 이웃 집합(172)의 다른 이웃들 및 컴퓨터(162)에 의해 적어도 하나의 네트워크(16) 상에서 접속가능한 적어도 하나의 이웃을 포함하는 이웃 집합(172)을 노드들(18)로부터 선택하도록 설정될 수 있다. 예시적 시스템은 또한 업데이트된 객체(14)를 저장하지 않는 이웃 집합(172) 내의 이웃들을 판단하도록 설정될 수 있고; 스웜 노드들(118)의 스웜 네트워크(116)를 형성하도록 설정되고, 이는 업데이트된 객체(14)를 저장하지 않는 이웃들을 포함하고; 그리고 업데이트된 객체(14)를 위해 형성된 스웜 네트워크(116)를 스웜 노드들(118)에게 통지하도록 설정된 스웜 네트워크 형성 요소(174)를 포함할 수 있다. 마지막으로, 예시적 시스템(168)은 스웜 네트워크(116)를 사용하여 업데이트된 객체(14)를 스웜 노드들(118)에 전송하도록 설정될 수 있는 스웜 네트워크 전송 요소(176)를 포함할 수 있다. 스웜 네트워크(116)의 형성과 객체 저장부(166) 내의 업데이트된 객체(14)를 스웜 노드들(118)로의 분배를 달성한 뒤에, 예시적 시스템(168)은 그렇게 함으로서 객체 집합의 객체들(14)의 동기화를 촉진한다.
여기서 논의된 기술들의 또 다른 실시예는 컴퓨터의 적어도 하나의 프로세서에 의해 실행시에, 적어도 하나의 프로세서로 하여금 네트워크상에서 컴퓨터로 접속 가능할 수 있는 노드들(18)에 의해 저장된 대응되는 객체들(14)을 포함하는 객체 집합의 객체들(14)과 동기화를 유발할 수 있는 명령들을 포함하는 컴퓨터 판독 가능 저장 매체를 포함한다. 이런 방식들 내에서 수정될 수 있는 예시적 컴퓨터 판독 가능 매체는 도 11에서 도시되고, 여기서 실시예(180)는 컴퓨터 판독 가능 데이터(184)가 인코딩된 컴퓨터 판독 가능 매체(182)(예를 들면 CD-R, DVD-R, 또는 하드 디스크 드라이브 플레터)를 포함한다. 이 컴퓨터 판독 가능 데이터(184)는 차례차례 여기서 설명된 원칙들에 따라서 운용되도록 설정된 컴퓨터 명령들(186)의 집합을 포함한다. 이런 실시예에서, 프로세서-실행가능 명령들(186)은 도 9의 예시적 방법(120)과 같이, 네트워크상에서 접속 가능한 적어도 하나의 노드에 의해 저장된 대응되는 객체들을 포함하는 컴퓨터에 의해 저장된 객체 집합의 업데이트된 객체를 동기화하는 방법을 수행하도록 설정될 수 있다. 다른 실시예에서, 프로세서-실행가능 명령들(186)은 도 10의 예시적 시스템(168)과 같이, 네트워크상에서 접속 가능한 적어도 하나의 노드에 의해 저장된 대응되는 객체들을 포함하는 컴퓨터에 의해 저장된 객체 집합의 업데이트된 객체의 동기화를 위한 시스템을 구현하도록 설정될 수 있다. 많은 컴퓨터 판독 가능 매체들은 본 기술의 당업자들에 여기서 서술된 기술들에 따라 운용되도록 설정된 본 기술의 당업자들에 의해 수정될 수 있다.
여기서 논의된 기술들은 다양한 측면에서 변형들을 가지도록 수정될 수 있고, 일부 변형들은 추가적인 장점들 및/또는 다른 기술들과 이들 다른 변형들에 대하여 단점들을 감소시킬 수 있다. 더 나아가, 일부 변형들은 결합해서 구현될 수 있고, 일부 결합들은 시너지적인 협업을 통해서 추가적인 장점들 및/또는 감소한 단점들을 제공할 수 있다. 변형들은 이런 실시예들 상에서 개별적 및/또는 시너지적 장점들을 부여하기 위해서 다양한 실시예들(예를 들면 도 9의 예시적 방법(120) 그리고 도 10의 예시적 시스템(168)) 내에서 포함될 수 있다.
이들 기술들의 실시예들 사이에서 달라질 수 있는 제 1 측면은 스웜 네트워크(116)의 형성 및 사용에 의해 객체(14)의 업데이트들을 노드들(18)에게 전송하는 방식과 관련된다. 이들 변형들은, 예를 들면, 도 8의 예시적 방법(120)과 같이, 스웜 네트워크(116) 안에서 컴퓨터가 서버 또는 소스로 기능할 때, 적용될 수 있다.
이러한 제 1 측면의 제 1 변형은 업데이트된 객체(14)의 식별과 관련되고, 이는 객체(14)의 다른 노드들(18)과의 동기화를 촉발할 수 있다. 동기화는, 예를 들면, 객체 저장부(166) 내의 새로운 객체(14)의 형성에 의해, 또는 객체 저장부(166) 내의 객체(14)의 업데이트에 의해 촉발될 수 있다. 동기화는 또한 새로운 객체(14)의 수신 또는 다른 장치, 네트워크(16) 상의 다른 노드(18), 또는 컴퓨팅 환경 호스트(102)와 같은 다른 소스로부터 객체(14)의 업데이트된 버전의 수신에 의해 촉발될 수도 있다. 동기화는 또한, 예를 들면, 객체 저장부(166) 내의 업데이트된 객체의 발견에 의해서도 촉발될 수 있다. 예를 들면, 컴퓨터가 네트워크(16)에 접속하고 노드들(18)에 연결될 때, 컴퓨터는 컴퓨터가 오프라인인 동안에 발생했을 수 있는 변화들을 발견하기 위하여 그의 객체 저장부(166)를 다른 노드들(18)의 객체 저장부들과 비교할 수 있다; 그리고 이런 업데이트된 객체(14)의 발견 시에, 컴퓨터는 업데이트된 객체(14)를 다른 노드들(18)과 동기화할 수 있다. 한 실시예에서, 변화들을 발견하기 위해서 상의 된 다른 노드들(18)의 집합은 네트워크(16)를 포화시킬 수 있는 많은 노드들(18)의 브로드캐스트(braodcast) 문의들을 회피하기 위해서, 예를 들면 이웃들의 이전에 선택된 집합으로 제한될 수 있다. 따라서 업데이트된 객체(14)를 발견하기 위해 접촉된 노드들(18)의 제한은 여기서 논의된 기술들의 확장성을 촉진할 수 있다.
제 1 측면의 제 2 변형은 업데이트된 객체(14)를 위해 스웜 노드들(118)로 간주되는 이웃들의 집합의 노드들(18)에 의한 선택과 관련된다. 이웃 집합의 선택은, 소스 노드(12)가 상호 연결된 노드들(18)의 몹시 큰 집합과 업데이트된 객체(14)의 동기화를 시도해서 네트워크 혼잡과 비효율적인 동기화를 유발하는, 도 4에서 도시된 문제를 회피하는데 도움이 될 수 있다. 이웃들의 선택은 임의적일 수 있지만, 임의적 선택은 완전히 상호 연결되지 않은 네트워크(16)를 초래할 수 있고, 여기서 제 1 노드(18)와 제 2 노드(18)는 의사 소통이 불가능하다. 따라서 이웃들의 선택은 네트워크(16)의 분할화를 유발할 수 있는 이웃들의 선택을 경감하도록 설정될 수 있다. 이웃들의 선택은 또한 물리적 근접성, 네트워크 토폴로지(예를 들면 동일한 LAN 상 또는 IP 주소들의 범위 내의 노드들의 부분 집합), 또는 소스 노드(12)와 이웃들 사이에 비교적 낮은 네트워크 지연시간과 같은 다양한 다른 요소들을 기초로 한다. 이 변형의 제 2 예시로서, 소스 노드(12)는 임의의 방법으로, 임의의 수의 이웃들을 포함하는 이웃 집합을 형성할 수 있다. 예를 들면, 소스 노드(12)는 빈 이웃 집합으로 시작할 수 있고, 반복하여 노드들(18)을 노드의 선택된 이웃과의 상호 접속 가능성을 검사할 수 있고, 임의의 그런 노드(18)를 이웃 집합에 추가할 수 있다. 소스 노드(12)는 또한 이웃 집합의 임의의 특정 크기를 지정할 수 있다(예를 들면 이웃들은 이웃 집합이 이로운 크기, 예를 들면 N이 네트워크(16) 상에서 접속 가능한 노드들을 계수하는, Log2 (N) 이웃들과 같은 이로운 크기에 도달할 때까지 이웃 집합에 추가될 수 있다). 이 변형의 제 3 예시로써, 소스 노드(12)는 업데이트된 객체(18)의 동기화 시작 시에 이웃들을 선택할 수 있고, 예를 들면, 업데이트된 객체(18)의 식별 시에 이웃들을 선택할 수 있다. 이는 예를 들면, 소스 노드(12)가 제 1 스웜 네트워크(116)의 종료 이후에 업데이트 된 객체(12)의 전파를 촉진시키는 것을 허용하는 것이 바람직할 수 있고, 그래서 소스 노드(12)는 임의의 이런 이웃들이 업데이트된 객체(14)를 저장하지 않는 경우에 새로운 이웃들의 집합을 선택하고 제 2 스웜 네트워크(116)를 형성할 수 있다. 대안적으로, 이웃들의 선택은 노드(18)가 적어도 하나의 네트워크 변경 경우가 감지되는 경우에 발생할 수 있다(예를 들면, 노드(18)가 네트워크(16)와 연결될 때, 새로운 노드(18)가 온라인 상태일 때, 선택된 이웃이 오프라인이 될 때, 또는 노드(18)가 네트워크(16)의 분할을 감지할 때). 이웃의 선택은 컴퓨터 적으로 집중적이고 또는 리소스-집중적일 수 있기 때문에 이것은 장점일 수 있고, 특히 이웃들이 시험용 지연 시간(testing latency) 또는 네트워크(16)의 용량들의 모델링에 의해 선택된 경우에 그러하다.
제 1 측면의 제 2 변형에 따라 구현된 한 실시예에서, 네트워크(16)의 노드들(18)은 하이퍼큐브 토폴러지(hypercube topology)에 따라서 모델링될 수 있다. 이 토폴러지 따라서, 네트워크(16)의 각각의 노드들(18)은 각각의 노드(18)가 하이퍼큐브의 각각의 모서리를 따라서 다른 노드들(18)을 이웃들로 선택하도록 연결될 수 있다. 하이퍼큐브 토폴러지의 제 1 장점은 하이퍼큐브 내의 노드들(18)의 위치를 식별하고 다양한 모서리들에서 연결된 노드들(18)을 이웃들로 단순하게 선택함에 의하는 이웃들의 쉬운 선택을 포함한다. 예를 들면, 만약에 완전히 상호 연결된 네트워크(16)의 노드들(18)이 1부터 N 까지(네트워크(16) 내의 노드들(18)의 수를 나타낸다) 계수될 수 있다면, 특정 노드(n으로 계수)의 이웃들(0부터 i까지)이 식별될 수 있고 다음 공식에 따라서 선택될 수 있다:
Figure 112011094434785-pct00001
따라서, 새로운 노드(18)는 그들의 이웃들의 식별 및 선택을 단순히 그들의 목록을 식별하고 하이퍼큐브 모들의 모서리들에 의해 연결된 노드들(18)의 목록을 컴퓨팅하는 방식으로 행할 수 있다.
이 제 1 측면의 제 3 변형은 이웃이 업데이트된 객체(14)를 저장하는지 여부를 식별하는 방법과 관련된다. 제 1 예시로써, 각각의 노드(18)는 다른 노드들(18)(특히 이웃들)에 의해 저장된 객체(14)의 목록을 저장할 수 있다. 노드(18)가 업데이트된 객체(14)를 식별할 때, 노드는 우선 다른 노드들(18)에게 통지할 수 있고, 각각의 다른 노드들(18)(특히 이웃들)은 노드에 의해 저장된 개체들(14)의 내부 목록을 업데이트할 수 있다. 그 뒤에, 노드(18)가 스웜 네트워크(116)에 추가할 이웃들을 식별할 때, 노드(18)는 그들의 이웃들에 의해 저장된 객체(14)들의 목록을 참조할 수 있고, 이것은 노드(18)로 하여금 이미 업데이트된 객체(14)를 수신한 이웃(예를 들면 다른 소스로부터 또는 다른 스웜 네트워크를 통해서)을 제외하는 것을 허용할 수 있다. 제 2 예시로써, 업데이트된 객체(14)를 저장하는 노드는 이웃들의 조사를 통해서 각각의 이웃들이 업데이트된 객체(14)를 저장하는지 여부를 판단할 수 있다. 예를 들면, 각각의 이웃에 대하여, 노드(18)는 업데이트된 객체(14)의 식별부(identifier)를 이웃에게 전송할 수 있고(예를 들면 이름, 구분되는 장소, GUID, 또는 객체(14)의 inode 숫자) 그리고 업데이트된 객체(14)의 콘텐츠 지표(indicator)를 이웃에게 전송할 수 있다(예를 들면 해시 코드, 버전 숫자, 또는 객체(14)의 가장 최근 수정 날짜). 노드(18)는 그 다음에 이웃으로부터 이웃이 업데이트된 객체(14)를 저장하고 있는지 여부에 대한 통지를 수신할 수 있고, 통지는 예를 들면, 이웃이 식별부와 콘텐츠 지표를 그것의 객체 저장부(166) 내의 객체들과 비교하는 방식으로 생성될 수 있다.
제 1 측면의 제 4 변형은 다른 표현들에서 객체의 변경을 달성하기 위해서 스웜 네트워크(116) 상에서 교환된 데이터와 변경된 객체(14) 사이의 관계와 관련된다. 제 1 예시로서, 객체의 변경이 감지될 때마다, 스웜 네트워크(116)는 객체의 전체 콘텐츠들을 교환할 수 있다. 제 2 예시로서, 스웜 네트워크(116)는 객체(14)의 이전 버전과 최신 버선 사이에 변경된 객체(14)의 부분만을 교환할 수도 있다. 이 예시는 특히, 예를 들면 객체의 변경들이 특정 청크들에게로 제한되는 경우에, 스웜 네트워크(116) 노드들(18)의 객체 저장부들(166) 내의 이런 청크들의 이전 버전들에 덮어서 기록될 수 있는, 변경된 청크들만을 교환할 수 있다. 대안적으로, 객체(14)는 내부 구조(예를 들면 데이터베이스를 포함하는 기록들의 어레이)를 정의할 수 있고, 노드들(18)은 구조 중에서 변경된 (예를 들면, 데이터베이스 내의 기록들 중, 신규, 업데이트된, 또는 삭제된) 부분들만을 교환할 수 있다. 제 3 예시로서, 스웜 네트워크(116)는 객체(14)를 업데이트된 버전으로 업데이트하도록 각각의 노드(18)에 적용될 수 있는 차등 패치(differential patch)를 교환할 수 있다. 예를 들면, 차등 패치는 각각의 노드(18)로 하여금 객체(14)의 데이터 블록을 특정 위치에 삽입하고 다른 데이터 블록을 삭제하도록 지시할 수 있다. 차등 패치들과 부분적 업데이트들은 예를 들면, 큰 객체들에 작은 업데이트들이 이루어진 경우에 이점이 있을 수 있고, 객체가 작거나, 변경들이 광범위한 경우에는 객체 전부를 재분배하는 것이 더 이점이 크다.
이런 변형들의 집합 중 하나는 객체(14)를 청크들의 집합으로 "조각화(chunking)"하는 건과 관련되고, 각각의 청크는 개별적으로 한 스웜 노드(118)에서 다른 노드(118)로 전달될 수 있는 객체(14)의 데이터 유닛을 포함한다. 이 변형에서, "조각화" 알고리즘은 객체(14)를 청크들로 분할하기 위해서 적용될 수 있다. 많은 이런 조각화 알고리즘들은 여기서 논의된 기술들과 호환될 수 있다. 예를 들면, 조각화 알고리즘은 조각들(segments)을 다양한 방식으로 선택할 수 있다; 예를 들면, 알고리즘은 고정된 크기의 청크들을 생성할 수 있고, 또는 객체(14)의 내부 구조를 식별하고 객체(14)를 내부 구조에 따라서 분할할 수 있고, 또는 청크들을 임의의 위치들에서 생성할 수 있다. 이들 기술들을 위해서 공평한 이런 조각화 알고리즘 중 하나는 RDC(remote differential compresson)일 수 있고, 여기서 객체(14)는 객체(14)의 각각의 부분들 내에서 로컬 극대값들(local maxima)을 식별하도록 스캔 될 수 있고, 객체(14)의 청크들은 이런 로컬 극댓값들 사이에 부합하는 것으로 선택될 수 있다. 이 조각화 알고리즘은 특히 예를 들면, 객체(14)의 한 부분의 변경이(예를 들면 바이트 삽입) 객체(14) 내의 뒤따르는 모든 청크들에게 부정확하게 변경에 대한 신호를 보내는 확률을 감소시키는데 적합할 수 있다. 더 나아가, RDC는 커다란 객체들(14)의 청크들의 복수의 레벨들을 허용한다; 예를 들면, 객체(14)는 일련의 청크들로 청크될 수 있고, 작은 청크들이 각각의 청크들 내에서 식별될 수 있다. 만약에 오직 객체(14)의 적은 부분만이 변경된다면(예를 들면 단일 바이트), 커다란 청크들을 검사해서 변경을 식별하고, 변경된 커다란 청크 내의 작은 청크들을 검사해서 추가적으로 변경의 위치를 찾아내고, 그 다음에 하나 이상의 이웃들로부터 변경된 부분을 포함하는 작은 청크만 요청하는 것이 보다 효율적일 수 있다. 대안적으로, 만약 객체(14)가 항목들의 집합을 포함하고(예를 들면 작은 객체들의 집합이 하나의 객체처럼 동기화를 위해서 함께 묶인 경우), 각각의 항목은 청크로 선택될 수 있다. 특정 조각화 변형에서, 데이터의 구별되는 패턴이 객체 안에서 식별될 수 있고(예를 들면 특정 바이트들의 집합) 그에 따라 객체(14)를 조각화 할 수 있다.
객체를 조각화하는 것은 여러 이유들에서 이점이 있을 수 있다. 제 1 예시로서, 객체(14) 내의 작은 변화들(데이터의 삽입, 변경, 또는 삭제)이 오직 적은 청크들 내에 속할 수 있고, 청크들의 차등 비교는 객체(14)를 업데이트하기 위해서 단지 특정 청크들만이 교환되면 된다는 것을 나타낼 수 있다. 제 2 예시는 누락된 청크와 전체적으로 비트-포-비트(bit for bit) 동일성을 가진 청크의 재사용을 위한 잠재성을 포함할 수 있다. 만약에 객체(14) 내의 제 1 청크가 객체(14) 내의 제 2 청크 또는 다른 객체(14)와 동일하다면, 제 1 청크는 가지지만 제 2 청크는 가지지 않는 노드(18)는 단순히 제 1 청크를 복제해서 객체 저장부(166) 내에 제 2 청크를 생성할 수 있고, 따라서 네트워크(16) 상에서 제 2 청크의 전송을 피할 수 있다.
추가적인 장점들이 이들 변형들을 기초로 한 이들 기술들의 특정 실시예들에 의해서 달성될 수 있다. 도 12는 예시적 시나리오(190)를 도시하고, 이는 스웜 네트워크(116)를 구성하는 스웜 노드들(118)에게 네트워크(12) 상에서 객체(14)를 전송하도록 설정된 소스 노드(12)를 특징으로 삼는다. 소스 노드(12)는 업데이트된 객체(14)를 적어도 하나의 청크로 조각화할 수 있고(예시적 시나리오(190)에서는 네 개의 청크들이 형성된다), 그 다음에 내부적으로 저장된 스웜 청크 지도(192)를 초기화할 수 있고, 이는 각각의 스웜 노드들(118)이 업데이트된 객체(14)의 각각의 청크들을 저장하는지 여부를 표시한다. 스웜 청크 지도(192)는 예를 들면, 각각의 청크가 각각의 스웜 노드(118)에 의해 저장되었으면 1을 표시하고 아니면 0을 표시하는 이차원 어레이의 형태로 배열되는 비트맵을 포함할 수 있다. 소스 노드(12)는 스웜 청크 지도(192)를 나타내는 것에 의해 스웜 노드(118)에 전송할 청크를 선택할 수 있다. 더 나아가, 스웜 노드(118)가 청크를 수신할 때(소스 노드(12) 또는 다른 스웜 노드(118)로부터), 스웜 노드(118)는 소스 노드(12)에게 청크 저장을 통지할 수 있고, 소스 노드(12)는 그에 따라 스웜 청크 지도(192)를 업데이트할 수 있다. 마지막으로, 소스 노드(12)는 스웜 청크 지도(192)의 조사를 통해서 스웜 노드들(118)이 객체(14)를 수신했다는 것을 판단할 수 있다. 청크들을 다른 스웜 노드들(118)에 전송함에 있어서 스웜 청크 지도(192)가 참조 될 수 있도록 각각의 스웜 노드(118)로 하여금 스웜 청크 지도(192)를 저장하고 초기화하는 것은 추가적인 이점을 가질 수 있고, 각각의 스웜 노드(118)로 하여금 청크의 저장 시에 모든 다른 스웜 노드들(118)에게 통지하도록 하는 것이 추가적인 이점을 가질 수 있다.
스웜 청크 지도(192)의 포함은 또한 이들 기술들 내의 추가적인 개선들을 허용할 수 있다. 예를 들면, 스웜 노드(118)(소스 노드(12) 포함)가 다른 스웜 노드(118)로 전송될 청크를 선택할 때, 스웜 노드(118)는 그것의 객체 저장부에 저장되어있지만, 스웜 청크 지도(192)에 따르면 스웜 노드들(118) 사이에서는 드물게 저장된 희귀한 청크를 선택할 수 있다. 이런 선택은 스웜 노드들(118) 사이에서 객체(14)를 구성하는 청크들의 균일한 분배와 넓은 사용가능성을 용이하게 할 수 있고, 따라서 청크들의 접속 가능성과 스웜 네트워크(116)의 강건함(robustness)를개선할 수 있다(예를 들면 오프라인인 노드가 특정 청크의 유일한 소스가 되는 시나리오를 피하기 위해서). 예를 들면, 도 12의 예시적 시나리오(190) 내에서 도시된 시점에서, 소스 노드(12)는 청크를 다른 스웜 노드(118)에 전송할 준비가 되어있을 수 있고, 희귀한 청크를 식별하기 위해서 스웜 청크 지도(192)를 검사할 수 있다. 예를 들면, 소스 노드(12)는 제 1 청크(66)가 가장 폭넓지않게 분배된 청크임을 판단할 수 있고, 따라서 제 1 청크(66)를 저장하지 않는 스웜 노드(118)로 보내질 제 1 청크(66)를 선택할 수 있다(예를 들면 노드 B, C, D, 또는 E).
제 1 측면의 제 5 변형은 스웜 노드들(118)과 동기화될 업데이트된 객체(14)의 선택을 포함한다. 제 1 예시로써, 객체 저장부(166)는 개별적으로 동기화하는 것보다 다른 노드들(18)과 함께 동기화할 때보다 효율적인 항목들의 집합을 포함할 수 있다. 예를 들면, 항목들은 의미 관련적 또는 논리적으로 관련될 수 있고(예를 들면 데이터베이스 내의 관련 기록들의 집합 또는 함께 애플리케이션을 구성하는 리소스들의 집합), 또는 빈번하게 함께 업데이트될 수 있다. 항목들은 또한, 개별적으로 작은 데이터 전송을 포함하는 작은 업데이트들 또는 적은 데이터를 포함하는 항목들의 집합을 포함할 수 있다. 대안적으로, 항목들은 최근에 업데이트된 항목들의 집합을 포함할 수 있다; 예를 들면, 컴퓨터는 특정 문턱 값(예를 들면 경과 시간 또는 업데이트될 데이터의 용량)이 충족된 경우에 모든 항목들을 함께 동기화하기 위해서 동기화될 항목들의 집합을 캐시(cache)할 수 있다. 이런 시나리오들에서, 스웜 네트워크(116)를 통해서 동기화될 객체 배치 안에서 항목들을 함께 묶는 것과 비교할 때 개별적인 항목들에 대하여 스웜 네트워크(116)(스웜 노드들(118)의 선택 및 통지, 객체(들)(14)의 조각화, 스웜 청크 지도들(192)의 초기화, 그리고 청크들 전송의 개시를 포함)를 생성하는 것은 비효율적일 수 있다. 따라서, 컴퓨터는, 객체 집합 내의 업데이트된 객체의 식별 시에, 업데이트된 객체(14)를 이웃들에 의해 저장되지 않는 업데이트된 객체들(14)을 포함하는 업데이트된 객체 배치에 추가하고, 업데이트된 객체 배치가 객체 배치 문턱 값을 초과할 때 스웜 네트워크(116)를 형성하도록 설정될 수 있다.
대안적 또는 추가적으로, 컴퓨터는 스웜 네트워크(116)의 형성 없이, 단순히 동기화될 데이터를 이웃들에 직접적으로 전송하는 방식을 통해서 작은 업데이트들(예를 들면, 1 MB 미만과 같은 비교적 작은 용량의 데이터의 동기화; 예를 들면 십보다 작은 경우처럼 업데이트된 객체들(14)의 수가 적을 경우; 및/또는 이웃들의 수가 3 미만의 경우처럼 이웃 집합이 적은 경우들을 포함한다)을 동기화하도록 설정될 수 있다. 따라서, 컴퓨터는, 적은 데이터 업데이트(예를 들면 업데이트된 객체들(14) 수가 적은 경우; 작은 업데이트된 객체(14); 또는 작은 이웃 집합) 식별 시에, 작은 이웃 집합의 이웃들에게 작은 업데이트된 객체 집합을 전송하도록 설정될 수 있다. 이런 대안적 설정은 소스 노드(12)로 하여금 작은 데이터 업데이트를 스웜 네트워크의 불필요한 비용 초래 없이, 더욱 빠르게 전파할 수 있다.
제 1 측면의 제 6 변형은 소스 노드(12)에 의해 동기화될 객체들의 우선순위화(prioritization)와 관련된다. 제 1 예시로써, 높은 우선 순위의 객체들(14)을 낮은 우선순위의 객체들(14)보다 먼저 동기화, 또는 엄격한 동기화 스케줄(예를 들면 낮은 우선순위의 객체들(14)에 대한 업데이트의 동기화는 연기되거나 묶일 수 있고, 높은 우선 순위의 객체들(14)의 동기화는 신속하게 수행될 수 있다)에 따라 동기화하는 것이 유리할 수 있다. 제 2 예시로서, 객체들(14)은 다른 집단들에 속할 수 있고, 제 1 집단에 속하는 객체들을 제 2 집단에 속하는 객체들보다 먼저 동기화하는 것이 바람직할 수 있다. 따라서, 컴퓨터, 소스 노드(12)로서 운용되기도 하지만, 우선도에 따라서 특정 객체들의 동기화 순서를 설정할 수 있고, 그들의 수선순위에 따라서 차례차례 업데이트된 객체들(14)에 대하여 여기서 논의된 기술들을 수행할 수 있다(예, 도 8의 예시적 방법).
제 1 측면의 제 7 변형은 중앙화된 객체 저장부 및/또는 컴퓨팅 환경 호스트(100)와 같은 스웜 네트워킹의 중앙화된 조직을 활용하기 위한 컴퓨터(소스 노드(12) 또는 서버로써)의 설정과 관련된다. 이런 변형에서, 컴퓨팅 환경 호스트(100)는 어떤 노드(18)가 어떤 객체(14)를 저장하는지 여부를 중앙적으로 파악할 수 있고, 업데이트된 객체(14)의 동기화를 위해서 이웃들 사이에서 스웜 노드들(118)의 선택에 참여할 수 있다. 예를 들면, 각각의 노드(18)는, 업데이트된 객체(14)의 식별 시에, 우선 컴퓨팅 환경 호스트(100)에 통지한다. 컴퓨팅 환경 호스트는 그 다음에 어떤 이웃들이 업데이트된 객체(14)를 저장하는지에 관해서 임의의 노드(18)에 의해 문의 될 수 있고, 응답은 스웜 네트워크(116)를 형성하는데 사용될 수 있다. 다른 변형에서, 컴퓨팅 환경 호스트(100)는 객체 집합의 권한 있는 소스의 역할을 할 수도 있다; 예를 들면, 컴퓨팅 환경 호스트(100)는 요구에 따라 객체(14)의 최근 버전을 제공할 수 있고, 버전 간의 충돌을 해결할 수 있고, 및/또는 객체(14)를 저장하는 다른 노드들(18)이 사용 불가능한 경우에 객체(14)의 신뢰성 있는 소스의 역할을 할 수 있다. 그래서, 컴퓨터의 객체 저장부(166) 내의 객체들(14) 또한 컴퓨팅 환경 호스트(100)의 객체 저장부(166) 내의 대응되는 객체들로 저장되지만, 컴퓨터는, 업데이트된 객체(14)의 식별 시에, 컴퓨팅 환경 호스트(100)가 업데이트된 객체(14)를 저장하고 있는지 여부를 판단하고, 만약에 그렇지 않다면, 업데이트된 객체(14)를 컴퓨팅 환경 호스트(100)로 전송하도록 설정될 수 있다. 더 나아가, 업데이트된 객체(14)를 이웃들과 동기화하기 전에 업데이트된 객체(14)를 컴퓨팅 환경 호스트(100)와 동기화하는 것이 유리할 수 있다. 본 기술 분야의 당업자들은 여기서 논의된 기술들을 구현함과 동시에 컴퓨터의 설정(예를 들면 소스 노드(12) 또는 서버) 안의 추가적인 특성들을 구현할 수 있다.
이들 기술들의 실시예들 사이에서 달라지는 제 2 측면은 컴퓨터로 하여금 다른 소스 노드(12)에 의해 저장된 업데이트된 객체(14)에 의해 형성된 스웜 네트워크(116) 내에 참여하도록 설정하는 방법과 관련된다. 이들 변형들은, 예를 들면, 컴퓨터가, 도 9의 예시적 방법(140)과 같이, 스웜 네트워크(116) 안에서 클라이언트 또는 스웜 노드(118)로 기능할 때, 적용될 수 있다.
제 2 측면의 제 1 변형으로, 컴퓨터는 소스 노드(12)에 의해 컴퓨터가 업데이트된 객체(14)를 저장하는지 여부를 식별함에 있어서 도움을 주도록 설정될 수 있다. 예를 들면, 소스 노드(12)는 식별부(identifier)(예를 들면 이름, 구분되는 장소, GUID, 또는 inode 숫자)와 콘텐츠 표시부(예를 들면, 해시 코드, 버전 숫자, 또는 객체(14)의 마지막으로 변경된 날짜)를 컴퓨터로 전송할 수 있다. 컴퓨터는 이 정보를 객체 저장부(166) 안의 객체들(14)과 비교하도록 설정될 수 있다(그리고 만약에 존재한다면, 객체 저장부(166) 내의 대응되는 객체(14)와도 비교). 그 다음에 컴퓨터는 매칭되는 객체가 위치하는 경우, 동일한 식별부를 가진 객체가 최신 버전인 경우 등일 때, 긍정적으로 소스 코드(12)에 통지하고, 그런 객체가 발견되지 않고, 업데이트된 객체(14)가 컴퓨터에 의해 수신되고 객체 저장부(166) 안에 저장될 예정인 경우에 부정적으로 소스 코드(12)에 통지한다.
제 2 측면에 제 2 변형으로서, 컴퓨터는 객체(14)의 청크 수신 시에 다른 스웜 노드들(118) 및/또는 소스 노드(12)에 통지하는 방식으로 스웜 네트워크(116) 안에 참여하도록 설정될 수 있다. 이것은 예를 들면, 컴퓨터에 의해 저장된 청크들의 집합을 표시하기 위해서 소스 노드(12) 및/또는 다른 스웜 노드들(118)로 하여금 스웜 청크 지도(192)를 업데이트를 할 수 있게 하는 방식 등을 통해서, 컴퓨터로 전달되는 청크들의 분배를 용이하게 하는데 도움이 될 수 있다. 추가적으로, 컴퓨터는 어떤 스웜 노드들(118)이 업데이트된 객체(14)의 어떤 청크들을 저장하는지를 나타내는 스웜 청크 지도(192)를 초기화, 유지, 그리고 사용함으로써 스웜 네트워크(116)에 참여하도록 설정될 수 있다. 이 스웜 청크 지도(192)는 소스 노드(12)와 유사한 방식으로 생성되고 사용될 수 있다. 예를 들면, 스웜 네트워크(116) 접속 시, 컴퓨터는 스웜 청크 지도(192)를 초기화할 수 있고, 다른 스웜 노드(118)가 특정 청크를 저장하고 있다는 것을 통지받은 경우, 컴퓨터는 스웜 노드(118)가 청크를 저장하고 있다는 것을 나타내도록 스웜 청크 지도(192)를 업데이트할 수 있다. 이 스웜 청크 지도(192)는, 예를 들면, 언제 스웜 노드들(118)이 청크들을 수신했는지의 판단, 그리고 다양한 스웜 노드들(118)로 전송될 청크들의 선택을 용이하게 하기 위해서 사용될 수 있다(예를 들면, 컴퓨터에 의해 저장되어 있지만, 다른 스웜 노드들(118)에 의해서는 드물게 저장되어있는 희귀한 청크의 선택을 통해서).
제 2 측면의 제 3 변형은 컴퓨터가, 스웜 네트워크(116)에 참여함과 동시에, 청크들을 다른 스웜 노드들(118)에 전송하는 방법과 관련된다. 제 1 예시로서, 컴퓨터는 단순히 하나의 청크를 다른 스웜 노드(118)에 한 번에 전송할 수 있고, 현재 청크의 전송 완료 시에 다음 청크를 선택하고 스웜 노드(118)에 전송할 수 있다. 제 2 예시로서, 컴퓨터는 동시에 하나 이상의 청크들을 하나 이상의 스웜 노드들에 전송할 수 있다. 이런 실시예에서, 컴퓨터는 다양한 스웜 노드들(118)에 전송될 청크들을 대기 행렬에 추가할 수 있다. 컴퓨터를 포함하는 스웜 네트워크의 형성을 통지받은 경우에, 컴퓨터는 각각의 스웜 노드들(118)에 대하여 전송 대기 행렬을 생성하도록 설정될 수 있다. 그 다음에 청크들은 하나 이상의 청크들을 스웜 노드(118)의 전송 대기열에 추가하는 방식으로 각각의 스웜 노드들(118)로 전송될 수 있다. 스웜 노드(118)의 텅 빈 전송 대기열에 청크를 추가한 경우, 또는 청크를 스웜 노드에 전송을 완료한 경우(전송 대기열로부터 전송된 청크를 해제하고 난 후), 컴퓨터는 스웜 노드(118)를 위한 전송 대기열 안의 다음 추가될 청크를 식별할 수 있고, 다음 추가된 청크의 전송을 개시할 수 있다. 이 실시예는 각각의 스웜 노드들(118)에 일정한 재분배된 청크들의 흐름을 촉진할 수 있고, 또한 컴퓨터의 업로드 용량의 높은 활용을 유지할 수 있다. 하나의 추가적 개선안으로, 컴퓨터는, 다음 대기열에 추가되는 청크를 식별한 경우에, 스웜 노드(118)가 이미 다음 대기열에 추가되는 청크를 수신했는지 여부를 판단하기 위해서 스웜 청크 지도(192)를 검시한다; 만약에 그렇다면, 컴퓨터는 단순하게 스웜 노드(118)에 대기열에 추가된 청크를 전송하지 않고 대기열에서 해제시킬 수 있다. 본 기술 영역의 당업자는 다른 개선들 및 특성들을 수정할 수 있고 이에 의해 컴퓨터는 여기서 논의된 기술들을 구현하면서 스웜 네트워크(116) 내의 스웜 노드(118)로서 참여하도록 설정될 수 있다.
이들 기술들의 실시예들 사이에서 달라지는 제 3 측면은 스웜 네트워크 기술들이 실패할 수 있는 각각의 객체 저장부(166)의 동기화를 달성하기 위한 노드들(18)의 추가적 설정과 관련된다. 도 7과 관련해서 인식될 수 있는 바와 같이, 여기서 논의된 스웜 네트워크 기술들은 분할되지 않은 네트워크(16), 노드들(18)을 완전히 커버하는 이웃 선택들의 집합, 그리고 모든 노드들(18)의 끊어지지 않은 네트워크 연결성과 같은 특정 조건들 하에서 업데이트된 객체(14)를 모든 노드들(18)에게 전송을 성공시킬 가능성이 크다. 그러나 이들 조건들이 실패할 경우, 스웜 네트워크 기술들은 업데이트된 객체(14)를 하나 이상의 노드들(18)에 전파함에 있어서 실패할 수 있다. 제 1 예시로써, 네트워크(16)는 노드들의 둘 이상의 파티션들로 분할될 수 있고, 여기서 제 1 파티션의 어떤 노드도 다른 파티션의 임의의 노드에 접속 가능하지 않다. 이런 분할은, 예를 들면, 연결 실패, 브리지 노드들이 오프라인 상태가 된 경우, 또는 부적절하게 선택된 네트워크 토폴러지를 통해서 발생할 수 있다. 이런 시나리오에서, 업데이트된 객체(14)는 제 1 파티션의 노드들(18) 사이에서 전파될 수 있으나, 제 2 파티션의 임의의 노드들(18)에게는 전파될 수 없다. 더 나아가, 제 2 파티션의 노드들(18)은 객체(14)가 업데이트되었다는 것을 통지조차 받지 못할 수 있다. 제 2 예시로써, 스웜 네트워크들(116)을 형성하기 위해서 노드들(18)에 의해 활용되는 부적합한 이웃 선택 알고리즘은 부주의로 하나 이상의 노드들(18)을 임의의 이웃 집합으로부터 제외할 수 있다(예를 들면, 제 1 노드는 오직 이웃 집합 내에 제 1 노드의 포함에 실패하는 제 2 노드에 의해서만 접속 가능하다). 이런 시나리오에서, 제외된 노드(18)는 어떤 스웜 네트워크(116)에도 포함되지 않고 업데이트된 객체(14)를 수신하지 않고, 그리고 업데이트된 객체(14)에 대해서 통지조차 받지 못할 수 있다. 제 3 예시로써, 노드(18)는 업데이트된 객체(14)가 스웜 네트워크들(116)에 의해 노드들(18) 사이로 전파될 때 일시적으로 오프라인이 될 수 있고, 업데이트된 객체(14)를 수신하지 못할 수 있고, 또는 객체(14)가 업데이트되었다는 것의 통지조차 받지 못할 수 있다.
이들 그리고 다른 시나리오들에서, 추가적인 기술들이 스웜 네트워크 기술들이 이런 동기화를 달성할 수 없을 때 다양한 노드들(18)에 의해 저장된 객체 집합들의 동기화를 촉진하기 위해서 활용될 수 있다. 하나의 예시로써, 컴퓨터는, 업데이트들의 누락 또는 누락된 업데이트들을 취득할 기회를 나타내는 동기화 이벤트 감지 시에(예를 들면, 네트워크(16)에 재접속, 네트워크(16)의 분할화 또는 분할 해제 감지, 또는 새로운 이웃 집합 선택), 업데이트된 객체들(14)의 식별 및 취득을 시도한다. 그 다음에 컴퓨터는 업데이트된 객체들(14)을 식별하기 위해서 노드들(14)(예를 들면 이웃들)에게 문의할 수 있고, 임의의 식별된 업데이트된 객체들(14)을 저장하는 이런 노드들(14)에게 업데이트된 객체(14)를 컴퓨터에게 전송해줄 것을 문의할 수 있다. 따라서, 스웜 네트워크들(116)에 의해 나타나는 이웃들에게 업데이트된 객체들(14)을 전달하는 "말하기(telling) 및 "푸싱(pushing)" 아키텍처와는 대조적으로, 보완적 기술은 "문의(ask)" 아키텍처 (노드가 부근 노드에게 업데이트된 객체들(14)에 대해서 문의) 및 "당김(pull)" 아키텍처 (노드가 업데이트된 객체(14)를 저장하는 하나 이상의 노드들로부터 업데이트된 객체(14)수신 요청을 개시)를 보인다. 따라서, 상호 작용을 제어하는 노드(18)는 업데이트된 객체들(14)의 서버들의 역할을 수행하는 노드들(18)로부터 업데이트된 객체들(14)(또는 그들의 청크들)을 요청하는 클라이언트의 역할을 수행한다.
도 13은 이 기술의 하나의 실시예를 도시하고, 이 실시예는 컴퓨터의 객체 저장부(166)의 객체들(14)을 다른 노드들(18)의 객체 저장부들(166) 내에 저장된 대응되는 업데이트된 객체들(14)과 동기화하는 예시적 방법(200)을 포함한다. 이 실시예는, 예를 들면, 이들 실시예들의 다른 실시예들(예를 들면, 도 9의 예시적 방법(120), 또는 도 10의 예시적 시스템(168))에 추가될 수 있다. 예시적 방법(200)은 202에서 시작되고, 동기화 이벤트 감지 단계(204) 직후, 컴퓨터의 객체 저장부(166)에 저장되어 있지 않고 적어도 하나의 이웃에 의해 저장된 업데이트된 객체들(14)을 식별하는 단계(206)를 포함한다. 하나 이상의 이런 업데이트된 객체들(14)을 식별(208)한 경우, 예시적 방법(200)은 컴퓨터의 객체 저장부(166) 안에 업데이트된 객체(14)를 생성하는 단계(210)와 업데이트된 객체(14)를 적어도 하나의 청크로 조각화하는 단계(212)를 포함한다. (대안적으로, 조각화 단계(212)는 예를 들면, 업데이트된 객체(14)의 소스 노드(12)와 같은 다른 컴퓨터에 의해 수행될 수 있고, 이는 객체(14)의 청크들을 컴퓨터에 통지할 수 있다.) 예시적 방법(200)은 또한, 업데이트된 객체(14)의 청크들이 객체 저장부(166) 내에 저장될 때까지(214), 청크를 저장하는 이웃으로부터 객체 저장부(166) 내에 저장되지 않은 적어도 하나의 청크를 요청하는 단계(216), 그리고 이웃으로부터 청크를 수신한 경우, 객체 저장부(166) 내에 청크를 저장하는 단계를 포함한다. 컴퓨터는 업데이트된 객체(14)가 수신되고 저장될 때까지 이런 청크들을 저장하는 이웃들로부터 업데이트된 객체(14)의 청크들을 계속 요청할 수 있고, 여기서 예시적 방법(200)은 220에서 종료한다.
대안적으로 또는 추가적으로, 실시예들은 이런 업데이트된 객체들(14)을 요청하는 노드들(18)로 업데이트된 객체들(14)의 전달을 지원하도록 설정될 수 있다(예를 들면, 도 13의 예시적 방법(20)을 활용하는 클라이언트 노드들에 의해 요청될 수 있는, 업데이트된 객체들(14)의 서버, 또는 그들의 청크들로 가동됨으로써). 예를 들면, 컴퓨터는, 컴퓨터의 객체 저장부(166) 내 저장된 객체(14)의 청크에 대하여 이웃으로부터 요청을 수신한 경우에, 객체(14)의 청크를 이웃에게 전송하도록 설정될 수 있다. 추가적으로, 컴퓨터는, 다른 노드들(18)에 의해 저장된 업데이트된 객체들(14)을 식별하려 노력하는 동안에, 다른 노드들(18)에 전달될 객체 저장부(166) 안에 저장된 하나 이상의 업데이트된 객체들(14)을 식별할 수 있다. 예를 들면, 오프라인일 때 객체저장부(166) 내의 객체를 업데이트했을 수 있고, 네트워크와 재연결 시에, 다른 노드들(18)에 의해 저장된 업데이트된 객체들(14)에 대하여 문의 도중에 객체(14)가 로컬로 업데이트되었다는 것을 식별할 수 있다. 이런 시나리오에서, 컴퓨터는 객체(14)를 업데이트된 객체(14)로 식별할 수 있고, 따라서 도 8의 예시적 방법(120)과 같이, 업데이트된 객체들(14)의 동기화를 위해서 "말하기(tell)" 및 "푸시(push)" 기수들을 적용할 수 있다. 본 기술 영역의 당업자들은 여기서 논의된 기술들을 구현하는 동안 스웜 네트워크 동기화를 보완할 수 있는 많은 객체 집합 동기화 방법들을 수정할 수 있다.
이들 기술들의 실시예들 사이에서 달라지는 제 4 측면은 이들 기술들 내에서 컴퓨터 환경 호스트(100)의 참여와 관련되고, 특히 "문의(ask)" 및 "당김(pull)" 동기화 기술들과 관련된다. 제 4 측면의 제 1 변형은 컴퓨터 환경 호스트(100)를 포함하는 이런 실시예들의 상호 작용을 포함하고, 이는 다른 노드들(18)로부터 업데이트된 객체들(14)의 동기화를 용이하게 할 수 있다. 컴퓨팅 환경 호스트(100)는 컴퓨터를 포함하는 다양한 노드들(18)에 의해 저장된 업데이트된 객체(14)의 목록을 저장할 수 있다. 컴퓨터가 동기화 이벤트를 감지할 때, 컴퓨터는 컴퓨팅 환경 호스트(100)로부터 업데이트되었지만 컴퓨터의 객체 저장부(166) 내에 저장되지 않은 객체들(14)의 기록을 요청할 수 있다. 이런 기록은 취득될 수 있고, 예를 들면, 만약에 각각의 노드들(18)이 그것의 객체 저장부(166) 내에 업데이트된 객체(14)의 저장 시에 컴퓨팅 환경 호스트(100)에 통지하도록 설정된다. 컴퓨팅 환경 호스트(100)는 예를 들면, 컴퓨팅 환경 호스트(100)를 포함하는 다른 노드들(18)에 의해 저장된 객체 집합(14)을 컴퓨터에 의해 저장된 객체 집합(14)의 기록기 비교를 통해서 이런 목록을 식별하고 제공할 수 있다. 비교 결과는 업데이트된 객체들(14)을 식별할 수 있고, 또한 컴퓨터에 의한 요청 시에 제공될 수 있는 이런 업데이트된 객체들을 저장하는 노드들을 식별할 수 있다. 대안적으로, 컴퓨팅 환경 호스트(100)는 노드들(18)에 의해 저장된 업데이트된 객체들의 로그를 유지할 수 있고, 컴퓨터에게 마지막으로 컴퓨터가 다른 노드들(18)과 동기화한 것으로 알려진 시점 이후의 로그 부분을 전송할 수 있다(예를 들면, 컴퓨터에 의해 감지된 마지막 네트워크 동기화 이벤트 이후). 그 다음에 컴퓨터는 컴퓨터의 객체 저장부(166)에 저장되지 않은 임의의 업데이트된 객체들(14)을 식별하기 위해서 로그의 일부를 검사할 수 있다. 대안적으로, 만약 객체 집합이 컴퓨터 환경 호스트(100)에 의해 관리되지 않는다면, 업데이트된 객체들(14) 식별에 다른 기술들이 사용될 수 있다; 예를 들면, 컴퓨터는 이웃들에게 최근에 업데이트된 객체들(14)의 목록을 요청할 수 있고, 또는 그것의 객체 저장부(166)에 저장된 객체들(14)과 이웃의 객체 저장부들(166)에 저장된 객체들(14)을 비교할 수 있다.
제 4 측면의 제 2 변형은 업데이트된 객체들(14) 또는 그것의 청크들의 대안적 소스로서 컴퓨터와 컴퓨팅 환경 호스트(100) 사이의 다른 상호 작용을 포함한다. 일부 시나리오들에서, 컴퓨터는 임의의 다른 노드들(18)로부터 취득하는 것보다 컴퓨터 환경 호스트(100)로부터 업데이트된 객체(14)를 더욱 쉽게 취득할 수 있다. 제 1 예시로써, 업데이트된 객체(14)를 저장하는 노드들(18)은 컴퓨터 환경 호스트(100)에 의해 직접 접속시에 달성될 수 있는 것보다 느린 네트워크 연결 상에서 컴퓨터에 접속가능할 수 있다(예를 들면, 주거지 브로드밴드(residence broadband) 연결을 통해서 연결되는 홈 네트워크를 가끔 묘사하는 것과 같이, 노드들(18)로부터의 업링크(uplink)는 제한된 업로드 용량을 가진다). 제 2 예시로써, 업데이트된 객체(14)를 저장하는 노드들(19)은 모든 컴퓨터들에 대해 접속가능할 수 없을 수도 있고, 예를 들면 이들 노드들(18)이 네트워크 연결이 단절되거나, 네트워크 파티션이 컴퓨터로부터 떨어진 파티션 내의 이들 노드들을 고립화시키는 경우가 있다. 이런 경우들에서, 컴퓨터는 컴퓨터 환경 호스트(100)로부터 업데이트된 객체(14) 또는 그들의 청크를 요청하는 것에 의지해야한다. 예를 들면, 컴퓨터는, 이웃들로부터 업데이트된 객체(14)의 적어도 하나의 청크의 수신을 실패 시에, 컴퓨팅 환경 호스트(100)로부터 적어도 하나의 청크를 요청하도록 설정될 수 있고, 컴퓨팅 환경 호스트(100)로부터 적어도 하나의 청크를 수신 시에, 객체 저장부(166)에 적어도 하나의 청크를 저장하도록 설정될 수 있다. 네트워크 용량과 컴퓨터 환경 호스트(100)의 처리 리소스들을 보존하기 위해서 노드들(18)로 하여금 이런 요청들을 최후의 수단으로만 활용하도록 설정하는 것이 이로울 수 있으나, 컴퓨터로 하여금 이 옵션을 실행하도록 설정하는 것은 컴퓨터에 의해 저장된 객체(14)가 객체(14)의 최근 업데이트들과 동기화되지 않은 오래 계속된 기간에 대해서는 바람직할 수 있다.
제 4 측면의 제 3 변형은 버전 충돌을 조정하도록 컴퓨팅 환경 호스트(100)를 활용하는 것을 포함한다. 많은 시나리오에서, 객체(14)는 동시에 또는 다르게 두 개의 노드들(18)에 의해 업데이트될 수 있고, 업데이트들을 조화시키고 객체(14)의 한 버전을 다른 버전보다 우선순위화하는 것은 어려울 수 있다. 예를 들면, 제 1 노드(18)는 객체(18)가 네트워크(16)로부터 연결 해제되는 동안에 객체(14)의 로컬 표현을 업데이트할 수 있고, 이 동안에 제 2 노드는 동일한 객체(14)의 로컬 표현을 다르게 업데이트할 수 있다. 제 1 노드(18)가 네트워크(16)에 재연결될 때, 제 1 노드는 제 2 노드에 의해 업데이트된 객체(14)와의 충돌을 발견할 수 있다. 이런 시나리오들에서, 컴퓨팅 환경 호스트(100)가 객체 집합의 권한 있는 표현을 호스트 할 수 있기 때문에, 노드(18)는 버전 충돌을 조정하기 위해서 컴퓨팅 환경 호스트(100)를 참조할 수 있다. 컴퓨팅 환경 호스트(100)는 다양한 요소들(예를 들면, 가장 최근에 업데이트된 버전, 또는 높은 우선도의 기기상에 업데이트된 객체(14)의 버전을 낮은 우선도의 노드 기기상에 업데이트된 객체의 버전보다 우선)을 기초로 한 버전을 다른 버전보다 우선적으로 선택하는 것으로 응답할 수 있다. 대안적으로, 컴퓨팅 환경 호스트(100)는 객체(14)에 대한 다른 업데이트들을 조정 또는 병합 시도를 할 수 있고, 노드들(18)에 분배될 하이브리드 객체를 생성할 수 있다. 다른 대안으로, 컴퓨팅 환경 호스트(100)는 객체(14)의 두 버전들 모두가 저장될 것을 나타낼 수 잇고(예를 들면 객체(14)의 적어도 한가지 버전에서 개명하는 방식으로), 또는 사용자에게 버전을 선택할 것을 문의할 수 있다. 본 기술의 당업자들은 여기서 논의된 기술들과 관련되는 컴퓨팅 환경 호스트(100)의 많은 사용예들을 수정할 수 있다.
본 발명은 구조적 특성들 및/또는 방법적 행위들에 특정되는 용어들로 서술되었지만, 첨부되는 청구항들에서 정의된 발명은 위에서 서술된 구체적 특성들 또는 행위들에 반드시 제한되지 않음을 이해해야할 것이다. 오히려, 상술된 구체적 특성들과 행동들은 클레임 구현의 예시적 형태로 개시된 것이다.
본 명세서에서 사용되는 용어 "구성요소", "시스템", "모듈", "인터페이스", "플랫폼", 기타는 일반적으로 컴퓨터-관련 엔터티(computer-related entity), 예를 들어, 하드웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어, 또는 실행 중인 소프트웨어를 말하기 위한 것이다. 예를 들어, 구성요소는 프로세서상에서 실행 중인 프로세스, 프로세서, 개체, 실행 파일, 실행 스레드, 프로그램 및/또는 컴퓨터일 수 있지만, 이들로 제한되지 않는다. 예시로서, 제어기 상에서 실행 중인 응용 프로그램 및 그 제어기 둘 모두 구성요소일 수 있다. 하나 이상의 구성요소들이 프로세스 및/또는 실행 스레드 내에 존재할 수 있고, 구성요소가 하나의 컴퓨터상에 로컬화되어 있을 수 있고 및/또는 2개 이상의 컴퓨터들 간에 분산되어 있을 수 있다.
더 나아가, 명세서에 기술된 다양한 측면들이 본 발명을 구현하기 위해 컴퓨터들을 제어하는 소프트웨어, 펌웨어, 하드웨어, 또는 그들의 임의의 조합을 생산하기 위해서 표준의 프로그래밍 및/또는 엔지니어링 기법들을 사용하는 방법, 장치, 또는 제조 물품으로서 구현될 수 있다. "제조 물품(article of manufacture)"이라는 용어는, 본 명세서에서 사용되는 바와 같이, 임의의 컴퓨터-판독가능 장치, 캐리어(carrier), 또는 매체로부터 액세스 될 수 있는 컴퓨터 프로그램을 포괄하기 위한 것이다. 물론, 본 기술의 당업자는 청구된 발명의 범위 또는 본질에 벗어남 없이 이런 설정에 대하여 많은 수정들이 만들어질 수 있음을 인식할 것이다.
도 14 및 후술 되는 논의는 여기서 제시된 하나 이상의 설비들의 실시예들을 구현하기 위해서 적절한 컴퓨팅 환경의 간략하고, 일반적인 서술을 제공한다. 도 14의 운용 환경은 적절한 운용 환경의 하나의 예시에 불과하고 운용 환경의 사용 또는 기능상의 범위에 어떠한 제한을 제안하는 의도는 가지지 않는다. 예시적 컴퓨팅 장치들은 개인용 컴퓨터들, 서버 컴퓨터들, 핸드-헬드(hand-held) 또는 랩톱 장치들, 이동 기기들(예를 들면 휴대폰, PDAs, 미디어 재생기 등), 멀티프로세서 시스템들, 가전 제품, 미니 컴퓨터들, 메인프레임 컴퓨터들, 임의의 상술된 시스템들 또는 장치들을 포함하는 분산 컴퓨터 환경들 등을 포함하나 이에 한정되지는 않는다.
요구되는 것은 아니지만, 실시예들은 하나 이상의 컴퓨터 장치들에 의해 실행되는 "컴퓨터 판독 가능 명령들의" 일반적인 맥락에서 서술되었다. 컴퓨터 판독 가능 명령들은 컴퓨터 판독 가능 매체(후술됨)를 통해서 분배될 수 있다. 컴퓨터 판독 가능 명령들은 특정 업무들을 수행하거나 또는 특정 압축 데이터 형식들을 구현할 수 있는 함수들, 객체들, APIs(application programming interfaces), 데이터 구조들 등으로 구현될 수 있다. 일반적으로, 컴퓨터 판독 가능 명령들의 기능은 다양한 환경들에서 요구되는 바에 따라 병합되거나 분산될 수 있다.
도 14는 여기서 제공된 하나 이상의 실시예들을 구현하도록 설정된 컴퓨팅 장치(232)를 포함하는 시스템(23)의 예시를 도시한다. 한 설정에서, 컴퓨팅 장치(232)는 적어도 하나의 처리 유닛(236)과 메모리(238)를 포함한다. 컴퓨팅 장치의 정확한 설정과 형식에 따라, 메모리(238)는 휘발성(예를 들면 RAM), 비위발성(예를 들면 ROM, 플래시 메모리) 또는 이들의 결합일 수 있다. 이런 설정은 도 14에서 일점 쇄선(234)에 의해 도시된다.
다른 실시예들에서, 장치(232)는 추가적인 특성 및/또는 기능을 포함할 수 있다. 예를 들면, 장치(232)는 또한 자기 저장부, 광학 저장부 등을 포함하나 이에 한정되지 않는 추가적 저장부(예를 들면 고정식 및/또는 이동식)를 포함할 수 있다. 이런 추가적인 저장부는 도 14에서 저장부(240)로 도시된다. 한 실시예에서, 여기서 제공된 하나 이상의 실시예들을 구현하기 위한 컴퓨터 판독 가능 명령들은 저장부(240)에 있을 수 있다. 저장부(24)는 또한 운용 시스템, 애플리케이션 프로그램 등을 구현하기 위해서 다른 컴퓨터 판독 명령들을 저장할 수 있다. 컴퓨터 판독 가능 명령들은 예를 들면, 처리 유닛(236)에 의한 실행을 위해서 메모리(238) 내에서 로드될 수 있다.
여기서 사용되는 용어 "컴퓨터 판독 가능 매체"는 컴퓨터 저장 매체를 포함한다. 컴퓨터 저장 매체는 컴퓨터 판독 가능 명령들 또는 다른 데이터들과 같은 정보의 저장을 위한 임의의 방법 또는 기술들로 구현되는 휘발성 및 비휘발성, 이동식 및 고정식 매체를 포함한다. 메모리(238)와 저장부(240)는 컴퓨터 저장 매체의 예시들이다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVDs 또는 다른 광학 저장부, 자기 카세트, 자기 테이프, 자기 디스크 저장부 또는 다른 자기 저장 장치들, 또는 장치(232)에 의해 접속될 수 있고 원하는 정보 저장에 사용될 수 있는 임의의 다른 매체를 포함하나 이에 한정되지는 않는다. 임의의 이런 컴퓨터 저장 매체는 장치(232)의 일부일 수 있다.
장치(232)는 또한 장치(232)로 하여금 다른 장치들과 통신할 수 있게 해주는 통신 연결(들)(246)을 포함할 수 있다. 통신 연결(들)(246)은, 모뎀, NIC(network interface card), 통합 네트워크 인터페이스, 라디오 주파수 송수신기, 적외선 포트, USB 연결, 또는 컴퓨팅 장치(232)를 다른 컴퓨팅 장치들에 연결하기 위한 다른 인터페이스들을 포함할 수 있으나 이에 한정되지는 않는다. 통신 연결(들)(346)은 무선 또는 유선 연결을 포함할 수 있다. 통신 연결(들)(246)은 통신 매체를 송신 및/또는 수신할 수 있다.
용어 "변조된 데이터 신호"는 신호 안에 정보의 인코딩을 위해서 하나 이상의 그들의 특성들을 설정 또는 변경한 신호를 포함할 수 있다.
장치(232)는 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치, 적외선 카메라들, 영상 입력 장치들, 및/또는 임의의 다른 입력 장치와 같은 입력 장치(들)(244)를 포함할 수 있다. 하나 이상의 디스플레이들, 스피커들, 프린터들, 및/또는 임의의 다른 출력 장치와 같은 출력 장치(들)(242) 또한 장치(232)에 포함될 수 있다. 입력 장치(들)(244)와 출력 장치(들)(242)는 무선 연결, 위선 연결, 또는 그들의 임의의 조합을 통해서 장치(232)와 연결될 수 있다. 한 실시예에서, 다른 컴퓨팅 장치의 입력 장치 또는 출력 장치가 컴퓨팅 장치(2320의 입력 장치(들(244) 또는 출력 장치(들)(242)로 사용될 수 있다.
컴퓨팅 장치(232)의 요소들은 버스와 같은 다양한 상호 연결부에 의해 연결될 수 있다. 이런 상호 연결부들은 PCI 익스프레스와 같은 PCI(peripheral component interconnect), USB, 파이어와이어(firewire)(IEEE 1394), 광학 버스 구저 등을 포함할 수 있다. 다른 실시에에서, 컴퓨팅 장치(232)의 요소들은 네트워크에 의해서 상호 연결될 수 있다. 예를 들면, 메모리(238)는 네트워크에 의해 상호연결된 다른 물리적 장소에 위치하는 복수의 물리적 메모리 유닛들로 구성될 수 있다.
본 기술의 당업자는 컴퓨터 판독 가능 명령들을 저장하는데 활용되는 저장 장치들이 네트워크 전체에서 분산될 수 있음을 인식할 것이다. 예를 들면, 네트워크(248)를 통해서 접속 가능한 컴퓨팅 장치(250)는 여기서 제공된 하나 이상의 실시예들을 구현하기 위한 컴퓨터 판독 가능 명령들을 저장할 수 있다. 컴퓨팅 장치(232)는 컴퓨팅 장치(250)를 접속할 수 있고 실행을 위해서 컴퓨터 판독 가능 명령들 전부 또는 일부를 다운로드할 수 있다. 대안적으로, 컴퓨팅 장치(232)는 필요한 만큼 컴퓨터 판독 가능 명령들의 일부들을 다운로드할 수 있고, 또는 일부 명령들은 컴퓨팅 장치(232)에서 일부 명령들은 컴퓨팅 장치(250)에서 실행될 수 있다.
실시예들의 다양한 작업들이 여기서 제공된다. 한 실시예에서, 서술된 하나 이상의 작업들은 하나 이상의 컴퓨터 판독 가능 매체에 저장된 컴퓨터 판독 가능 명령들을 구성할 수 있고, 만약에 컴퓨팅 장치에 의해서 실행된다면, 컴퓨팅 장치로 하여금 서술된 작업의 수행을 유발할 것이다. 작업들의 일부 또는 전부의 서술된 순서는 이들 작업들이 반드시 순서 의존적인 것으로 해석돼서는 안 될 것이다. 본 기술의 당업자들은 대안적인 순서가 본 서술의 효용들을 가질 수 있음을 인정할 것이다. 더 나아가, 여기서 제공된 각각의 실시예 안에서 모든 작업들이 반드시 존재해야하는 것은 아님을 이해해야한다.
더 나아가, 예시적인"이라는 단어는 실례, 사례 또는 예증을 나타내는 의미로 사용된다. 본 명세서에서 "예시적인" 것으로 설명되는 임의의 양태 또는 설계는 다른 양태들 또는 설계들보다 선호되거나 이로운 것으로 해석될 필요는 없다. 오히려, 예시적이라는 단어의 사용은 개념들을 구체적으로 나타내는 것을 의도한다. 본 명세서에서 사용되는 "또는"이라는 용어는 배타적 "또는"이 아니라 포괄적 "또는"을 의미하는 것을 의도한다. 즉, 달리 상술되거나 컨텍스트(context)로부터 명확하지 않은 한, "X 가 A 또는 B를 이용한다"는 임의의 자연스러운 포괄적 교환을 의미하는 것을 의도한다. 즉, X가 A를 이용하거나, X가 B를 이용하거나, X가 A 및 B의 양자를 이용하는 경우, 임의의 상기 사례들 하에서 "X가 A 또는 B를 이용한다"가 만족된다. 또한, 본 명세서 및 첨부된 청구범위에서 사용되는 바와 같은 "하나"라는 용어는 일반적으로, 달리 상술되거나 컨텍스트로부터 단일 형태로 지시되는 것이 명백하지 않은 한, "하나 이상"을 의미하는 것으로 해석되어야 한다.
또한, 본 명세서는 한 이상의 실시예들에 대해서만 도시되어있고 서술되어 있지만, 본 기술의 당업자들은 상세한 설명 및 첨부된 도면들의 판독과 이해를 기초로 균등한 변경들 및 수정들을 가져올 수 있다. 본 명세서는 이런 모든 수정안들과 변경들을 포함하고 후술 되는 청구항들의 범위에 의해서만 제한된다. 특히 상술된 요소들(예를 들면 요소들, 리소스들, 등)에 의해 수행되는 다양한 기능들에 관하여, 이들 요소들을 서술하기 위해서 사용된 용어들은 다르게 표시되지 않는 한, 여기서 도시된 본 발명의 예시적 실시예들 안에서 기능을 수행하는 개시된 구조와는 구조적으로 균등하지 않더라고, 서술된 요소의 특정 기능을 수행하는 임의의 요소(예를 들면 기능적으로 균등한)에 대응시키는 의도를 가진다. 추가적으로, 본 발명의 특정 특성들은 여러 실시예들 중 단지 하나에 대해서만 개시되어있을 수 있지만, 이런 특성은 임의의 주어진 또는 특정 애플리케이션에서 요구되거나 이점을 가지는 것으로 다른 실시예들의 하나 이상의 다른 특성들과 결합될 수 있다. 더 나아가, "포함한다 (include)," "가지는(having)," "가진다(has)," "함께(with)"라는 용어들 또는 그들의 변형물들이 상세한 설명 또는 청구범위에서 사용되는 밤위에서, 이러한 용어는 "포함하는(comprising)"이라는 용어와 유사한 방식으로 포괄적인 것을 의도한다.

Claims (20)

  1. 프로세서를 가지는 컴퓨터에 의해 저장된 객체 집합의 객체를, 적어도 하나의 네트워크를 통해 액세스가능한 적어도 하나의 노드에 의해 저장된 객체 집합의 대응하는 객체와 동기화시키는 방법으로서,
    상기 프로세서 상에서 명령들을 실행하는 단계를 포함하되,
    상기 명령들은,
    상기 노드로부터 이웃 집합을 선택하고 - 상기 이웃 집합은 상기 적어도 하나의 네트워크를 통해 상기 컴퓨터와 상기 이웃 집합의 다른 이웃에게 액세스가능한 적어도 하나의 이웃을 포함함 - ,
    상기 객체 집합 내의 업데이트된 객체의 업데이트 검출시,
    상기 이웃 집합 내의 상기 업데이트된 객체를 저장하고 있지 않는 이웃을 판단하고,
    상기 업데이트된 객체를 저장하고 있지 않는 상기 이웃을 포함하는 스웜 노드의 스웜 네트워크를 형성하고,
    상기 스웜 노드에게 상기 업데이트된 객체에 대해 상기 스웜 네트워크가 형성되었음을 통지하고,
    상기 스웜 네트워크를 사용하여 상기 업데이트된 객체를 상기 스웜 노드에게 전송
    하도록 구성되는 동기화 방법.
  2. 제 1 항에 있어서,
    상기 명령들은 적어도 하나의 네트워크 변경 이벤트 검출 시에 상기 이웃 집합을 선택하도록 구성되는
    동기화 방법.
  3. 제 1 항에 있어서,
    상기 이웃 집합을 선택하는 것은,
    상기 네트워크의 상기 노드를 계수하는(enumerate) 것과,
    각각의 노드에 대하여, 공식
    Figure 112015044882882-pct00025
    에 따라 계수된 상기 네트워크의 노드를 포함하는 이웃 집합을 선택하는 것을 포함하되,
    Figure 112015044882882-pct00026
    는 상기 노드의 이웃 i를 나타내고,
    Figure 112015044882882-pct00027
    은 상기 노드의 계수(enumeration)를 나타내며,
    Figure 112015044882882-pct00028
    은 상기 네트워크 내의 노드의 수를 나타내는
    동기화 방법.
  4. 제 1 항에 있어서,
    상기 업데이트된 객체를 저장하고 있지 않는 이웃을 판단하는 것은,
    각각의 이웃에 대하여,
    상기 이웃에게 상기 업데이트된 객체의 식별부(identifier)와 상기 업데이트된 객체의 콘텐츠 표시부를 전송하는 것과,
    상기 이웃으로부터 상기 이웃이 상기 업데이트된 객체를 저장하고 있는지 여부에 대한 통지를 수신하는 것을 포함하는
    동기화 방법.
  5. 제 1 항에 있어서,
    상기 업데이트된 객체를 상기 스웜 노드에게 전송하는 것은,
    상기 업데이트된 객체를 적어도 하나의 청크(chunk)로 조각화(chunking)하는 것과,
    각각의 스웜 노드가 상기 업데이트된 객체의 각각의 청크를 저장하고 있는지 여부를 나타내는 스웜 청크 지도를 초기화하는 것과,
    상기 스웜 청크 지도가 상기 스웜 노드가 상기 청크를 수신했음을 나타낼 때까지,
    상기 스웜 청크 지도에 따라서 청크를 상기 청크를 저장하고 있지 않는 스웜 노드에 전송하는 것과,
    청크를 저장했다는 통지를 스웜 노드로부터 수신한 경우, 상기 스웜 노드가 상기 청크를 저장하고 있음을 나타내기 위해서 상기 스웜 청크 지도를 업데이트하는 것과,
    상기 스웜 청크 지도로부터 상기 스웜 노드가 상기 청크를 수신했음을 판단한 경우, 상기 스웜 네트워크를 종료하는 것을 포함하는
    동기화 방법.
  6. 제 1 항에 있어서,
    상기 명령들은 객체 저장부에 저장되어 있지 않지만 상기 객체 저장부에 저장되어 있는 제 1 청크와 동일한 제 2 청크를 식별할 경우, 상기 객체 저장부 내의 상기 제 1 청크를 상기 제 2 청크로서 복제하도록 구성되는
    동기화 방법.
  7. 제 1 항에 있어서,
    상기 명령들은, 상기 객체 집합 내에 업데이트된 객체의 식별 시에, 상기 업데이트된 객체를 상기 이웃에 의해 저장되지 않은 업데이트된 객체를 포함하는 업데이트된 객체 배치(batch)에 추가하도록 구성되고,
    상기 스웜 네트워크를 형성하는 것은, 상기 업데이트된 객체 배치가 객체 배치 문턱 값을 초과할 때 상기 스웜 네트워크를 형성하는
    동기화 방법.
  8. 제 1 항에 있어서,
    상기 객체는 컴퓨팅 환경 호스트의 객체 저장부 내의 대응되는 객체로 저장되고,
    상기 명령들은, 상기 업데이트된 객체의 식별 시에,
    상기 컴퓨팅 환경 호스트가 상기 업데이트된 객체를 저장하고 있는지 여부를 판단하고,
    상기 컴퓨팅 환경 호스트가 상기 업데이트된 객체를 저장하고 있지 않는다는 판단 시에, 상기 업데이트된 객체를 상기 컴퓨팅 환경 호스트로 전송하도록 구성되는
    동기화 방법.
  9. 제 1 항에 있어서,
    상기 명령들은,
    식별부와 콘텐츠 표시부를 포함하는 업데이트된 객체에 대하여 이웃에 의해 통지된 경우에,
    상기 업데이트된 객체의 상기 식별부와 상기 콘텐츠 표시부를 객체 저장부의 대응되는 객체와 비교하고,
    상기 컴퓨터가 상기 업데이트된 객체를 저장하고 있는지 여부에 대한 통지를 상기 이웃에게 전송하도록 구성되는
    동기화 방법.
  10. 제 1 항에 있어서,
    상기 명령들은, 소스에 의한 상기 업데이트된 객체에 대한 상기 컴퓨터를 포함하는 스웜 네트워크의 형성에 대하여 통지받은 경우에,
    객체 저장부에 대응되는 업데이트된 객체를 생성하고,
    상기 스웜 노드가 상기 객체를 수신할 때까지,
    상기 객체의 수신 시에, 상기 객체를 상기 객체 저장부에 저장하고, 상기 객체를 상기 객체를 저장하고 있지 않는 스웜 노드에 전송하고,
    상기 스웜 노드가 상기 객체를 수신했음을 판단한 경우, 상기 스웜 네트워크를 종료하도록 구성되는
    동기화 방법.
  11. 제 10 항에 있어서,
    상기 명령들은, 소스에 의한 상기 업데이트된 객체에 대한 상기 컴퓨터를 포함하는 스웜 네트워크의 형성에 대하여 통지받은 경우에, 각각의 스웜 노드가 상기 업데이트된 객체의 각각의 청크를 저장하고 있는지 여부를 나타내는 스웜 청크 지도를 생성하도록 구성되고,
    상기 객체를 수신하는 것은,
    청크의 수신 시에,
    상기 객체 저장부 내에 상기 청크를 저장하는 것과,
    상기 컴퓨터가 상기 청크를 저장하고 있음을 나타내기 위해서 상기 스웜 청크 지도를 업데이트하는 것을 포함하고,
    상기 객체를 전송하는 것은,
    상기 스웜 노드가 상기 객체의 상기 청크를 수신할 때까지,
    상기 스웜 청크 지도에 따라서 청크를 저장하고 있지 않는 스웜 노드에 상기 청크를 전송하는 것과,
    상기 스웜 노드가 상기 청크를 저장하고 있음을 나타내기 위해서 상기 스웜 청크 지도를 업데이트하는 것을 포함하고,
    상기 스웜 노드가 상기 객체를 수신했음을 판단하는 것은,
    상기 스웜 청크 지도에 따라서 상기 스웜 노드가 상기 청크를 수신했음을 판단하는 것을 포함하는
    동기화 방법.
  12. 제 11 항에 있어서,
    상기 스웜 노드에 상기 청크를 전송하는 것은
    상기 객체 저장부에 저장되며 또한 상기 스웜 청크 지도에 따라 상기 업데이트된 객체의 다른 청크보다 적은 수의 상기 스웜 노드에 의해 저장되는 청크를 선택하는 것과,
    상기 스웜 청크 지도에 따라 상기 청크를 저장하지 않는 스웜 노드에 상기 청크를 전송하는 것을 포함하는
    동기화 방법.
  13. 제 11 항에 있어서,
    청크를 수신하는 것은, 상기 스웜 노드와 상기 소스에게 상기 컴퓨터가 상기 청크를 저장하고 있음을 통지하는 것을 포함하고,
    상기 명령들은, 스웜 노드가 청크를 저장하고 있다는 통지를 받을 경우에, 상기 스웜 노드가 상기 청크를 저장하고 있음을 나타내기 위해서 상기 스웜 청크 지도를 업데이트하도록 구성되는
    동기화 방법.
  14. 제 11 항에 있어서,
    상기 명령들은 상기 컴퓨터를 포함하는 상기 스웜 네트워크의 형성을 통지받은 경우에, 각각의 스웜 노드에 대한 전송 대기열을 생성하도록 구성되고,
    상기 청크를 상기 스웜 노드에게 전송하는 것은,
    상기 청크를 상기 스웜 노드의 상기 전송 대기열에 추가(enqueuning)하는 것과,
    상기 청크를 상기 스웜 노드의 빈 전송 대기열에 추가한 경우, 상기 청크의 상기 스웜 노드로의 전송을 개시하는 것과,
    청크를 상기 스웜 노드에 전송 완료한 경우,
    상기 전송 대기열로부터 상기 청크를 해제(deueuning)하는 것과,
    상기 스웜 노드의 상기 전송 대기열 내의 다음으로 추가되는 청크의 식별 시에, 상기 전송 대기열의 상기 다음으로 추가되는 청크를 상기 스웜 노드에 전송하는 것을 개시하는 것을 포함하는
    동기화 방법.
  15. 제 1 항에 있어서,
    상기 명령들은, 동기화 이벤트 감지 시에,
    적어도 하나의 이웃에 의해서 저장되고 상기 컴퓨터의 객체 저장부에 저장되지 않은 업데이트된 객체를 식별하고,
    상기 적어도 하나의 이웃에 의해서 저장되고 상기 컴퓨터의 상기 객체 저장부에 저장되지 않은 업데이트된 객체의 식별 시에,
    상기 객체 저장부 내에 상기 업데이트된 객체를 생성하고,
    상기 업데이트된 객체를 적어도 하나의 청크(chunk)로 조각화하고,
    상기 업데이트된 객체의 상기 청크가 상기 객체 저장부에 저장될 때까지,
    상기 객체 저장부에 저장되지 않은 적어도 하나의 청크를 상기 청크를 저장하고 있는 이웃에 요청하고,
    상기 청크를 상기 이웃으로부터 수신한 경우, 상기 청크를 상기 객체 저장부에 저장하도록 구성되는
    동기화 방법.
  16. 제 15 항에 있어서,
    상기 명령들은, 상기 컴퓨터의 상기 객체 저장부에 저장된 객체의 청크에 대한 요청을 이웃으로부터 수신받은 경우에, 상기 객체의 상기 청크를 상기 이웃에게 전송하도록 구성되는
    동기화 방법.
  17. 제 15 항에 있어서,
    상기 객체는 컴퓨팅 환경 호스트의 객체 저장부에 대응하는 객체로서 저장되고,
    상기 업데이트된 객체를 식별하는 것은 상기 컴퓨팅 환경 호스트로부터 상기 컴퓨팅 환경 호스트의 객체 저장부에 저장되어 있고 상기 컴퓨터의 객체 저장부에 저장되지 않은 업데이트된 객체의 리스트를 요청하는 것을 포함하는
    동기화 방법.
  18. 제 17 항에 있어서,
    상기 명령들은 상기 이웃으로부터 업데이트된 객체의 적어도 하나의 청크를 수신하는 것에 실패할 경우,
    상기 컴퓨팅 환경 호스트로부터 상기 적어도 하나의 청크를 요청하고,
    상기 컴퓨팅 환경 호스트로부터 상기 적어도 하나의 청크를 수신할 경우, 상기 적어도 하나의 청크를 상기 객체 저장부에 저장하도록 구성되는
    동기화 방법.
  19. 컴퓨터에 의해 저장된 객체 집합의 업데이트된 객체를 적어도 하나의 네트워크를 통해 액세스가능한 적어도 하나의 노드에 의해 저장된 객체 집합의 대응하는 객체와 동기화하도록 구성된 시스템으로서,
    상기 적어도 하나의 네트워크를 통해 상기 컴퓨터 및 이웃 집합의 다른 이웃에 액세스가능한 적어도 하나의 이웃을 포함하는 상기 이웃 집합을 상기 노드로부터 선택하도록 구성된 이웃 선택 요소와,
    스웜 네트워크 형성 요소 - 상기 스웜 네트워크 형성 요소는, 상기 객체 집합의 업데이트된 객체의 업데이트 검출시,
    상기 이웃 집합 내에서 상기 업데이트된 객체를 저장하고 있지 않는 상기 이웃을 판단하고,
    상기 업데이트된 객체를 저장하고 있지 않는 상기 이웃을 포함하는 스웜 노드의 스웜 네트워크를 형성하고,
    상기 업데이트된 객체에 대해 형성된 상기 스웜 네트워크를 상기 스웜 노드에게 통지하도록 구성됨 - 와,
    상기 스웜 네트워크를 사용하여 상기 스웜 노드에게 상기 업데이트된 객체를 전송하도록 구성된 스웜 네트워크 전송 요소
    를 포함하는 시스템.
  20. 명령어들이 저장되어 있는 컴퓨터 판독 가능 비휘발성 저장 매체로서,
    상기 명령어들은, 적어도 하나의 네트워크를 통해 액세스가능한 적어도 하나의 노드에 의해 저장되고 컴퓨팅 환경 호스트의 객체 저장부 내의 대응하는 객체로 저장된 객체 집합의 객체에 대응하는 객체를 포함하는 객체 집합을 저장하는 컴퓨터의 적어도 하나의 프로세서에 의해 실행될 때, 상기 적어도 하나의 프로세서로 하여금,
    적어도 하나의 네트워크 변경 이벤트 감지 시에,
    상기 네트워크의 상기 노드를 계수하고,
    각각의 노드에 대하여, 공식
    Figure 112015044882882-pct00029
    -
    Figure 112015044882882-pct00030
    는 상기 노드의 이웃 i를 나타내고,
    Figure 112015044882882-pct00031
    은 상기 노드의 계수를 나타내며,
    Figure 112015044882882-pct00032
    은 상기 네트워크 내의 노드의 수를 나타냄 - 에 따라 계수된 상기 네트워크의 상기 노드를 포함하는 이웃 집합을 선택함으로써
    상기 노드로부터 적어도 하나의 이웃을 포함하는 이웃 집합을 선택하고;
    작은 이웃 집합에 전달될 소수의 작은 업데이트된 객체를 포함하는 작은 업데이트된 객체 집합의 식별 시에, 상기 작은 업데이트된 객체 집합을 상기 작은 이웃 집합의 상기 이웃에게 전송하고;
    작은 업데이트된 객체 집합을 초과하는 상기 객체 집합 내 업데이트된 객체의 식별 시에,
    각각의 이웃에 대하여,
    상기 이웃에게 상기 업데이트된 객체의 식별부와 상기 업데이트된 객체의 콘텐츠 표시부를 전송하고,
    상기 이웃이 상기 업데이트된 객체를 저장하고 있는지 여부에 대한 통지를 상기 이웃으로부터 수신함으로써,
    상기 업데이트된 객체를 저장하고 있지 않는 상기 이웃을 판단하고,
    상기 업데이트된 객체를 저장하고 있지 않는 상기 이웃을 포함하는 스웜 노드의 스웜 네트워크를 형성하고,
    상기 스웜 노드에게 상기 업데이트된 객체를 위해 상기 스웜 네트워크가 형성되었음을 통지하고,
    상기 업데이트된 객체를 적어도 하나의 청크(chunk)로 조각화하고,
    각각의 스웜 노드가 상기 업데이트된 객체의 각각의 청크를 저장하고 있는지 여부를 나타내는 스웜 청크 지도를 초기화하고,
    상기 스웜 청크 지도가 상기 스웜 노드가 상기 청크를 수신할 때까지,
    상기 스웜 청크 지도에 따라 청크를 상기 청크를 저장하고 있지 않는 스웜 노드에 전송하고,
    스웜 노드로부터 청크를 저장했다는 통지를 수신한 경우에, 상기 스웜 노드가 상기 청크를 저장하고 있음을 나타내기 위해서 상기 스웜 청크 지도를 업데이트하고,
    상기 스웜 청크 지도로부터 상기 스웜 노드가 상기 청크를 수신했음을 판단한 경우, 상기 스웜 네트워크를 종료하고,
    상기 컴퓨팅 환경 호스트가 상기 업데이트된 객체를 저장하고 있는지 여부를 판단하고,
    상기 컴퓨팅 환경 호스트가 상기 업데이트된 객체를 저장하고 있지 않음을 판단한 경우, 상기 업데이트된 객체를 상기 컴퓨팅 환경 호스트에 전송함으로써,
    상기 스웜 네트워크를 사용하여 상기 업데이트된 객체를 상기 스웜 노드에게 전송하고;
    식별부와 콘텐츠 표시부를 포함하는 업데이트된 객체의 이웃에 의해 통지받은 경우에,
    상기 업데이트된 객체의 상기 식별부와 상기 콘텐츠 표시부를 상기 객체 저장부 내의 대응되는 객체와 비교하고,
    상기 컴퓨터가 상기 업데이트된 객체를 저장하고 있는지 여부에 대하여 상기 이웃에게 통지를 전송하고;
    상기 업데이트된 객체에 대해 상기 컴퓨터를 포함하는 스웜 네트워크의 소스에 의한 형성(formation)을 통지받은 경우,
    상기 객체 저장부 내에 대응하는 업데이트된 객체를 생성하고,
    각각의 스웜 노드에 대한 전송 대기열을 생성하고,
    각각의 스웜 노드가 상기 업데이트된 객체의 각각의 청크를 저장하고 있는지 여부를 나타내는 스웜 청크 지도를 생성하고,
    상기 스웜 노드가 상기 객체의 상기 청크를 수신할 때까지,
    상기 객체의 청크의 수신 시에,
    상기 청크를 상기 객체 저장부에 저장하고,
    상기 컴퓨터가 상기 청크를 저장하고 있음을 나타내기 위해서 상기 스웜 청크 지도를 업데이트하고,
    상기 스웜 노드 및 상기 소스에게 상기 컴퓨터가 상기 청크를 저장하고 있음을 통지하고,
    상기 스웜 노드가 청크를 저장하고 있음을 통지받은 경우, 상기 스웜 노드가 상기 청크를 저장하고 있음을 나타내기 위해서 상기 스웜 청크 지도를 업데이트하고,
    상기 객체 저장부에 저장되어 있고 상기 스웜 청크 지도에 따라 상기 업데이트된 객체의 다른 청크보다 적은 수의 상기 스웜 노드에 의해 저장되는 청크를 선택하고,
    상기 스웜 노드의 상기 전송 대기열에 상기 청크를 추가하고,
    상기 스웜 노드의 빈 전송 대기열에 상기 청크를 추가한 경우, 상기 청크의 상기 스웜 노드로의 전송을 개시하고,
    청크를 상기 스웜 노드로 전송 완료한 경우,
    상기 전송 대기열로부터 상기 청크를 해제하고,
    상기 스웜 노드의 상기 전송 대기열 내의 다음으로 추가된 청크의 식별 시에, 상기 전송 대기열 내의 상기 다음으로 추가된 청크를 상기 스웜 노드에게 전송 개시하고,
    상기 스웜 노드가 상기 청크를 저장하고 있음을 나타내기 위해서 상기 스웜 청크 지도를 업데이트함으로써,
    상기 스웜 청크 지도에 따라 상기 청크를 상기 청크를 저장하고 있지 않는 스웜 노드에 전송하고,
    상기 스웜 청크 지도에 따라서 상기 스웜 노드가 상기 청크를 수신했음을 판단한 경우에, 상기 스웜 네트워크를 종료하고;
    동기화 이벤트 감지 시에,
    적어도 하나의 이웃에 의해서 저장되어 있고 상기 컴퓨터의 상기 객체 저장부에는 저장되어 있지 않은 업데이트된 객체를 상기 컴퓨팅 환경 호스트로부터 상기 컴퓨팅 환경 호스트의 상기 객체 저장부에는 저장되어 있고 상기 컴퓨터의 상기 객체 저장부에는 저장되어 있지 않은 업데이트된 객체의 목록의 요청을 통해서 식별하고,
    적어도 하나의 이웃에 의해서 저장되어 있고 상기 컴퓨터의 상기 객체 저장부에는 저장되어 있지 않은 업데이트된 객체의 식별 시에,
    상기 객체 저장부에 상기 업데이트된 객체를 생성하고,
    상기 업데이트된 객체를 적어도 하나의 청크로 조각화하고,
    상기 이웃으로부터의 업데이트된 객체의 적어도 하나의 청크의 수신 실패 시에,
    상기 컴퓨팅 환경 호스트로부터 상기 적어도 하나의 청크를 요청하고,
    상기 컴퓨팅 환경 호스트로부터 상기 적어도 하나의 청크를 수신한 경우, 상기 객체 저장부 내에 상기 적어도 하나의 청크를 저장하고,
    상기 업데이트된 객체의 상기 청크가 상기 객체 저장부에 저장될 때까지,
    상기 청크를 저장하고 있는 이웃으로부터 상기 객체 저장부에 저장되지 않은 적어도 하나의 청크를 요청하고,
    상기 이웃으로부터 상기 청크를 수신한 경우, 상기 객체 저장부에 상기 청크를 저장하고,
    적어도 하나의 이웃의 상기 객체 집합 내에 저장되어 있지 않은 상기 컴퓨터의 상기 객체 집합 내에 저장된 객체에 대하여, 상기 객체를 업데이트된 객체로 식별하고;
    이웃으로부터 상기 컴퓨터의 상기 객체 저장부 내에 저장된 객체의 청크에 대한 요청을 수신한 경우, 상기 객체의 상기 청크를 상기 이웃에게 전송
    하는 것에 의해 상기 객체 집합의 객체를 동기화시키도록 하는
    컴퓨터 판독 가능 저장 매체.
KR1020117028444A 2009-05-29 2010-05-27 객체 저장부들의 네트워크상의 스웜-기반의 동기화 KR101752928B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/474,716 2009-05-29
US12/474,716 US8694578B2 (en) 2009-05-29 2009-05-29 Swarm-based synchronization over a network of object stores
PCT/US2010/036323 WO2010138668A2 (en) 2009-05-29 2010-05-27 Swarm-based synchronization over a network of object stores

Publications (2)

Publication Number Publication Date
KR20120018178A KR20120018178A (ko) 2012-02-29
KR101752928B1 true KR101752928B1 (ko) 2017-06-30

Family

ID=43221458

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117028444A KR101752928B1 (ko) 2009-05-29 2010-05-27 객체 저장부들의 네트워크상의 스웜-기반의 동기화

Country Status (8)

Country Link
US (1) US8694578B2 (ko)
EP (1) EP2435921A2 (ko)
JP (1) JP2012528402A (ko)
KR (1) KR101752928B1 (ko)
CN (1) CN102449616B (ko)
BR (1) BRPI1012090A2 (ko)
RU (1) RU2011148418A (ko)
WO (1) WO2010138668A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020101745A1 (en) * 2018-11-16 2020-05-22 Avi Networks Propagating ordered object changes

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8694578B2 (en) 2009-05-29 2014-04-08 Microsoft Corporation Swarm-based synchronization over a network of object stores
US8290904B2 (en) 2009-07-27 2012-10-16 International Business Machines Corporation Preventing transfer and duplication of redundantly referenced objects across nodes of an application system
US20110107317A1 (en) * 2009-10-30 2011-05-05 International Business Machines Corporation Propagating Firmware Updates In A Raid Array
US9146725B2 (en) * 2009-11-04 2015-09-29 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Propagating firmware updates in a peer-to-peer network environment
US8510267B2 (en) * 2011-03-08 2013-08-13 Rackspace Us, Inc. Synchronization of structured information repositories
US8538926B2 (en) 2011-03-08 2013-09-17 Rackspace Us, Inc. Massively scalable object storage system for storing object replicas
JP5751029B2 (ja) * 2011-06-03 2015-07-22 株式会社リコー 認証装置、プログラムおよび記録媒体
CN102857326A (zh) * 2011-06-27 2013-01-02 上海安达通信息安全技术股份有限公司 大文件快传技术
JP5742614B2 (ja) * 2011-09-14 2015-07-01 富士通株式会社 リストア処理プログラム、リストア方法、及び情報処理装置
US8918474B2 (en) * 2012-03-26 2014-12-23 International Business Machines Corporation Determining priorities for cached objects to order the transfer of modifications of cached objects based on measured network bandwidth
US20140108091A1 (en) * 2012-04-19 2014-04-17 FullCircle CRM Method and System for Attributing Metrics in a CRM System
US9110939B2 (en) * 2012-10-05 2015-08-18 Here Global B.V. Method and apparatus for providing incremental database updates based on delta pages
US9197700B2 (en) * 2013-01-18 2015-11-24 Apple Inc. Keychain syncing
US9077759B2 (en) 2013-01-18 2015-07-07 Apple Inc. Conflict resolution for keychain syncing
US9672115B2 (en) * 2013-08-26 2017-06-06 Vmware, Inc. Partition tolerance in cluster membership management
US11016820B2 (en) 2013-08-26 2021-05-25 Vmware, Inc. Load balancing of resources
US9811531B2 (en) 2013-08-26 2017-11-07 Vmware, Inc. Scalable distributed storage architecture
US9887924B2 (en) 2013-08-26 2018-02-06 Vmware, Inc. Distributed policy-based provisioning and enforcement for quality of service
US10747475B2 (en) 2013-08-26 2020-08-18 Vmware, Inc. Virtual disk blueprints for a virtualized storage area network, wherein virtual disk objects are created from local physical storage of host computers that are running multiple virtual machines
US10109273B1 (en) * 2013-08-29 2018-10-23 Amazon Technologies, Inc. Efficient generation of personalized spoken language understanding models
US10172068B2 (en) * 2014-01-22 2019-01-01 Cisco Technology, Inc. Service-oriented routing in software-defined MANETs
US10318154B2 (en) * 2015-05-31 2019-06-11 Apple Inc. Dynamic group membership for devices
US10839311B2 (en) 2016-07-19 2020-11-17 International Business Machines Corporation Cognitive computing for servers and mobile devices
US10824481B2 (en) * 2018-11-13 2020-11-03 International Business Machines Corporation Partial synchronization between compute tasks based on threshold specification in a computing system
WO2020141957A1 (en) * 2019-01-04 2020-07-09 Samsung Electronics Co., Ltd. A method and apparatus for organizing and detecting swarms in a network
CN109724680A (zh) * 2019-01-18 2019-05-07 深圳市计量质量检测研究院(国家高新技术计量站、国家数字电子产品质量监督检验中心) 市场内称重防作弊方法
WO2020185707A1 (en) 2019-03-08 2020-09-17 goTenna Inc. Method for utilization-based traffic throttling in a wireless mesh network
US20200374340A1 (en) * 2019-05-25 2020-11-26 International Business Machines Corporation Optimization of delivery of blocks

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06139208A (ja) 1992-10-30 1994-05-20 Toshiba Corp 共用データ管理システム
US20040168174A1 (en) 2000-03-08 2004-08-26 Baker Tyler Foley System for object cloing and state synchronization across a network node tree
US7743022B2 (en) * 2003-02-28 2010-06-22 Microsoft Corporation Method and system for synchronizing data shared among peer computing devices
US7395446B2 (en) 2004-05-03 2008-07-01 Microsoft Corporation Systems and methods for the implementation of a peer-to-peer rule-based pull autonomous synchronization system
FI120165B (fi) 2004-12-29 2009-07-15 Seven Networks Internat Oy Tietokannan synkronointi matkaviestinverkon kautta
US7493413B2 (en) * 2005-03-15 2009-02-17 Microsoft Corporation APIS to build peer to peer messaging applications
US7529255B2 (en) * 2005-04-21 2009-05-05 Microsoft Corporation Peer-to-peer multicasting using multiple transport protocols
US20070005694A1 (en) * 2005-06-30 2007-01-04 Pando Networks, Inc. System and method for distributed multi-media production, sharing and low-cost mass publication
US20070136449A1 (en) * 2005-12-08 2007-06-14 International Business Machines Corporation Update notification for peer views in a composite services delivery environment
US7633882B2 (en) * 2006-02-02 2009-12-15 Eaton Corporation Ad-hoc network and method employing globally optimized routes for packets
US20080059656A1 (en) 2006-08-31 2008-03-06 Saliba Bassam A Content synchronization among associated computing devices
US20080235331A1 (en) * 2007-01-26 2008-09-25 Sharon Melamed Scheduling synchronized demand for p2p networks
GB0807990D0 (en) * 2008-05-02 2008-06-11 Pace Micro Tech Plc Peer to peer broadcast content synchronisation
US8406687B2 (en) * 2008-06-13 2013-03-26 Kyocera Corporation Managing a dynamic data pool on ad-hoc networks
US8694578B2 (en) 2009-05-29 2014-04-08 Microsoft Corporation Swarm-based synchronization over a network of object stores
US8280958B2 (en) * 2009-07-13 2012-10-02 International Business Machines Corporation List passing in a background file sharing network

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020101745A1 (en) * 2018-11-16 2020-05-22 Avi Networks Propagating ordered object changes

Also Published As

Publication number Publication date
RU2011148418A (ru) 2013-06-10
JP2012528402A (ja) 2012-11-12
US20100306280A1 (en) 2010-12-02
US8694578B2 (en) 2014-04-08
WO2010138668A2 (en) 2010-12-02
CN102449616B (zh) 2013-09-18
BRPI1012090A2 (pt) 2018-03-13
CN102449616A (zh) 2012-05-09
EP2435921A2 (en) 2012-04-04
WO2010138668A3 (en) 2011-03-31
KR20120018178A (ko) 2012-02-29

Similar Documents

Publication Publication Date Title
KR101752928B1 (ko) 객체 저장부들의 네트워크상의 스웜-기반의 동기화
JP4806203B2 (ja) ピアツーピアネットワークにおけるルーティング
KR101544480B1 (ko) 복수 개의 프락시 서버를 포함하는 분산 저장 시스템 및 그 오브젝트 관리 방법 및 컴퓨터에 의하여 독출가능한 저장 매체
CN109218348B (zh) 一种区块链中区块的确定方法及节点设备
KR101960339B1 (ko) 파일 동기화 방법
CN110489059B (zh) 数据集群存储的方法、装置及计算机设备
US8250171B2 (en) Content delivery apparatus, content delivery method, and content delivery program
US9479578B1 (en) Randomized peer-to-peer synchronization of shared content items
EP3163446B1 (en) Data storage method and data storage management server
MX2011010287A (es) Restauracion de archivo de sistema de diferencial apartir de pares y la nube.
CN104573064B (zh) 一种大数据环境下的数据处理方法
EP3125501A1 (en) File synchronization method, server, and terminal
US8086629B2 (en) Content delivery apparatus, content delivery method, and content delivery program
US9229762B2 (en) Host providing system and host providing method
CN110633168A (zh) 一种分布式存储系统的数据备份方法和系统
US10257272B2 (en) Randomized peer-to-peer synchronization of shared content items
CN108540510B (zh) 一种云主机创建方法、装置及云服务系统
CN113553179A (zh) 分布式键值存储负载均衡方法及系统
CN105450682A (zh) 一种用于数据同步保存、向客户端同步数据的方法、装置和系统
Yu et al. Granary: A sharing oriented distributed storage system
CN111708835A (zh) 区块链数据存储方法及装置
CN110798492B (zh) 数据存储方法及装置、数据处理系统
US9319245B2 (en) Information processing device, recording medium storing information search program, and information search method
KR20220078180A (ko) 분산 네트워크 환경에서의 쿼리 배치 장치 및 그 방법
CN112532754A (zh) 校网文件快速服务方法和系统

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant