KR20090098791A - 링 일관성을 유지하는 방법, 데이터 액세스 트랜잭션을 수행하는 방법, 연합 인프라 내의 복제 세트로부터 데이터에 액세스하는 시스템, 연합 인프라 내에 일관성있는 복제 세트를 설정 및 유지하는 방법 - Google Patents

링 일관성을 유지하는 방법, 데이터 액세스 트랜잭션을 수행하는 방법, 연합 인프라 내의 복제 세트로부터 데이터에 액세스하는 시스템, 연합 인프라 내에 일관성있는 복제 세트를 설정 및 유지하는 방법 Download PDF

Info

Publication number
KR20090098791A
KR20090098791A KR1020097009457A KR20097009457A KR20090098791A KR 20090098791 A KR20090098791 A KR 20090098791A KR 1020097009457 A KR1020097009457 A KR 1020097009457A KR 20097009457 A KR20097009457 A KR 20097009457A KR 20090098791 A KR20090098791 A KR 20090098791A
Authority
KR
South Korea
Prior art keywords
node
nodes
immediately adjacent
ring
subscribing
Prior art date
Application number
KR1020097009457A
Other languages
English (en)
Other versions
KR101455420B1 (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 KR20090098791A publication Critical patent/KR20090098791A/ko
Application granted granted Critical
Publication of KR101455420B1 publication Critical patent/KR101455420B1/ko

Links

Images

Classifications

    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/142Reconfiguring to eliminate the error
    • G06F11/1425Reconfiguring to eliminate the error by reconfiguration of node membership
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/184Distributed file systems implemented as replicated file system
    • G06F16/1844Management specifically adapted to replicated file systems
    • 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
    • G06F16/273Asynchronous replication or reconciliation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1044Group management mechanisms 
    • H04L67/1046Joining mechanisms

Abstract

일부 실시예들에서, 노드들의 복제 세트 내의 복수의 노드들 중에서 1차 노드가 선택된 것으로 판정된다. 1차 노드는 클라이언트 데이터 액세스 요청을 받아 이를 처리한다. 복제 세트(replica set)는 1차 노드 및 다른 2차 노드들을 포함한다. 1차 노드는 클라이언트 데이터 액세스 요청을 수신한다. 1차 노드는 클라이언트 데이터 액세스 요청이 수신되는 순서대로 상태를 변이시키는 각각의 클라이언트 데이터 액세스 요청에 데이터 순서 번호를 할당한다. 데이터 순서 번호는 복제 세트 내의 노드들 각각이 따라야 하는 선형화된 처리 순서를 포함한다. 1차 노드는 대응하는 데이터 순서 번호를 포함하는 변이하는 클라이언트 데이터 액세스 요청을 2차 노드로 전송한다. 1차 노드는 임계 수의 2차 노드들로부터 클라이언트 데이터 액세스 요청의 수신을 알려주는 확인 응답을 수신한다. 1차 노드는 변이하는 데이터 액세스 요청을 커밋한다.
Figure P1020097009457
연합 인프라, 양방향 라우팅, 링 일관성, 복제 세트, 1차 노드, 2차 노드

Description

링 일관성을 유지하는 방법, 데이터 액세스 트랜잭션을 수행하는 방법, 연합 인프라 내의 복제 세트로부터 데이터에 액세스하는 시스템, 연합 인프라 내에 일관성있는 복제 세트를 설정 및 유지하는 방법{CONSISTENCY WITHIN A FEDERATION INFRASTRUCTURE}
컴퓨터 시스템 및 관련 기술은 사회의 많은 측면들에 영향을 미친다. 실제로, 컴퓨터 시스템의 정보 처리 능력은 우리의 일상과 업무의 방식을 변화시켰다. 현재, 컴퓨터 시스템은 보통 컴퓨터 시스템의 등장 이전에 수작업으로 수행되었던 수많은 작업들(예를 들어, 워드 프로세싱, 스케쥴링, 및 데이터베이스 관리)을 수행한다. 보다 최근에, 컴퓨터 시스템들은 서로 결합되고 다른 전자 장치들에 결합되어 유선 및 무선 컴퓨터 네트워크 둘다를 형성하고, 이 네트워크를 통해 컴퓨터 시스템들 및 다른 전자 장치들은 전자 데이터를 전송할 수 있다. 그 결과, 컴퓨터 시스템에서 수행되는 많은 작업들(예를 들어, 음성 통신, 전자 메일에의 액세스, 홈 가전의 제어, 웹 브라우징, 및 문서 인쇄)은 유선 및/또는 무선 컴퓨터 네트워크를 통한 다수의 컴퓨터 시스템들 및/또는 다른 전자 장치들 간의 전자 메시지의 교환을 포함한다.
그러나, 네트워크 자원을 이용하여 컴퓨터화된 작업을 수행하기 위해, 컴퓨터 시스템은 네트워크 자원을 식별하고 그에 액세스하는 어떤 방법을 가져야만 한 다. 그에 따라, 자원들은 통상적으로 자원들을 일의적으로 식별하고 한 자원을 다른 자원들과 구분하는 데 사용될 수 있는 고유의 식별자(예를 들어, 네트워크 주소)를 할당받는다. 따라서, 어떤 자원을 이용하고자 하는 컴퓨터 시스템은 그 자원에 대응하는 네트워크 주소를 사용하여 그 자원에 접속될 수 있다. 그러나, 컴퓨터 시스템이 네트워크 자원의 네트워크 주소를 미리 알고 있지 않다면 네트워크 자원에 액세스하는 것이 어려울 수 있다. 예를 들어, 컴퓨터 시스템(또는 다른 네트워크화된 컴퓨터 시스템)이 네트워크 프린터의 네트워크 주소를 알고 있지 않는 한, 컴퓨터 시스템은 그 네트워크 프린터에서 문서를 인쇄할 수 없다.
그에 따라, 컴퓨터 시스템이 이전에 알지 못했던 자원을 식별하는(또한 그에 액세스하는) 다양한 메커니즘[예를 들어, DNS(Domain Name System), AD(Active Directory), DFS(Distributed File Systems)]이 개발되었다. 그러나, 서로 다른 컴퓨터 네트워크를 통해 액세스가능한 자원(예를 들어, 장치들 및 서비스들)의 양 및 다양성으로 인해, 개발자들은 종종 각종의 서로 다른 자원 식별 및 액세스 메커니즘을 구현하는 애플리케이션들을 개발해야만 한다. 각각의 서로 다른 메커니즘은 서로 다른 코딩 요건을 가질 수 있으며 애플리케이션에서 필요로 하는 모든 기능을 개발자에게 제공하지 않을 수 있다.
예를 들어, DNS가 분산 관리 아키텍처를 갖지만(즉, 중앙집중식 관리가 필요하지 않음), DNS는 충분히 동적이지 않고, 자기-조직화(self-organizing)하지 않으며, 약한 데이터 및 질의 모델을 지원하고, 고정된 일련의 루트를 갖는다. 반면에, AD는 충분히 동적이지만 중앙집중식 관리를 필요로 한다. 게다가, 서로 다른 메커니즘들의 측면들이 서로 호환되지 않을 수 있다. 예를 들어, DNS를 사용하여 식별된 자원이 DFS 라우팅 프로토콜과 호환되지 않을 수 있다. 따라서, 개발자는 어쩔 수 없이 가장 적합한 메커니즘을 선택하고 다른 메커니즘의 이점을 포기해야만 한다.
자원을 식별하는 메커니즘은 피어-투-피어 네트워크에서 특히 문제가 될 수 있다. DNS는 룩업 요청을 구현하기 위해 일련의 특수한 루트 서버(root server)에 의존하는 룩업 서비스(lookup service)(호스트 이름을 키로 갖고 IP 주소를 값으로 가짐)를 제공한다. 게다가, DNS는 클라이언트가 네임 서버 계층구조(name server hierarchy)를 순회할 수 있게 하기 위한 정보(NS 레코드)의 관리를 필요로 한다. 따라서, 자원이 네트워크 상에서 식별될 수 있기 전에 그 자원은 DNS 내에 들어가야만 한다. 노드들이 빈번히 네트워크에 접속하고 그로부터 분리되는 대규모 네트워크에서, 정보의 입력에 의존하는 것이 항상 실용적인 것은 아니다. 또한, DNS는 호스트 또는 서비스를 찾는 작업을 전문으로 하며 일반적으로 다른 유형의 자원에는 적용할 수 없다.
그에 따라, 이들 단점을 해결하기 위해 자원 식별 및 액세스를 위한 다른 메커니즘이 개발되었다. 다수의 메커니즘은 DNS보다 확장성이 더 뛰어난 분산 탐색 프로토콜(distributed lookup protocol)을 포함한다. 이들 메커니즘은 요청들을 대응하는 자원들로 라우팅하고 룩업을 위한 정보를 저장하기 위해 여러가지 노드 배열 및 라우팅 알고리즘을 사용한다.
이들 메커니즘 중 적어도 하나는 메시지를 목적지 노드로 라우팅하기 위해 네트워크 내의 각각의 노드에 있는 로컬 다중-레벨 이웃맵(local multi-level neighbor map)을 이용한다. 이 결과, 본질적으로 각각의 노드가 대응하는 노드 트리(그의 이웃 맵에 있는 노드들)의 "루트 노드"인 아키텍처가 얻어진다. 메시지들은 한 숫자씩 목적지 ID로 조금씩 라우팅된다(예를 들어, ***6 => **46 =>, *346 => 2346. 여기서 *는 와일드 카드를 나타냄). 이러한 유형의 메커니즘의 라우팅 효율은 O(log N) 라우팅 홉이고 노드들이 O(log N) 크기의 라우팅 테이블을 유지할 필요가 있다.
이들 메커니즘 중 적어도 하나의 다른 메커니즘은 노드들에 선형 숫자 링으로부터 가져온 고유의 ID를 할당한다. 노드들은 (ID 값에 따른) 그의 직속 후속 노드(immediate successor node) 및 ID 값이 값 ID + 2L의 가장 가까운 후속 노드인 노드들에 대한 포인터를 포함하는 라우팅 테이블을 유지한다. 이들 유형의 메커니즘의 라우팅 효율도 O(log N) 라우팅 홉이고 노드들이 O(log N) 크기의 라우팅 테이블을 유지할 필요가 있다.
적어도 하나의 다른 메커니즘에서는 O(log N1/d) 라우팅 홉이 필요하며 노드들이 O(D) 크기의 라우팅 테이블을 유지할 필요가 있다. 따라서, 이들 메커니즘 모두의 라우팅 효율은, 적어도 부분적으로, 시스템 내의 노드들의 수에 의존한다.
게다가, (이들 메커니즘 중 적어도 일부에 있어서) ID가 링을 따라 균일하게 분포될 수 있기 때문에, 링 상의 노드들 간의 라우팅이 얼마간 비효율적이게 될 가능성이 언제나 있다. 예를 들어, 라우팅 홉이 광대한 지리적 거리를 지나가거나, 더 많은 비용이 드는 링크를 지나가거나, 안전하지 않은 도메인을 통과할 수 있는 등일 수 있다. 또한, 메시지 라우팅이 다수의 홉을 필요로 하는 경우, 이러한 일이 여러번 일어날 가능성이 있다. 불행히도, 이들 메커니즘은 노드들의 서로에 대한 근접성(물리적 또는 기타 근접성)을 고려하지 않는다. 예를 들어, 링 상에서의 노드 분포에 따라, 메시지를 뉴욕에서 보스톤으로 라우팅하는 것이 메시지를 뉴욕에서, 런던, 아틀랜타, 도쿄를 거쳐 보스톤으로 라우팅하는 것을 수반할 수 있다.
그에 따라, 적어도 하나의 다른 보다 최근의 메커니즘은 근접성을 단일의 스칼라 근접성 메트릭(예를 들어, IP 라우팅 홉 또는 지리적 거리)으로서 정의함으로써 근접성을 고려한다. 이들 메커니즘은 라우팅 테이블 엔트리의 근접성-기반 선택이라는 개념을 사용한다. 각각의 라우팅 테이블 엔트리에 대해 많은 "올바른" 노드 후보가 있기 때문에, 이들 메커니즘은 후보 노드들 중에서 근접성 측면에서 가까운 노드(proximally close node)를 선택하려고 한다. 이들 메커니즘이 각각의 노드가 주어진 IP 주소를 갖는 노드와 그 자신 간의 "거리"를 측정할 수 있는 기능을 제공할 수 있기 때문에, 메시지들은 더 멀리 떨어져 있는 노드로 라우팅되기 전에 목적지를 향해 나아가기 위해 근접성 측면에서 더 가까운 노드들 간에 라우팅된다. 따라서, 얼마간의 자원이 절감될 수 있고 라우팅이 보다 효율적이다.
불행히도, 이들 기존의 메커니즘은 통상적으로, 그 중에서도 특히, 노드들 간의 대칭 관계(즉, 제1 노드가 제2 노드를 그의 파트너로 생각하는 경우, 제2 노드도 역시 제1 노드를 파트너로 생각함), 링 상에서 양방향으로(시계방향 및 반시계방향) 메시지를 라우팅하는 것, 복수의 근접성 메트릭에 기초하여 노드들의 연결 리스트를 분할(partition)하는 것, 및 복수의 근접성 메트릭에 기초하여 메시지를 라우팅하는 것을 제공하지 않는다. 이들 단점은, 예를 들어, 네트워크의 모든 노드들로 데이터를 브로드캐스트할 때와 같은 때에, 네트워크의 노드들 간의 동적, 분산 및 효율적 전송을 제한할 수 있다.
일부 환경들에서, 노드 책임이 부적절하게 중복되지 않도록 하기 위해 안전 메커니즘(safety mechanism)이 사용된다. 예를 들어, 2개의 서로 다른 노드가 책임감을 갖고 시스템 자원(예를 들어, 메시지) 또는 그 시스템 내의 논리적 ID(logical identity)를 요구하는 것을 방지하기 위해 안전 메커니즘이 사용될 수 있다. 일부 환경들에서, 메시지가 타겟으로 반복하여 전송되는 경우 그 메시지가 수신되도록 보장하기 위해, 생존 메커니즘(liveness mechanism)이 사용된다. 불행히도, 많은 기존의 비동기 시스템들은 단지 제한된 안전 및 생존 메커니즘을 제공한다. 예를 들어, 어떤 비동기 시스템들은 단지 궁국적으로만 안전 및 생존을 제공한다. 따라서, 이들 비동기 시스템은, 예를 들어, 권위있는 저장 장치 등의 다양한 유형의 응용에 적합하지 않다.
<발명의 요약>
본 발명은 랑데뷰 연합(rendezvous federation) 내에 유지되는 복제 세트(replica set) 내에서 데이터 액세스 트랜잭션을 수행하는 방법, 시스템 및 컴퓨터 프로그램 제품으로 확장된다. 일부 실시예들에서, 노드들의 복제 세트 내의 복수의 노드들 중에서 1차 노드가 선택된 것으로 판정된다. 1차 노드는 클라이언트 데이터 액세스 요청을 받아서 이를 처리하도록 구성되어 있다. 복제 세트는 1차 노드 및 다른 2차 노드들을 포함한다. 1차 노드는 클라이언트 데이터 액세스 요청을 수신하고, 각각의 데이터 액세스 요청은 복제 세트 내의 1차 노드에서 액세스될 데이터의 적어도 일부분을 나타낸다.
1차 노드는 클라이언트 데이터 액세스 요청들이 수신되는 순서대로 클라이언트 데이터 액세스 요청들 각각에 데이터 순서 번호를 할당한다. 데이터 순서 번호는 복제 세트 내의 노드들 각각이 따라야 하는 선형화된 처리 순서를 포함한다. 1차 노드는 대응하는 데이터 순서 번호를 포함하는 클라이언트 데이터 액세스 요청들 중 적어도 하나를 2차 노드들로 전송한다. 1차 노드는, 적어도 임계 수의 2차 노드들로부터, 클라이언트 데이터 액세스 요청의 수신을 알려주는 확인 응답을 수신한다. 1차 노드는 데이터 액세스 요청을 커밋한다. 이 커밋은 클라이언트 데이터 액세스 요청에 따라 데이터에 액세스하는 것을 포함한다.
이 요약은 이하에서 상세한 설명에 더 기술되는 일련의 개념들을 간략화된 형태로 소개하기 위해 제공된 것이다. 이 요약은 청구된 발명 대상의 주요 특징들 또는 필수적인 특징들을 확인하기 위한 것이 아니며, 청구된 발명 대상의 범위를 정하는 데 보조 수단으로 사용되기 위한 것도 아니다.
부가의 특징들 및 이점들이 이하의 설명에서 기술될 것이며, 부분적으로는 이 설명으로부터 명백하게 되거나 본 명세서의 개시 내용의 실시에 의해 알 수 있을 것이다. 본 발명의 특징들 및 이점들은 첨부된 청구항들에 특별히 언급되어 있는 수단들 및 조합들에 의해 실현되고 달성될 수 있다. 본 발명의 특징들은 이하의 설명 및 첨부된 청구항들로부터 더욱 명백하게 될 것이거나, 이후에 기술되는 바와 같이 본 발명을 실시함으로써 알 수 있다.
상기한 이점들 및 특징들과 기타 이점들 및 특징들이 달성될 수 있는 방식을 설명하기 위해, 이상에서 간략히 기술된 발명 대상의 보다 상세한 설명이 첨부 도면에 도시되어 있는 특정의 실시예들을 참조하여 행해질 것이다. 이들 도면이 단지 대표적인 실시예들을 나타낸 것이며 따라서 범위를 제한하는 것으로 생각되어서는 안 된다는 것을 이해하면서, 첨부 도면을 사용하여 실시예들에 대해 더 구체적이고 상세하게 기술하고 설명할 것이다.
도 1은 연합 인프라(federation infrastructure)의 일례를 나타낸 도면이다.
도 2는 요청을 간접적으로 파트너에게 라우팅하는 것을 용이하게 하는 컴퓨터 아키텍처의 일례를 나타낸 도면이다.
도 3은 정렬 리스트(sorted list) 및 대응하는 링의 형태로 연합 인프라 내의 노드들 간의 이진 관계(binary relationship)의 일례를 나타낸 도면이다.
도 4는 근접 라우팅(proximal routing)을 용이하게 하는 링들의 링의 일례를 나타낸 도면이다.
도 5는 근접 라우팅을 용이하게 하는 링들의 근접성 유도 분할 트리(proximity induced partition tree)의 일례를 나타낸 도면이다.
도 5A는 도 5의 링들의 분할 트리의 일부분에 부가 상세를 갖는 도 5의 링들의 근접성 유도 분할 트리의 일례를 나타낸 도면이다.
도 6은 본 발명의 원리들에 대한 적합한 운영 환경을 나타낸 도면이다.
도 7은 근접성 기준을 고려하는 노드 라우팅 테이블을 채우는 방법의 흐름도의 일례를 나타낸 도면이다.
도 8은 연합 인프라의 노드들을 분할하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 9는 노드 라우팅 테이블을 채우는 방법의 흐름도의 일례를 나타낸 도면이다.
도 10은 메시지를 목적지 노드 쪽으로 수치상으로 라우팅하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 11은 메시지를 목적지 노드 쪽으로 근접성에 따라 라우팅하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 12A는 기존의 연합 내에서 멤버쉽을 설정하는 노드의 일례를 나타낸 도면이다.
도 12B는 메시지들을 교환하는 연합 인프라 내의 노드들의 일례를 나타낸 도면이다.
도 13은 연합 인프라 내에서 멤버쉽을 설정하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 14는 연합 인프라 내에서 멤버쉽을 유지하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 15는 다른 노드에 대한 생존 정보(liveness information)를 발견하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 16은 메시지 모델 및 관련 처리 모델의 일례를 나타낸 도면이다.
도 17은 함수 계층(function layer)과 애플리케이션 계층(application layer) 사이에서 일어날 수 있는 다수의 생존 상호작용(liveness interaction)의 일례를 나타낸 도면이다.
도 18은 요청-응답 메시지 교환 패턴의 일부를 형성하는 메시지들이 링 상의 노드들에 걸쳐 라우팅되는 것의 일례를 나타낸 도면이다.
도 19A는 한 노드가 다른 노드(예를 들어, 대상 노드(subject node))를 모니터링하는 것을 용이하게 하는 링 아키텍처의 일례를 나타낸 도면이다.
도 19B는 2개의 노드가 서로를 모니터링하는 것을 용이하게 하는 링 아키텍처의 일례를 나타낸 도면이다.
도 19C는 상호 모니터링하는 노드들 각각이 상대편 노드가 고장난 것으로 의심된다고 보고할 수 있을 때 중재를 용이하게 하는 링 아키텍처의 일례를 나타낸 도면이다.
도 20은 한 노드가 다른 노드를 모니터링하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 21은 노드 고장이 의심된다는 상충하는 보고들 간에 중재를 하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 22A는 캐싱된 2자간 합의(cached two-way agreement)에 따라 메시지를 라우팅하는 것을 용이하게 하는 링 아키텍처의 일례를 나타낸 도면이다.
도 22B는 다수의 캐싱된 2자간 합의에 따라 메시지를 라우팅하는 것을 용이 하게 하는 링 아키텍처의 일례를 나타낸 도면이다.
도 23A 내지 도 23D는 캐싱된 2자간 합의를 작성하는 것을 용이하게 하는 링 아키텍처의 일례를 나타낸 도면이다.
도 24는 캐싱된 2자간 합의에 따라 메시지를 라우팅하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 25는 다수의 캐싱된 2자간 합의에 따라 메시지를 라우팅하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 26은 2자간 합의에 참여하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 27은 노드가 연합 내의 노드들의 링에 가입하는 것을 용이하게 하는 링 아키텍처의 일례를 나타낸 도면이다.
도 28은 가입측 노드(joining node), 선택된 바로 인접한 노드 및 다른 바로 인접한 노드의 관점에서 볼 때 가입측 노드가 노드들의 링에 가입하는 경우 링 일관성(ring consistency)을 유지하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 29는 탈퇴측 노드(leaving node)가 노드들의 링을 탈퇴하는 경우 링 일관성을 유지하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 30은 가입측 노드가 노드들의 링에 가입하는 예시적인 상태도를 나타낸 도면이다.
도 31은 탈퇴측 노드가 노드들의 링을 탈퇴하는 예시적인 상태도를 나타낸 도면이다.
도 32는 연합 내에서 복제 세트 및 데이터 일관성을 유지하는 것을 용이하게 하는 링 아키텍처의 일례를 나타낸 도면이다.
도 33은 연합 인프라 내에 유지되는 복제 세트 내에서 데이터 액세스 트랜잭션을 수행하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 34는 연합 인프라 내에서 일관성있는 복제 세트를 설정 및 유지하는 방법의 흐름도의 일례를 나타낸 도면이다.
도 35는 예시적인 동작 시퀀스를 나타낸 도면이다.
도 36은 연합 인프라 내의 복제 세트로부터 데이터에 액세스하는 예시적인 시스템을 나타낸 도면이다.
본 발명은 랑데뷰 연합 내에서 자원을 할당 및 회수하는 방법, 시스템 및 컴퓨터 프로그램 제품으로 확장된다. 일부 실시예들에서, 메시지가 목적지 노드 쪽으로 라우팅된다. 수신측 노드는 노드들의 링 상에서의 목적지를 나타내는 목적지 식별자와 함께 메시지를 수신한다. 목적지 식별자는 수신측 노드와 직속 이웃 노드(immediate neighborhood node) 사이에 위치하고 있다. 직속 이웃 노드는 직속 선행 이웃 노드(immediate predecessor neighbor node)와 직속 후속 이웃 노드(immediate successor neighborhood node) 중에서 선택된다.
수신측 노드는 메시지를 수신할 그 다음 해당 노드를 결정하기 위해 수신측 노드와 직속 이웃 노드(immediate neighbor node) 간의 캐싱된 2자간 합의(cached two-way agreement)를 참조한다. 캐싱된 2자간 합의는 적어도 수신측 노드와 직속 이웃 노드 간의 식별자 공간(identifier space)에 대한 책임의 분할을 암시한다. 수신측 노드는 그 다음 해당 노드의 결정에 기초하여 그 다음 해당 컴포넌트로 메시지를 전송한다.
다른 실시예들에서, 현재의 노드와 직속 이웃 노드 간의 2자간 합의가 작성된다. 현재 노드는 노드들의 링의 구성이 변경되었다는 표시에 액세스한다. 이 표시는 적어도 현재의 직속 이웃 노드에서의 변경을 나타낸다. 현재의 직속 이웃 노드는 현재의 직속 선행 노드(immediate predecessor node)와 현재의 직속 후속 노드(immediate successor node) 중에서 선택된다. 이 변경의 결과, 새로운 직속 이웃 노드가 생긴다.
이 표시는 현재의 노드와 새로운 직속 이웃 노드 사이의 링 상에 있는 적어도 미점유된 식별자들(unoccupied identifiers)에 대한 책임을 분할하는 2자간 합의를 작성할 필요를 추가적으로 나타내고 있다. 현재의 노드와 새로운 직속 이웃 노드는 현재의 노드와 새로운 직속 이웃 노드 간의 책임 경계에 대해 합의한다. 이 책임 경계는 현재의 노드와 새로운 직속 이웃 노드 간의 미점유된 식별자들에 대한 책임을 분할한다. 현재의 노드와 책임 경계 간의 미점유된 식별자들은 현재의 노드의 책임으로 된다. 이와 마찬가지로, 책임 경계와 새로운 직속 이웃 노드 간의 미점유된 식별자들은 새로운 직속 이웃 노드의 책임이다.
본 발명의 실시예들은, 이하에서 더 상세히 기술되는 바와 같이, 컴퓨터 하드웨어를 포함하는 전용 또는 범용 컴퓨터를 포함하거나 이용할 수 있다. 본 발명의 범위 내의 실시예들은 또한 컴퓨터 실행가능 명령어 및/또는 데이터 구조를 전달하거나 저장하고 있는 물리적 및 다른 컴퓨터 판독가능 매체를 포함한다. 이러한 컴퓨터 판독가능 매체는 범용 또는 전용 컴퓨터 시스템에 의해 액세스될 수 있는 이용가능한 매체라면 어느 것이라도 될 수 있다. 컴퓨터 실행가능 명령어를 저장하는 컴퓨터 판독가능 매체는 물리적 저장 매체이다. 컴퓨터 실행가능 명령어를 전달하는 컴퓨터 판독가능 매체는 전송 매체이다. 따라서, 제한이 아닌 예로서, 본 발명의 실시예들은 적어도 2가지 분명히 서로 다른 종류의 컴퓨터 판독가능 매체, 즉 물리적 저장 매체 및 전송 매체를 포함할 수 있다.
물리적 저장 매체로는 RAM, ROM, EEPROM, CD-ROM 또는 기타 광 디스크 저장 장치, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 원하는 프로그램 코드 수단을 컴퓨터 실행가능 명령어 또는 데이터 구조의 형태로 저장하는 데 사용될 수 있고 범용 또는 전용 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체가 있다.
"네트워크"는 컴퓨터 시스템들 및/또는 모듈들 및/또는 기타 전자 장치들 간의 전자 데이터의 전송을 가능하게 하는 하나 이상의 데이터 링크로서 정의된다. 정보가 네트워크 또는 기타 통신 접속(유선, 무선 또는 유선과 무선의 조합)을 통해 컴퓨터로 전송 또는 제공될 때, 컴퓨터는 적절하게는 이 접속을 전송 매체로 본다. 전송 매체는 원하는 프로그램 코드 수단을 컴퓨터 실행가능 명령어 또는 데이터 구조의 형태로 전달 또는 전송하는 데 사용될 수 있고 범용 또는 전용 컴퓨터에 의해 액세스될 수 있는 네트워크 및/또는 데이터 링크를 포함할 수 있다. 상기한 것들의 조합도 컴퓨터 판독가능 매체의 범위 내에 포함되는 것으로 본다.
그러나, 다양한 컴퓨터 시스템 컴포넌트에 도달할 때, 컴퓨터 실행가능 명령어 또는 데이터 구조 형태의 프로그램 코드 수단이 자동으로 전송 매체로부터 물리적 저장 매체로 전달될 수 있다는 것을 잘 알 것이다. 예를 들어, 네트워크 또는 데이터 링크를 통해 수신된 컴퓨터 실행가능 명령어 또는 데이터 구조는 네트워크 인터페이스 카드 내의 RAM에 버퍼링될 수 있고, 이어서 궁극적으로 컴퓨터 시스템 RAM으로 및/또는 컴퓨터 시스템에 있는 덜 휘발적인 물리적 저장 매체로 전송될 수 있다. 따라서, 물리적 저장 매체가 전송 매체도 역시(또는 심지어 전송 매체를 주로) 이용하는 컴퓨터 시스템 컴포넌트에 포함될 수 있다는 것을 잘 알 것이다.
컴퓨터 실행가능 명령어는, 예를 들어, 범용 컴퓨터, 전용 컴퓨터, 또는 전용 처리 장치로 하여금 어떤 기능 또는 일군의 기능을 수행하게 하는 명령어 및 데이터를 포함한다. 컴퓨터 실행가능 명령어는, 예를 들어, 바이너리, 어셈블리어 등의 중간 형식 명령어, 또는 심지어 소스 코드일 수 있다. 발명 대상이 구조적 특징들 및/또는 방법적 동작들과 관련하여 기술되어 있지만, 첨부된 청구항들에 정의된 발명 대상이 상기한 특징들 또는 동작들로 꼭 제한될 필요는 없다는 것을 잘 알 것이다. 오히려, 기술된 특징들 및 동작들은 청구항들을 구현하는 예시적인 형태로서 개시된 것이다.
일부 실시예들에서, 예를 들어, 전용 집적 회로 또는 게이트 어레이 등의 하드웨어 모듈은 본 발명의 원리들을 구현하도록 최적화되어 있다.
이 설명에서 또한 이하의 청구항들에서, "노드"는 전자 데이터에 대한 연산을 수행하기 위해 협력하는 하나 이상의 소프트웨어 모듈, 하나 이상의 하드웨어 모듈, 또는 이들의 조합으로 정의된다. 예를 들어, 노드의 정의는 퍼스널 컴퓨터의 하드웨어 컴포넌트는 물론 퍼스널 컴퓨터의 운영 체제 등의 소프트웨어 모듈을 포함한다. 모듈의 물리적 레이아웃은 중요하지 않다. 노드는 네트워크를 통해 연결된 하나 이상의 컴퓨터를 포함할 수 있다. 이와 마찬가지로, 노드는 단일의 물리적 장치(모바일 전화 또는 PDA(Personal Digital Assistant) 등)를 포함할 수 있으며, 이 경우 내부 모듈들(메모리 및 프로세서 등)은 전자 데이터에 대한 연산을 수행하기 위해 협력한다. 게다가, 노드는, 예를 들어, 전용 집적 회로를 포함하는 라우터 등의 전용 하드웨어를 포함할 수 있다.
당업자라면 본 발명이 퍼스널 컴퓨터, 랩톱 컴퓨터, 핸드헬드 장치, 멀티프로세서 시스템, 마이크로프로세서-기반 또는 프로그램가능 가전 제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 모바일 전화, PDA, 페이저, 라우터, 게이트웨이, 브로커(broker), 프록시, 방화벽, 리디렉터(redirector), 네트워크 주소 변환기(network address translator) 등을 비롯한 많은 유형의 노드 구성을 갖는 네트워크 컴퓨팅 환경에서 실시될 수 있다는 것을 잘 알 것이다. 본 발명은 또한 네트워크를 통해 (유선 데이터 링크에 의해, 무선 데이터 링크에 의해, 또는 유선 및 무선 데이터 링크의 조합에 의해) 연결되어 있는 로컬 노드 및 원격 노드 둘다가 작업을 수행하는 분산 시스템 환경에서 실시될 수 있다. 분산 시스템 환경에서, 프로그램 모듈들은 로컬 및 원격 메모리 저장 장치 둘다에 위치될 수 있다.
연합 아키텍처(Federation Architecture)
도 1은 연합 인프라(federation infrastructure)(100)의 일례를 나타낸 것이다. 연합 인프라(100)는 서로 다른 유형의 연합 파트너쉽(federating partnership)을 형성할 수 있는 노드(101, 102, 103)를 포함한다. 예를 들어, 노드(101, 102, 103)는 루트 노드 없이 피어로서 서로 간에 연합될 수 있다. 노드(101, 102, 103) 각각은 대응하는 ID(171, 182. 193)를 각각 갖는다.
일반적으로, 노드(101, 102, 103)는 파트너쉽을 형성하여 정보(예를 들어, 다른 노드들과의 상호작용에 관계된 상태 정보)를 교환하기 위해 연합 프로토콜(federation protocol)을 이용할 수 있다. 파트너쉽의 형성 및 정보의 교환은 자원에의 보다 효율적이고 신뢰성있는 액세스를 용이하게 한다. 다른 중간 노드(도시 생략)가 노드(101, 102, 103) 사이에 존재할 수 있다(예를 들어, 171과 193 사이의 ID를 갖는 노드). 따라서, 예를 들어, 노드(101)과 노드(103) 사이에서 라우팅되는 메시지는 다른 중간 노드들 중 하나 이상을 통과할 수 있다.
연합 인프라(100) 내의 노드들(다른 중간 노드들을 포함함)은 대응하는 랑데뷰 프로토콜 스택(rendezvous protocol stack)을 포함할 수 있다. 예를 들어, 노드(101, 102, 103)는 대응하는 랑데뷰 프로토콜 스택(141, 142, 143)을 각각 포함하고 있다. 프로토콜 스택(141, 142, 143) 각각은 애플리케이션 계층(예를 들어, 애플리케이션 계층(121, 122, 123)) 및 기타 하위 계층들(예를 들어, 대응하는 기타 하위 계층(131, 132, 133))을 포함하고 있다. 랑데뷰 프로토콜 스택 내의 각각의 계층은 자원 요청을 대응하는 자원과 랑데뷰시키는 것에 관계된 서로 다른 기능을 책임지고 있다.
예를 들어, 기타 하위 계층들은 채널 계층, 라우팅 계층, 및 함수 계층(function layer)을 포함할 수 있다. 일반적으로, 채널 계층은 (예를 들어, WS-ReliableMessaging 및 SOAP(Simple Object Access Protocol)를 사용하여) 한 종단점에서 다른 종단점으로(예를 들어, 노드(101)에서 노드(103)로) 메시지를 신뢰성있게 전달하는 일을 맡고 있다. 채널 계층은 또한 착신 및 발신 신뢰가능 메시징 헤더(reliable messaging header)를 처리하고 신뢰가능 메시징 세션(reliable messaging session)에 관계된 상태를 유지하는 일도 맡고 있다.
일반적으로, 라우팅 계층은 목적지 쪽으로의 그 다음 홉을 계산하는 일을 맡고 있다. 라우팅 계층은 또한 착신 및 발신 어드레싱 및 라우팅 메시지 헤더를 처리하고 라우팅 상태를 유지하는 일도 맡고 있다. 일반적으로, 함수 계층은 가입(join) 및 탈퇴(depart) 요청, 핑(ping), 업데이트 및 기타 메시지 등의 랑데뷰 프로토콜 메시지를 발행 및 처리하는 것은 물론 이들 메시지에 대한 응답을 발생하는 일을 맡고 있다. 함수 계층은 라우팅 계층으로부터의 요청 메시지를 처리하고 대응하는 응답 메시지가 있는 경우 이를 라우팅 계층을 사용하여 발신측 노드로 반송한다. 함수 계층은 또한 요청 메시지를 개시하고 라우팅 계층을 이용하여 이 요청 메시지를 전달한다.
일반적으로, 애플리케이션 계층은 함수 계층으로부터 전달된 비랑데뷰 프로토콜 관련 데이터(예를 들어, 애플리케이션 메시지)를 처리한다. 함수 계층은 애플리케이션 계층으로부터의 애플리케이션 데이터에 액세스할 수 있고, 애플리케이션 데이터를 가져와서 이를 랑데뷰 프로토콜 메시지에 넣는다(예를 들어, 핑 및 업데이트). 즉, 함수 계층은 애플리케이션 데이터가 랑데뷰 프로토콜 메시지에 피기백되게 할 수 있고 이 애플리케이션 데이터가 수신측 랑데뷰 프로토콜 노드에 있는 애플리케이션 계층으로 다시 전달되게 할 수 있다. 일부 실시예들에서, 애플리케이션 데이터는 자원 및 자원 이해관계(resource interests)를 식별하는 데 사용된다. 따라서, 애플리케이션 계층은 자원 및 자원 이해관계를 식별하기 위해 기타 하위 계층들로부터 수신되고 이들에게로 전송되는 데이터를 처리하는 애플리케이션 관련 논리 및 상태를 포함할 수 있다.
연합 메커니즘( Federating Mechanisms )
노드들은 각종의 서로 다른 메커니즘을 사용하여 연합할 수 있다. 제1 연합 메커니즘은 피어 노드들이 모든 다른 피어 노드들로 정보를 전달(forward)하는 것을 포함한다. 노드가 연합 인프라에 가입하게 될 때, 노드는 그의 존재를 알리기 위해, 예를 들어, WS-Discovery 등의 브로드캐스트/멀티캐스트 발견 프로토콜을 이용하고 다른 노드들을 검출하기 위해 브로드캐스트/멀티캐스트 탐색(broadcast/multicast find)을 발행한다. 이어서, 노드는 네트워크 상에 이미 존재하는 다른 노드들과 간단한 전달 파트너쉽(forwarding partnership)을 설정하고 새로 가입하는 노드들과의 새로운 파트너쉽을 수락한다. 그 후에, 노드는 모든 애플리케이션 관련 메시지를 그의 파트너 노드들 모두에게로 단순히 전달한다.
제2 연합 메커니즘은 피어 노드들이 애플리케이션 관련 메시지들을 그의 목적지(들)로 가장 효율적으로 전송하는 것을 포함한다. 새로운 노드가 연합 인프라에 가입하게 될 때, 이 새로운 노드는 그의 존재를 알리기 위해, 예를 들어, WS-Discovery 등의 브로드캐스트/멀티캐스트 발견 프로토콜을 이용하고 연합 인프라의 일부인 다른 노드들을 검출하기 위해 브로드캐스트/멀티캐스트 탐색을 발행한다. 다른 노드의 검출 시에, 새로운 노드는 상대편 노드와 파트너쉽을 설정한다. 설정된 파트너쉽으로부터, 새로운 노드는 연합 인프라에 이미 참여하고 있는 다른 노드들의 존재에 관해 알게 된다. 이어서, 새로운 노드는 이들 새로 알게 된 노드들과 파트너쉽을 설정하고 새로운 착신 파트너쉽 요청을 수락한다.
노드 도착/출발 및 어떤 애플리케이션 관련 메시지에의 관심의 등록 둘다는 연합 인프라에 걸쳐 플러딩되고, 그 결과 모든 노드가 다른 파트너 노드들 및 애플리케이션 관련 메시지에의 관심의 등록을 전반적으로 알게 된다. 이와 같이 전반적으로 알고 있음으로써, 어느 노드라도 애플리케이션 관련 메시지에의 관심을 표명한 노드들에 애플리케이션 관련 메시지를 직접 전송할 수 있다.
제3 연합 메커니즘은 피어 노드들이 모든 애플리케이션 관련 메시지를 그의 목적지(들)로 간접적으로 전달하는 것을 포함한다. 이 제3 메커니즘에서, 노드들은, 예를 들어, 128-비트 또는 160-비트 ID 등의 식별자(ID)를 할당받는다. 주어진 애플리케이션 관련 메시지에의 관심의 등록을 유지하는 일을 맡고 있는 노드는 애플리케이션 관련 메시지의 목적지 ID(예를 들어, URI)를 이 128-비트 또는 160-비트 ID 공간에 매핑(예를 들어, 해싱)함으로써 얻어지는 것에 가장 가까운 ID를 갖는 노드로 결정될 수 있다.
이 제3 메커니즘에서, 노드 도착 및 출발은 전체 패브릭에 걸쳐 플러딩된다. 반면에, 어떤 애플리케이션 관련 메시지에의 관심의 등록은 이러한 등록 정보를 유지하는 일을 맡고 있는 것으로 판정된 노드들에게 전달된다. 확장성, 부하 분산 및 고장 허용(fault-tolerance)을 위해, 어떤 애플리케이션 관련 메시지에의 관심의 등록을 수신하는 노드는 그의 이웃 세트 내에서 그 등록 정보를 신뢰성있게 플러딩할 수 있다. 지정된 노드에 대한 이웃 세트는 지정된 노드의 ID의 양쪽으로 미리 정의된 범위 내의 ID를 갖는 노드들의 세트인 것으로 결정될 수 있다.
제2 메커니즘과 유사하게, 새로 가입하는 노드는 그의 존재를 알리기 위해, 예를 들어, WS-Discovery 등의 브로드캐스트/멀티캐스트 발견 프로토콜을 이용하고 이미 연합 인프라의 일부인 노드를 검출하기 위해 로컬 브로드캐스트/멀티캐스트 탐색을 발행한다. 새로운 노드는 발견된 노드와 파트너쉽을 설정하고 그 파트너쉽을 사용하여 연합 인프라에 참여하고 있는 다른 새로운 노드들의 존재에 관해 알게 된다. 이어서, 새로운 노드는 새로 발견된 노드들과 추가의 파트너쉽을 설정하고 새로운 착신 파트너쉽 요청을 수락한다. 새로운 노드는 자신이 책임지고 있는 그의 파트너들로부터 어떤 애플리케이션 계층 관련 자원에의 관심의 착신 등록들을 수신하고 이 등록들을 그의 이웃 세트에 걸쳐 플러딩할 수 있다. 따라서, 메시지들이 일반적으로 (예를 들어, 새로 가입하는 노드와 파트너이거나 파트너 노드가 알고 있는) 중간 라우팅 노드들을 통해 그의 최종 목적지로 전달될 수 있다.
착신 애플리케이션 관련 메시지를 수신한 것에 응답하여, 새로운 노드는 그 메시지를 메시지에 지정된 목적지에 대한 등록 정보를 유지하는 일을 맡고 있을 수 있는 파트너 노드로 전달한다. 따라서, 이 제3 메커니즘을 사용할 때, 연합 인프라 내의 모든 노드는 다른 노드들 전부에 대해 전반적으로 알고 있지만, 등록 정보가 노드들 간에 효율적으로 분할된다. 애플리케이션 관련 메시지는 이들 애플리케이션 관련 메시지에의 관심의 등록 정보를 유지하는 일을 맡고 있을 수 있는 파트너의 노드들만을 통해 그의 최종 목적지로 전송된다. 따라서, 처리되고 있는 메시지에 대한 관심의 등록 정보를 전반적으로 알고 있는 파트너 노드에게만 전달함으로써 간접성(indirection)이 달성된다. 이것은 모든 파트너 노드들에게로 전달함으로써 간접성이 달성되는 제1 메커니즘과 다르다.
제4 연합 메커니즘은 피어 노드들이 메시지를 다른 피어 노드들로 라우팅하는 것을 포함한다. 이 제4 메커니즘은 적어도 노드 도착/출발 및 어떤 애플리케이션 관련 메시지에의 관심의 등록 둘다가 모두 플러딩되는 대신에 라우팅된다는 점에서 제3 메커니즘과 다르다. 라우팅 프로토콜은 애플리케이션 관련 메시지와 이들 애플리케이션 관련 메시지에의 관심을 표명하는 등록 메시지 간의 랑데뷰를 보장하도록 설계되어 있다.
도 2는 요청들을 파트너들에게 간접적으로 라우팅하는 것을 용이하게 하는 컴퓨터 아키텍처(200)의 일례를 나타낸 것이다. 컴퓨터 아키텍처(200)는 연합 인프라에 참여하고 있는 다수의 로컬 발견 범위에 걸쳐 분산되어 있을 수 있는 서로 다른 유형의 컴퓨터 시스템 및 장치들을 나타낸 것이다.
워크스테이션(233)은 등록된 PnP 제공자 인스턴스를 포함할 수 있다. 이 PnP 제공자 인스턴스의 존재를 그의 파트너들에게 알려주기 위해, 워크스테이션(233)은 연합 인프라를 통해 등록 요청(201)을 라우팅한다. 등록 요청(201)은 처음에 랩톱(231)으로 전달되고, 랩톱(231)은 차례로 등록 요청(201)을 메시지 브로커(237)로 전달하며, 메시지 브로커(237)는 이어서 등록 요청(201)을 메시지 게이트웨이(241)로 전달한다. 메시지 게이트웨이(241)는 등록 정보 등록 요청(201)을 그의 데이터베이스에 저장하고 성공 메시지(204)를 워크스테이션(233)으로 반환한다.
그 다음에, 또하나의 등록된 제공자 인스턴스(이 때는 실행 중인 서비스의 등록된 제공자 인스턴스임)가 워크스테이션(233) 내에서 활성으로 된다. 이 때, 노드는 메시지 게이트웨이(241)가 등록을 맡고 있음을 알고서 등록 요청(205)을 메시지 게이트웨이(241)로 직접 전달한다. 메시지 게이트웨이(241)는 등록 정보 등록 요청을 그의 데이터베이스에 저장하고 성공 메시지(206)를 워크스테이션(233)으로 반환한다.
그 다음에, 프린터(236)(예를 들어, UPnP 프린터)가 전원이 켜지고 공지(announcement)(207)를 전송한다. 서버(234)는 공지(207)를 검출하고 등록 요청(208)을 메시지 브로커(237)로 라우팅한다. 메시지 브로커(237)는 등록 요청(208)을 메시지 게이트웨이(241)로 전달한다. 메시지 게이트웨이(241)는 등록 정보 등록 요청(208)을 그의 데이터베이스에 저장하고 성공 메시지(210)를 서버(234)로 반환한다.
그 다음에, 퍼스널 컴퓨터(242)는 모든 장치들을 발견하기 위해 룩업 요청(lookup request)(211)을 발행한다. 퍼스널 컴퓨터(242)는 룩업 요청(211)을 어디로 전달할지를 모르기 때문에, 룩업 요청(211)을 워크스테이션(243)을 통해 라우팅한다. 등록 및 룩업 요청이 동일한 목적지로 라우팅되기 때문에, 라우팅 프로토콜은 본질적으로 2개의 요청 간의 랑데뷰를 보장하며, 그 결과 워크스테이션(243)은 탐색 요청(211)을 메시지 게이트웨이(241)로 전달한다. 메시지 게이트웨이(241)는 자신이 유지하고 있는 등록 정보를 탐색해보고 탐색 요청(211)을 워크스테이션(233) 및 서버(234) 둘다로 전달한다. 워크스테이션(233) 및 서버(234)는 응답 메시지(214, 216)를 퍼스널 컴퓨터(242)로 각각 전송한다.
이 제4 메커니즘은 요청에 지정된 등록들을 전반적으로 알고 있는 노드[메시지 게이트웨이(241)]로 요청을 (플러딩하지 않고) 라우팅함으로써 동작을 한다. 이 제4 메커니즘은, 이하에서 더 상세히 기술되는 바와 같이, 본질적으로 라우팅이 O(log N) 홉(단, N은 연합 인프라에 참여하고 있는 노드들의 수임)으로 달성될 수 있음을 보장한다. 이 제4 메커니즘은 노드 파트너쉽 및 등록 정보 둘다를 효율적으로 분할하기 때문에, 초대규모 네트워크, 심지어 인터넷으로까지 확장된다.
다수의 연합 메커니즘이 기술되어 있지만, 본 설명을 살펴본 후에 다른 연합 메커니즘들이 가능하다는 것이 당업자에게는 명백할 것이다.
연합에서의 노드들 간의 관계
따라서, 연합(federation)은 정보가 체계적이고 효율적으로 배포되고 탐색되는 동적이고 확장가능한 네트워크를 형성하기 위해 서로 간에 협력을 하는 일련의 노드로 이루어져 있다. 노드들은 노드 ID들의 정의역(domain)에 걸쳐 반사적(reflexive)이고, 반대칭적(antisymmetric)이며, 추이적(transitive)이고, 완전(total)하며, 정의되어 있는(defined) 이진 관계(binary relation)를 사용하여 정렬 리스트(sorted list)로서 연합에 참여하도록 구성되어 있다. 정렬 리스트의 양 끝이 연결됨으로써 링을 형성한다. 따라서, 리스트 내의 각각의 노드는 (모듈로 산술(modulo arithmetic)을 사용한 결과) 그 자신을 정렬 리스트의 중간에 있는 것으로 볼 수 있다. 게다가, 리스트는 이중 연결(doubly linked)되어 있으며, 따라서 어느 노드라도 리스트를 양 방향으로 순회할 수 있다.
각각의 연합 노드(federating node)는 0과 어떤 고정된 상한 사이에 있는 고정된 ID 집합으로부터의 ID를 (예를 들어, 중복 검출(duplicate detection)을 갖는 난수 발생기에 의해) 할당받을 수 있다. 따라서, 고정된 상한의 ID에 1을 더하면 0의 ID가 얻어진다(즉, 연결 리스트의 끝에서 다시 연결 리스트의 시작으로 감). 또한, 노드 ID의 값 정의역(value domain)으로부터 노드 자신으로의 1:1 매핑 함수가 정의된다.
도 3은 예시적인 연결 리스트(304) 및 대응하는 링(306)을 나타낸 것이다. 이러한 링이 주어진 경우, 이하의 함수가 정의될 수 있다.
RouteNumerically(V, Msg): 노드 ID의 값 정의역으로부터의 값 V 및 메시지 "Msg"가 주어지면, 매핑 함수를 사용하여 V에 매핑될 수 있는 ID를 갖는 노드 X로 메시지를 전달함.
Neighborhood(X, S): 이웃(neighborhood)은 카디날리티(cardinality)가 S인 노드 X의 양측에 있는 노드들의 집합임
연합 내의 모든 노드가 링을 전반적으로 알고 있는 경우, RouteNumerically(V, Msg)는 V에 매핑 함수를 적용함으로써 얻어지는 ID를 갖는 노드 X로 Msg를 직접 전송함으로써 구현된다. 대안으로서, 노드들이 다른 노드들을 제한적으로만 알고 있는 경우(예를 들어, 바로 인접한 노드들만을 알고 있는 경우), RouteNumerically(V, Msg)는 메시지가 목적지 노드 X에 도달할 때까지 링을 따라 연속적인 노드들로 메시지를 전달함으로써 구현된다.
대안으로서(또한 유리하게도), 노드들은 (전반적으로 알 필요가 없거나 바로 인접한 노드들 간의 라우팅을 구현할 필요없이) 분산 이진 검색(distributed binary search)을 수행하기 위해 링에 관한 충분한 정보를 저장할 수 있다. 링 정보를 유지하는 일이 각각의 노드에 충분히 작은 영향을 주지만 라우팅 홉 수의 감소로부터 향상된 라우팅 성능을 가능하게 하도록 링 정보의 양은 구성가능하다.
앞서 기술한 바와 같이, ID는 충분히 큰 자연수 유계 집합(bounded set)(그의 범위가 0과 어떤 고정된 값 사이의 수들(0과 이 고정된 값을 포함함)의 유한 집합에 걸쳐 있음)에 걸쳐 정의된 "<"(보다 작음) 관계를 사용하여 할당될 수 있다. 따라서, 연합에 참여하고 있는 모든 노드는 0과 어떤 적절히 선택된 상한 사이에 있는 자연수(0과 상한을 포함함)를 할당받는다. 이 범위는 빈틈이 없을(tight) 필요가 없으며, 노드들에 할당된 숫자들 간에 간격이 있을 수 있다. 노드에 할당된 숫자는 링에서의 그의 ID로서 역할한다. 매핑 함수는 2개의 노드 ID 사이에 있는 숫자를 그 숫자에 수치적으로 가장 가까운 ID를 갖는 노드에 매핑함으로써 숫자 공간에서의 간격을 고려한다.
이 방식은 많은 이점을 갖는다. 각각의 노드에 균일하게 분포된 숫자를 할당함으로써, 링의 모든 세그먼트가 균일하게 채워질 가능성이 증가된다. 게다가, 후속자(successor), 선행자(predecessor), 및 이웃(neighborhood) 계산이 모듈로 산술을 사용하여 효율적으로 행해질 수 있다.
일부 실시예들에서, 연합 노드는 2개의 노드가 동일한 ID를 할당받을 가능성이 그다지 없을만큼 큰 ID 공간 내로부터의 ID를 할당받는다(예를 들어, 난수 발생이 사용되는 경우). 예를 들어, 노드는 0에서 bn-1의 범위(단, b는, 예를 들어, 8 또는 16이고, n은, 예를 들어, 128-비트 또는 160-비트 등가 자릿수(equivalent digit)임) 내의 ID를 할당받을 수 있다. 그에 따라, 노드는, 예를 들어, 0에서 1640-1(즉, 대략 1.461502E48임)의 범위로부터의 ID를 할당받을 수 있다. 0에서 1640-1의 범위이면, 예를 들어, 인터넷 상의 모든 노드에 고유의 ID를 할당하기에 충분한 수의 ID를 제공한다.
따라서, 연합 내의 각각의 노드는,
0에서 bn-1의 범위에서 균일하게 분포된 숫자값인 ID, 및
후속 노드 (s),
선행 노드 (p),
이웃 노드 (pk, ..., p1, p, s, s1, ..., sj) (단, sj.s.id > (id + u/2), j ≥ v/2-1이고, pk.p.id < (id - u/2)이며, k ≥ v/2-1임), 및
라우팅 노드 (r-(n-1), ..., r-1, r1, ..., rn-1) (단, r±i = RouteNumerically(id± bi, Msg)임)
를 포함하는 라우팅 테이블(모든 산술은 모듈로 bn으로 행해짐)을 가질 수 있으며, 여기서 b는 기수(number base)이고, n은 자리수로 되어 있는 필드 크기이며, u는 이웃 범위이고, v는 이웃 크기이며, 산술은 모듈로 bn으로 수행된다. 양호한 라우팅 효율 및 고장 허용을 위해, u 및 v의 값은 u = b이고, v≥max(log2(N), 4)이며, 여기서 N은 연합에 물리적으로 참여하고 있는 노드들의 총수이다. 예를 들어, ID의 균일한 분포가 있는 경우, N은 b보다 크거나 같은 길이를 갖는 링 세그먼트 상에 존재하는 노드들의 수로부터 추정될 수 있다. b 및 n의 통상적인 값은 b=8 또는 16이고, n=128-비트 또는 160-비트 등가 자리수이다.
그에 따라, 라우팅 노드는 링을 따라 있는 로그 인덱스(logarithmic index)를 형성할 수 있다. 예를 들어, id±bi(단, i = (1, 2, . . . (n-1))임)의 집합 내의 각각의 숫자에 기존의 노드가 있는 경우, 링 상에서의 노드들의 위치에 의존하여, 정확한 로그 인덱스가 가능하다. 그러나, 집합 내의 각각의 숫자에 기존의 노드가 없을 수도 있다. 그 경우에, id±bi에 가장 가까운 노드가 라우팅 노드로서 선택될 수 있다. 그 결과 얻어지는 로그 인덱스는 정확하지 않으며 심지어 집합 내의 어떤 숫자들에 대한 고유의 라우팅 노드를 갖지 않을 수도 있다.
다시 도 3을 참조하면, 도 3은 연합 인프라 내의 노드들 간의 이진 관계의 일례를 정렬 리스트(304) 및 대응하는 링(306)의 형태로 나타낸 것이다. 정렬 리스트(304)의 ID 공간은 0에서 28-1(즉 255)의 범위에 있다. 즉, b=2이고 n=8이다. 따라서, 도 3에 나타낸 노드들은 0에서 255의 범위에 있는 ID를 할당받는다. 정렬 리스트(304)는 노드 ID들의 정의역에 걸쳐 반사적이고, 반대칭적이며, 추이적이고, 완전하며, 정의되어 있는 이진 관계를 이용한다. 정렬 리스트(304)의 양쪽 끝이 연결됨으로써 링(306)을 형성한다. 이것에 의해 도 3에 있는 각각의 노드는 그 자신을 정렬 리스트(304)의 중간에 있는 것으로 볼 수 있다. 정렬 리스트(304)는 이중 연결되어 있으며, 따라서 어느 노드라도 정렬 리스트(304)를 양방향으로 순회할 수 있다. 정렬 리스트(304)를 순회하는 산술은 모듈로 28로 수행된다. 따라서, 255(즉, 정렬 리스트(304)의 끝) + 1 = 0(즉, 정렬 리스트(304)의 시작)이다.
라우팅 테이블은 ID 64의 후속자가 ID 76임을 나타내고 있다(ID 64로부터 시계 방향으로 바로 인접한 ID). 예를 들어, 새로운 노드(예를 들어, 71의 ID를 가짐)가 가입하거나 기존의 노드(예를 들어, ID 76)가 연합 인프라를 탈퇴하는 경우, 후속자가 변할 수 있다. 이와 마찬가지로, 라우팅 테이블은 ID 64의 선행자가 ID 50(ID 64로부터 반시계 방향으로 바로 인접한 ID)임을 나타내고 있다. 예를 들어, 새로운 노드(예를 들어, 59의 ID를 가짐)가 가입하거나 기존의 노드(예를 들어, ID 50)가 연합 인프라를 탈퇴하는 경우, 선행자가 변할 수 있다.
라우팅 테이블은 또한 ID 64의 이웃 노드 집합이 ID 83, 76, 50 및 46을 갖는다는 것을 나타내고 있다. 이웃 노드 집합은 ID 64로부터 지정된 범위(즉, 이웃 범위 u) 내에 있는 지정된 수(즉, 이웃 크기 v)의 노드들일 수 있다. 각종의 서로 다른 이웃 크기 및 이웃 범위(예를 들어, v=4 및 u=10 등)가 어쩌면 이웃 노드 집합을 식별하는 데 사용될 수 있다. 예를 들어, 노드들이 가입하거나 연합 인프라를 탈퇴하는 경우 또는 지정된 노드 수 또는 지정된 범위가 변경되는 경우, 이웃 집합이 변할 수 있다.
라우팅 테이블은 또한 ID 64가 ID 200, 2, 30, 46, 50, 64, 64, 64, 64, 76, 83, 98, 135, 및 200를 갖는 노드들로 라우팅할 수 있음을 나타내고 있다. 이 리스트는 id±2i(단, i = (1, 2, 3, 4, 5, 6, 7)임)의 집합 내의 각각의 숫자에 가장 가까운 노드를 식별함으로써 발생된다. 즉, b=2이고 n=8이다. 예를 들어, ID 76을 갖는 노드는 64 + 23, 즉 72에 가장 가까운 노드를 계산하는 것으로부터 식별될 수 있다.
노드는 메시지(예를 들어, 자원에의 액세스 요청)를 선행 노드, 후속 노드, 이웃 노드 집합 내의 임의의 노드, 또는 임의의 라우팅 노드로 직접 라우팅할 수 있다. 일부 실시예들에서, 노드들은 메시지를 라우팅하기 위해 숫자 라우팅 기능(numeric routing function)을 구현한다. 따라서, Msg를 숫자상으로 V에 가장 가까운 ID를 갖는 연합 내의 노드 Y로 전달하고 노드 Y의 ID를 노드 X로 반환하기 위해 RouteNumerically(V, Msg)가 노드 X에서 구현될 수 있다. 예를 들어, ID 64를 갖는 노드는 메시지가 ID 250을 갖는 노드로 라우팅되게 하기 위해 RouteNumerically(243, Msg)를 구현할 수 있다. 그러나, ID 250이 ID 64의 라우팅 노드가 아니기 때문에, ID 64는 메시지를 ID 2(243에 가장 가까운 라우팅 노드)로 라우팅할 수 있다. ID 2를 갖는 노드는 차례로 메시지가 ID 250을 갖는 노드로 (직접 또는 추가의 중간 노드들을 통해) 라우팅되게 하기 위해 RouteNumerically(243, Msg)를 구현할 수 있다. 따라서, RouteNumerically 함수가 재귀적으로 호출될 수 있고 각각의 호출이 메시지를 목적지에 더 가깝게 라우팅한다.
근접성(Proximity)
유리하게도, 본 발명의 다른 실시예들은 하나 이상의 근접성 카테고리(예를 들어, 지리적 경계, 라우팅 특성(예를 들어, IP 라우팅 홉), 관리 도메인, 조직 경계, 기타)의 복수의 근접성 기준에 기초하여 링을 링들의 링으로 또는 링들의 트리로 분할하는 것을 용이하게 한다. 동일한 유형의 근접성 기준을 사용하여 링이 한번 이상 분할될 수 있다는 것을 잘 알 것이다. 예를 들어, 링이 대륙 근접성 기준 및 국가 근접성 기준(둘다 지리적 경계 근접성 카테고리임)에 기초하여 분할될 수 있다.
ID가 (난수 발생의 결과) ID 공간에 걸쳐 균일하게 분포될 수 있기 때문에, 근접성 부류들이 대략 동일한 카디날리티를 갖기만 하다면, 원형 ID 공간의 임의의 주어진 세그먼트가 서로 다른 근접성 부류에 속하는 노드들을 포함할 확률이 높다. 의미있는 통계적 거동을 얻기에 충분한 수의 노드가 있는 경우 이 확률이 더 증가한다.
따라서, 임의의 주어진 노드의 이웃 노드들이 근접성 관점에서 볼 때 통상적으로 잘 분산되어 있다. 게시된 애플리케이션 상태가 이웃 노드들 간에 복제될 수 있기 때문에, 게시된 정보가 근접성 관점에서 볼 때 역시 잘 분산될 수 있다.
도 4는 근접 라우팅(proximal routing)을 용이하게 하는 링들의 링(400)을 나타낸 것이다. 링(401)은 마스터(master), 즉 루트 링(root ring)으로 볼 수 있고, 각각의 링(402, 403, 404) 내의 모든 노드를 포함한다. 각각의 링(402, 403, 404)은 지정된 근접성 기준에 기초하여 분할되어 있는 링(401)으로부터의 노드들의 서브셋을 포함한다. 예를 들어, 링(401)은 지리적 위치에 기초하여 분할될 수 있으며, 이 경우 링(402)은 북아메리카에 있는 노드들을 포함하고, 링(403)은 유럽에 있는 노드들을 포함하며, 링(404)은 아시아에 있는 노드들을 포함한다.
65,536(216)개 ID를 포함하는 숫자 공간에서, ID 5,345를 갖는 북아메리카 노드로부터 ID 23,345를 갖는 아시아 노드로 메시지를 라우팅하는 것은 아시아 노드의 이웃 노드가 식별될 때까지 링(402) 내의 메시지를 라우팅하는 것을 포함할 수 있다. 이 이웃 노드는 이어서 메시지를 아시아 노드로 라우팅할 수 있다. 따라서, 북아메리카 노드와 아시아 노드 사이에서 (다수의 홉이 아니라) 단일의 홉이 행해진다. 그에 따라, 자원 효율적인 방식으로 라우팅이 수행된다.
도 5는 근접 라우팅을 용이하게 하는 예시적인 링들의 근접성 유도 분할 트리(proximity induced partition tree)(500)를 나타낸 것이다. 도시된 바와 같이, 링들의 분할 트리(500)는 다수의 링을 포함한다. 각각의 링은 정렬된 연결 리스트(sorted linked list)의 일부분을 나타낸다. 각각의 링은 정렬된 연결 리스트에 있는 ID를 갖는 복수의 노드를 포함한다. 그러나, 명확함을 위해, 잠재적인 노드의 수로 인해, 이들 노드가 링 상에서 명확하게 표시되지 않는다(예를 들어, 분할 트리(500)의 ID 공간이 b=16이고 n=40일 수 있음).
분할 트리(500) 내에서, 루트 링(501)은 기준(571)(제1 관리 도메인 경계 기준)에 기초하여 서브링(511, 512, 513, 514)을 비롯한 복수의 서브링으로 분할된다. 예를 들어, DNS 이름의 각각의 성분이 근접성 기준으로 생각될 수 있으며 그 성분들 간의 부분 순서는 DNS 이름을 우에서 좌로 읽을 때 나타나는 순서에 따라 유도된 것이다. 그에 따라, 서브링(511)은 기준(581)(제2 관리 도메인 경계 기준)에 기초하여 서브링(521, 522, 523)을 비롯한 복수의 서브링으로 추가적으로 분할될 수 있다.
서브링(522)은 기준(572)(지리적 경계 기준)에 기초하여 서브링(531, 532, 533)을 비롯한 복수의 서브링으로 추가적으로 분할될 수 있다. 위치-기반 근접성 기준은 대륙, 국가, 우편 번호 등의 경계선을 따라 부분적으로 순서화될 수 있다. 우편 번호 자체는 계층적으로 구성되어 있으며, 이는 우편 번호가 근접성 기준의 부분적으로 순서화된 서브리스트를 추가적으로 유도하는 것으로 볼 수 있음을 의미한다.
서브링(531)은 기준(573)(제1 조직 경계 기준)에 기초하여 서브링(541, 542, 543, 544)을 비롯한 복수의 서브링으로 추가적으로 분할될 수 있다. 주어진 회사의 조직 구조가 어떻게 되어 있는지(부, 과, 및 제품군 등)의 경계선에 따라 근접성 기준의 부분적으로 순서화된 리스트가 유도될 수 있다. 그에 따라, 서브링(543)은 기준(583)(제2 조직 경계 기준)에 기초하여 서브링(551, 552)을 비롯한 복수의 서브링으로 추가적으로 분할될 수 있다.
분할 트리(500) 내에서, 각각의 노드는 단일의 ID를 가지며 루트(root)에서 시작하여 리프(leaf)로 가는 대응하는 분할 경로(partition path)를 따라 링에 참여한다. 예를 들어, 서브링(552)에 참여하고 있는 각각의 노드는 또한 서브링(543, 531, 522, 511) 및 루트(501)에도 참여하게 된다. 목적지 노드(ID)로 라우팅하는 것은 다음과 같이 RouteProximally 함수를 구현함으로써 달성될 수 있다.
RouteProximally(V, Msg, P): 노드 식별자들의 정의역으로부터의 값 V 및 메시지 "Msg"가 주어진 경우, 근접성 기준 P에 의해 등가인 것으로 간주되는 노드들 중에서 V에 매핑될 수 있는 ID를 갖는 노드 Y로 그 메시지를 전달한다.
따라서, 목적지 노드가 현재의 노드와 그의 후속 노드 또는 선행 노드 사이에 있다는 조건으로부터 결정되는 바와 같이 주어진 링 내에서 라우팅에 의해 더 이상 전진할 수 없을 때까지 그 링 내에서 목적지 노드에 점진적으로 더 가깝게 이동함으로써 라우팅이 달성될 수 있다. 이 시점에서, 현재의 노드는 자신이 참여하고 있는 그 다음으로 큰 링 내에 있는 그의 파트너 노드를 통해 라우팅을 시작한다. 루트 링을 향해 분할 경로를 따라 올라감으로써 목적지 노드 쪽으로 점진적으로 이동하는 이러한 프로세스는 RouteProximally 호출에서 최초로 지정된 바와 같은 요청된 근접성 컨텍스트(proximal context) 내에서 목적지 노드에 가장 가까운 노드에 도달될 때 종료된다.
라우팅 홉은 그 요청을 발신한 노드의 근접 이웃 내에서 추가적인 전진이 행해질 수 없을 때까지 그 이웃 내에 여전히 있을 수 있는데, 그 이유는 목적지 노드가 그 이웃을 벗어나 존재하기 때문이다. 이 시점에서, 추가적인 전진을 하기 위해 근접 이웃의 크기를 증가시키기 위해 근접성 조건이 완화된다. 이 프로세스는 근접 이웃이 목적지 노드(ID)를 포함하도록 충분히 확장될 때까지 반복된다. 근접 이웃 기준의 각각의 연속적인 완화 후에 행해지는 라우팅 홉이 근접 공간에서는 어쩌면 더 큰 점프일 수 있지만 이전의 홉과 비교하여 숫자 공간에서는 그에 대응하는 더 작은 점프를 한다. 따라서, 목적지에 도달되기 전에 절대적으로 요구되는 수의 이러한 (링간) 홉만이 행해진다.
룩업 메시지에 대해서는 어떤 홉들이 회피되는 경우가 있을 수 있는데, 그 이유는 게시된 애플리케이션 날짜가 목적지 노드의 이웃 노드들 중에 복제될 때 분할 트리를 따라 내려가면서 복제되기 때문이다.
근접 라우팅을 달성하기 위해, 각각의 연합 노드는 자신이 멤버로서 참여하고 있는 모든 링 내의 그의 후속 노드 및 선행 노드(단일 링에 대한 후속자 및 선행자와 유사함) - 근접 선행자(proximal predecessor), 근접 후속자(proximal successor), 및 근접 이웃(proximal neighborhood) - 에 대한 참조를 유지한다. 라우팅이 효율적이도록 하기 위해, 노드들은 또한 라우팅 파트너로서 링의 어느 한쪽 절반에서 기하급수적으로 증가하는 거리에 가장 가까운 다른 노드들에 대한 참조도 유지할 수 있다(단일의 링에 대한 라우팅 노드와 유사함). 일부 실시예들에서, 한 쌍의 연속적인 후속 노드 또는 선행 노드 사이에 있는 라우팅 파트너 노드는 현재의 노드 및 후속 노드 쌍 또는 선행 노드 쌍 중에서 각각 그에 숫자상으로 가장 가까운 노드에 의해 공유되는 동일한 최하위 링에 참여한다. 따라서, 추가적인 전진을 할 필요가 절대적으로 있을 때에만 목적지 노드 쪽으로의 라우팅 홉이 완화된 근접성 기준을 사용하는 것으로 이행한다(즉, 상위 링으로 이행한다). 그에 따라, 메시지가 대응하는 연합 노드와 효율적으로 랑데뷰될 수 있다.
일부 실시예들에서, 노드는 등가 기준 관계(equivalence criteria relation)에 기초하여 메시지를 라우팅하는 근접 라우팅 기능을 구현한다. 따라서, 숫자 V 및 메시지 "Msg"가 주어진 경우, 노드는 근접성 기준 P에 의해 등가인 것으로 간주된 노드들 중에서 V에 매핑될 수 있는 ID를 갖는 노드 Y로 메시지를 전달하기 위해 RouteProximally(V, Msg, P)를 구현할 수 있다. 근접성 기준 P는 그에 의해 근접성 측면에서 등가인 것으로 간주되는 모든 노드에 대한 공통의 선조인 분할 트리에서의 최하위 링을 식별한다. 이는 경로 분리 문자(path separator character) '/'에 의해 분리되어 있는, 루트 링으로부터 그에 의해 식별된 링까지의 경로를 따라 발견된 근접성 기준을 연결(concatenate)함으로써 얻어진 문자열로 표현될 수 있다. 예를 들어, 서브링(542)을 식별하는 근접성 기준은 "Proximity:/.COM/Corp2/LocationA/Div2"로 표현될 수 있다. 분할 트리(500) 내의 각각의 링은, 예를 들어, 그의 표현 문자열을 SHA 기반 알고리즘으로 해싱함으로써 고유의 숫자를 할당받을 수 있다. 숫자 0이 루트 링을 위해 예약되어 있는 경우, RouteNumerically(V, Msg) ≡ RouteProximally(V, Msg, 0)인 것으로 추론될 수 있다.
예를 들어, 서브링(544) 내의 노드는 (예를 들어, 서브링(513) 내의 노드에) 더 가까운 서브링(531) 내의 노드를 식별하기 위해 RouteProximally를 실시할 수 있다. 차례로, 서브링(531)은 서브링(522) 내의 더 가까운 노드를 식별하기 위해 RouteProximally를 실시할 수 있다. 이와 마찬가지로, 서브링(522)은 서브링(511) 내의 더 가까운 노드를 식별하기 위해 RouteProximally를 실시할 수 있다. 유사하게, 서브링(511)은 링(501) 내의 더 가까운 노드를 식별하기 위해 RouteProximally를 실시할 수 있다. 따라서, RouteProximally 함수가 재귀적으로 호출될 수 있으며, 각각의 호출은 메시지를 목적지에 더 가깝게 라우팅한다.
따라서, 근접성 기준에 고려될 때, 최종 목적지로의 경로 상에 있는 라우팅 홉은 여전히 요청을 발신한 노드에 근접하여 있으면서 목적지 노드에 도달하거나 선택된 근접성 조건 하에서 더 이상 전진을 할 수 없을 때(이 시점에서 목적지 쪽으로 추가적인 전진을 하기 위해 충분한 정도만 근접성 기준이 완화됨)까지 숫자 공간에서 발신 노드와 목적지 노드 사이에서 상당한 전진을 할 수 있다. 예를 들어, 메시지가 링(531)에서 링(522)까지 등으로 라우팅되기에 충분할 정도로 근접성 기준이 완화될 수 있다.
상기한 근접성 방식을 이용하면, 게시된 정보를 주어진 링으로 제한하는 것이 가능하다. 예를 들어, 조직들은 조직 관련 정보가 (1) 암시적으로는 그의 도메인 밖의 노드들로의 이웃 복제의 형태로 또는 (2) 명식적으로 이러한 정보에 대한 룩업 요청을 서비스하는 형태로 그의 신뢰 도메인 밖의 엔티티들이 이용할 수 없도록 할 수도 있다. 첫번째 측면은 게시된 정보를 지정된 링 내의 타겟 ID에 이웃하는 노드들 간에만 복제함으로써 만족된다. 노드에 의해 발신된 모든 메시지가 루트 링을 향해 그 노드가 속하는 링들을 계속 올라감으로써 라우팅되기 때문에, 조직 내에서 발신된 모든 룩업 요청이 그 조직으로 한정된 게시된 정보를 찾아낼 수 있게 함으로써 두번째 측면을 암시적으로 만족시킬 가능성이 높다.
또한, 조직들은 노드들이 그의 신뢰 도메인 밖의 노드들과 자동으로 연합하는 것을 싫어한다. 이것은, 예를 들어, 방문 판매원이 그의 랩톱 컴퓨터를 고객 구내에 있는 네트워크에 연결할 때 일어날 수 있다. 이상적으로는, 판매원 소유의 랩톱 컴퓨터는 그의 홈 도메인에 게시된 정보를 찾고자 하고 및/또는 그의 최하위 선호 근접 링에서 시작하여 그의 홈 도메인 내의 노드들과 연합하고자 한다. 고객의 도메인에 있는 노드들과 연합하는 것은 통상적으로 허용되지 않는다. 이러한 시나리오를 지원하려면 홈 도메인에서 씨드 노드(seed node)를 찾아낼 수 있어야 한다. 이러한 씨드 노드는 홈 도메인에 게시된 정보를 찾아내는 데, 홈 연합에 가입하는 데, 게시된 정보를 도메인들에 걸쳐 선택적으로 가져오기 및 내보내기하는 데, 및 다른 노드들에 의해 전송된 모순되는 고장 보고를 중재하는 한가지 가능한 방법으로서 사용될 수 있다. 씨드 노드는 때때로 메시지 게이트웨이라고도 한다.
다른 실시예들에서, 엔티티는 루트 링에 있는 씨드 노드에 대한 참조를 게시한다. 씨드 노드는 (타겟 ID로서의) 링과 연관된 고유의 숫자(그의 표현 문자열을 해싱함으로써 획득된 것 등)로 게시될 수 있다. 씨드 노드 정보는 또한 루트 링에 있는 대응하는 타겟 ID까지의 경로 상에 있는 다양한 링에 있는 노드들에 의해 주문형 캐싱(on-demand caching)될 수 있다. 준정적 정보(semi-static information)가 아주 빈번히 탐색될 때 일어날 수도 있는 이러한 주문형 캐싱은 성능 개선 및 핫스폿의 감소를 제공한다. 씨드 노드 정보는 또한 DNS 등의 다른 수단을 통해 획득될 수도 있다.
한정되어 있는 게시된 정보에 대한 고장 허용을 제공하기 위해, 각각의 노드는 그가 참여하고 있는 모든 링에 이웃 노드 세트를 유지할 수 있다. 이상의 것들을 고려하면, 노드에 의해 유지되는 상태는 다음과 같이 요약될 수 있다.
● 0에서 bn-1의 범위에서 균일하게 분포되어 있는 숫자 값인 ID.
● 라우팅 테이블(모든 산술은 모듈로 bn으로 행해짐). 이 라우팅 테이블은,
○ 노드가 참여하고 있는 각각의 링, 말하자면 링 d에 대해,
■ 후속 노드 (sd)
■ 선행 노드 (pd)
■ 이웃 노드 (pkd, ..., p1d, pd, sd, s1d, ..., sjd)(단, sjd.sd.id > (id + u/2), j ≥ v/2-1, pkd.pd.id < (id - u/2)이고, k ≥ v/2-1임).
○ 라우팅 노드 (r-(n-1), ..., r-1, rl, ..., rn -1) (단, r±j = RouteProximally(id ± bi, updateMsg, d)이고 여기서 적절한 경우 sd ≤ id + bi ≤ sd+i 또는 pd+1 ≤ id - bi ≤ pd임)으로 이루어져 있음.
여기서, b는 기수(number base)이고, n은 자리수로 되어 있는 필드 크기이며, u는 이웃 범위이고, v는 이웃 크기이다.
유의할 점은 링 "d"에 있는 주어진 노드에 의해 유지되는 이웃 노드 세트가 주어진 노드가 역시 참여하고 있는 자식 링 "d+1"에 이웃 노드로서 다시 나타날 수 있다는 것이다. 그 자체로서, 주어진 노드가 참여하고 있는 D개의 링 모두에 걸쳐 이 주어진 노드에 의해 유지되는 이웃 노드의 총수에 관한 상한을 D*max(u,v)/2로서 도출할 수 있다. 이것은 주어진 노드에 대한 하나의 참조만이 유지되고 최악의 경우의 상한이 균형 트리(balanced tree)에 대한 것임을 고려한 것이다.
유의할 점은, 링이 복수의 대응하는 형제 서브링으로 분할될 때, 지정된 노드가, 예를 들어, 별칭 설정(aliasing)을 통해, 복수의 대응하는 형제 서브링 중 2개 이상에 동시에 참여하는 것이 허용된다는 것이다. 예를 들어, 서로 다른 서브링으로부터의 서로 다른 상태를 지정된 노드와 연관시키기 위해 별칭 설정이 구현될 수 있다. 따라서, 주어진 노드에 대한 별칭들이 동일한 ID를 갖더라도, 각각의 별칭은 그와 연관된 서로 다른 상태를 가질 수 있다. 별칭 설정에 의해 지정된 노드는 반드시 더욱 특정된 근접성 기준의 공통 선조일 필요는 없는 서로 다른 근접성 기준을 갖는 다수의 링에 참여할 수 있다. 즉, 지정된 노드는 근접성 트리(proximity tree)의 다수의 브랜치(branch)에 참여할 수 있다.
예를 들어, 듀얼 NIC(유선 및 무선) 랩톱은 랩톱과 동일한 LAN 세그먼트를 공유하는 다른 무선 노드 및 유선 노드 둘다와 근접성 측면에서 등가인 것으로 간주될 수 있다. 그러나, 이들 2개의 서로 다른 근접성 기준은, 예를 들어, 조직 멤버쉽에 기초한 것과 같은 다른 상위 우선순위 근접성 기준의 적용 후에만 적용가능한 서브-기준(sub-criteria)으로 모델링될 수 있다. 랩톱이 동일한 조직에 속할 때, 1) 유선 LAN 세그먼트에서의 멤버쉽 및 2) 무선 LAN 세그먼트에서의 멤버쉽을 나타내는 2개의 서브링에 있는 별칭 설정된 노드들이 랩톱이 속하는 조직을 나타내는 링에 있는 단일의 노드로 병합된다. RouteProximally가 별칭 설정의 존재 시에 어떤 수정도 없이 예상대로 동작한다는 것을 잘 알 것이다.
각각의 근접 링은 (어쩌면 서로 다른) 링 파라미터들에 따라 구성될 수 있다. 링 파라미터들은 이웃을 정의하는 데(예를 들어, 링 파라미터들이 이웃 범위, 이웃 크기, 핑 메시지 및 이탈 메시지에 대한 핑 메시지 및 이탈 메시지 타이밍 및 분포 패턴을 표현할 수 있음), 특정의 연합 메커니즘을 나타내는 데(예를 들어, 앞서 기술한 제1 내지 제4 연합 메커니즘 중에서 또는 다른 연합 메커니즘 중에서), 또는 동일한 근접 링 내의 라우팅 파트너들 간의 통신 명세(communication specifics)를 정의하는 데 사용될 수 있다. 어떤 링 파라미터들은 보다 일반적이어서 복수의 서로 다른 연합 메커니즘에 적용될 수 있는 반면, 다른 링 파라미터들은 보다 특정적이어서 특정 유형의 연합 메커니즘에 적용된다.
일부 실시예들에서, 상위 레벨 근접 링을 구성하는 데 사용된 링 파라미터들은 하위 레벨 근접 링에 의해 상속될 수 있다. 예를 들어, 링(543)은 링(531)의 링 파라미터들 중 일부를 상속받을 수 있다(링(531)은 차례로 링(522)로부터 상속받고, 이하 마찬가지이다). 따라서, 링(531)과 연관된 이웃 크기 및 이웃 범위도 역시 링(541)과 연관되어 있다.
그러나, 상속받은 링 파라미터들은 변경될 수 있고 및/또는 근접 링은 서로 다른 링 파라미터에 따라 개별적으로 구성될 수 있다. 예를 들어, 링(511)이 많은 수의 노드를 포함하는 관리 도메인에 대한 것이고 따라서 상기한 제4 연합 메커니즘이 링(511)에 더 적절할 수 있다. 반면에, 링(521)이 비교적 적은 수의 노드를 갖는 소기업에 대한 것이고 따라서 상기한 제2 연합 메커니즘이 링(521)에 더 적절할 수 있다. 따라서, 링(521)과 연관된 링 파라미터들은 링(511)과 연관된 링 파라미터와 다른 값으로 설정될 수 있다(즉, 상속받은 파라미터들이 변경될 수 있다). 예를 들어, 특정 유형의 연합 메커니즘을 나타내는 링 파라미터가 링(511) 및 링(521) 간에 서로 다를 수 있다. 유사하게, 이웃을 정의하는 파라미터들이 링(511)과 링(521) 간에 서로 다를 수 있다. 게다가, 링(521)은 상기한 제2 연합 메커니즘에 특유한 특정의 파라미터들에 따라 구성될 수 있는 반면, 링(511)은 상기한 제4 연합 메커니즘에 특유한 특정의 파라미터에 따라 구성된다.
그에 따라, 근접 링은 근접 링에 있는 노드들의 특성(예를 들어, 수, 포함된 자원, 기타)에 기초하여 유연하게 구성될 수 있다. 예를 들어, 관리자는 구성 절차를 사용하여 (예를 들어, 사용자 인터페이스를 통해) 근접 링에 대한 링 파라미터를 선택할 수 있다. 구성 절차는, 예를 들어, 상속받은 링 파라미터들을 다른 방식으로 오버라이드하는 등을 위해 근접 링들 간의 상속 관계의 구성은 물론 개개의 근접 링의 구성을 용이하게 할 수 있다.
도 8은 연합 인프라의 노드들을 분할하는 방법(800)의 흐름도의 일례를 나타낸 것이다. 방법(800)은 도 5의 분할 트리(500)의 링들과 관련하여 설명될 것이다. 방법(800)은 연합 인프라 내의 노드들에 할당된 노드 ID를 포함하는 정렬된 연결 리스트에 액세스하는 동작(동작 801)을 포함한다. 예를 들어, 링(501)으로 표현된 정렬된 연결 리스트가 액세스될 수 있다. 정렬된 연결 리스트의 노드 ID(링(501) 상에 나타낸 노드들)는 연합 인프라(예를 들어, 연합 인프라(100)) 내의 노드들을 나타낼 수 있다.
방법(800)은 정렬된 연결 리스트를 분할하기 위한 복수의 서로 다른 근접성 기준을 나타내는 근접성 카테고리에 액세스하는 동작(동작 802)을 포함한다. 예를 들어, 도메인 경계(561), 지리적 경계(562) 및 조직 경계(563)를 나타내는 근접성 기준이 액세스될 수 있다. 그러나, 신뢰 도메인 경계 등의 다른 근접성 기준도 액세스된 근접성 기준에 표현될 수 있다. 근접성 카테고리는 이전에 생성되어 부분적으로 순서화된 근접성 기준 리스트(previously created partially ordered lists of proximity criteria)를 포함할 수 있다. 링은 부분적으로 순서화된 근접성 기준 리스트에 기초하여 분할될 수 있다.
방법(800)은 제1 근접성 기준에 기초하여 정렬된 연결 리스트를 하나 이상의 제1 서브리스트로 분할하는 동작 - 하나 이상의 제1 서브리스트 각각은 적어도 정렬된 연결 리스트로부터의 노드 ID의 서브셋을 포함함 - (동작 803)을 포함한다. 예를 들어, 링(501)은 기준(571)에 기초하여 서브링(511, 512, 513, 514)으로 분할될 수 있다. 각각의 서브링(511, 512, 513, 514)은 링(501)으로부터의 노드 ID의 다른 서브셋을 포함할 수 있다.
방법(800)은 하나 이상의 제1 서브리스트로부터 선택된 제1 서브리스트를 제2 근접성 기준에 기초하여 하나 이상의 제2 서브리스트로 분할하는 동작 - 하나 이상의 제2 서브리스트 각각은 적어도 제1 서브리스트에 포함된 노드 ID의 서브셋을 포함함 - (동작 804)을 포함한다. 예를 들어, 서브링(511)은 기준(581)에 기초하여 서브링(521, 522, 523)으로 분할될 수 있다. 서브링(521, 522, 523) 각각은 서브링(511)로부터의 노드 ID의 다른 서브셋을 포함할 수 있다.
도 9는 노드의 라우팅 테이블을 채우는 방법(900)의 흐름도의 일례를 나타낸 것이다. 방법(900)은 도 3의 정렬된 연결 리스트(304) 및 링(306)과 관련하여 설명될 것이다. 방법(900)은 선행 노드를 라우팅 테이블에 삽입하는 동작 - 이 선행 노드는 정렬된 연결 리스트의 제1 방향에서 현재의 노드에 대해 현재의 노드보다 앞에 옴 - (동작 901)을 포함한다. 예를 들어, ID 50을 갖는 노드가 ID 64를 갖는 노드(현재의 노드)에 대한 선행자로서 라우팅 테이블에 삽입될 수 있다. 시계 방향(321)으로(정렬된 연결 리스트(304)의 단부 A로부터 정렬된 연결 리스트(304)의 단부 B 쪽으로) 갈 때, ID 50을 갖는 노드는 ID 64를 갖는 노드보다 앞에 온다. 선행 노드를 삽입하는 것은 현재의 노드와 선행 노드 간에 대칭적 파트너쉽(현재의 노드가 선행 노드의 파트너이고 선행 노드가 현재의 노드의 파트너임)을 설정할 수 있다.
방법(900)은 후속 노드를 라우팅 테이블에 삽입하는 동작 - 이 후속 노드는 정렬된 연결 리스트에서 제1 방향으로 현재의 노드에 대해 현재의 노드보다 뒤에 옴 - (동작 902)을 포함한다. 예를 들어, ID 76을 갖는 노드는 ID 64를 갖는 노드(현재의 노드)에 대한 후속자로서 라우팅 테이블에 삽입될 수 있다. 반시계 방향(322)으로 갈 때, ID 76을 갖는 노드는 ID 64를 갖는 노드보다 뒤에 온다. 후속 노드를 삽입하는 것이 현재의 노드와 후속 노드 간의 대칭적 파트너쉽(현재의 노드가 후속 노드의 파트너이고 후속 노드가 현재의 노드의 파트너임)을 설정할 수 있다.
방법(900)은 적절한 이웃 노드들을 라우팅 테이블에 삽입하는 동작 - 이들 이웃 노드는 이웃 범위 및 이웃 크기에 기초하여 제1 방향 및 이와 반대인 제2 방향 둘다에서 정렬된 연결 리스트로부터 식별됨 - (동작 903)을 포함한다. 예를 들어, ID 83, 76, 50, 및 46을 갖는 노드는 ID 64를 갖는 노드(현재의 노드)에 대한 이웃 노드로서 라우팅 테이블에 삽입될 수 있다. 이웃 범위 20 및 이웃 크기 4에 기초하여, ID 83 및 76을 갖는 노드가 시계 방향(321)에서 식별될 수 있고 ID 50 및 46을 갖는 노드가 반시계 방향(322)(정렬된 연결 리스트(304)의 단부 B로부터 정렬된 연결 리스트(304)의 단부 A 쪽으로 감)에서 식별될 수 있다. 일부 환경에서는, 적절한 이웃 노드가 식별되지 않을 수도 있다. 이웃 노드를 삽입하는 것이 현재의 노드와 이웃 노드 간에 대칭적 파트너쉽(현재의 노드가 이웃 노드의 파트너이고 이웃 노드가 현재의 노드의 파트너임)을 설정할 수 있다.
방법(900)은 적절한 라우팅 노드를 라우팅 테이블에 삽입하는 동작 - 이 라우팅 노드는 연합 인프라에 대한 ID 공간의 기수(number base) 및 필드 크기에 기초하여 제1 및 제2 방향 둘다에서 정렬된 연결 리스트로부터 식별되고, 이 라우팅 노드는 제1 및 제2 방향 둘다에서 정렬된 연결 리스트의 로그 인덱스(logarithmic index)를 나타냄 - (동작 904)을 포함한다. 예를 들어, ID 200, 2, 30, 46, 50, 64, 64, 64, 64, 64, 76, 83, 98, 135 및 200을 갖는 노드들이 ID 64를 갖는 노드에 대한 라우팅 노드로서 라우팅 테이블에 삽입될 수 있다. 기수 2 및 필드 크기 8에 기초하여, ID 64, 64, 76, 83, 98, 135 및 200을 갖는 노드들이 방향(321)에서 식별될 수 있고, ID 64, 64, 50, 46, 30, 2, 및 200을 갖는 노드들이 방향(322)에서 식별될 수 있다. 링(306) 내부에 나타낸 바와 같이, 라우팅 노드는 시계 방향(321) 및 반시계 방향(322) 둘다에서 정렬된 연결 리스트(304)의 로그 인덱스를 나타낸다. 라우팅 노드를 삽입하는 것이 현재의 노드와 라우팅 노드 간에 대칭적 파트너쉽(현재의 노드가 라우팅 노드의 파트너이고 라우팅 노드가 현재의 노드의 파트너임)을 설정할 수 있다.
도 7은 근접성 기준을 고려하는 노드 라우팅 테이블을 채우는 방법(700)의 흐름도의 일례를 나타낸 것이다. 방법(700)은 도 5의 링들과 관련하여 설명될 것이다. 방법(700)은 현재의 노드가 참여하고 있는 각각의 계층적으로 분할된 라우팅 링에 대한 선행 노드를 라우팅 테이블에 삽입하는 동작(동작 701)을 포함한다. 각각의 선행 노드는 현재의 노드가 참여하고 있는 각각의 계층적으로 분할된 라우팅 링 내에서 제1 방향에서(예를 들어, 시계 방향에서) 현재의 노드보다 앞에 온다. 계층적으로 분할된 라우팅 링은 대응하는 근접성 기준에 따라 분할되고 적어도 양방향 연결 리스트(bi-directionally linked list)[어쩌면 완전 양방향 연결 리스트(whole bi-directionally linked list)]의 서브셋을 포함한다. 예를 들어, 지정된 노드가 루트 링(501) 및 서브링(511, 522, 523, 531, 542)에 참여하고 있을 수 있다. 따라서, 링(501) 및 서브링(511, 522, 523, 531, 542) 각각으로부터의 지정된 노드에 대해 선행 노드가 선택된다.
방법(700)은 현재의 노드가 참여하고 있는 각각의 계층적으로 분할된 라우팅 링에 대한 후속 노드를 라우팅 테이블에 삽입하는 동작(동작 702)을 포함한다. 각각의 후속 노드는 현재의 노드가 참여하고 있는 각각의 계층적으로 분할된 라우팅 링 내에서 제1 방향에서 현재의 노드보다 뒤에 온다. 예를 들어, 링(501) 및 서브링(511, 522, 523, 531, 542) 각각으로부터의 지정된 노드에 대해 후속 노드가 선택된다.
방법(700)은 현재의 노드가 참여하고 있는 각각의 계층적으로 분할된 라우팅 링에 대한 적절한 이웃 노드를 라우팅 테이블에 삽입하는 동작(동작 703)을 포함한다. 이웃 노드는 현재의 노드가 참여하고 있는 계층적으로 분할된 라우팅 링으로부터의 이웃 범위 및 이웃 크기에 기초하여 제1 방향(예를 들어, 시계 방향) 및 이와 반대인 제2 방향(예를 들어, 반시계 방향) 둘다에서 식별될 수 있다. 예를 들어, 링(501) 및 서브링(511, 522, 523, 531, 542) 각각으로부터의 지정된 노드에 대해 이웃 노드가 식별될 수 있다.
방법(700)은 현재의 노드가 참여하고 있는 각각의 계층적으로 분할된 라우팅 링에 대한 적절한 라우팅 노드를 라우팅 테이블에 삽입하는 동작(동작 704)을 포함한다. 예를 들어, 링(501) 및 서브링(511, 522, 523, 531, 542) 각각으로부터의 지정된 노드에 대해 라우팅 노드가 식별될 수 있다.
일부 실시예들에서, 노드 Y가 참여하고 있는 리프 링(leaf ring)(즉, 별칭 설정을 이용하는 실시예들에서의 리프 링)을 제외한 각각의 근접 링 d에 대해 적절한 라우팅 노드가 삽입된다. 이하의 표현식(들)에 기초하여 적절한 라우팅 노드가 삽입될 수 있다.
Y.sd.id < Y.id + bi < Y.sd+1.id가 참인 경우, 링 d를 사용하거나,
Y.pd.id < Y.id - bi < Y.pd+1.id가 참인 경우, 링 d를 사용한다.
이전의 단계에서 링이 식별되지 않은 경우, 선두 링(lead ring)(예를 들어, 링(501))을 링 d로서 사용한다. 이제, 링 d는 노드 Y가 z에 가장 가까운 라우팅 파트너를 찾아야 하는 근접 링이다.
도 10은 메시지를 목적지 노드 쪽으로 라우팅하는 방법(1000)의 흐름도의 일례를 나타낸 것이다. 방법(1000)은 도 3의 정렬된 연결 리스트(304) 및 링(306)과 관련하여 설명될 것이다. 방법(1000)은 수신측 노드가 목적지를 나타내는 숫자와 함께 메시지를 수신하는 동작(동작 1001)을 포함한다. 예를 들어, ID 64를 갖는 노드는 212의 목적지를 나타내는 메시지를 수신할 수 있다.
방법(1000)은 수신측 노드가 대응하는 선행 노드보다 목적지로부터 숫자상으로 더 멀리 있는지와 대응하는 후속 노드보다 목적지로부터 숫자상으로 더 멀리 있는지 중 적어도 하나를 판정하는 동작(동작 1002)을 포함한다. 예를 들어, 방향(322)에서, ID 64는 ID 50보다 목적지(212)로부터 더 멀리 떨어져 있으며, 방향(321)에서, ID 64는 ID 76보다 목적지(212)로부터 더 멀리 떨어져 있다. 방법(1000)은 목적지가 수신측 노드에 대응하는 이웃 노드 세트 내에 있지 않은지를 판정하는 동작(동작 1003)을 포함한다. 예를 들어, ID 64를 갖는 노드는 목적지(212)가 83, 76, 50, 및 46의 이웃 세트 내에 있지 않은지를 판정할 수 있다.
방법(1000)은 수신측 노드에 대응하는 라우팅 테이블로부터 중간 노드를 식별하는 동작 - 이 중간 노드는 대응하는 라우팅 테이블에서 다른 라우팅 노드들보다 숫자상으로 목적지에 더 가까움 - (동작 1004)을 포함한다. 예를 들어, ID 64를 갖는 노드는 ID 200을 갖는 라우팅 노드를 다른 라우팅 노드들보다 숫자상으로 목적지(212)에 더 가까운 것으로 식별할 수 있다. 방법(1000)은 메시지를 중간 노드로 전송하는 동작(동작 1005)을 포함한다. 예를 들어, ID 64를 갖는 노드는 메시지를 ID 200을 갖는 노드로 전송할 수 있다.
도 11은 근접성 기준에 기초하여 메시지를 목적지 노드 쪽으로 라우팅하는 방법(1100)의 흐름도의 일례를 나타낸 것이다. 방법(1100)은 도 4 및 도 5의 링들과 관련하여 설명될 것이다. 방법(1100)은 수신측 노드가 목적지를 나타내는 숫자 및 근접성 기준과 함께 메시지를 수신하는 동작(동작 1101)을 포함한다. 근접성 기준은 하나 이상의 노드 클래스(class)를 정의한다. 수신측 노드는 근접성 기준에 기초하여 하나 이상의 노드 클래스 중에서 선택된 현재의 노드 클래스의 일부로서 메시지를 수신한다. 예를 들어, ID 172를 갖는 노드는 201의 목적지를 나타내는 메시지 및 목적지 노드가 링(401)에 의해 표현되는 클래스의 일부임을 나타내는 근접성 기준을 수신할 수 있다. ID 172를 갖는 노드는 링(404)의 일부로서 메시지를 수신할 수 있다.
방법(1100)은 수신측 노드가, 선택된 노드 클래스 내의 노드들 중에서, 대응하는 선행 노드보다 숫자상으로 목적지로부터 더 멀리 떨어져 있는지 및 대응하는 후속 노드보다 숫자상으로 목적지로부터 더 멀리 떨어져 있는지 중 적어도 하나를 판정하는 동작(동작 1102)을 포함한다. 예를 들어, 링(404) 내에서, ID 172를 갖는 노드는 시계 방향에서 ID 174를 갖는 노드보다 목적지(201)로부터 더 멀리 떨어져 있고 반시계 방향에서 ID 153을 갖는 노드보다 목적지(201)로부터 더 멀리 떨어져 있다.
방법(1100)은 목적지가 근접성 기준에 의해 정의된 하나 이상의 노드 클래스 중 임의의 노드 클래스에 대한 수신측 노드의 이웃 노드 세트 내에 있지 않은지를 판정하는 동작(동작 1103)을 포함한다. 예를 들어, ID 172를 갖는 노드는 목적지(201)가 링(404) 내의 대응하는 이웃 세트에 있지 않은지 또는 링(401) 내의 대응하는 이웃 세트에 있지 않은지를 판정할 수 있다.
방법(1100)은 수신측 노드의 라우팅 테이블로부터 중간 노드를 식별하는 동작 - 이 중간 노드는 라우팅 테이블 내의 다른 라우팅 노드들보다 숫자상으로 목적지에 더 가까움 - (동작 1104)을 포함한다. 예를 들어, ID 172를 갖는 노드는 ID 194를 갖는 노드를 링(404) 내의 다른 라우팅 노드들보다 숫자상으로 목적지(201)에 더 가까운 것으로 식별할 수 있다. 방법(1100)은 메시지를 중간 노드로 전송하는 동작(동작 1105)을 포함한다. 예를 들어, ID 172를 갖는 노드는 수신된 메시지를 ID 194를 갖는 노드로 전송할 수 있다. ID 172를 갖는 노드는 이전에 정의되어 부분적으로 순서화된 근접성 기준 리스트를 존중하기 위해 수신된 메시지를 ID 194를 갖는 노드로 전송할 수 있다.
노드(194)는 링(404) 내에서 가능한 한 목적지(201)에 가까울 수 있다. 따라서, 목적지 쪽으로의 추가적인 라우팅이 그 다음 레그(leg)에 있는 링(401)에서 행해질 수 있을 정도로만 근접성이 완화될 수 있다. 즉, 라우팅이 링(404)에서 링(401)으로 전이되는데, 그 이유는 링(404)에서 목적지 쪽으로의 추가적인 전진이 행해질 수 없기 때문이다. 대안으로서, ID 201을 갖는 노드가 링(401)에서 ID 194를 갖는 노드의 이웃 내에 있고, 그 결과 추가적인 라우팅이 없을 수 있다. 따라서, 일부 실시예들에서, 추가적인 라우팅이 일어나도록 하기 위해서는, 그 다음 상위 링에 도달하기 위해 근접성 기준을 완화시키는 것으로 충분하다.
그러나, 다른 실시예들에서, 근접성 기준을 조금씩 완화시켜 그 다음 상위 링으로 전이하도록 하는 것은 추가적인 라우팅이 일어날 수 있을 때까지(또는 루트 링에 도달할 때까지) 계속된다. 즉, 추가적인 라우팅 전진이 행해질 수 있기 전에 상위 링들로의 복수의 전이가 일어난다. 예를 들어, 이제 도 5를 참조하면, 링(531)에서 추가적인 라우팅 전진이 행해질 수 없을 때, 링(511) 또는 심지어 루트 링(501)으로 전이하기에 충분할 정도로 근접성 기준이 완화될 수 있다.
노드 단계들(Node Phases)
연합 인프라에 참여하고 있는 노드는 여러 동작 단계로 동작할 수 있다. 노드에 대한 유효한 단계 값(phase value)은 순서 집합(ordered set)의 원소(member)로서 정의될 수 있다. 예를 들어, {NodeId}.{InstanceIds}.{단계 값 [단계-상태 값: 삽입, 동기화, 라우팅, 동작].[Phase.Unknown Indication: 전송 시에 알고 있는 단계, 전송 시에 모르는 단계]}은 연합 인프라 내의 주어진 노드의 단계-공간(phase-space)을 나타내는 한가지 가능한 순서 집합을 정의한다. 노드 인스턴스는 삽입에서 동기화, 라우팅을 지나 동작으로의 노드 단계-상태들을 거쳐 전이(즉, 전진)할 수 있다. 게다가, 일부 실시예들에서, 노드 인스턴스는 이전의 노드 단계-상태로 역으로 전이하지 못하도록 구성될 수 있다. 일부 실시예들에서, 노드는 승급할 때마다 그의 인스턴스 ID를 상승시킬 수 있다.
예를 들어, 노드 인스턴스는 라우팅에서 역으로 동기화로 (또는 역으로 삽입으로) 등으로 전이하지 못하게 되어 있을 수 있다. 그에 따라, 일부 실시예들에서, 주어진 노드 인스턴스(예를 들어, (NodeId, InstanceId)에 의해 식별됨)가 특정의 노드 단계-상태(예를 들어, 동작)로 승급되었음을 알고 있을 때, 주어진 노드 인스턴스가 이전의 노드 단계-상태로(예를 들어, 역으로 라우팅, 동기화, 또는 삽입으로) 되돌아갈 수 없음도 알고 있다(일부 실시예에서는 그렇지 않음). 따라서, 특정의 노드 단계-상태 이전의 노드 단계에 있는 노드 인스턴스가 노드의 새로운 (승급된) 인스턴스일 가능성이 상당하다.
일부 실시예들에서, 단계 정보 및 대응하는 인스턴스 Id(노드가 승급할 때 상승함)가 함께 전송된다. 따라서, 동일한 인스턴스에 대한 노드 단계-상태가 작을수록 오래된 것이라고 판정할 수 있다. 게다가, (임의의 단계-상태 값에서) 더 새로운 노드 인스턴스를 알고 있을 때, 이전의 인스턴스들에 관한 정보는 쓸모없는 것으로 간주된다.
때때로, 노드는, 예를 들어, 처음으로 기동할 때, 무리없는 탈퇴(graceful departure)를 통해, 또는 비정상 종료(고장)의 결과로서와 같이, 재부팅하거나 서로와의 통신을 상실할 수 있다. 따라서, 임의의 노드 단계-상태에 있는 노드가 재부팅하거나 다른 노드들과의 통신을 상실할 가능성이 있다. 예를 들어, 고장은 라우팅 단계-상태에 있는 노드로 하여금 재부팅하게 할 수 있다. 재부팅 또는 통신의 상실 동안에, 노드가 어느 노드 단계-상태에 있는지를 판정할 방법이 없을 수도 있다. 그에 따라, 노드가 재부팅하거나 노드와의 통신이 상실될 때, [Phase.Unknown Indication]가 노드의 단계-상태가 현재 알려져 있지 않음을 나타내도록 설정될 수 있다. 그러나, 노드에 대한 임의의 이전에 표현된 및/또는 검출된 단계-상태가 유지될 수 있고 상실되지 않는다.
[Phase.Unknown Indication]는 단계-상태 값이 전송되었을 때 단계-상태가 알려져 있었는지 여부(예를 들어, phase.unknown이 세트되지 않은 단계 값) 또는 단계-상태가 이전에 표현된 단계-상태이고 단계-상태가 전송되었을 때 단계-상태가 알려져 있지 않은지(예를 들어, phase.unknown이 세트되어 있는 단계 값)를 나타내는 데 사용될 수 있다. 따라서, 노드의 단계(그의 단계 값)는 단계-상태 값 및 phase.unknown indication 둘다를 사용하여 표현될 수 있다.
가입 프로토콜(Join Protocol)
때때로, 노드는 기존의 연합에 가입하고 그로부터 탈퇴할 수 있다. 노드들은 연합에 가입하고 그로부터 탈퇴하기 위해 적절한 프로토콜을 실행할 수 있다. 예를 들어, 노드는 기존의 연합의 일부가 되기 위해 Join() 함수를 실행할 수 있다. Join() 함수를 실행하는 노드는 최종적인 동작 단계-상태에 도달하기 전에 3개의 순서화된 단계-상태, 즉 삽입 단계-상태, 동기화 단계-상태, 및 라우팅 단계-상태를 통해 전이할 수 있다. 다른 실시예들에서, 이들 특정 순서의 단계-상태들이 존재하지 않을 수 있는 반면, 다른 것들이 정의될 수 있다. 도 12A는 노드가 연합 인프라 내에서 멤버쉽을 설정하는 것의 일례를 나타낸 것이다. 도 12B는 연합 인프라 내의 노드들이 메시지를 교환하는 것의 일례를 나타낸 것이다.
삽입 단계: 노드 Y는 가입 메시지(적어도 그의 노드 ID를 포함하고 연합에의 가입 행위를 나타냄)를 발행함으로써 이 단계-상태에 들어간다. 가입 메시지는 새로 가입하는 노드(노드 Y)에 의해 전송되는 라우팅된 메시지(그의 목적지 속성이 새로 가입하는 노드의 ID로 설정되어 있음)일 수 있다. 이 단계-상태에서, 새로 가입하는 노드는 연합 내에서 그의 선행 노드와 후속 노드 사이에 삽입된다. 삽입 단계-상태는 이하의 알고리즘에 따라 구현될 수 있다(모든 산술은 모듈로 bn으로 수행됨).
IP1. Y는 이미 최하위 링의 일부인 기존의 노드를 식별하며, 가입측 노드는 이 최하위 링으로부터 연합에 참여하고자 한다. 이것은 정적으로 구성되거나 DHCP 및/또는 DNS 및/또는 WS-Discovery 또는 (어쩌면 잘 알고 있는) 상수를 사용하여 동적으로 발견될 수 있다. 이 기존의 연합 노드를 E라고 하자.
IP2. Y는 노드 Y가 참여하고 있는 모든 근접 링에서 Y.id에 숫자상으로 가장 가까운 ID를 갖는 노드 X를 결정하기 위해 E.RouteNumerically(Y, joinMsg)를 호출한다. 이것은 가입 메시지를 다수의 노드로 라우팅하는 것을 포함할 수 있다.
IP3. 숫자상 후속 노드(s) 및 선행 노드(p)를 결정한다. (유의할 점은 이하의 삽입을 행하는 데 필요한 데이터가 가입 메시지 및 그의 응답으로 전달될 수 있다는 것이다. 그 자체로서, 부가의 왕복(roundtrip)이 필요하지 않다.)
사례 1: X.id > Y.id
Y.s = X, Y.p = X.p, X.p.s = Y, 그리고 X.p = Y
사례 2: X.id < Y.id
Y.p = X, Y.s = X.s, X.s.p = Y, 그리고 X.s = Y
가입 메시지에 응답하여, 노드 X(가입 메시지를 처리한 노드)는 가입 응답(join response)을 역으로 노드 Y로 전송할 수 있다. 가입 응답은 노드 Y에 대한 선행 노드(Y.p) 및 후속 노드(Y.s)를 알려줄 수 있다. 노드 Y는 가입 응답을 수신하고 그의 선행 노드 및 후속 노드를 알아내기 위해 가입 응답을 처리할 수 있다. 가입 응답을 처리한 후에, 노드 Y는 연합에의 약한 라우팅 참여자(weak routing participant)일 수 있다. 예를 들어, 노드 Y는 그에게로 전송된 메시지를 단순히 그의 후속 노드 또는 선행 노드로 전달할 수 있다. 따라서, 노드 Y가 연합 인프라에 삽입되지만 라우팅 테이블 및 이웃 테이블이 채워지지 않는다. 이 시점에 도달하기 이전에, 노드 Y는, 노드 Y의 생존 단계(liveness phase)가 삽입 단계-상태에 있음을 알려주는 상태 메시지를 전송측 노드로 답신함으로써, 자신에게 메시지를 전송하는 다른 노드들에 대해 자신에게 전송되는 메시지를 다른 노드를 통해 리디렉션하도록 요청한다.
일반적으로, 때때로, 노드들은 동기화 요청 및 응답 메시지를 교환할 수 있다. 동기화 요청 및 동기화 응답 메시지는 송신자의 관점에서 본 다른 노드들에 대한 생존 정보(예를 들어, 헤더)를 포함할 수 있다. 이웃 내의 애플리케이션 계층들이 서로의 상태를 알 수 있도록 이웃 상태도 동기화 요청 및 응답 메시지에 포함되어 있을 수 있다. 동기화 요청 및 응답 메시지가 교환될 때의 일례는 가입측 노드의 동기화 단계-상태 동안이다. 그러나, 동기화 요청 및 응답 메시지는 다른 동작 단계-상태 동안에도(예를 들어, Operating 단계-상태에 있는 동안에) 교환될 수 있다.
도 16은 메시지 모델 및 관련 처리 모델(1600)의 일례를 나타낸 것이다. 도 16에 도시한 바와 같이, 노드는 동기화 요청 메시지를 전송 및 수신할 수 있다. 예를 들어, 동기화 요청 메시지(1601)는 새로 삽입된 노드(예를 들어, ID 144를 갖는 도 12B의 노드)로부터 함수 계층(1651)에 수신될 수 있다. 애플리케이션 데이터(1602)(예를 들어, 네임스페이스 가입(namespace subscription))는 동기화 요청 메시지(1601)에 피기백될 수 있다. 함수 계층(1651)은 애플리케이션 계층(1652)에 동기화 요청 메시지에 포함된 임의의 애플리케이션 데이터를 알려줄 수 있다. 예를 들어, 함수 계층(1651)은 애플리케이션 데이터(1602)를 포함한 이웃 상태 동기화 이벤트(neighborhood state sync event)(1603)를 애플리케이션 계층(1652)으로 호출할 수 있다. 애플리케이션 데이터(1607)를 포함하는 동기화 요청(1631)도, 처리 모델(1600)에서의 동기화 요청(1601)에 대한 처리와 유사하게, 동기화 요청(1631)을 처리하는 다른 노드로 전송될 수 있다.
어떤 함수 계층 이벤트(예를 들어, 동기화 요청 메시지(1601), 동기화 응답 메시지(1641), 또는 핑 메시지(1612))에 응답하여, 함수 계층(1651)은 애플리케이션 계층(1652)에 있는 이웃 상태 요청 함수(1604)를 호출할 수 있다. 이웃 상태 요청(1604)은 이웃에서 전파될 필요가 있는 상태를 획득하기 위한 애플리케이션 계층에 대한 요청이다. 이웃 상태 요청(1604)에 응답하여, 애플리케이션 계층(1652)은 선택적인 애플리케이션 데이터(1607)를 포함하는 이웃 상태(1606)를 함수 계층(1651)에 제공할 수 있다. 대안으로서, 애플리케이션 계층(1652)은 어떤 애플리케이션 계층 이벤트에 응답하여 선택적인 애플리케이션 데이터(1607)를 포함하는 이웃 상태(1606)를 전송할 수 있다. 상기한 것과 유사한 내부 메커니즘을 사용하여, 함수 계층(1651)은 애플리케이션 계층 이웃 상태를 전파하기 위해 선택적인 애플리케이션 데이터(1607)를 포함하는 동기화 응답 메시지(1608)를 전송할 수 있다.
동기화 단계: 가입 응답 메시지를 처리한 후에, 노드 Y는 삽입 단계-상태에서 동기화 단계-상태로 전이한다. 동기화 단계-상태에서, 새로 삽입된 노드 Y는 이웃 내의 노드들과 정보를 동기화한다. 일반적으로, 노드 Y는 삽입 단계-상태에서 식별된 그의 선행 노드 및 후속 노드로 동기화 메시지를 전송할 수 있다. 동기화 메시지를 처리하는 이들 노드는 이들 처리 노드의 대응하는 이웃 및 라우팅 파트너 노드들을 알려주는 동기화 응답을 답신할 수 있다. 보다 구체적인 예에서, 동기화 단계-상태는 이하의 알고리즘에 따라 구현될 수 있다(모든 산술은 모듈로 bn으로 수행됨).
SP1. 노드 Y가 참여하고 있는 각각의 근접 링 내의 Neighborhood(Y.s) 노드 및 Neighborhood(Y.p) 노드의 합집합으로부터 Neighborhood(Y)를 계산한다. 합집합 계산은 다음과 같이 행해질 수 있다.
(sj, ..., s1, s, p, p1, ..., pk) (단, sj.s.id > (Y.id + u/2), j ≥ v/2-1, pk.p.id < (Y.id - u/2), 그리고 k ≥ v/2-1임)
SP2. 도 16을 간략히 참조하여, 선택적인 애플리케이션 관련 이웃 데이터(예를 들어, 애플리케이션 관련 데이터(1607))를 획득하기 위해 이웃 상태 요청(예를 들어, 이웃 상태 요청(1604))을 통해 Y의 로컬 애플리케이션 계층(예를 들어, 애플리케이션 계층(1652))에 질의를 한다.
SP3. Y의 관점에서 본 각각의 근접 이웃 및 라우팅 파트너 노드의 생존 상태 정보를 적어도 포함하는 동기화 메시지를 적어도 근접 후속 노드 및 선행 노드로 전송한다. SP2를 통해 액세스된 선택적인 애플리케이션 관련 이웃 데이터(예를 들어, 애플리케이션 데이터(1607))가 동기화 요청(1631)에 포함된다.
SP3. Y는 SP2에서 전송된 동기화 메시지를 처리하는 노드들로부터 역으로 동기화 응답 메시지를 수신한다. 예를 들어, 노드 Y는 그의 계산된 이웃 내의 하나 이상의 노드와 동기화 메시지(요청/응답)를 교환할 수 있다. 노드 Y의 이웃 노드들 중 적어도 하나 및 어쩌면 그 전부와 동기화 메시지가 교환된 후에, 계산된 이웃 노드들은 동기화된 데이터를 전파하기 위해 추가의 메시지들을 교환할 수 있다. 동기화 메시지(요청 또는 응답)는, 예를 들어, 노드의 이웃에 있는 타겟 노드와 그의 데이터를 사전 예방적으로 동기화하기 위해 노드에 의해 전송되는 비라우팅 메시지(non-routed message)일 수 있다.
SP4. SP3에서의 동기화 응답 메시지(예를 들어, 동기화 응답 메시지(1641))가 수신될 때, 이들 수신된 동기화 응답 메시지에 존재하는 임의의 선택적인 애플리케이션 관련 이웃 데이터(예를 들어, 애플리케이션 데이터(1622))가 이웃 상태 동기화 이벤트(1603)를 통해 Y의 애플리케이션 계층(1652)에 제공될 수 있다.
동기화 단계-상태의 일부로서, 근접 후속 노드(예를 들어, Y.s) 및 선행 노드(Y.p)는 그의 라우팅 테이블을 새로 삽입된 노드(예를 들어, Y)와 교환한다. 동기화 메시지를 수신하는 노드들은 동기화 응답을 전송하는 것으로 응답을 할 수 있다. 동기화 응답은 응답측 노드의 관점에서 볼 때를 제외하고 동기화 메시지와 유사한 데이터를 전달한다. 동기화 메시지 및 동기화 응답 둘다는 애플리케이션 데이터를 전달(즉, 피기백)할 수 있다. 따라서, 애플리케이션 데이터가 동기화 단계-상태 동안에 노드들 사이에서 전파될 수 있다. 동기화 단계-상태가 완료될 때, 노드는 자신에게로 보내진 메시지를 단순히 후속자 또는 선행자로 전달하는 대신에 그 메시지를 처리할 수 있다. 그러나, 이 노드는 여전히 약한 라우팅 참여자로 볼 수 있는데, 그 이유는 그의 라우팅 테이블이 채워지지 않기 때문이다.
라우팅 단계: 동기화 단계-상태가 완료된 후에, 노드는 라우팅 단계-상태로 전이한다. 라우팅 단계-상태에서, 새로 동기화된 노드(예를 들어, 노드 Y)는 그의 라우팅 노드를 계산한다. 라우팅 단계-상태는 이하의 알고리즘에 따라 구현될 수 있다(모든 산술은 모듈로 bn으로 수행됨).
RP1. 라우팅 단계-상태가 밸런싱 절차(balancing procedure)(나중에 설명됨)의 일부로서 실행되고 있는 경우, 후속 노드(Y.s) 및 선행 노드(Y.p)가 노드 Y가 참여하고 있는 모든 근접 링에 생존하고 있도록 보장한다. 어느 하나가 생존하지 않는 경우, 고려 중인 링 내의 이웃 노드들 중에서 그 다음으로 가장 나은 후속 또는 선행 노드를 선택함으로써 고장난 노드(들)에 대한 대체 노드를 결정한다.
RP2. 1 ≤ i ≤ n-1에 대해,
RP2a. z=Y.id ± bi를 계산한다.
RP2b. 링 d가 가장 특정적인 근접성을 갖지 않는 경우, 노드 Y가 참여하고 있고 조건 Y.sd.id < Y.id + bi < Y.sd+1.id 또는 Y.pd.id < Y.id - bi < Y.pd+1-id를 만족시키는 근접 링 d를 찾는다. 그렇지 않은 경우, 링 d를 가장 특정적인 근접 링으로 삼는다. 링 d는 노드 Y가 z에 가장 가까운 라우팅 파트너를 찾아야만 하는 근접 링이다. Q를 Y.sd.r±i와 Y.pd.r±i 사이에서 z에 가장 가까운 노드라고 하자. |Q.id-z|가 bi의 구성가능한 퍼센트(configurable percentage)(통상적으로 20%) 내에 있는 경우, 단순히 Y.r±i=Q이 되게 한다. Q.id가 (Y.sd.id ± bi) 또는 (Y.pd.id ± bi)보다 z에 더 가까운 경우, 이는 노드 Y가 Y.sd 또는 Y.pd보다 근접 링 d에서 노드 Q에 대한 더 나은 파트너 라우팅 노드라는 것을 의미한다. 따라서, updateMsg가 아직 전송되지 않은 경우 이를 노드 Q로 전송하고, 노드 Q가 노드 Y를 r-i에 있는 그의 파트너 라우팅 노드로서 설정할 수 있도록 i 및 노드 Y를 파라미터로서 제공한다.
RP2c. 이 단계-상태가 밸런싱 절차의 일부로서 실행 중인 경우 또한 Y.sd.r±i.id==Y.pd.r±i.id인 경우, (Y.sd.id ± bi)와 (Y.pd.id ± bi) 사이의 숫자 범위에 단지 하나의 노드가 있다. 그 노드는 후속 노드(또는 선행 노드)의 라우팅 노드 r±i가 가리키고 있는 것이다. 따라서, 단순히 Y.r±i = Y.sd.r±i·i가 되게 한다.
RP2d. 그렇지 않은 경우, 근접성 기준이 링 d의 근접성 기준으로 설정되어 있는 노드 Q에서 RouteProximally를 호출함으로써 라우팅 파트너 Y.r±i를 계산한다. 이것은 Y.r±i =Q.RouteProximally(z, updateMsg, d)을 의미한다.
RP3. 이 시점에서, 노드 Y는 자신에게로 보내지는 메시지를 처리할 수 있을 뿐만 아니라 메시지를 라우팅할 수도 있다.
RP4. 파트너 라우팅 노드의 종단점 ID에 대한 애플리케이션 계층으로부터 전송된 생존 통지 이벤트(liveness notification event)에 가입이 아직 행해지지 않은 경우, 이것을 행한다. 또한, 더 이상 파트너 라우팅 노드가 아닌 노드에 대한 애플리케이션 계층에서 이전에 설정된 임의의 생존 이벤트 가입을 취소한다. 예를 들어, 가입 및/또는 취소 요청이 대응하는 애플리케이션(예를 들어, 네임스페이스 애플리케이션)에 대한 pub-sub 논리를 구현하는 애플리케이션 계층(예를 들어, 애플리케이션 계층(121))으로 전달될 수 있다. 후속하는 애플리케이션 관련 생존 메시지(예를 들어, 네임스페이스 가입(namespace subscription)으로부터 발생되는 메시지)가 애플리케이션 계층에 수신될 때, 통지(이벤트)가 처리를 위해 다른 하위 계층들(예를 들어, 기타 하위 계층(131))로 밀려 내려갈 수 있다.
도 17은 함수 계층(1751)과 애플리케이션 계층(1752) 사이에서 일어날 수 있는 다수의 생존 상호작용의 일례를 나타낸 것이다. 도 17에 도시된 바와 같이, 종단점들은, 예를 들어, 여러가지 노드를 나타내는 게시/가입 토픽(publish/subscribe topics)(예를 들어, URL 또는 URI로 표현됨)이고, 예를 들어, 연합 인프라 노드일 수 있다. Subscribe To Liveness Event(1701)는 생존 이벤트에(예를 들어, 게시/가입 토픽에) 가입하기 위해 함수 계층(1751)으로부터 애플리케이션 계층(1752)으로 호출될 수 있다. Revoke Liveness Subscription(1702)는 생존 이벤트에의 가입을 취소하기 위해 함수 계층(1751)으로부터 애플리케이션 계층(1752)으로 호출될 수 있다. End Point Down(1703)은 종단점이 고장났을 수도 있다는 것을 알려주고 함수 계층(1751)에 선택적인 대체 종단점을 제공하기 위해 애플리케이션 계층(1752)으로부터 함수 계층(1751)으로 전송될 수 있다. End Point Down Event(1703)은 이전의 가입(예를 들어, Subscribe To Liveness Event(1701))에 기초하여 비동기적으로 전송될 수 있다.
Node Down(1704)은 함수 계층(1751)(또는 어떤 다른 하위 계층)이 고장난 노드를 검출하였음을 알려주고 선택적으로 애플리케이션 계층(1752)에 대체 노드를 제공하기 위해 함수 계층(1751)으로부터 애플리케이션 계층(1752)으로 호출될 수 있다. 애플리케이션 계층(1752)은 이어서 고장났을 수도 있는 노드가 검출되었음을 다른 이해 당사자들에게 전파할 수 있다. Node Down Event(1704)는 함수 계층(1751) 또는 어떤 다른 하위 계층이 고장났을 수도 있는 노드를 검출할 때 언제라도 비동기적으로 전송될 수 있다. Send Liveness(1706)는 애플리케이션 계층(1752)이 (예를 들어, Node Down Event(1704)로부터 또는 어떤 다른 대역외 메커니즘으로부터) 노드가 고장났음을 검출할 때 애플리케이션 계층(1752)으로부터 함수 계층(1751)으로 호출될 수 있다. Send Liveness Event(1706)는 함수 계층(1751)으로 하여금 생존 메시지를 전송하게 할 수 있다. Send Liveness Event(1706)는 또한 애플리케이션 계층(1752)이 노드가 고장났음을 검출할 때 언제라도 비동기적으로 호출될 수 있으며 (Subscribe To Liveness를 통해) 임의의 이전에 설정된 가입에 의존하지 않는다.
따라서, 일부 실시예들에서, 함수 계층(1751)은 재귀적으로 사용된다. 예를 들어, 함수 계층(1751)은 지정된 노드에의 관심(특정의 노드가 가동중인지 고장났는지)을 애플리케이션 계층(1752)에 알려줄 수 있다. 애플리케이션 계층(1752)은 지정된 노드에 관계된 통지를 위해 애플리케이션 관련 가입을 체계화할 수 있고 이어서 함수 계층(1751)을 재사용하여 체계화된 가입을 다른 연합 노드 내의 적절한 대응하는 애플리케이션 계층(1752) 인스턴스들에 전달할 수 있다. 예를 들어, 연합 노드 내의 애플리케이션 계층(1752)이 네임스페이스 pub/sub 거동을 구현한 경우, 함수 계층(1751)은 이 가입을 지정된 노드에 대한 통지를 관리하는 게시/가입 관리자에게 라우팅할 수 있고, 이 pub/sub 관리자는 관계된 연합 노드 내의 애플리케이션(1752)의 적어도 일부로서 구현된다. 그에 따라, 함수 계층(1751)은 함수 계층(1751)에 의해 발생된 가입을 라우팅하는 데 사용된다. 유사한 재귀적 메커니즘은 또한 가입 취소를 하거나 다른 방식으로 지정된 노드에 더 이상 관심이 없음을 알려주기 위해 사용될 수 있다.
동작 단계: 라우팅 단계-상태가 완료된 후에, 노드는 동작 단계-상태(operating phase-state)로 전이한다. 노드는 고장날 때까지(예를 들어, 재부팅할 때까지) 동작 단계-상태에 있을 수 있다. 동작 단계-상태에서, 노드는 때때로 라우팅 파트너들에게 업데이트 메시지를 전송할 수 있다. 업데이트 메시지(업데이트 요청 및 업데이트 응답 둘다)는 전송측 노드에 대한(예를 들어, 관심의 모든 근접 이웃에 대한) 이웃 노드 생존 정보를 포함할 수 있다. 이 전송된 생존 정보는 또한 송신자의 생존 정보도 포함할 수 있다. 업데이트 메시지는 노드들이 그의 라우팅 파트너 노드들을 주기적으로 업데이트하기 위해 발신한 라우팅 메시지(routed message)일 수 있다. 애플리케이션 데이터는 라우팅 파트너 업데이트 동안에 전파될 수 있도록 업데이트 메시지에 피기백될 수 있다. 메시지 목적지는 원하는 라우팅 인덱스에 있는 완전한 라우팅 파트너의 ID로 설정된다. 이 메시지의 메시지 ID 속성은 이 메시지를 처리하는 노드(들)가 마지막 메시지를 판정할 수 있도록 하기 위해 애플리케이션 순서 번호를 할당받으며, 이 메시지는 근접 라우팅된다.
업데이트 메시지를 수신하는 노드는 업데이트 응답으로 응답할 수 있다. 업데이트 응답은 데이터가 응답측 노드의 관점에서 본 것임을 제외하고는 업데이트 메시지와 동일한 데이터를 전달한다. 업데이트 메시지 및 업데이트 응답의 교환을 통해, 노드들은 라우팅 정보를 교환할 수 있다. 때때로, 동작 노드는 라우팅 파트너를 업데이트할 수 있다.
때때로, 동작 노드는 또한 핑 메시지(예를 들어, 핑 메시지(1609, 1611))도 전송할 수 있다. 핑 메시지는 노드가 자신의 존재를 주기적으로 알리고 그의 이웃/라우팅 노드에 관한 정보를 그의 이웃 내에서 배포하며 애플리케이션 데이터를 복제(예를 들어, 피기백)하기 위해 전송하는 단방향 메시지이다.
발신 노드는 그의 직속 선행 및 후속 이웃 노드들 중 하나 이상으로 핑 메시지를 전송할 수 있다. 따라서, 핑 분포 패턴(즉, 어느 노드가 핑 메시지를 전송받았는지)에 따라, 발신 노드에 관계된 정보가 발신 노드의 이웃 내에 있는 링 상의 다른 노드들로 전파된다. 예를 들어, 발신 노드는 그의 직속 선행 및 후속 노드에게만 핑 메시지를 전송할 수 있고, 핑 메시지는 발신 노드의 위치(노드 ID)로부터 바깥쪽으로 링을 따라 양방향으로 발신지의 이웃의 경계까지 전파된다. 대안으로서, 발신지 노드는 그의 이웃 내에서 그의 선행자 및 후속자 방향 둘다에서 매 n번째 노드로 핑 메시지를 전송할 수 있다.
핑 메시지를 수신하는 각각의 노드는 이웃 범위 관점에서 본 발신지 노드에의 그의 관심을 검사한다. 관심이 없는 경우, 노드는 핑 메시지를 폐기한다. 관심이 있는 경우, 노드는 핑 메시지를 처리하고 이러한 전달이 발신측 노드의 이웃으로 제약되어 있는 경우 그의 지정된 핑 패턴에 따라 핑 메시지를 전달한다. 예를 들어, 핑 메시지를 처리한 후에, 수신측 노드는 송신측 및 발신지 노드가 그의 선행 노드 세트 내에 있는 경우 핑 메시지를 적어도 그의 후속 노드로 또는 송신측 및 발신지 노드가 그의 후속 노드 세트 내에 있는 경우 적어도 그의 선행 노드로 전달할 수 있다.
따라서, 핑 메시지의 외부 전파는 메시지가 발신지 노드 근방의 이웃 노드의 경계에 도달할 때 중단된다. 핑 메시지의 메시지 ID 속성은 이 메시지를 처리하는 노드가 발신지 노드로부터의 마지막 메시지를 판정하여 중복 처리 또는 불필요한 전달을 피할 수 있도록 하기 위해 애플리케이션 순서 번호를 할당받는다.
다시 도 16을 참조하면, 핑 메시지(1609)가 이웃 노드로부터 함수 계층(1651)에 수신될 수 있다. 애플리케이션 데이터(1612)(예를 들어, 네임스페이스 가입)가 핑 메시지(1609)에 피기백될 수 있다. 함수 계층(1651)은 핑 메시지에 포함된 임의의 애플리케이션 데이터를 애플리케이션 계층(1652)에 알려줄 수 있다. 유사하게, 함수 계층(1651)은 동기화 요청 메시지에 포함된 임의의 애플리케이션 데이터를 애플리케이션 계층(1652)에 알려줄 수 있다. 이들 전송 사례 둘다는 애플리케이션 데이터(1612)를 포함하는 이웃 상태 동기화 이벤트(1603)를 애플리케이션 계층(1652)으로 전송하는 것을 통해 달성될 수 있다.
어떤 함수 계층 이벤트(예를 들어, 수신된 핑 메시지(1609))에 응답하여, 함수 계층(1651)은 이웃 상태 요청(1604)을 애플리케이션 계층(1652)으로 전송할 수 있다. 이웃 상태 요청(1604)은 이웃에서 선택적으로 전파될 필요가 있는 상태를 획득하기 위해 애플리케이션 계층(1652)에서 호출된다. 이웃 상태 요청(1604)에 응답하여, 애플리케이션 계층(1652)은 선택적인 애플리케이션 데이터(1607)를 포함하는 이웃 상태(1606)를 함수 계층(1651)으로 답신할 수 있다. 함수 계층(1651)은, 이웃 및 라우팅 파트너 노드 생존 정보는 물론 선택적인 애플리케이션 계층 이웃 상태를 전파하기 위해, 선택적인 애플리케이션 데이터(1607)를 포함하는 핑 메시지(1611)를 전송할 수 있다. 함수 계층(1651)은 또한 애플리케이션 상태를 전파하기 위해 선택적인 애플리케이션 데이터(1607)를 포함하는 동기화 응답(1608)을 전송할 수 있다.
탈퇴 프로토콜( Departure Protocol )
노드가 연합으로부터 탈퇴하는 것이 적절한 경우, 노드는 연합으로부터 무리없이 제거되기 위해 Depart 함수를 실행할 수 있다. 노드는 그의 직속 근접 선행 노드 및 후속 노드와 아마도 동일한 근접 이웃 내의 다른 노드들 중 하나 이상에 탈퇴 메시지를 전송함으로써 기존의 연합을 탈퇴한다. 따라서, 탈퇴 분포 패턴(즉, 어느 노드가 탈퇴 메시지를 전송받는지)에 따라, 탈퇴측 노드에 관계된 정보가 탈퇴측 노드의 이웃 내의 링 상의 다른 노드들로 전파된다. 탈퇴 메시지는 무리없이 탈퇴하는 노드가 그의 임박한 탈퇴에 관하여 그의 근접 이웃들 중 적어도 하나의 이웃 내의 하나 이상의 다른 노드들에 알려주기 위해 발신하는 단방향 메시지이다. 탈퇴측 노드는 핑 메시지의 전파와 유사한 방식으로 (예를 들어, 그의 이웃 내에서) 탈퇴 메시지를 전파한다. 예를 들어, ID 30을 갖는 노드는 ID 17 및 40을 갖는 노드로 탈퇴 메시지(1219)를 전송할 수 있다. ID 30을 갖는 노드는 이어서 주어진 근접 링의 관점에서 볼 때 그 자신을 연합 인프라로부터 제거할 수 있다. 유의할 점은 노드가 그 자신을 하나의 근접 이웃으로부터 제거할 수 있지만 그가 속해 있을 수도 있는 다른 근접 이웃들로부터는 제거하지 못할 수도 있다는 것이다.
ID 30을 갖는 노드가 제거된 후에 ID 17 및 40을 갖는 노드(즉, 선행 노드 및 후속 노드)가 ID 30에 가장 가까운 노드일 수 있기 때문에, ID 17 및 40을 갖는 노드는 ID 30을 갖는 노드의 탈퇴를 알게 된다. 따라서, ID 30으로 전달되는 장래의 메시지는 ID 17 및 40을 갖는 노드에서 적절히 처리될 수 있다. ID 17 및 40을 갖는 노드는 ID 30을 갖는 노드의 탈퇴를 링(1206) 상의 나머지 노드들로 전파할 수 있다. ID 30을 갖는 노드가 없는 경우, ID 17 및 40을 갖는 노드는 또한 어쩌면 서로를 가리키고 있을 선행자 포인터 및 후속자 포인터를 재계산할 수 있다.
탈퇴 메시지의 메시지 ID 속성은, 탈퇴 메시지를 처리하는 노드가 발신지 노드에 의해 전송된 일련의 핑 및 탈퇴 메시지 중에서 마지막 메시지를 판정할 수 있게 하기 위해, 핑 메시지의 것과 동일한 동일한 애플리케이션 순서 ID를 할당받는다. 연합 근접 링으로부터의 무리없는 탈퇴는 선택적이지만 권장된다. 그러나, 연합은 노드가 갑자기 탈퇴하는 경우 자체-치유(self-heal)하도록 설계되어 있다.
생존(Liveness)
연합의 수명 동안에, 노드들은 연합을 유지하기 위해 생존 정보를 교환할 수 있다. 생존 정보는 생존 메시지 헤더의 형태로 연합 내에서 교환되는 거의 모든 메시지에 포함될 수 있다. 예를 들어, 가입 메시지, 가입 응답, 동기화 메시지, 동기화 응답, 업데이트 메시지, 업데이트 응답, 애플리케이션 관련 메시지, 생존 메시지, 및 핑 메시지는 모두 생존 정보 헤더를 포함할 수 있다. 연합 노드가 임의의 메시지 또는 응답을 전송할 때, 노드는 다른 노드들에서 처리하기 위한 생존 정보를 포함할 수 있다. 생존 정보는 생존 메시지의 생존 정보 헤더에 포함될 수 있다.
노드의 생존 상태를 알려주는 생존 정보는 이하의 속성들을 사용하여 표현될 수 있다.
[Node]: 표현되고 있는 생존 상태를 갖는 노드를 식별한다. 노드는 [Instance ID]를 더 포함하는 [Reference Properties]에 기초하여 식별될 수 있다.
[Reference Properties]: WS-addressing 규격에 규정되어 있는 엘리먼트 정보 항목. WS-addressing는 참조 속성 세트(reference property set)에 포함하기 위한 [Instance ID] 참조 속성을 정의한다.
[Instance ID]: 노드의 특정의 인스턴스를 식별하는 숫자. 노드의 인스턴스 ID로서 점증하는 부트 카운트(boot count)가 사용될 수 있다.
[Phase]: 식별된 노드의 단계를 전달한다.
[Phase-State Value] 표시된 노드 인스턴스가 달성한 것으로 알려져 있는 최상의 단계-상태(삽입, 동기화, 라우팅, 동작)를 전달한다.
[Phase.Unknown Indication] 현재의 상태가 알려져 있는지 그렇지 않은지를 전달하는 표시자.
[Freshness]: 정보의 신선도를 전달하며 그의 값은 0에서 MaxFreshness까지의 범위에 있다. 이 값이 높을수록, 정보가 더 신선하며, 0은 정보가 없음을 의미하고 MaxFreshness는 프로토콜 정의 상수이다.
[Color]: 노드가 속해 있는 근접성 등가 클래스(proximity equivalence class)를 식별한다. 동일한 컬러 값을 갖는 2개의 노드는 항상 근접성 측면에서 가장 가까운 것으로 간주되는데, 그 이유는 이들 둘다가 컬러 값에 의해 식별되는 동일한 등가 클래스에 속하기 때문이다. 더 많은 노드가 연합에 가입함에 따라, 근접성 등가 클래스의 수는 시간의 경과에 따라 증가할 수 있다.
[Weight]: 노드 능력 메트릭(node capability metric)을 제공하며 그의 값은 0에서 Max Weight까지의 범위에 있다. 이는 큰 계산 능력, 높은 네트워크 대역폭 및 긴 가동시간 등의 연합 노드의 바람직한 특성을 측정한다. 이 값이 높을수록, 노드는 파트너쉽 관점에서 볼 때 더 바람직하게 될 수 있다.
일부 환경들에서, 노드의 [Node] 및 [Freshness] 속성은 [Origin] 및 [Sender] 메시지 헤더와 같이 더 큰 범위로 암시적으로 또는 명시적으로 전달되며, 그 자체로서 상기한 특성들을 생존 헤더에 다시 포함시키는 것을 중복적이게 된다. 예를 들어, 메시지의 송신자는 그의 현재의 단계, 컬러 및 가중치 정보를 전달하기만 하면 되는데, 그 이유는 그의 ID, 인스턴스 ID가 메시지 어드레싱 헤더로 전달되고 그의 신선도(Freshness)가 암시되기 때문이다.
생존 상태는 다음과 같이 정의된 "<" 이진 관계에 기초하여 적어도 부분적으로 순서화될 수 있다.
1. "Ll.[Node].[Name] == L2.[Node].[Name]"이 참이고 이하의 것들 중 하나가 참이며(열거된 순서로 테스트가 수행되고 단락됨)
● L1.[Node].[Reference Properties].[Instance ID] <
L2.[Node].[Reference Properties].[Instance ID]
● Ll.[Phase.Unknown Indication] != true AND L2.[Phase.Unknown
Indication] != true AND Ll.[Phase-State] < L2.[Phase-State]
● Ll.[Freshness] < L2.[Freshness]
2. 또는 "Ll.[Color] = L2.[Color]"가 참이고 이하의 것들 중 하나가 참이며(열거된 순서로 테스트가 수행되고 단락됨)
● Ll.[Phase-State] < L2.[Phase-State]
● Ll.[Weight] < L2.[Weight]
인 경우에, "L1 < L2"는 참이다.
게다가, 지정된 노드가 이용가능하지 않은(예를 들어, 고장난) 것으로 검출되거나 의심될 때 생존 "고장" 메시지가 지정된 노드로 전송될 수 있다. 일례로서, 애플리케이션 계층(예를 들어, 애플리케이션 계층(121))이 다른 애플리케이션 계층(예를 들어, 애플리케이션 계층(123)) 또는 그 다른 애플리케이션 계층을 호스팅하는 노드가 고장났음을 검출할 때, 검출측 애플리케이션 계층은, 예를 들어, 메시지 모델 및 관련 처리 모델(1600 및/또는 1700)에 따라, 노드가 고장났을 수도 있다는 것을 기타 하위 계층들(예를 들어, 기타 하위 계층들(131))에 통지할 수 있다. 이러한 통지에 의해 기타 하위 계층들(예를 들어, 함수 계층(1651) 등)은 생존 고장 메시지를 전송할 수 있다. 이것은 생존 고장 메시지를 발생하는 자극의 일례에 불과하다.
생존 고장 메시지가 라우팅되고 따라서 고장난 것으로 의심되는 그 노드들에 가장 가까운 노드로 전달되기 때문에, 지정된 노드에 대한 생존 고장 메시지가 역으로 지정된 노드로 전달되는 경우, 지정된 노드가 결코 고장나지 않았거나 지정된 노드가 (예를 들어, 다른 인스턴스 ID를 갖는) 다른 인스턴스이다. 반면에, 생존 고장 메시지가 다른 노드로 전달되는 경우, 이는 지정된 노드가 고장난 것으로 보이지 않는다는 것을 나타낸다. 그에 따라, 생존 고장 메시지를 수신하는 노드가 그 자신을 지정된 노드의 근접 이웃 내에 있는 것으로 보는 경우, 그 노드는 상기한 바와 같이 지정된 노드에 대한 탈퇴 메시지를 그 근접 이웃 내로 제공할 수 있음은 물론 (예를 들어, Node Down(1704)을 사용하여) 지정된 노드가 고장났을 수도 있다는 것과 수신측 노드가 그의 대체물이라는 것을 그의 애플리케이션 계층에 알려줄 수 있다. 지정된 노드에 대한 생존 고장 메시지는 그의 타겟 ID가 고장났을 수도 있는 노드의 ID로 설정된 상태로 근접 라우팅될 수 있다.
밸런싱 절차(Balancing Procedure)
본 발명의 실시예들은 많은 수의 노드들이 짧은 기간 내에 연합에 가입하고 연합을 탈퇴하는 것을 수용하도록 설계되어 있다. 다양한 노드에 유지되는 로그 검색 트리(logarithmic search tree)가 불균형(unbalanced)되어 있는 경우, 즉, 링의 한쪽에 다른 쪽보다 더 많은 노드가 있는 경우, 네트워크에서의 이러한 변화는 라우팅 지연을 야기할 수 있다. 최적의 라우팅 효율을 용이하게 하기 위해, 연합에 참여하는 노드들은 어떤 기준이 충족될 때 밸런싱 절차를 실행한다.
예를 들어, 이하의 조건들 중 임의의 것이 참일 때, 최적의 라우팅 효율을 위한 균형된 라우팅 테이블(balanced routing table)을 보장하기 위해 어느 노드라도 밸런싱 절차를 실행할 수 있다.
● 상기한 구성된 수의 생존 메시지가 수신되었다.
● 상기한 마지막 생존 메시지의 수신 이후에 구성된 시간이 경과하였다.
● 어떤 새로운 노드가 도착했거나 어떤 기존의 노드가 탈퇴했다는 의미에서 이웃이 변화되었다.
라우팅 테이블을 밸런싱하는 것은 간단한 프로세스이다. 예를 들어, 불균형 라우팅 테이블(unbalanced routing table)을 갖는 노드는 가입 프로토콜의 동기화 및 라우팅 단계-상태를 재실행할 수 있다.
동작(RP2b, RP2d 및 RP4)이 1) 숫자에 가장 가까운 라우팅 노드를 찾는 것, 2) 무리없이 연합을 탈퇴하는 노드에 의해 준수되는 탈퇴 프로토콜, 및 3) 생존 메시지를 수신하는 노드에 의해 준수되는 밸런싱 절차와 결합되면, 그 결과 연합 노드들이 아주 신속하게 대량으로 네트워크에 가입하고 그로부터 탈퇴할 때 더 빠른 치유 시스템이 얻어진다.
상태 메시지
상태 메시지는 송신자 노드가 이전에 수신자 노드로 전달한 관련 메시지의 라우팅 성공/실패를 알려주기 위해 수신자 노드에 의해 송신자 노드로 전송되는 비라우팅 메시지(non-routed message)이다. 도 18은 요청-응답 메시지 교환 패턴의 일부를 형성하는 메시지가 어떻게 링 상의 노드들에 걸쳐 라우팅되는지의 일례를 나타낸 것이다. 상태 메시지는 보고되는 라우팅 상태를 갖는 원래의 관련 메시지를 식별하는 헤더를 포함할 수 있다. 그 자체로서, 상태 메시지는 메시지가 한 노드에서 그 다음 노드로 성공적으로 라우팅되었는지를 알려주기 위해 노드들 사이에서 사용될 수 있다. 예를 들어, 요청 메시지(1811)를 노드(1801)로부터 노드(1806)로 라우팅하는 것은 요청(1811)을 노드(1802, 1803, 1804, 1805)를 통해 전송하는 것을 포함한다. 대응하는 연속적인 성공 상태 메시지(상태(1817, 1818, 1819, 1820, 1821))가 각각 노드(1806)에서 노드(1805)로, 노드(1805)에서 노드(1804)로, 노드(1804)에서 노드(1803)로, 노드(1803)에서 노드(1802)로, 또한 노드(1802)에서 노드(1801)로 전송될 수 있다. 요청(1811)에 응답하여, 응답(1816)이 노드(1807)에서 노드(1801)로 엔드-투-엔드로 전송될 수 있다. 응답(1816)은 선택적이고 단방향 메시지 교환 패턴에서는 존재하지 않을 수 있다.
도 13은 노드가 연합 인프라에 가입하는 방법(1300)의 흐름도의 일례를 나타낸 것이다. 방법(1300)은 도 12A 및 도 12B의 링(1206)과 관련하여 설명될 것이다. 방법(1300)은 연합 인프라에 가입 메시지를 발행하는 동작(동작 1301)을 포함한다. 예를 들어, ID 144를 갖는 노드는 링(1206)을 포함하는 연합 인프라에의 가입(1201)을 발행할 수 있다. 방법(1300)은 가입측 노드로부터 가입 메시지를 수신하는 동작(동작 1308)을 포함한다. 예를 들어, 링(1206)을 포함하는 연합 인프라 내의 기존의 노드는 가입(1201)을 수신할 수 있다.
방법(1300)은 가입 메시지를 처리 노드로 라우팅하는 동작(동작 1309)을 포함한다. 처리 노드는 가입 메시지가 라우팅되고 있을 때 연합 인프라 내의 다른 활성 노드들보다 가입 노드의 ID에 숫자상으로 더 가까운 ID를 갖는 노드일 수 있다. 예를 들어, 가입(1201)은 처음에 ID 64를 갖는 노드에 수신되고, ID 135를 갖는 노드로 라우팅되며, ID 151을 갖는 노드로 라우팅될 수 있다.
방법(1300)은 가입측 노드에 대한 하나 이상의 선행 노드 및 하나 이상의 후속 노드를 계산하는 동작(동작 1310)을 포함한다. 예를 들어, ID 151을 갖는 노드는 ID 144를 갖는 노드에 대한 직속 선행 노드 및 직속 후속 노드를 계산할 수 있다. 링(1206) 내에서, ID 151을 갖는 노드는 ID 135를 갖는 노드가 직속 선행 노드이고 ID 151을 갖는 노드가 직속 후속 노드라고 계산할 수 있다. 다른 근접 링들에 대해 유사한 계산이 행해질 수 있다.
방법(1300)은 가입측 노드에 대한 하나 이상의 라우팅 노드를 계산하는 동작(동작 1311)을 포함한다. 예를 들어, ID 151을 갖는 노드는 ID 144를 갖는 노드에 대한 (ID 151을 갖는 노드의 관점에서 본) 라우팅 노드들을 계산할 수 있다. 링(1206) 내에서, ID 151을 갖는 노드는, 예를 들어, ID 218 및 40을 갖는 노드가 ID 144를 갖는 노드에 대한 라우팅 노드인 것으로 계산할 수 있다. 다른 근접 링들에 대해서도 유사한 계산이 행해질 수 있다.
방법(1300)은 가입 응답을 가입측 노드로 전송하는 동작(동작 1312)을 포함한다. 가입 응답은 연합 인프라의 현재의 뷰가 주어진 경우 처리 노드에 의해 계산되는 가입측 노드에 대한 모든 선행 및 후속 이웃 및 라우팅 파트너 노드를 식별할 수 있다. 예를 들어, 가입 응답(1202)은 적어도 ID 135를 갖는 노드를 ID 144를 갖는 노드에 대한 직속 선행 노드로서 식별할 수 있고, ID 151을 갖는 노드를 ID 144를 갖는 노드에 대한 직속 후속 노드로서 식별할 수 있으며, ID 144를 갖는 노드(새로 가입하는 노드)에 대해 ID 151을 갖는 노드에서 계산된 (ID 144를 갖는 노드에 대한) 임의의 라우팅 노드들을 식별할 수 있다.
방법(1300)은 가입 메시지를 처리한 연합 노드로부터 가입 응답을 수신하는 동작(동작 1302)을 포함한다. 예를 들어, ID 144를 갖는 노드는 ID 151을 갖는 노드로부터 가입 응답(1202)을 수신할 수 있다.
방법(1300)은 적어도 직속 근접 선행 노드 및 직속 근접 후속 노드 각각으로 동기화 요청을 전송하는 동작(동작 1303)을 포함한다. 예를 들어, 이제 도 12B를 참조하면, ID 144를 갖는 노드는 ID 135 및 151을 갖는 노드들로 동기화 요청(1203)을 전송할 수 있다. 동기화 요청(1203)은 ID 144를 갖는 노드의 임의의 이웃 노드들의 ID(identification) 및/또는 ID 144를 갖는 노드의 임의의 라우팅 파트너들의 ID를 포함할 수 있다.
ID 135 및 151을 갖는 노드들은 동기화 요청(1203)을 수신할 수 있다. 동기화 요청(1203)을 수신한 것에 응답하여, ID 135 및 151을 갖는 노드들은 대응하는 라우팅 테이블로부터 그의 이웃 및 라우팅 파트너 노드를 식별할 수 있다. ID 135 및 151을 갖는 노드들은 그의 식별된 이웃 및 라우팅 파트너 노드의 생존 정보를 동기화 응답(1204)에 포함시키고 이 동기화 응답(1204)을 ID 144를 갖는 노드로 전송할 수 있다.
방법(1300)은 근접 선행 및 후속 노드 각각으로부터 동기화 응답을 수신하는 동작(동작 1304)을 포함한다. 예를 들어, ID 144를 갖는 노드는 ID 135 및 151을 갖는 노드들로부터 동기화 응답(1204)을 수신할 수 있다. 동기화 응답(1204)은 링(1206) 또는 연합 인프라 내의 다른 링들 상의 하나 이상의 노드에 대한 생존 정보를 포함할 수 있다. 동기화 응답(1204)은 또한 ID 144를 갖는 노드에 대한 가능한 라우팅 파트너 노드들을 식별할 수 있다.
방법(1300)은 이웃 노드들을 계산하는 동작(동작 1305)을 포함한다. 예를 들어, ID 144를 갖는 노드는 ID 135 및 151을 갖는 노드들에 대한 이웃 노드들의 합집합에 기초하여 대응하는 이웃 노드들을 계산할 수 있다. 이웃 노드들은 가입 응답 메시지 및 임의의 동기화 응답 메시지들의 요약된 뷰에 기초하여 계산될 수 있다.
방법(1300)은 라우팅 노드들을 계산하는 동작(동작 1306)을 포함한다. 예를 들어, ID 144를 갖는 노드는 링(1206)의 노드들 중에서 라우팅 노드들을 계산할 수 있다. 라우팅 파트너들은 가입 응답 메시지 및 임의의 동기화 응답 메시지들의 요약된 뷰에 기초하여 계산될 수 있다.
방법(1300)은 적어도 이웃 노드 정보를 계산된 라우팅 파트너들과 교환하는 동작(동작 1307)을 포함한다. 예를 들어, ID 144를 갖는 노드 및 ID 218을 갖는 노드(계산된 라우팅 파트너)는 그 각자의 이웃 노드들에 대응하는 상태 정보(예를 들어, 인스턴스 ID, 단계-상태, 기타)를 교환할 수 있다. 이들 교환은 새로 가입하는 노드가 상기 라우팅 단계-상태 설명에서 기술한 바와 같이 적어도 각각의 고유의 계산된 라우팅 파트너로 업데이트 메시지를 발신(라우팅)하는 것에 의해 달성된다. 업데이트 메시지를 처리하는 노드는 새로 가입하는 노드로부터 이들 업데이트 메시지를 수신한 것에 응답하여 대응하는 업데이트 응답 메시지를 전송한다. 업데이트 응답은 적어도 그 자신 및 그의 이웃 노드들에 대한 생존 정보를 포함한다.
방법(1300)은 또한 적어도 하나의 이웃 노드로 라우팅 테이블들의 초기 전파를 개시하는 동작도 포함할 수 있다. 예를 들어, ID 144를 갖는 노드는 계산된 이웃 및 라우팅 파트너 노드들을 핑 메시지에 포함시키고 이 핑 메시지를 ID 174를 갖는 노드(예를 들어, 계산된 이웃 노드들 중 하나)로 전송할 수 있다. ID 174를 갖는 노드는 핑 메시지를 수신하고 ID 144를 갖는 노드에서 발신된 생존 정보로 대응하는 라우팅 테이블을 업데이트한다. ID 174를 갖는 노드는 또한 그의 대응하는 라우팅 테이블을 제2 핑 메시지에 포함시키고 이 제2 핑 메시지를 어떤 장래의 시점에서 ID 144를 갖는 노드로 전송할 수 있다. ID 144를 갖는 노드는 제2 핑 메시지를 수신할 수 있고 제2 핑 메시지에 포함된 생존 정보 내의 노드들(즉, ID 174를 갖는 노드의 라우팅 테이블 내의 노드들)로 그의 대응하는 라우팅 테이블을 업데이트할 수 있다. ID 144를 갖는 노드는 링(1206) 내의 다른 이웃 노드들에 대해 핑 메시지를 전송하는 것을 반복할 수 있다.
새로 가입하는 노드가 연합에 가입할 때, 새로 가입하는 노드가 기존의 연합 멤버를 찾을 수 없을 수도 있으며 따라서 유일한 멤버가 된다는 것을 잘 알 것이다. 따라서, 새로 가입하는 노드에 대해 할당된 선행, 후속, 또는 이웃 노드가 없을 수도 있다. 그에 따라, 새로 가입하는 노드는 모든 경우에 최상의 라우팅 파트너로서 매핑된다.
게다가, 방법(1300)이 단일의 링(링(1206))과 관련하여 기술되어 있지만, 일부 실시예들에서, 하나의 링에 가입하는 노드가 본질적으로 하나 이상의 다른 링들에도 가입하고 있다는 것을 잘 알 것이다. 예를 들어, 다시 도 5를 간략히 참조하면, 링(551)에 가입하는 노드는 본질적으로 링(543, 531, 522, 511, 501)에도 가입하고 있다. 따라서, 방법(1300)은 복수의 링에 가입하도록 구현될 수 있다. 다른 실시예들에서, 다수의 링에 가입할 때, 방법(1300)에서의 동작들 중 일부 또는 그 전부가 반복될 수 있다. 예를 들어, 도 5를 다시 참조하면, 노드가 링(551) 및 링(514) 둘다(예를 들어, 별칭 설정)에 가입할 때, 방법(1300)의 동작들 중 하나 이상이 반복될 수 있다. 어쨋든, 가입측 노드 ID가 액세스되어 정렬된 연결 리스트는 물론 가입측 노드가 참여하게 될 대응하는 계층적으로 분할된 서브리스트에서 가입측 노드를 식별하는 데 사용될 수 있다. 수신측 노드는 정렬된 연결 리스트 및 각각의 분할된 서브리스트로부터 식별된다. 가입 메시지는 정렬된 연결 리스트 및 각각의 분할된 서브리스트 내의 처리 노드(예를 들어, ID에 기초함)로 라우팅된다. 가입 응답은 정렬된 연결 리스트 및 각각의 분할된 서브리스트 내의 처리 노드로부터 수신된다.
도 14는 노드가 연합 인프라에서 멤버쉽을 유지하는 방법(1400)의 흐름도의 일례를 나타낸 것이다. 방법(1400)은 링(1206)과 관련하여 설명될 것이다. 방법(1400)은 제1 핑 메시지를 이웃 노드로 전송하는 동작(동작 1401)을 포함한다. 제1 핑 메시지는 제1 핑 메시지를 전송하는 현재의 노드가 이웃 노드의 이웃임을 알려준다. 제1 핑 메시지는 또한 현재 노드의 라우팅 파트너 및 이웃 노드의 상태도 포함할 수 있다. 예를 들어, ID 144를 갖는 노드는 핑 메시지를 ID 151을 갖는 노드로 전송할 수 있다. 제1 핑 메시지를 수신할 시에, ID 151을 갖는 노드는 ID 144를 갖는 노드가 ID 151을 갖는 노드의 이웃임을 알게 된다. 노드(151)는 또한 이 동작의 부수 효과로서 노드(144)로부터 (링(1206) 상의 다른 노드들에 대한) 더 새로운 생존 정보를 발견할 수 있다.
핑 메시지는, 예를 들어, 핑 메시지가 전송되어 들어갈 근접 링과 연관된 구성 상태에 기초하여 지정된 빈도수로 주기적으로 반복될 수 있다. 이 빈도수는 구성 상태에 따라 변화될 수 있다. 예를 들어, WAN에 대한 지정된 핑 빈도수는 LAN에 대한 지정된 빈도수와 다를 수 있다. 핑 메시지는 또한 핑 분포 패턴에 따라 전송될 수 있다. 발신측 노드에 대한 핑 분포 패턴은 핑 메시지가 링 상에서 양 방향으로 이웃 노드들로 전송될 것임을 나타낼 수 있다. 예를 들어, ID 144를 갖는 노드는 ID 135를 갖는 노드의 방향과 ID 151을 갖는 노드의 방향 둘다로 핑을 전송할 수 있다. 핑 분포 패턴 및 빈도수는, 예를 들어, 근접 링마다 변화될 수 있다.
방법(1400)은 이웃 노드로부터 제2 핑 메시지를 수신하는 동작(동작 1402)을 포함한다. 제2 핑 메시지는 현재의 노드에 적어도 제2 핑 메시지를 발신하는 이웃 노드가 현재의 노드의 이웃임을 알려준다. 제2 핑 메시지는 또한 발신측 이웃 노드의 라우팅 파트너 및 이웃 노드의 상태도 포함할 수 있다. 예를 들어, ID 151을 갖는 노드는 ID 144를 갖는 노드로 제2 핑 메시지를 전송할 수 있다. 제2 핑 메시지를 수신할 시에, ID 144를 갖는 노드는 ID 151을 갖는 노드가 ID 144를 갖는 노드의 이웃임을 알게 된다. 제2 핑 메시지는 또한 링(1206) 상의 다른 노드들에 대한 생존 정보도 포함할 수 있다. 따라서, 일반적으로, 핑 메시지는 이웃 내에서 교환될 수 있으며 (각각의 근접 멤버쉽에 대한) 이웃 멤버쉽 및 연합 내에서의 노드 존재의 근사화된 공통 이웃 뷰를 유지하는 데 사용될 수 있다.
수신된 핑 메시지는 핑이 발신되어(발신측 노드에 의해 전송되어) 들어간 근접 이웃 내의 다른 노드들로 주기적으로 반복/전달될 수 있다. 전달된 핑 메시지는 또한 핑 분포 패턴에 따라 전송될 수도 있다. 전달측 노드에 대한 핑 분포 패턴은 핑 메시지가 발신측 노드로부터 멀어지는 방향으로 이웃 노드들로 전송될 것임을 알려줄 수 있다. 예를 들어, ID 151을 갖는 노드는 ID 144를 갖는 노드에서 발신되는 핑들을 ID 174를 갖는 노드의 방향으로 전달할 수 있다. 핑 전달 분포 패턴은, 예를 들어, 근접 링마다 변화될 수 있다.
노드들은 대응하는 간격으로 핑 메시지를 수신하도록 구성될 수 있다. 예상된 핑 메시지가 수신되지 않은 경우, 노드는 통신 장애를 해석할 수 있고 다른 노드에 대한 phase.unknown indication를 예상된 (그러나 적어도 늦어진) 핑 메시지를 발신했어야만 하는 노드에 대해 true로 설정할 수 있다.
방법(1400)은 업데이트 요청 메시지를 완벽 라우팅 노드(perfect routing node)로 근접 라우팅하는 동작(동작 1403)을 포함한다. 업데이트 요청 메시지는, 이러한 라우팅된 업데이트 요청을 수신하는 라우팅 노드에, 현재의 노드가 수신측 라우팅 노드의 라우팅 파트너로서 참여하고 있음을 알려준다. 업데이트 요청 메시지는 또한 적어도 현재의 노드의 이웃 노드들의 ID를 (예를 들어, 생존 정보의 형태로) 포함할 수 있다. 예를 들어, ID 144를 갖는 노드는 업데이트 메시지(1216)를 ID 208을 갖는 노드(144로부터 64만큼 오프셋되어 있는 완벽 라우팅 파트너)로 라우팅할 수 있다. 노드(210)(이전에 계산된 라우팅 노드)가 208에 가장 가깝기 때문에, 노드(210)는 라우팅된 업데이트 요청을 수신하여 처리한다. 업데이트 메시지(1216)를 수신할 시에, ID 210을 갖는 노드는 ID 144를 갖는 노드가 ID 210을 갖는 노드의 라우팅 파트너라는 것을 알게 된다(또는 보강된다).
방법(1400)은 처리측(수신측) 라우팅 노드로부터 업데이트 응답 메시지를 수신하는 동작(동작 1404)을 포함한다. 업데이트 응답은 현재의 노드에 처리측 라우팅 노드가 현재의 노드의 라우팅 파트너로서 참여하고 있음을 알려준다. 업데이트 응답 메시지는 또한 적어도 처리측 라우팅 파트너의 이웃 노드들의 ID도 포함할 수 있다. 예를 들어, ID 210을 갖는 노드는 업데이트 응답(1207)을 ID 144를 갖는 노드로 전송할 수 있다. 업데이트 응답(1207)을 수신할 시에, ID 144를 갖는 노드는 ID 210을 갖는 노드가 ID 144를 갖는 노드의 라우팅 파트너라는 것을 알게 된다.
방법(1400)은 또한 현재의 노드 및 이웃 노드가 이웃으로서 참여하고 있다는 것과 현재의 노드 및 이웃 노드가 라우팅 파트너로서 참여하고 있다는 것을 알려주기 위해 노드 정보를 적절히 업데이트하는 동작도 포함할 수 있다. 예를 들어, ID 144를 갖는 노드는, ID 144 및 141을 갖는 노드들이 (근접) 이웃에 참여하고 있다는 것을 알려주기 위해, ID 151을 갖는 노드에 대응하는 노드 정보를 업데이트할 수 있다. 유사하게, ID 144를 갖는 노드는, ID 144 및 210을 갖는 노드들이 라우팅 파트너로서 참여하고 있다는 것을 알려주기 위해, ID 210을 갖는 노드에 대응하는 노드 정보를 업데이트할 수 있다.
일부 실시예들에서, 지정된 노드 X에 저장된 애플리케이션 상태는 신뢰성있는 플러딩 프로토콜을 사용하여 그의 Neighborhood(X) 노드들 간에 복제된다. 애플리케이션 상태에서의 각각의 항목은 할당된 소유자를 가지며, 이 소유자는 그 항목을 생성한 종단점일 수 있다. 애플리케이션 상태에서의 각각의 항목은 또한 그의 소유자에 의해 부여되는 연관된 타임스탬프(순서 번호라고도 함)를 갖는다. 이 타임스탬프는 다음과 같은 적어도 3개의 성분을 갖는다.
○ 소유 엔티티의 인스턴스 ID (예를 들어, 부호없는 정수). 적어도 단조(>1) 증가해야 함.
○ 소유자에 의해 발생된 특정의 시퀀스를 식별하는 시퀀스 ID (예를 들어, URI). 이 성분은 동일한 소유자가 다수의 독립적인 시퀀스를 발생할 수 있게 한다.
○ 식별된 애플리케이션 시퀀스 ID 내에서의 오프셋을 식별하는 서수 (예를 들어, 부호없는 정수)
항목 타임스탬프는 복제 동안에 대응하는 항목과 연관된 마지막 정보를 검출하는 데 사용되는데, 그 이유는 항목 타임스탬프가 <인스턴스 ID, 시퀀스 ID, 오프셋> 트리플을 갖는 부분 순서(partial-order)를 적어도 발생하기 때문이다. 복제되는 항목과 연관된 타임스탬프는 마지막 타임스탬프를 검출하기 위해 로컬 타임스탬프가 있는 경우 이 로컬 타임스탬프와 비교된다. 항목 타임스탬프는 또한 생성/업데이트/삭제 동작의 멱등 의미(idempotent semantics)를 지원하는 데도 사용된다. 예를 들어, 노드가 애플리케이션 상태에 있는 기존의 항목을 업데이트하라는 요청을 수신할 때, 이 업데이트는 업데이트 요청과 연관된 타임스탬프가 로컬 항목과 연관된 타임스탬프보다 높은 경우에만 수락된다. 항목들이 단일의 소유자를 할당받을 수 없는 경우, 벡터 타임스탬프에 기초한 충돌 해결 기법들이 이용될 수 있다. 애플리케이션 상태 복제는 고장 허용을 제공하고, 이웃 노드들에 걸친 부하 분산 요청을 용이하게 한다.
선택적인 거동으로서, (발신지) 다른 파트너 노드(라우팅 및//또는 파트너 노드)로부터 예상된 업데이트 또는 핑을 (일정 기간 후에) 검출하지 못한 노드들은 단계-상태가 알려지지 않은 것으로 간주하고, phase.unknown indication를 true로 설정하며,이를 그 자체로서 다른 제3자 노드들에 보고할 수 있다. 환언하면, 업데이트 및 핑의 주기적인 발생이 필요할 수 있다. 이러한 요건 및 실제의 타임아웃 값은 여러가지 근접 링의 속성(attribute)일 수 있다. 예를 들어, 링은 (예를 들어, LAN 세그먼트에 있는) 어떤 서브링들에 대해 더 제한적인 타이밍 요건을 가질 수 있고, 노드 고장 검출/보고가 비교적 빠르다. 반면에, 링은 (예를 들어, 인터넷 상의) 다른 서브링들에 대한 덜 제한적인 타이밍 요건을 가질 수 있고(또는 타이밍 요건을 전혀 갖지 않을 수 있고), 사전 예방적인 노드 고장 검출/보고가 비교적 길다(또는 존재하지 않는다).
도 15는 다른 노드에 대한 생존 정보를 발견하는 방법(1500)의 흐름도의 일례를 나타낸 것이다. 방법(1500)은 도 12A 및 도 12B의 링(1206)과 관련하여 설명될 것이다. 일반적으로, 예를 들어, 동기화(1203), 동기화 응답(1204), 업데이트(1216), 업데이트 응답(1207) 등의 임의의 메시지는 적어도 하나의 생존 헤더를 포함할 수 있다. 일부 실시예들에서, 생존 헤더는 노드에 대한 <노드 ID, 인스턴스 ID, 단계 [phase-state value].[phase.unknown indication], 신선도 값, 컬러 (근접성) 값, 가중치 값>을 포함한다. 다른 실시예들에서, 생존 헤더는 <단계 [phase-state value].[phase.unknown indication], 신선도 값, 컬러 (근접성) 값, 가중치 값>을 포함한다. 이들 다른 실시예에서, 생조 헤더는 송신자 및 발신자 노드에 대한 노드 ID 및 인스턴스 ID를 이미 포함하는 어드레싱 헤더를 보강하기 위해 사용될 수 있다. 어드레싱 헤더가 이미 노드 ID 및 인스턴스 ID를 포함하고 있기 때문에, 이들 정보는 생존 헤더로부터 생략될 수 있다.
방법(1500)은 연합 인프라에 참여하고 있는 노드에 대한 상태 정보를 표현하는 생존 헤더를 수신하는 동작(동작 1501)을 포함한다. 생존 헤더는 적어도 수신된 참여 노드 ID, 수신된 노드의 인스턴스 ID, 수신된 단계 값, 및 수신된 신선도 값을 포함한다. 예를 들어, ID 144를 갖는 노드는 ID 151을 갖는 노드로부터 동기화 응답(1204)으로 제1 생존 헤더를 수신할 수 있다. 제1 생존 헤더는 ID 174를 갖는 노드에 대한 <참여 노드 ID, 인스턴스 ID, 단계 값 [phase-state value].[phase.unknown indication], 신선도 값, 컬러 (근접성) 값, 가중치 값>을 포함할 수 있다. 단계-상태 값(예를 들어, 삽입, 동기화, 라우팅, 동작)은 제1 신선도 값일 때에 ID 174를 갖는 노드의 표현된 단계를 식별한다. 단계 값(예를 들어, 단계-상태: [삽입, 동기화, 라우팅, 동작], 및 phase.unknown)은 제1 신선도 값으로 표시된 때에 ID 174를 갖는 노드의 표현된 및/또는 검출된 단계 정보를 식별한다.
그러나, 신선도 값은 통신 지연으로 인해 감소될 수 있다. 신선도 값은 또한 시간의 경과에 따라 감쇄될 수 있다. 신선도 값에 대한 감쇄 곡선은 서로 다른 단계 상태(알지 못함을 포함함)에 대해 서로 다를 수 있다(선형이나 대칭이 아닐 수 있다). 따라서, 서로 다른 노드 단계들에 걸쳐, 신선도 값의 감쇄는 비선형 및/또는 비대칭일 수 있다.
방법(1500)은 현재의 노드에 유지되는 참여 노드에 대한 적어도 현재의 인스턴스 ID, 현재의 단계 값, 및 현재의 신선도 값에 액세스하는 동작(동작 1502)을 포함한다. 예를 들어, ID 144를 갖는 노드는 ID 174를 갖는 노드에 대한 이전에 수신되어 저장된 인스턴스 ID, 단계 값 [phase-state value].[phase.unknown indication], 및 신선도 값에 액세스할 수 있다.
방법(1500)은 적어도 수신된 인스턴스 ID, 수신된 단계 값, 및 수신된 신선도 값을 현재의 노드에 있는 현재의 인스턴스 ID, 현재의 단계 값, 및 현재의 신선도 값과 각각 비교하는 동작(동작 1503)을 포함한다. 예를 들어, ID 144를 갖는 노드는 ID 174를 갖는 노드에 대한 이전에 수신되어 저장된 인스턴스 ID, 단계 값 [phase-state value].[phase.unknown indication] 및 신선도 값을 생존 헤더로 수신된 인스턴스 ID, 단계 값 [phase-state value].[phase.unknown indication] 및 신선도 값과 비교할 수 있다.
ID 144를 갖는 노드는, (순서상) 제1 인스턴스 ID가 ID 174를 갖는 노드에 대한 현재 저장된 인스턴스 ID보다 크다는 것에 기초하여, 제1 단계-상태 값이 ID 174를 갖는 노드에 대한 현재 저장된 단계-상태 값보다 앞선 것임에 기초하여, 또는 제1 신선도 값이 ID 174를 갖는 노드에 대한 현재 저장된 신선도 값보다 큰 값인 것에 기초하여, (예를 들어, ID 151을 갖는 노드로부터 수신된) ID 174를 갖는 노드에 대한 현재의 상태 정보가 쓸모없는(stale) 것인지를 판정할 수 있다. ID 144를 갖는 노드는 또한 단계-상태가 검출/전송되었을 때 단계-상태가 알려져 있었음을 (현재 저장되어 있거나 생존 헤더로 수신된) 적어도 하나의 phase.unkown indication가 나타내는 것으로 판정할 수 있다.
방법(1500)은 이 비교에 기초하여 참여 노드에 대한 상태 정보가 현재의 노드에서 업데이트되어야 하는지를 판정하는 동작(동작 1504)을 포함한다. 예를 들어, ID 174를 갖는 노드에 대한 값들의 비교에 기초하여, ID 144를 갖는 노드는 ID 174를 갖는 노드에 대한 상태 정보가 업데이트되어야 하는 것으로 판정할 수 있다. ID 174를 갖는 노드에 대한 오래된 상태 정보를 업데이트하는 것은 (예를 들어, 인스턴스 ID, 단계-상태 값, phase.unknown indication, 또는 신선도 값에 대한) 현재의 저장된 값을 생존 헤더에 포함된 값으로 대체하는 것을 포함할 수 있다. 예를 들어, ID 144를 갖는 노드는, ID 174를 갖는 노드가 더 앞선 단계-상태로 전이했음을 알려주기 위해, ID 174를 갖는 노드에 대한 상태 정보를 업데이트할 수 있다.
일부 실시예들에서, 참여 노드와의 통신이 상실되었을 수도 있다는 것이 검출될 수 있다. 예를 들어, ID 144를 갖는 노드는 ID 151을 갖는 노드와의 통신이 상실되었음을 검출할 수 있다. 도 17을 간략히 참조하면, (ID 151을 갖는 노드의 종단점에서) 생존 이벤트에 대한 이전의 가입(1701)에 응답하여, 애플리케이션 계층(1752)은 (ID 151을 갖는 노드의 종단점에서) 종단점 고장 이벤트(1703)를 함수 계층(1751)으로 전송할 수 있다. 이들 실시예에서, 이러한 검출된 생존 조건들은 마지막의 알려진 단계 상태 값과 함께 true로 설정된 Phase.Unknown 표시자를 사용하여 생존 정보에 표시될 수 있다.
방법(1500)은 또한 연합 인프라 내의 제2 다른 노드로부터 제2 생존 헤더를 포함하는 메시지를 수신하는 동작을 포함할 수 있다. 예를 들어, ID 144를 갖는 노드는 (ID 103을 갖는 노드 또는 링(1206)의 어떤 다른 노드로부터) 제2 생존 헤더를 포함하는 상태 메시지를 수신할 수 있다. 제2 생존 헤더는 ID 174를 갖는 노드에 대한 <참여 노드 ID, 제2 인스턴스 ID, 제2 단계 값 [phase-state value].[phase.unknown indication], 제2 신선도 값, 제2 컬러 (근접성) 값, 제2 가중치 값>을 포함할 수 있다. 제2 단계 값(예를 들어, 단계-상태: [삽입, 동기화, 라우팅, 동작], 및 phase.unknown indication)은 제2 신선도 값일 때에 ID 174를 갖는 노드의 표현된/검출된 단계를 식별한다.
대안으로서, 제1 생존 헤더를 수신한 후에, ID 144를 갖는 노드는 ID 174를 갖는 노드와 직접 통신을 하려고 시도할 수 있다. 통신이 성공적인 경우, ID 174를 갖는 노드는 어드레싱 헤더에 노드 ID 및 제2 인스턴스 ID를 갖고 <제2 단계 값, 제2 신선도 값, 제2 컬러 (근접성) 값, 제2 가중치 값>을 포함하는 생존 헤더를 갖는 메시지(예를 들어, 동기화 응답)를 답신할 수 있다. 고장이 검출되는 경우, ID 144를 갖는 노드는 내부 생존 상태 변화(예를 들어, 신선도 = max, 및 phase.unknown indication = true)를 발생하고, 이 상태 변화가 다른 노드로부터 수신된 것처럼 이 상태 변화를 처리한다. 이러한 상태 변화는 최고 신선도 값을 갖는다.
방법(1500)은 또한 제2 인스턴스 ID, 제2 단계 값, 및 제2 신선도 값을 현재의 인스턴스 ID, 현재의 단계 값, 및 현재의 신선도 값과 각각 비교하는 동작(동작 1506)도 포함할 수 있다. 예를 들어, ID 103을 갖는 노드로부터 상태 메시지를 수신한 후에, ID 144를 갖는 노드는, (순서상) 제2 인스턴스 ID가 제1 인스턴스 ID보다 큰 것에 기초하여, 제2 단계 값이 제1 단계 값보다 더 앞선 것임에 기초하여, 또는 제2 신선도 값이 제1 신선도 값보다 큰 것에 기초하여, ID 151을 갖는 노드에 대한 현재의 상태 정보가 오래된 것이라고 판정할 수 있다.
방법(1500)은 또한 이 비교에 기초하여 참여 노드에 대한 상태 정보가 업데이트되어야 하는지를 판정하는 동작도 포함할 수 있다. 예를 들어, ID 174를 갖는 노드에 대한 값들의 비교에 기초하여, ID 144를 갖는 노드는 ID 174를 갖는 노드에 대한 상태 정보가 업데이트되어야 하는 것으로 판정할 수 있다. ID 174를 갖는 노드에 대한 오래된 상태 정보를 업데이트하는 것은 (예를 들어, 인스턴스 ID, 단계-상태 값, phase.unknown indication, 또는 신선도 값에 대한) 현재의 저장된 값들을 제2 생존 헤더에 포함된 값들로 대체하는 것을 포함할 수 있다. 예를 들어, ID 144를 갖는 노드는, ID 174를 갖는 노드가 더 앞선 단계-상태로 전이하였음을 알려주기 위해, ID 174를 갖는 노드에 대한 상태 정보를 업데이트할 수 있다.
일부 실시예들에서, 단계 값들은 동일한 컬러 값의 상황에서 비교된다. 앞서 기술한 바와 같이, 노드는 다수의 근접 링에 참여할 수 있다. 다수의 근접 링에의 참여는 더 특정적인 링에 참여한 결과로서 일어날 수 있으며, 이는 (공통의 간선(spine)을 따라) 더 일반적인 링에 참여하는 것을 의미한다. 예를 들어, 다시 도 5를 참조하면, 노드가 링(532)에 참여하는 것은 또한 노드가 링(522, 511, 501)에 참여하는 것을 의미하기도 한다. 따라서, 더 특정적인 링에 대한 컬러는 또한 모든 부모 근접 링을 나타내기도 한다. 또한, 앞서 설명한 바와 같이, 다수의 근접 링에의 참여는 하나의 링에 있는 노드가 (어쩌면 다른 간선들을 따라) 하나 이상의 다른 링들 내에 별칭 설정되어 있을 때 일어날 수 있다. 예를 들어, 여전히 도 5를 참조하면, 링(532)에 참여하는 노드는 링(531)(또는 심지어 링(531, 522, 511, 501)에의 참여를 암시하는 링(541)) 내에 별칭 설정되어 있을 수 있다. 따라서, 하나의 링(예를 들어, 링(531))에 대한 컬러는 다른 링(예를 들어, 링(532))의 피어 컬러(또는 근접성)로 볼 수 있다.
노드가 별칭 설정 방식으로 복수의 근접 링에 참여할 때, 노드에 대한 단계 값(예를 들어, 단계-상태 값 및/또는 phase.unknown indication)이 서로 다른 근접 링 간에 서로 다를 가능성이 얼마간 있다. 따라서, 다른 노드에 대한 상태 정보를 수신하는 노드는, 그 노드 및 컬러에 대해 현재의 상태 정보가 업데이트되어야 하는지를 판정하기 전에, 그 상태 정보(컬러)에 대한 대응하는 근접 링을 식별한다. 예를 들어, ID 144를 갖는 노드는, 수신된 상태 정보를 현재의 상태 정보와 비교하기 전에, ID 174를 갖는 노드에 대응하는 수신된 상태 정보에 대한 대응하는 근접 링을 식별할 수 있다.
적절한 근접 링을 식별하는 것은 수신된 컬러 값을 하나 이상의 현재의 컬러 값과 비교하는 것을 포함할 수 있다. 수신된 컬러 값 및 현재의 컬러 값이 같을 때, 예를 들어, 현재의 인스턴스 ID, 현재의 단계 값, 및 현재의 신선도 값 등의 다른 상태 정보가, 예를 들어, 수신된 인스턴스 ID, 수신된 단계 값 및 수신된 신선도 값 등의 대응하는 수신된 상태 정보와 비교될 수 있다. 반면에, 수신된 컬러 값 및 현재의 컬러 값이 다를 때, 추가의 비교가 행해지지 않는다.
컬러 값들 간의 동일함은 다양한 방식으로 얻어질 수 있다. 예를 들어, 컬러 값들 간의 동일함은 현재의 컬러 값과 수신된 컬러 값이 동일한 근접 링(예를 들어, 링(532))을 나타낼 때 얻어질 수 있다. 게다가, 컬러 값들 간의 동일함은 더 특정적인 컬러 값이 대응하는 부모 컬러 값(예를 들어, 동일한 간선을 따라 있는 다른 링)과 비교될 때 얻어질 수 있다. 예를 들어, 링(532)에 대한 컬러 값을 링(511)(또는 링(522 또는 501))에 대한 컬러 값과 비교하면 동일함이 얻어질 수 있다. 따라서, 자식 근접성(child proximity)은 부모 근접성(parent proximity)이지만 더 특정적이다.
따라서, 일반적으로, 연합 인프라에서 현재 동작 중인 노드들은, 다른 노드들과의 통신이 상실된 것처럼 보일 때에도, 그 다른 노드들에 대한 표현되고 검출된 생존 상태 정보를 교환할 수 있다.
부트스트래핑 메커니즘( Bootstrapping Mechanisms )
일반적으로, 노드가 연합의 활성 멤버가 되기(예를 들어, 연합에 가입하기) 위해서, 노드는 이미 그가 가입하고자 하는 리프 링(leaf ring)의 활성 멤버인 적어도 하나의 다른 노드와 통신을 해야만 한다. 이러한 초기 형태의 통신이 이용가능하도록 하는 데 도움을 주기 위해, 연합은 부트스트래핑 메커니즘을 이용할 수 있다. 부트스트래핑 메커니즘은, 다른 유형의 통신이 리프 링의 활성 멤버를 식별하지 못할 때 또는 보안 제약 조건에 의해 새로 가입하는 노드가 처음에 씨드 노드 등의 일련의 특수 노드들 중 적어도 하나와 통신을 해야만 할 때, 최후의 수단으로 사용될 수 있다. 즉, 다른 유형의 통신이 실패할 때 또는 보안 요건으로 인해, 부트스트래핑 메커니즘이 리프 링의 활성 멤버 노드를 식별하는 데 사용될 수 있다.
일부 실시예들에서, 씨드 노드는 연합과의 통신을 부트스트랩하는 데 사용된다. 씨드 노드는 일부 유형의 교차 근접 통신(cross (inter) proximity communication)을 위한 기지의 진입점을 제공한다. 씨드 노드는 인프라 고장/복구 및 일반적인 발전 과정(general dynamism)으로 인한 링 분할을 치유하는 데 도움을 준다. 각각의 링은 연합에 기본적인 부트스트래핑 속성들을 제공하기 위해 적어도 하나의 동작 씨드 노드(operational seed node)를 가질 수 있다.
피어 씨드 노드(peer seed node)는 근접성을 위한 링 구조(예를 들어, 이중 연결 리스트(doubly linked list))(적어도 그 근접성을 위한 모든 활성 씨드 노드로 이루어져 있음)를 유지하기 위해 서로 간에 통신을 할 수 있다. 전용 씨드 노드 동기화 프로토콜(dedicated seed node synchronization protocol)은 각각의 씨드 노드에 적어도 모든 다른 씨드 노드의 존재(활성) 상태에 대한 전체적인 정보를 제공하는 데 사용될 수 있다. 활성 씨드 노드는 자신의 본거지인 근접 리프 링은 물론 이 리프 링의 모든 다른 선조 링의 멤버 노드이다. 따라서, 씨드 노드는, 예를 들어, 씨드 노드의 리프 링으로부터 루트 링까지의, 근접 링들의 전체적인 간선을 나타낼 수 있다. 그에 따라, 씨드 노드는 이들 근접 링 각각에서 이용가능성이 높고 잘 알려져 있는 진입 노드로서 기능할 수 있다. 그 결과, 씨드 노드에 관한 존재 상태는 연합 내에서의 다양한 형태의 통신(예를 들어, 교차-근접 통신)에 유용할 수 있다. 그에 따라, 씨드 노드는, 예를 들어, 가입측 노드에 대한 잘 알려진 "가입 지점"으로서 역할하는 것, 보안 링 기관(secure ring authority)으로서 역할하는 것, 인프라 분할을 치유하는 데 도움을 주는 것, 및 그의 근접성들 각각에 대한 안정된 "진입 노드"로서 역할하는 것과 같은 다수의 특별한 속성들을 제공할 수 있다.
존재 데이터를 제공하기 위해, 씨드 노드의 도착 및 질서있는 출발(orderly departure)은 이들 근접성 각각에서 랑데뷰 지점에서의 안정된 진입 노드로서 등록될 수 있다. 예를 들어, 등록 메시지가 문자열 "Proximity:/"의 SHA-1 해쉬인 목적지 ID를 갖는 고정된 URI로 라우팅될 수 있다. 일 실시예에서 안정된 진입 노드로서 역할하는 씨드 노드가 그 자신을 이러한 방식으로 등록하는 반면, 선택된 비씨드 노드도 역시 동일한 방식으로 씨드 노드에 대해 여기에 기술된 것과 동일하거나 유사한 프로토콜을 사용하여 그 자신을 등록할 수 있는 다른 실시예들이 있다. 안정된 진입 노드(씨드 노드 등)가 등록될 때, 안정된 진입 노드는 자신이 멤버로 있는 각각의 링에게 알려줄 수 있다. 따라서, 이 고정된 URI에 의해 식별되는 랑데뷰 지점에 유지되는 정보는 본질적으로 안정된 진입 노드들 및 이들의 대응하는 링 멤버쉽의 리스트이다. 그에 따라, 임의의 노드는 이용가능한 안정된 진입 노드들 및 이들의 링 멤버쉽들의 리스트를 획득하기 위해 이 고정된 URI에 의해 식별되는 랑데뷰 지점을 참조할 수 있다.
일 실시예에서, 안정된 진입 노드는 이들 도착 및 출발 이벤트를 직접 등록한다. 다른 실시예에서, 안정된 진입 노드는 그의 직속 근접 링 내의 랑데뷰 지점에 이들 이벤트를 직접 등록하고, 그 랑데뷰 지점은 등록하는/등록 취소하는 안정된 진입 노드가 속하는 나머지 근접 링들 각각 내의 모든 다른 적절한 랑데뷰 지점을 (직접적으로 또는 간접적으로) 업데이트하는 것을 투명하게 용이하게 한다. 연합의 애플리케이션 상태 시퀀싱 및 전파 속성들은 이 안정된 진입 노드 등록 정보를 유지 및 전파하는 데 사용될 수 있다. 예를 들어, 저장된 애플리케이션 상태를 노드의 이웃 노드들 간에 복제하기 위해 신뢰성있는 플러딩 프로토콜이 사용될 수 있다.
안정된 진입 노드의 존재 데이터가 루트 링 쪽으로 승급하는 것에 의해 연합 내의 다른 노드들은 모든 근접성에서 적어도 하나의 진입 노드를 룩업할 수 있게 된다. 진입 노드 룩업(Entry Node Lookup)은 룩업을 수행하는 노드의 리프 링 및 원하는 근접 링의 LCAR(Lowest Common Ancestor Ring) 내의 상기 결정된 랑데뷰 지점 쪽으로 노드 룩업 메시지를 라우팅함으로써 용이하게 될 수 있다. 예를 들어, 도 5를 참조하면, 링(541) 내의 노드가 링(533) 내의 노드와 통신하고자 할 수도 있다. 그러나, 링(541) 내의 노드는 링(533) 내의 어떤 노드도 직접 알 수가 없다. 따라서, 링(541) 내의 노드는 노드 룩업 메시지를 링(522)(링(541) 및 링(533)의 링의 LCAR)으로 전송할 수 있다. (예를 들어, 그 진입 노드에 의해 발신된 등록 메시지로 인해 시스템에 존재하게 되는) 진입 노드 존재 정보를 처리하는 링(522) 내의 랑데뷰 지점 노드는 링(533) 내의 적어도 등록된 안정된 진입 노드에 대한 접촉 정보를 갖는 룩업 응답 메시지를 답신할 수 있다.
일부 실시예들에서, 안정된 진입 노드는 다양한 근접성에 대한 존재 데이터를 유지하기 위해 안정된 진입 노드로서 특별히 구성되어 있는 씨드 노드이다. 다른 실시예들에서, 다른 유형의 노드는 또한 다양한 근접성에 대한 존재 데이터를 유지하는 안정된 진입 노드로서 기능할 수 있고 또한 다른 동작들을 수행하도록 구성될 수 있다. 예를 들어, 일부 다른 유형의 노드는 이용가능성이 높고 따라서 안정된 진입 노드로서 적절하도록 (예를 들어, 관리자에 의해) 구성될 수 있다(즉, 상기한 바와 같이 구성됨). 그러나, 이 다른 유형의 노드는 부가의 씨드 노드 기능을 포함하지 않을 수 있다(예를 들어, 보안 링 기관으로서 신뢰되지 않을 수 있다). 일부 실시예들에서, 그의 직속 근접성에 대한 진입 노드 존재 상태를 유지하는 랑데뷰 지점은 그 자신을 선조 링 또는 선조 링들 내의 안정된 진입 노드로서 등록할 수 있다.
노드 모니터링(Node Monitoring)
도 19A는 한 노드가 다른 노드를 모니터링하는 것을 용이하게 하는 예시적인 링 아키텍처(1900)를 나타낸 것이다. 도시된 바와 같이, 링 아키텍처는 적어도 링(1901)(및 임의의 수의 다른 상위 및/또는 하위 레벨 링(도시 생략))을 포함한다. 링(1901)은 도 3의 링(306)과 유사하게 구성될 수 있다. 그러나, 모니터링은 도 4, 도 5, 도 12A 및 도 12B의 임의의 링을 비롯한 임의의 노드 링에서 행해질 수 있다. 도 19A는 대상 노드(1902)(ID=83을 가짐) 및 모니터 노드(1903)(ID=2를 가짐)의 확대도를 나타낸 것이다. 도시된 실시예에서, 모니터 노드(1903)는 대상 노드(1902)를 모니터링하기 위한 것이다. 그러나, 링(1901) 상의 어느 노드라도 링(1901) 상의 임의의 다른 노드를 모니터링하도록 구성될 수 있다.
도 20은 한 노드가 다른 노드를 모니터링하는 방법(200)의 흐름도의 일례를 나타낸 것이다. 방법(2000)은 도 19A에 도시된 데이터 및 구성요소와 관련하여 설명될 것이다.
방법(2000)은 대상 노드(subject node)가 대상 노드를 모니터링하는 데 사용하기 위한 대상측 TTL(time-to-live) 기간 값(subject side time-to-live duration value)을 발생하는 동작(동작 2001)을 포함한다. 예를 들어, 대상 노드(1902)는 TTL(time-to-live) 기간 값(1913)을 설정할 수 있다. TTL 기간 값(1913)은 모니터 노드(1903)와의 모니터링 관계가 유효할 것으로 대상 노드(1902)가 가정할 수 있는 기간을 말한다.
방법(2000)은 대상 노드가 설정 요청(establish request)을 모니터 노드로 전송하는 동작 - 설정 요청은 대상 노드가 모니터 노드에게 대상 노드를 모니터링할 것을 요청한다는 것을 나타내고 설정 요청은 대상측 TTL 기간 값을 포함함 - (동작 2002)을 포함한다. 예를 들어, 대상 노드(1902)는 TTL 기간 값(1913)을 포함하는 설정 요청(1922)을 모니터 노드(1903)로 전송할 수 있다.
방법(2000)은 대상 노드가 대상측 TTL 기간 값 및 설정 요청이 전송된 시간에 기초하여 기존의 대상측 TTD(time-to-die) 시간을 설정하는 동작 - 모니터 노드로부터 설정 허가(establish grant)를 받기 전에, 대상 노드 클럭이 기존의 대상측 TTD 시간에 도달하는 것은 대상 노드가 고장 상태로 전이해야 한다는 표시임 - (동작 2003)을 포함한다. 예를 들어, 대상 노드(1902)는 TTL 기간 값(1913) 및 설정 요청(1922)이 모니터 노드(1903)로 전송된 시간에 기초하여 대상측 TTD 시간(1917)을 설정할 수 있다. 대상측 TTD 시간(1917)은 대상 노드(1902)에 대한 시간일 수 있다. 모니터 노드(1903)로부터 설정 허가를 받기 전에, 대상 노드(1902)의 클럭이 대상측 TTD 시간(1917)에 도달하는 경우, 대상 노드(1902)는 고장 상태로 전이하게 된다. 일부 실시예들에서, 모니터 노드(1903)로부터 설정 허가를 받기 전에, 대상 노드(1902)의 클럭이 대상측 TTD 시간(1917)에 도달할 때, 고장 상태가 야기된다. 다른 실시예들에서, 대상 노드(1902)를 고장 상태로 전이시키기 위해 다른 활동들이 일어난다.
방법(200)은 모니터 노드가 대상 노드로부터 설정 요청을 수신하는 동작 - 설정 요청은 대상 노드가 모니터 노드에게 대상 노드를 모니터링하도록 요청하는 것을 나타내고, 설정 요청은 적어도 대상측 TTL 기간 값을 포함하며, 대상측 TTL 기간 값은 대상 노드에서의 대상측 TTD 시간을 결정하는 데 사용되고, 모니터 노드로부터 설정 허가를 받기 전에, 대상 노드 클럭이 대상측 TTD 시간에 도달하는 것은 대상 노드가 고장 상태로 전이해야 한다는 표시임 - (동작 2004)을 포함한다. 예를 들어, 모니터 노드(1903)는 대상 노드(1902)로부터 TTL 기간 값(1913)을 포함한 설정 요청(1922)을 수신할 수 있다. TTL 기간 값(1913)은 대상 노드(1902)에서 대상측 TTD 시간(1917)을 설정하는 데 사용된다.
방법(2000)은 모니터 노드가 대상측 TTL 기간 값으로부터 모니터측 TTL 기간 값을 도출하는 동작(동작 2005)을 포함한다. 예를 들어, 모니터 노드(1903)는 TTL 기간 값(1913)을 사용하여 TTL 기간 값(1919)을 도출할 수 있다. 일부 실시예들에서, 모니터 노드(1903)는 TTL 기간 값(1913)을 복사하여 TTL 기간 값(1919)을 도출한다. 이들 실시예에서, TTL 기간 값(1913)과 TTL 기간 값(1919)은 같다. 다른 실시예들에서, 모니터 노드(1903)는 TTL 기간 값(1913)을 수정하여 TTL 기간 값(1919)을 도출한다. 이들 다른 실시예에서, TTL 기간 값(1913)과 TTL 기간 값(1919)이 다르다. 예를 들어, 모니터 노드(1903)는 TTL 기간 값(1913)의 값을 증가시켜 TTL 기간 값(1919)을 도출할 수 있으며, 따라서 TTL 기간 값(1919)이 TTL 기간 값(1913)보다 더 크다.
방법(2000)은 모니터 노드가 모니터측 TTL 기간 값 및 설정 요청이 수신된 시간에 기초하여 모니터측 TTD 시간을 설정하는 동작 - 대상 노드로부터 갱신 요청(renew request)을 받기 전에, 모니터 노드 클럭이 모니터측 TTD 시간에 도달하는 것은 대상 노드의 고장이 의심된다는 표시임 - (동작 2006)을 포함한다. 예를 들어, 모니터 노드(1903)는 TTL 기간 값(1919) 및 설정 요청(1922)이 수신된 시간에 기초하여 모니터측 TTD 시간(1914)을 설정한다. 모니터측 TTD 시간(1914)은 모니터 노드(1903)에 대한 시간일 수 있다. 대상 노드(1902)로부터 갱신 요청을 수신하기 전에, 모니터 노드(1903)의 클럭이 모니터측 TTD 시간(1914)에 도달하면, 모니터 노드(1903)는 대상 노드(1902)가 고장났는지 의심한다.
방법(2000)은 모니터 노드가 대상 노드를 모니터링하기로 합의했음을 대상 노드에게 알려주기 위해 모니터 노드가 대상 노드로 설정 허가(establish grant)를 전송하는 동작(동작 2007)을 포함한다. 예를 들어, 모니터 노드(1903)는 대상 노드(1902)로 설정 허가(1923)를 전송할 수 있다. 방법(2000)은 대상 노드가 모니터 노드로부터 설정 허가를 수신하는 동작 - 이 설정 허가는 모니터 노드가 대상 노드를 모니터링함을 나타냄 - (동작 2008)을 포함한다. 예를 들어, 대상 노드(1902)는 모니터 노드(1903)로부터 설정 허가(1923)를 수신할 수 있다. 일반적으로, 설정 허가(1923)는 모니터 노드(1903)가 대상 노드(1902)를 모니터링하기로 합의했음을 나타낸다. 일부 실시예들에서, 설정 허가 메시지는 모니터측 TTL 기간 값을 포함할 수 있다. 예를 들어, 설정 허가(1923)가 TTL 기간 값(1919)을 포함할 수도 있다.
대안으로서, 모니터 노드는 모니터 노드가 대상 노드를 모니터링하기로 합의하지 않았음을 대상 노드에게 알려주기 위해 대상 노드로 설정 거부(establish reject)를 전송할 수 있다. 예를 들어, 설정 요청(1922)을 수신한 것에 응답하여, 모니터 노드(1903)는 대안으로서(점선으로 나타냄) 설정 거부(1931)를 대상 노드(1902)로 전송할 수 있다. 대상 노드는 모니터 노드로부터 전송된 설정 거부를 수신할 수 있다. 예를 들어, 대상 노드(1902)는 모니터 노드(1903)로부터 설정 거부(1931)를 수신할 수 있다. 설정 거부(1931)는 일반적으로 모니터 노드(1903)가 대상 노드(1902)를 모니터링하기로 합의하지 않았음을 대상 노드(1902)에게 알려준다.
때때로(링 아키텍처(1900) 내에서 다른 동작들의 수행 사이에 섞여 있음), 대상 노드는 모니터 노드와의 설정된 모니터링 합의를 갱신할 수 있다. 일반적으로, 대상 노드는 새로운 허가가 수신될 때까지 기존의 합의(현재의 대상측 TTD 시간)를 시행한다. 그러나, 대상 노드는 새로운 TTL 기간 값을 발생하고 업데이트된 TTD 시간이 무엇으로 될지를 도출할 수 있다. 이어서, 대상 노드는 새로운 TTL 기간 값을 모니터 노드로 전송한다. 모니터 노드는 새로운 TTL 기간 값을 수신한다. 적절한 경우, 모니터 노드는 갱신 요청을 허가하고 역으로 대상 노드로 갱신 허가를 전송한다. 대상 노드는 갱신 허가를 수신한다. 갱신 허가를 수신한 것에 응답하여, 대상 노드는 업데이트된 TTD 시간을 새로운 현재의 TTD 시간으로 사용하여 갱신된 합의를 실시한다. 설정된 모니터링 합의를 갱신하는 것의 일례는 방법(2000)의 나머지 동작들에 기술되어 있다.
방법(2000)은 대상 노드 클럭이 대상측 TTD 시간에 도달하기 전에 대상 노드가 모니터 노드로 갱신 요청을 전송하는 동작(동작 2009)을 포함한다. 예를 들어, 대상 노드(1902)는, 대상 노드(1902)의 클럭이 대상측 TTD 시간(1917)에 도달하기 전에, TTD 기간 값(1913)을 포함하는 갱신 요청(1915)을 모니터 노드(1903)로 전송할 수 있다. 일부 실시예들에서, 갱신 요청(1915)은 대상측 TTL 기간 값을 포함하지 않는다. 이들 실시예에서, TTL 기간 값(1913)의 계속된 사용이 추론될 수 있다. 다른 실시예들에서, TTL 기간 값(1913)은 갱신 요청(1915)에 분명히 포함되어 있다. 또 다른 실시예들에서, 다른 대상측 TTL 기간 값이 갱신 요청(1915)에 포함되어 있다. 대상 노드(1902)의 구성 변화 및/또는 링(1901) 내의 다른 곳에서의 구성 변화(예를 들어, 변화된 네트워크 조건)에 응답하여 새로운 대상측 TTL 기간 값이 발생되어 대상 노드(1902)에 의해 사용될 수 있다.
노드(1902)는 또한 갱신 요청(1915)에 응답한 대응하는 갱신 허가가 수신되는 경우 업데이트된 대상측 TTD 시간이 무엇으로 될지를 계산할 수 있다. 이 계산은 적어도 갱신 요청(1915)이 전송된 시간 및 갱신 요청(1915)에 관계된 또는 그와 연관된 대상측 TTL 기간 값에 기초할 수 있다.
방법(2000)은 모니터 노드가, 설정 허가 메시지를 전송한 후 모니터 노드 클럭이 모니터측 TTD 시간에 도달하기 전에, 대상 노드로부터 갱신 요청을 수신하는 동작 - 이 갱신 요청은 대상 노드가 고장났음을 알려줌 - (동작 2010)을 포함한다. 예를 들어, 모니터 노드(1903)는 설정 허가(1923)를 전송한 후 모니터 노드(1903)의 클럭이 모니터측 TTD 시간(1914)에 도달하기 전에 갱신 요청(1915)을 수신할 수 있다. 갱신 요청(1915)의 수신은 모니터 노드(1903)에게 대상 노드(1902)가 고장나지 않았음을 알려줄 수 있다.
방법(2000)은 또한 모니터 노드가 대상 노드에게 갱신 요청을 허가하는 동작도 포함할 수 있다. 예를 들어, 모니터 노드(1903)는 갱신 요청(1915)을 허가할 수 있다.
방법(2000)은 모니터 노드가 갱신 요청이 수신된 시간에 응답하여 또한 적어도 그에 기초하여 업데이트된 모니터측 TTD 시간을 설정하는 동작 - 대상 노드로부터 다른 갱신 요청을 수신하기 전에 모니터 노드 클럭이 업데이트된 모니터측 TTD 시간에 도달하는 것은 대상 노드의 고장이 의심된다는 것을 나타냄 - (동작 2012)을 포함한다. 예를 들어, 모니터 노드(1903)는 갱신 요청(1915)이 수신된 시간 및 갱신 요청(1915)에 관계된 또는 어쩌면 그에 포함된 암시된 또는 표시된 모니터측 TTL 기간 값에 응답하여 그리고 이들에 기초하여 업데이트된 모니터측 TTD 시간(1921)을 설정할 수 있다. 업데이트된 모니터측 TTD 시간(1921)은 모니터 노드(1903)에 대한 시간일 수 있다. 업데이트된 모니터측 TTD 시간(1921)은 모니터측 TTD 시간(1914) 이후일 수 있다. 그러나, 모니터측 TTD 시간(1914)이 업데이트 모니터측 TTD 시간(1921)을 설정하기 전에 있어야 한다는 요건은 없다. 따라서, 업데이트된 모니터측 TTD 시간(1921)이 실제로 모니터측 TTD 시간(1914) 이전에 있을(또는 그와 동일할) 가능성도 있다. 대상 노드(1902)로부터 다른 갱신 요청을 수신하기 전에, 모니터 노드(1903)의 클럭이 업데이트된 모니터측 TTD 시간(1921)에 도달하는 경우, 모니터 노드(1903)는 대상 노드(1902)가 고장난 것으로 의심한다.
대상측 TTL 기간 값이 갱신 요청(1915)에 포함되어 있지 않은 경우(따라서 TTL 기간 값(1913)이 추론되는 경우) 또는 갱신 요청이 TTL 기간 값(1913)을 분명히 포함하는 경우, 모니터 노드(1903)는 또한 TTL 기간 값(1919)을 사용하여 업데이트된 모니터측 TTD 시간(1921)을 설정할 수 있다. 반면에, TTL 기간 값(1913)이 아니라 대상측 TTL 기간 값이 갱신 요청(1915)에 분명히 포함되어 있는 경우, 모니터 노드(1903)는 다른 분명히 포함된 대상측 TTL 기간 값을 사용하여 새로운 모니터측 TTL 기간 값을 도출할 수 있다. 이어서, 모니터 노드(1903)는, 새로운 모니터측 TTL 기간 값으로부터, 업데이트된 모니터측 TTD 시간(1921)을 설정할 수 있다.
방법(2000)은 모니터 노드가 대상 노드를 계속하여 모니터링하기로 합의하였음을 대상 노드에게 알려주기 위해 모니터 노드가 갱신 허가를 대상 노드로 전송하는 동작(동작 2013)을 포함한다. 예를 들어, 모니터 노드(1903)는 갱신 허가(1927)를 대상 노드(1902)로 전송할 수 있다. 방법(2000)은 대상 노드가, 대응하는 갱신 요청을 전송한 후 대상 노드 클럭이 대상측 TTD 시간에 도달하기 전에, 모니터 노드로부터 갱신 허가를 수신하는 동작 - 이 갱신 허가 메시지는 모니터 노드가 대상 노드를 계속 모니터링함을 나타냄 - (동작 2014)을 포함한다. 예를 들어, 대상 노드(1902)는, 갱신 요청(1915)을 전송한 후 대상 노드(1902)에 있는 클럭이 대상측 TTD 시간(1917)에 도달하기 전에, 모니터 노드(1903)로부터 갱신 허가(1927)를 수신할 수 있다. 일반적으로, 갱신 허가(1927)는 모니터 노드(1903)가 대상 노드(1902)를 계속 모니터링하기로 합의한다는 것을 나타낸다.
대안으로서, 모니터 노드는 모니터 노드가 더 이상 대상 노드를 모니터링하기로 합의하지 않을 것임을 대상 노드에게 알려주기 위해 갱신 거부를 대상 노드로 전송할 수 있다. 예를 들어, 갱신 요청(1915)을 수신한 것에 응답하여, 모니터 노드(1903)는 대안으로서(점선으로 나타냄) 갱신 거부(1933)를 대상 노드(1902)로 전송할 수 있다. 대상 노드는 모니터 노드로부터 전송된 갱신 거부를 수신할 수 있다. 예를 들어, 대상 노드(1902)는 모니터 노드(1903)로부터 갱신 거부(1933)를 수신할 수 있다. 갱신 거부(1933)는 일반적으로 모니터 노드(1903)가 더 이상 대상 노드(1902)를 모니터링하기로 합의하지 않을 것임을 대상 노드(1902)에게 알려준다.
방법(2000)은 대상 노드가 갱신 허가를 수신한 것에 응답하여 이전에 계산되었던 업데이트된 대상측 TTD 시간으로 전이하는 동작 - 모니터 노드로부터 다른 갱신 허가를 수신하기 전에 대상 노드 클럭이 업데이트된 대상측 TTD 시간에 도달하는 것은 대상 노드가 고장 상태로 전이해야 함을 나타냄 - (동작 2015)을 포함한다. 예를 들어, 대상 노드(1902)는, 대응하는 갱신 허가 메시지가 수신될 때, 업데이트된 대상측 TTD 시간(1952)으로 전이할 수 있다. 업데이트된 대상측 TTD 시간(1952)은 갱신 요청(1915)이 모니터 노드(1903)로 전송된 시간 무렵에 계산되었을 수 있다. 업데이트된 대상측 TTD 시간(1952)은 대응하는 갱신 요청(1915)이 전송된 시간 및 갱신 요청(1915)에 관계된 또는 그와 연관된 TTL 기간에 기초하여 계산되었을 수 있다. 업데이트된 대상측 TTD 시간(1952)은 대상 노드(1902)에 대한 시간(예를 들어, 대상측 TTD 시간(1917) 이후의 시간, 그 이전의 시간, 또는 그와 같은 시간)일 수 있다.
TTL 값(1913)이 여전히 적절한 TTL 값인 경우, 대상 노드(1902)는 또한 TTL 기간 값(1913)을 사용하여 업데이트된 대상측 TTD 시간(1952)을 설정할 수 있다. 다른 TTL 기간 값이 발생된 경우, 대상 노드(1902)는 또한 다른 발생된 TTL 기간 값을 사용하여 업데이트된 대상측 TTD 시간(1952)을 설정할 수 있다.
이어서, 현재의 대상측 TTD 시간(1917 또는 1952)을 설정하기 위해, 모니터 노드(1903)로부터 다른 갱신 허가를 수신하기 전에, 대상 노드(1902)의 클럭이 현재의 대상측 TTD 시간에 도달할 수 있다. 이것은 대상 노드(1902)와 모니터 노드(1903) 간의 통신 오류로 인한 것일 수 있다. 예를 들어, 대상 노드(1902)는, 갱신 허가(1927)를 수신한 후 대상 노드(1902)의 클럭이 업데이트된 대상측 TTD 시간(1952)에 도달하기 전에, 다른 갱신 요청을 전송할 수 있다. 그러나, 통신 실패로 인해, 다른 갱신 요청이 모니터 노드(1903)에 도달하지 않는다. 대안으로서, 다른 갱신 요청이 모니터 노드(1903)에 수신될 수 있지만, 모니터 노드(1903)로부터의 대응하는 갱신 허가가 통신 오류로 인해 대상 노드(1902)에 도달하지 않는다. 어느 경우든지, 대상 노드(1902)의 클럭은, 다른 갱신 요청에 응답한 대응하는 갱신 허가를 수신하기 전에, 현재의 대상측 TTD 시간에 도달할 수 있다.
대안으로서, 대상 노드(1902)가 오동작함으로써, 대상 노드(1902)의 클럭이 업데이트된 대상측 TTD 시간(1952)에 도달하기 전에 대상 노드(1902)가 다른 갱신 요청을 모니터 노드(1903)로 전송하지 못할 수 있다.
그러나, 갱신 요청이 전송되든 그렇지 않든 간에, 대상 노드(1902)의 클럭이 현재의 대상측 TTD 시간(1952)에 도달하기 전에 갱신 허가가 수신되지 않은 경우, 대상 노드(1902)는 고장 상태로 전이한다.
다시 모니터 노드(1903)를 참조하면, (대상 노드(1902)에서의 오동작으로 인해 또는 링(1901)에서의 통신 오류로 인해) 대상 노드(1902)로부터 다른 갱신 요청을 수신하기 전에, 모니터 노드(1903)의 클럭이 모니터측 TTD 시간(1914 또는 1921)에 도달할 수도 있다. 그 결과, 모니터 노드(1903)는 대상 노드(1902)가 고장난 것으로 의심한다. 모니터 노드(1903)는 타임아웃 상태(다른 노드의 고장이 의심된다는 것을 검출함을 나타냄)로 전이할 수 있다.
다른 실시예들에서, 한 쌍의 노드가 서로를 모니터링할 수 있다. 따라서, 제1 노드는 제2 노드를 모니터링할 수 있고 제2 노드도 역시 제1 노드를 모니터링할 수 있다. 예를 들어, 각각의 노드는 상대방 노드와의 통신을 통해 대상 노드측 및 모니터 노드측 방법(2000) 둘다를 구현할 수 있다.
도 19B는 2개의 노드가 서로를 모니터링하는 것을 용이하게 하는 예시적인 링 아키텍처(1900)를 나타낸 것이다.
노드(1971)는 노드(1971)를 모니터링하는 데 사용하기 위해 TTL 기간 값(1929)을 발생할 수 있다. 노드(1971)는 TTL 기간 값(1929)을 포함하는 설정 요청(1962)을 노드(1972)로 전송할 수 있다. 노드(1971)는 또한 TTL 기간 값(1929)에 기초하여 대상측 TTD 시간(1973)을 설정할 수 있다. 노드(1972)는 TTL 기간 값(1929)을 포함하는 설정 요청(1962)을 노드(1971)로부터 수신할 수 있다. 노드(1972)는 TTL 기간 값(1929)으로부터 TTL 기간 값(1949)을 도출할 수 있다. 노드(1972)는 TTL 기간 값(1949)에 기초하여 모니터측 TTD 시간(1939)을 설정할 수 있다. 노드(1972)는 설정 허가(1974)를 노드(1971)로 전송할 수 있다. 노드(1971)는 노드(1972)로부터 설정 허가(1974)를 수신할 수 있다.
이와 병행하여, 노드(1972)는 노드(1972)를 모니터링하는 데 사용하기 위해 TTL 기간 값(1975)을 발생할 수 있다. 노드(1972)는 TTL 기간 값(1975)을 포함하는 설정 요청(1926)을 노드(1971)로 전송할 수 있다. 노드(1972)는 또한 TTL 기간 값(1975)에 기초하여 대상측 TTD 시간(1935)을 설정할 수 있다. 노드(1971)는 TTL 기간 값(1975)을 포함하는 설정 요청(1926)을 노드(1972)로부터 수신할 수 있다. 노드(1971)는 TTL 기간 값(1933)으로부터 TTL 기간 값(1953)을 도출할 수 있다. 노드(1971)는 TTL 기간 값(1953)에 기초하여 모니터측 TTD 시간(1937)을 설정할 수 있다. 노드(1971)는 허가 메시지(1976)를 노드(1972)로 전송할 수 있다. 노드(1972)는 허가 메시지(1976)를 노드(1971)로부터 수신할 수 있다.
대안으로서, 노드(1971) 및 노드(1972) 중 어느 하나가 상대방 노드로부터의 설정 요청을 거부한다. 예를 들어, 노드(1971)는 설정 요청(1962)을 거부할 수 있다. 이와 마찬가지로, 노드(1972)가 설정 요청(1926)을 거부할 수 있다. 어느 한 노드가 설정 요청을 거부할 때, 그 노드는 설정 거부(예를 들어, 설정 거부(1931)와 유사함)를 상대방 노드로 전송할 수 있다. 이것은 모니터링 합의가 설정되지 않았음을 상대방 노드에게 알려준다.
노드(1971) 및 노드(1972)는 이어서, 앞서 기술한 바와 같이, 갱신 요청 및 갱신 허가(는 물론 갱신 거부(1933)과 유사한 갱신 거부)를 교환할 수 있다. 그에 따라, 노드(1971) 및 노드(1972) 각각은 대상 노드이기도 하고 모니터 노드이기도 하다. 도 19B에 도시된 TTL 기간 값 및 TTD 시간에 기초하여, 모니터링 관계가 설정되어 있는 동안 및/또는 그 후에 여러가지 이벤트들이 일어날 수 있다.
노드(1972)로부터 갱신 허가를 수신하기 전에, 노드(1971)의 클럭이 대상측 TTD 시간(1973)에 도달하는 경우, 노드(1971)는 고장 상태로 전이한다. 노드(1971)로부터 갱신 요청을 수신하기 전에, 노드(1972)의 클럭이 모니터측 TTD 시간(1939)에 도달하는 경우, 노드(1972)는 노드(1971)가 고장난 것으로 의심한다.
노드(1971)로부터 갱신 허가를 수신하기 전에, 노드(1972)의 클럭이 대상측 TTD 시간(1935)에 도달하는 경우, 노드(1972)는 고장 상태로 전이한다. 노드(1972)로부터 갱신 요청을 수신하기 전에, 노드(1971)의 클럭이 모니터측 TTD 시간(1937)에 도달하는 경우, 노드(1971)는 노드(1972)가 고장난 것으로 의심한다.
노드 고장의 중재(Arbitration Of Node Failures)
다양한 서로 다른 유형의 통신 오류 및 노드 오동작으로 인해, 한 쌍의 노드 내의 각각의 노드가 상대방 노드의 고장을 의심할 가능성이 얼마간 있다. 게다가, 각각의 노드는 자신이 제대로 동작하고 있는지를 의심할 수 있다.
어떤 링 아키텍처에서, 자원들 중 일부분은 단일의 노드가 주어진 순간에 자원을 제어하도록 구성되어 있다. 게다가, 어떤 자원들의 이용가능성에 대한 요구가 높을 수 있으며 그에 따라 본질적으로 노드에 의한 계속적인 제어가 필요하게 된다. 따라서, 노드가 고장나는 경우, 다양한 자원들의 제어가 다른 노드로 이전될 필요가 있을 수 있다. 그에 따라, 한 쌍의 노드 내의 노드가 상대방 노드가 고장난 것으로 의심할 때, 적어도 어느 노드가 고장났는지 또는 고장날 것인지를 판정하기 위해 중재 메커니즘이 사용될 수 있다.
예를 들어, 한 쌍의 노드 내의 각각의 노드가 상대방 노드가 고장난 것으로 의심하는 경우, 각각의 노드는 타임아웃 상태로 전이하고 그의 의심을 중재 기관(arbitration facility)에 보고할 수 있다. 타임아웃 상태에 있을 때, 각각의 노드에서의 어떤 다른 처리는 중재의 결과가 수신될 때까지 일시 정지될 수 있다. 중재 기관은 역으로 노드에 보고를 하여 그 노드가 활성인 채로 있는지를 알려줄 수 있다. 예를 들어, 중재 기관은 활성인 채로 있는 보고측 노드에 수락 메시지(accept message)를 전송할 수 있다. 중재 기관은 고장 상태로 전이해야 하는 보고측 노드로 거부 메시지(deny message)를 전송할 수 있다. 수락 메시지를 수신하는 노드는 활성인 채로 있을 수 있다. (예를 들어, 네트워크 조건으로 인해) 수락 메시지를 수신하지 않는 또는 거부 메시지를 수신하는 노드는 고장 상태로 전이한다.
도 19C는 상호 모니터링하는 노드들 각각이 상대방 노드가 고장난 것으로 의심하는 보고를 할 수 있을 때 중재를 용이하게 하는 예시적인 링 아키텍처(1900)를 나타낸 것이다. 도 19C는 노드(1981)(ID=98을 가짐), 모니터 노드(1982)(ID=64를 가짐), 및 중재자(1983)의 확대도를 나타낸 것이다.
일부 실시예들에서, 중재자(1983)는 또한 링(1901)의 멤버이기도 하다. 다른 실시예들에서, 중재자(1983)는 링(1901)의 선조 링의 멤버이지만, 링(1901)의 멤버는 아니다. 또 다른 실시예들에서, 중재자(1983)는 링(1901)을 포함하는 링 계층 구조의 외부에 있다. 예를 들어, 중재자(1983)는 별도의 중재 연합 노드 링에 포함되어 있을 수 있다. 중재 연합 내의 노드들은 링(1901) 및 그의 선조 링들의 노드들에 대한 중재자로서 구성될 수 있다.
일부 실시예들에서, 중재자(1983)는 노드(1981) 및 노드(1982)에 의해 노드(1981, 1982)에 대한 중재를 하도록 상호 합의되어 있다. 다른 실시예들에서, 중재자(1983)는 다른 엔티티에 의해 노드(1981, 1982)에 대한 중재를 하도록 배정된다. 다른 엔티티는 링(1901)을 포함하는 링 계층 구조 내부의 노드(예를 들어, 씨드 노드) 또는, 예를 들어, 사람 관리자일 수 있다. 예를 들어, 상대방 노드는 링(1901)의 멤버이거나 링(1901)의 선조 링의 멤버일 수 있지만, 링(1901)의 멤버는 아니다. 대안으로서, 다른 엔티티는 링(1901)을 포함하는 링 계층 구조의 외부에 있을 수 있다. 예를 들어, 다른 엔티티는 별도의 중재 연합 링의 멤버인 노드일 수 있다.
중재자(1983)는 링(1901)을 포함하는 링 계층 구조에 대한 다양한 정보를 가지고 있을 수 있다. 예를 들어, 중재자(1983)는 링(1901)을 포함하는 링 계층 구조에 대한 전반적인 정보를 가지고 있을 수 있다. 대안으로서, 중재자(1983)는 링(1901)을 포함하는 링 계층 구조에 포함된 링들 중 어떤 서브셋에 대한 정보를 가지고 있을 수 있다. 다른 실시예들에서, 중재자(1983)는 노드(1981, 1982)를 (어쩌면 이들만을) 포함하는 링(1901) 내의 노드들의 서브셋에 대한 정보를 가지고 있다.
중재자(1983)는 노드(1981, 1982)(이에 제한되지 않음)를 포함하는 임의의 수의 노드 쌍에 대한 중재를 하도록 구성될 수 있다. 일부 실시예들에서, 중재 메커니즘은, 노드 고장이 의심된다는 보고를 수신하기 전에는, 중재해야 하는 노드에 대한 정보를 전혀 가지고 있지 않다. 따라서, 한 쌍의 노드가 중재자(1983)를 사용하기로 합의하거나 중재자(1983)가 한 쌍의 노드에 대한 중재를 하도록 배정되더라도, 중재자(1983)는, 한 쌍의 노드 중의 한 노드에 대한 노드 고장이 의심된다는 보고를 수신하기 전에는, 어떤 합의 또는 중재도 모르고 있을 수 있다.
중재는 모순되는 고장 보고를 제출하는 노드들 간의 중재를 포함할 수 있다. 예를 들어, 제1 노드가 제2 노드를 모니터링하고 있고 제2 노드도 역시 제1 노드를 모니터링하고 있는 경우, 각각의 노드는 상대방 노드가 고장난 것으로 의심된다고 보고할 수 있다. 의심되는 고장은 본 문서에서 이전에 기술한 것들을 비롯한 거의 모든 고장 검출 메커니즘을 사용하여 검출될 수 있다.
고장 노드 리스트(1947)는 고장난 노드인 것으로 의심된다고 보고된 노드들의 리스트를 포함할 수 있다. 노드들은 다른 노드들을 고장난 것으로 의심된다고 중재자(1983)에게 보고할 수 있고, 적절한 경우, 중재자(1983)는 보고된 노드들을 고장 노드 리스트(1947)에 포함시킬 수 있다. 중재자(1983)는 적절한 기간 후에(예를 들어, 모순이 계속될 가능성이 없을 장래의 시간에) 고장 노드 리스트(1947)로부터 고장난 노드를 제거할 수 있다. 예를 들어, 고장 노드 리스트(1947) 내의 엔트리들은 이들이 고장 노드 리스트(1947)에 삽입된 후 복구 시간 구간(recovery time interval)(1942)에 제거될 수 있다. 복구 시간 구간(1942)은 고장난 것으로 보고되었던 노드들이 진짜로 고장나는지를 확인하기에 충분히 길 수 있다.
도 21은 노드 고장이 의심된다는 모순되는 보고들 간의 중재를 하는 방법(2100)의 흐름도의 일례를 나타낸 것이다. 방법(2100)은 도 19C에 도시된 컴포넌트 및 데이터와 관련하여 설명될 것이다.
방법(2100)은 제1 노드가 제2 노드가 고장난 것으로 의심된다는 보고를 중재 기관으로 전송하는 동작(동작 2101)을 포함한다. 예를 들어, 노드(1981)는 보고(1934)를 중재자(1983)로 전송할 수 있다. 방법(2100)은 중재자가 제2 노드가 고장난 것으로 의심된다는 보고를 제1 노드로부터 수신하는 동작(동작 2102)을 포함한다. 예를 들어, 중재자(1983)는 보고(1934)를 노드(1981)로부터 수신할 수 있다.
방법(2100)은 중재자가, 제1 노드로부터 보고를 수신하기 전에, 지정된 복구 시간 구간 내에 제1 노드가 고장난 것으로 의심하는 다른 노드가 없는지를 판정하는 동작(동작 2103)을 포함한다. 예를 들어, 중재자(1983)는 복구 시간 구간(1942) 내에 노드(1981)가 고장난 것으로 의심하는 다른 노드가 없는지를 판정할 수 있다(그 후에 중재자(1983)는 어쨋든 노드(1981)를 고장 노드 리스트(1947)로부터 제거하게 됨).
방법(2100)은 중재자가 제2 노드가 고장 상태에 있다는 것을 리스트에 기록하는 동작(동작 2105)을 포함한다. 예를 들어, 중재자(1983)는 노드(1982)(ID=64)가 고장 상태에 있다는 것을 고장 노드 리스트(1947)에 기록할 수 있다.
방법(2100)은 중재자가 최대 응답 시간 구간 내에 수락 메시지를 제1 노드로 전송하는 동작 - 이 수락 메시지는 제2 노드가 고장 상태로 전이하도록 보장되는 기간을 나타내는 고장 시간 값을 포함함 - (동작 2104)을 포함한다. 예를 들어, 중재자(1983)는 보고(1934)의 수신으로부터 최대 응답 시간 구간 내에 수락 메시지(1984)를 노드(1981)로 전송할 수 있다. 수락 메시지(1984)는 노드(1982)가 고장 상태로 전이하도록 보장되는 시간을 나타내는 고장 시간 구간(1936)을 포함한다. 일반적으로, 최대 응답 시간 구간은 요청자(예를 들어, 노드(1981 또는 1982))가 중재 기관(중재자(1983))이 중재 요청(예를 들어, 보고(1934 또는 1938))에 응하지 않을 것이라고 가정하는 시점을 나타낸다. 요청자가 중재 요청을 전송한 후에 최대 응답 시간 구간이 만료될 때, 요청자는 분명한 거부 메시지가 수신된 경우에 수행되는 것들과 유사한(어쩌면 동일한) 동작을 수행한다.
방법(2100)은 제1 노드가 최대 응답 시간 구간 내에 중재 기관으로부터 수락 메시지를 수신하는 동작 - 이 수락 메시지는 제2 노드가 고장 상태로 전이하도록 보장되는 기간을 나타내는 시간 값을 포함함 - (동작 2106)을 포함한다. 예를 들어, 노드(1981)는 고장 시간 구간(1936)을 포함하는 수락 메시지(1984)를 중재자(1983)로부터 수신할 수 있다. 고장 시간 구간(1936)은 노드(1982)가 고장 상태로 전이하도록 보장되는 시간을 나타낸다. 따라서, 고장 시간 구간(1936)의 만료 이후에, 노드(1981)는 이전에 노드(1982)에 의해 제어되었던 하나 이상의 링 자원들의 제어를 청구할 수 있다.
방법(2100)은 이 기간의 만료 후에 제1 노드가 이전에 제2 노드에 의해 제어되었던 하나 이상의 링 자원들의 제어를 청구하는 동작(동작 2107)을 포함한다. 예를 들어, 노드(1981)는 고장 시간 구간(1936)의 만료 후에 이전에 노드(1982)에 의해 제어되었던 링(1901) 내의 하나 이상의 링 자원들의 제어를 청구할 수 있다.
청구된 링 자원들은 고장 상태로 전이하기 전에 노드(1982)에 의해 제어된 링 자원들에 따라 다를 수 있다. 예를 들어, 노드(1981)는 노드(1982)의 메시지 라우팅 책임(예를 들어, 링(1901) 상의 일정 범위의 ID로 보내지는 메시지를 수신할 책임), 노드(1982)의 씨드 노드 책임, 노드(1982)의 중재 책임 등을 떠맡을 수 있다.
제1 노드가 제2 노드에게 보고하는 때 또는 그 후에, 제2 노드도 제1 노드가 고장난 것으로 의심할 수 있다. 예를 들어, 노드(1982)도 노드(1981)가 고장난 것으로 의심할 수 있다.
방법(2100)은 제2 노드가 제1 노드가 고장난 것으로 의심된다는 보고를 중재 기관으로 전송하는 동작(동작 2108)을 포함한다. 예를 들어, 노드(1982)는 노드(1981)가 고장난 것으로 의심된다는 보고(1934)를 중재자(1983)로 전송할 수 있다. 방법(2100)은 중재자가 제1 노드가 고장난 것으로 의심된다는 보고를 제2 노드로부터 수신하는 동작 - 제2 노드로부터의 보고는 제1 노드로부터 보고를 수신한 후 지정된 복구 시간 구간 내에 수신됨 - (동작 2109)을 포함한다. 예를 들어, 중재자(1983)는 보고(1934)를 수신하고나서 복구 시간 구간(1942) 내에 노드(1981)가 고장난 것으로 의심된다는 보고(1938)를 노드(1982)로부터 수신할 수 있다.
방법(2100)은 중재자가 제2 노드가 고장 상태로 전이하는지를 판정하기 위해 리스트를 참조하는 동작(동작 2110)을 포함한다. 예를 들어, 중재자(1983)는 노드(1982)(ID=64)가 고장 상태로 전이하는지를 판정하기 위해 고장 노드 리스트(1947)를 참조할 수 있다.
방법(2100)은 제2 노드가 고장 상태로 전이하도록 하기 위해 거부 메시지를 제2 노드로 전송하는 동작(동작 2111)을 포함한다. 예를 들어, 중재자(1983)는 노드(1982)가 고장 상태로 전이하도록 하기 위해 거부 메시지(1985)를 노드(1982)로 전송할 수 있다. 방법(2100)은 제2 노드가 거부 메시지를 중재 기관으로부터 수신하는 동작(동작 2112)을 포함한다. 예를 들어, 노드(1982)는 거부 메시지(1985)를 중재자(1983)로부터 수신할 수 있다.
방법(2100)은 제2 노드가 고장 상태로 전이하는 동작(동작 2113)을 포함한다. 예를 들어, 노드(1982)는 거부 메시지(1985)를 수신한 것에 응답하여 고장 상태로 전이할 수 있다. 고장 후에, 노드(1982)는 나중에 링(1901)에 재가입하려고 할 수 있다.
캐싱된 합의에 따른 라우팅
일부 실시예들에서, 메시지들이 캐싱된 라우팅 합의(cached routing agreement)에 따라 라우팅된다. 예를 들어, 링의 인접한 노드들은 인접한 노드들 간의 일정 범위의 미점유 ID들에 대한 책임의 분할에 합의할 수 있다. ID는 여러가지 이유로 미점유일 수 있다. 예를 들어, ID는 할당되지 않았기 때문에 미점유일 수 있다(즉, 노드에 할당되지 않은 ID). 할당된 ID(즉, 노드에 할당된 ID)의 경우, 대응하는 노드의 전원을 일부러 끄거나, 다른 이유로, 예를 들어, 통신 또는 노드 고장 등으로 인해, 노드에 도달할 수 없기 때문에 ID가 미점유일 수도 있다.
노드들 간의 라우팅 합의는 노드가 인접한 노드들의 책임인 미점유 ID들 중 임의의 것에 대한 메시지를 수락하거나 메시지를 전달하도록 허용되기 전에 설정되어 캐싱될 수 있다. 캐싱된 라우팅 합의에 대한 참조는 (어쩌면) 인접한 노드들 간의 통신을 상당히 감소시킨다(그렇지 않은 경우, 어느 노드가 특정의 미점유 ID를 책임지고 있는지를 판정하기 위해 통신이 행해질 수 있음).
캐싱된 라우팅 합의는 구성가능한 규칙들에 따라 또는 고정된 방법에 따라 일정 범위의 미점유 ID들을 임의적인 방식으로 분할할 수 있다. 일부 실시예들에서, 링 상에서 인접한 노드들 간의 일정 범위의 ID들은 본질적으로 1/2로 분할된다. 이것은 미점유 ID가 미점유 ID를 책임지고 있는 노드로부터 더 멀리 떨어져 있을 가능성을 감소시킨다.
인접한 노드들 간에 짝수개의 미점유 ID가 있을 때, 인접한 노드들 간의 중간점은 미점유 ID들 사이에 있다. 따라서, 미점유 ID에 대한 책임은 인접한 노드들 간의 중간점에서 분할될 수 있다. 그에 따라, 각각의 인접한 노드는 똑같은 수의 미점유 ID에 대한 책임을 배정받을 수 있다.
반면에, 인접한 노드들 간에 홀수개의 미점유 ID가 있는 경우, 인접한 노드들 간의 중간점은 미점유 ID에 있다. 따라서, 미점유 ID에 대한 책임은 중간점인 미점유 ID의 한쪽 또는 다른 한쪽에서 분할된다. 그에 따라, 한쪽의 인접한 노드는 다른쪽의 인접한 노드보다 하나 더 많은 미점유 ID에 대한 책임을 배정받을 수 있다.
예를 들어, 이제 도 22A를 참조하면, 도 22A는 노드들 간의 캐싱된 2자간 합의에 따라 메시지를 라우팅하는 것을 용이하게 하는 예시적인 링 아키텍처(2200)를 나타낸 것이다. 도시된 바와 같이, 노드(2201, 2202, 2203, 2261, 2262, 2263)(이에 제한되지 않음)를 포함하는 다양한 노드(링(2250) 상에 정사각형으로 도시됨)가 링(2250) 상에 포함되어 있다. 각각의 노드는 링(2250) 상에서의 그의 위치를 나타내는 대응하는 ID(괄호 안에 표시됨)를 갖는다. 예를 들어, 노드(2201)는 ID=64를 가지며, 노드(2202)는 ID=30을 갖는다.
도시된 노드들 사이에 일정 범위의 미점유 ID들이 있다. 예를 들어, 미점유 ID 범위(2211)는 노드(2202)와 노드(2201) 사이의 미점유 ID 31 내지 63을 나타낸다.
도시된 바와 같이, 노드(2201, 2202)는 설정되어 캐싱된 2자간 합의(2223)를 갖는다. 예를 들어, 이전의 통신을 통해, 노드(2201, 2202)는 ID=64와 ID=30 사이에 현재 산재되어 있는 다른 노드가 없는지를 판정할 수 있다. 따라서, 노드(2201, 2202)는 추가적으로 자신들이 링(2250) 상에서 서로 인접해 있는지를 판정할 수 있다. 그에 따라, 노드(2201, 2202)는 노드(2202)가 미점유 ID 범위(2211)의 일부분에 대해서 책임을 지고 노드(2201)가 미점유 ID 범위(2211)의 나머지 부분에 대해서 책임을 지도록 미점유 ID 범위(2211)(즉, 미점유 ID 31 내지 63)에 대한 책임을 분할할 수 있다. 각각의 노드는 또한 그의 할당된 ID에 대해 책임을 진다. 즉, 노드(2202)는 ID=30에 대해 책임을 지고, 노드(2201)는 ID=64에 대해 책임을 진다.
그에 따라, 책임 경계(2213)(미점유 ID(47)와 미점유 ID(48) 사이에 있음)로 나타낸 바와 같이, 노드(2202)(ID=30)는 그 자신은 물론 미점유 ID 31 내지 47에 대해 책임을 지고 노드(2201)(ID=64)는 그 자신은 물론 미점유 ID(48 내지 63)에 대해 책임을 진다. 노드(2201)와 노드(2202) 사이의 중간점이 미점유 ID(47)에 있지만, 각각의 미점유 ID가 단일의 노드의 책임이 되도록 노드(2202)가 미점유 ID(47)에 대한 책임을 배정받는다. 따라서, 앞서 설명한 바와 같이, 책임 경계가 미점유 ID 상에 있을 때, 인접한 노드들 중 하나가 미점유 ID에 대한 단독 책임을 배정받을 수 있다.
도 24는 캐싱된 2자간 합의에 따라 메시지를 라우팅하는 방법(2400)의 흐름도의 일례를 나타낸 것이다. 방법(2400)은 도 22A의 링 아키텍처(2200)에 도시된 노드 및 메시지와 관련하여 설명될 것이다.
방법(2400)은 수신측 노드가 노드들의 링 상의 목적지를 나타내는 목적지 ID와 함께 메시지를 수신하는 동작 - 이 목적지 ID는 수신측 노드와 직속 이웃 노드들 중 하나 사이에 위치함 - (동작 2401)을 포함한다. 예를 들어, 노드(2201)는 ID=55로 전달하도록 표시된 메시지(2251)를 수신할 수 있다. 대안으로서, 노드(2201)는 ID=39로 전달하도록 표시된 메시지(2252)를 수신할 수 있다. 메시지(2251, 2252)는 링(2250) 내의 다른 노드로부터(링내 통신(intra-ring communication)), 링 아키텍처(2200)의 다른 링 내의 노드로부터(링간 통신(inter-ring communication)), 또는 비링 통신(non-ring communication)을 통해 수신될 수 있다.
방법(2400)은 수신측 노드가 메시지를 수신할 그 다음 해당 노드를 결정하기 위해 수신측 노드와 직속 이웃 노드 간의 캐싱된 2자간 합의를 참조하는 동작(동작 2402)을 포함한다. 2자간 합의는 적어도 수신측 노드와 직속 이웃 노드 사이의 ID 공간에 대한 책임의 분할을 암시한다. 예를 들어, 노드(2201)는 메시지(2251)를 처리할 그 다음 해당 노드를 결정하기 위해 캐싱된 2자간 합의(2223)을 참조할 수 있다. 캐싱된 2자간 합의(2223)가 노드(2201)(ID=64)가 미점유 ID(55)에 대한 책임을 지고 있음을 나타내기 때문에, 노드(2201)는 자신이 메시지(2251)를 처리할 해당 노드인 것으로 판정한다. 마찬가지로, 노드(2201)는 메시지(2252)를 처리할 그 다음 해당 노드를 결정하기 위해 캐싱된 2자간 합의(2223)를 참조할 수 있다. 캐싱된 2자간 합의(2223)가 노드(2202)(ID=30)가 미점유 ID(39)에 대한 책임을 지는 것으로 나타내고 있기 때문에, 노드(2201)는 노드(2202)가 메시지(2252)를 처리할 그 다음 해당 노드인 것으로 판정한다.
방법(2400)은 그 다음 해당 노드의 판정에 기초하여 메시지를 그 다음 해당 컴포넌트로 전송하는 동작(동작 2403)을 포함한다. 예를 들어, 노드(2201)는 메시지(2251)를 미점유 ID(55)에 대응하는 그의 자원 핸들러 인스턴스(resource handler instance)에 제공할 수 있는데, 그 이유는 캐싱된 2자간 합의(2223)가 노드(2201)가 미점유 ID(55)에 대해 책임을 지는 것으로 나타내기 때문이다. 대안으로서, 노드(2201)는 메시지(2252)를 노드(2202)에 제공할 수 있는데, 그 이유는 캐싱된 2자간 합의(2223)가 노드(2202)가 미점유 ID(39)에 대해 책임을 지는 것으로 나타내기 때문이다. 그 후에, 노드(2202)는 메시지(2252)를 미점유 ID(39)에 대응하는 그의 자원 핸들러 인스턴스에 제공할 수 있다.
ID가 캐싱된 2자간 합의에 포함되어 있지 않을 때, 노드는 목적지 쪽으로 전진하기 위해 라우팅 테이블(예를 들어, 도 3에 도시됨)을 참조할 수 있다. 예를 들어, 노드(2201)는 ID=203으로 전달하도록 표시된 메시지(2253)를 노드(2261)(ID=200)로 전송할 수 있다. 노드(2261)는 이어서 ID(203)에 대해 책임을 질 노드를 판정하기 위해 그의 인접한 노드들과의 임의의 캐싱된 2자간 합의를 참조할 수 있다.
일부 실시예들에서, 다수의 2자간 합의는, 주어진 노드의 관점에서 볼 때, 본질적으로 주어진 노드, 주어진 노드의 직속 선행 노드 및 주어진 노드의 직속 후속 노드 간의 3자간 합의를 나타낼 수 있다. 도 22B는 다수의 캐싱된 2자간 합의에 따라 메시지를 라우팅하는 것을 용이하게 하는 예시적인 링 아키텍처(2200)를 나타낸 것이다.
앞서 설명한 바와 같이, 노드(2201, 2202)는 캐싱된 2자간 합의(2223)를 설정할 수 있다. 유사하게, 노드(2201, 2203)는 미점유 ID 범위(2212)(즉, 미점유 ID 65 내지 101)에 대한 책임을 분할하기 위해 캐싱된 2자간 합의(2224)를 설정할 수 있다. 따라서, 이전의 통신을 통해, 노드(2201, 2203)는 ID=65와 ID=101 사이에 현재 산재되어 있는 다른 노드가 없는지를 판정할 수 있다. 따라서, 노드(2201, 2203)는 추가적으로 자신들이 링(2250) 상에서 서로 인접해 있는지를 판정할 수 있다. 그에 따라, 노드(2201, 2203)는 노드(2203)가 미점유 ID 범위(2212)의 일부분에 대한 책임을 지고 노드(2201)가 미점유 ID 범위(2212)의 나머지 부분에 대해 책임을 지도록 미점유 ID 범위(2212)를 분할할 수 있다. 그에 따라, 2자간 합의(2224) 내에 나타낸 바와 같이, 노드(2201)(ID=64)는 그 자신은 물론 미점유 ID 65 내지 82에 대해 책임을 지고 노드(2203)(ID=101)는 그 자신은 물론 미점유 ID 범위(83 내지 100)에 대해 책임을 진다.
노드(2201)의 관점에서 볼 때, 캐싱된 2자간 합의(2223)와 캐싱된 2자간 합의(2224)의 결합은 본질적으로 3자간 합의(2273)가 된다. 즉, 노드(2201)는 노드(2201)와 노드(2202) 사이의 ID 공간의 일부분에 대해 책임을 지고 노드(2201)와 노드(2203) 사이의 ID 공간의 일부분에 대해 책임을 진다. 괄호로 표시된 ID 범위는 책임의 범위(즉, 47 내지 64 및 64 내지 82)가 노드(2201)의 양측에서의 캐싱된 2자간 합의(2223, 2224)를 형성한다는 것을 나타낸다.
도25는 다수의 캐싱된 2자간 합의에 따라 메시지를 라우팅하는 방법(2500)의 흐름도의 일례를 나타낸 것이다. 방법(2500)은 도 22B의 링 아키텍처(2200)에 나타낸 노드 및 메시지와 관련하여 설명될 것이다.
방법(2500)은 수신측 노드가 노드들의 링 상의 목적지를 나타내는 목적지 ID와 함께 메시지를 수신하는 동작(동작 2501)을 포함한다. 예를 들어, 노드(2201)는 ID=55, ID=39, ID=203, ID=74, ID=94로 전달하도록 각각 표시된 메시지(2251, 2252, 2253, 2254, 2256) 중 임의의 것을 수신할 수 있다. 메시지(2251, 2252, 2253, 2254, 2256)는 링(2250) 내의 다른 노드로부터(링내 통신), 링 아키텍처(2200)의 다른 링 내의 노드로부터(링간 통신), 또는 비링 통신을 통해 수신될 수 있다.
방법(2500)은 수신측 노드가 메시지를 수신할 그 다음 해당 노드를 결정하기 위해 선행 노드와의 제1 캐싱된 2자간 합의 및 후속 노드와의 제2 캐싱된 2자간 합의를 참조하는 동작(동작 2502)을 포함한다. 제1 및 제2 캐싱된 2자간 합의는 적어도 선행 노드와 후속 노드 간의 ID 공간에 대한 책임의 분할을 암시한다. 예를 들어, 노드(2201)는 메시지(2251, 2252, 2253, 2254, 2256) 중 임의의 것을 수신할 그 다음 해당 노드를 결정하기 위해 캐싱된 3차 합의(2223, 2224)를 참조할 수 있다.
캐싱된 2자간 합의(2223)가 노드(2202)(ID=30)가 미점유 ID(39)에 대해 책임을 지는 것으로 나타내고 있기 때문에, 노드(2201)는 노드(2202)가 메시지(2252)를 처리할 그 다음 해당 노드인 것으로 판정한다. 이러한 캐싱된 2자간 합의(2223)가 노드(2201)(ID=64)가 미점유 ID(55)에 대해 책임을 지는 것으로 나타내고 있기 때문에, 노드(2201)는 자신이 메시지(2252)를 처리할 해당 노드인 것으로 판정한다. 캐싱된 2자간 합의(2224)가 노드(2201)(ID=64)가 미점유 ID(74)에 대해 책임을 지는 것으로 나타내고 있기 때문에, 노드(2201)는 자신이 메시지(2254)를 처리할 해당 노드인 것으로 판정한다. 캐싱된 2자간 합의(2224)가 노드(2203)(ID=101)가 미점유 ID(94)에 대해 책임을 지는 것으로 나타내고 있기 때문에, 노드(2201)는 노드(2203)가 메시지(2254)를 처리할 그 다음 해당 노드인 것으로 판정한다.
방법(2500)은 그 다음 해당 노드의 결정에 기초하여 메시지를 그 다음 해당 컴포넌트로 전송하는 동작(동작 2503)을 포함한다. 예를 들어, 노드(2201)는 메시지(2251, 2252, 2253, 2254, 2256)를 처리할 그 다음 해당 노드의 결정에 기초하여 링(2250) 상의 그 다음 해당 컴포넌트로 메시지(2251, 2252, 2253, 2254, 2256)를 전송할 수 있다.
예를 들어, 노드(2201)는 메시지(2252)를 노드(2202)에 제공할 수 있는데, 그 이유는 캐싱된 2자간 합의(2223)가 노드(2202)가 미점유 ID(39)에 대해 책임지는 것으로 나타내고 있기 때문이다. 그 다음에, 노드(2202)는 메시지(2252)를 미점유 ID(39)에 대응하는 그의 자원 핸들러 인스턴스에 제공할 수 있다. 노드(2201)는 메시지(2251)를 미점유 ID(55)에 대응하는 그의 자원 핸들러 인스턴스에 제공할 수 있는데, 그 이유는 캐싱된 2자간 합의(2223)가 노드(2201)가 미점유 ID(55)에 대해 책임을 지는 것으로 나타내고 있기 때문이다. 노드(2201)는 메시지(2254)를 미점유 ID(74)에 대응하는 그의 자원 핸들러 인스턴스에 제공할 수 있는데, 그 이유는 캐싱된 2자간 합의(2224)가 노드(2201)가 미점유 ID(74)에 대해 책임을 지는 것으로 나타내고 있기 때문이다. 노드(2201)는 메시지(2256)를 노드(2203)에 제공할 수 있는데, 그 이유는 캐싱된 2자간 합의(2224)가 노드(2203)가 미점유 ID(94)에 대해 책임을 지는 것으로 나타내고 있기 때문이다. 그 다음에, 노드(2203)는 메시지(2256)를 미점유 ID(94)에 대응하는 그의 자원 핸들러 인스턴스에 제공할 수 있다.
ID가 다수의 캐싱된 2자간 합의 중 어느 것에도 포함되어 있지 않을 때, 노드는 목적지 쪽으로 전진하기 위해 라우팅 테이블(예를 들어, 도 3에 도시됨)을 참조할 수 있다. 예를 들어, 노드(2201)는 ID=203으로 전달하도록 표시된 메시지(2253)를 노드(2261)(ID=200)로 전송할 수 있다. 노드(2261)는 이어서 메시지(2253)을 수신할 그 다음 해당 컴포넌트를 결정하기 위해 그의 선행 노드 및/또는 그의 후속 노드와의 임의의 캐싱된 2자간 합의를 참조할 수 있다.
캐싱된 합의 작성
링은 때때로, 예를 들어, 새로운 노드가 링에 가입할 때 또는 기존의 노드가 링을 탈퇴할 때와 같은 때에 (예를 들어, 무리없는 제거를 통해, 노드 모니터링의 결과로서, 중재자에의 위임을 통하는 등에 의해) 재구성될 수 있다. 노드가 링의 구성이 변했음을 검출할 때, 노드는 임의의 인접한 노드들과의 캐싱된 라우팅 합의를 재작성(reformulate)할 수 있다. 합의 재작성 동안에, 노드는 합의를 작성하기 위한 메시지를 제외한 임의의 수신된 메시지를 큐잉할 수 있다. 합의의 작성이 완료된 후에, 노드는 이 합의에 따라 메시지를 처리할 수 있다.
링의 재구성에 의해 다수의 라우팅 합의가 재작성되어야만 할 수 있다. 예를 들어, 노드가 링을 탈퇴할 때, 탈퇴하는 노드의 양측에 있는 바로 인접한 노드들은 이전에 탈퇴하는 노드의 책임이었던 미점유 ID의 범위에 대한 합의를 작성할 수 있다(따라서 어쩌면 부가의 미점유 ID에 대한 책임을 맡을 수 있음). 이러한 재작성은 탈퇴하는 노드에 속하는 미점유 ID의 범위의 일부분에 대한 책임을 각각의 바로 인접한 노드의 미점유 ID의 범위와 결합시킨다. 즉, 각각의 바로 인접한 노드는 탈퇴하는 노드의 미점유 ID 범위의 일부분 및 탈퇴하는 노드의 ID에 대한 책임을 맡는다.
도 23A 내지 도 23D는 캐싱된 2자간 합의를 작성하는 것을 용이하게 하는 예시적인 링 아키텍처(2300)를 나타낸 것이다. 도 23A에 도시된 바와 같이, 노드(2301, 2302)는 책임 경계(2313)(미점유 ID(47)와 미점유 ID(48) 사이에 있음)에서 미점유 ID 범위(2312)(즉, 미점유 ID 31 내지 63)에 대한 책임을 분할하는 캐싱된 2자간 합의(2323)를 작성하였다. 유사하게, 노드(2302, 2362)는 책임 경계(2333)(미점유 ID(14)와 미점유 ID(15) 사이에 있음)에서 미점유 ID 범위(2311)(즉, 미점유 ID 255 내지 29)에 대한 책임을 분할하는 캐싱된 2자간 합의(2343)를 작성하였다.
캐싱된 2자간 합의(2323, 2343)의 작성 이후 언젠가, 노드(2302)는 (예를 들어, 무리없는 제거를 통해, 노드 모니터링의 결과로서, 중재자로부터의 지시에 기초하는 등에 의해) 링(2350)을 탈퇴할 수 있다. 이제 도 23B를 참조하면, 노드(2302)가 링(2350)을 탈퇴한 후에, 이전에 노드(2302)의 책임이었던 미점유 ID들에 대해 책임지는 노드가 없다. 미점유 ID 범위(2313)(미점유 ID 15 내지 47. 이제 미점유 ID 30을 포함함)는 노드(2302)가 링(2350)을 탈퇴하기 전에 책임지고 있었던 미점유 ID의 범위를 나타낸다.
노드(2302)가 링(2350)을 탈퇴한 것에 응답하여, 노드(2301, 2362)는 새로운 직속 이웃 노드들을 식별하려고 한다. 노드(2362)는 새로운 직속 후속 노드(즉, 노드(2362)에 대해 노드(2302)와 동일한 방향에 있는 직속 이웃 노드)를 식별하려고 한다. 노드(2301)는 새로운 직속 선행 노드(즉, 노드(2301)에 대해 노드(2302)와 동일한 방향에 있는 직속 이웃 노드)를 식별하려고 한다. 도 23B에서, 노드(2362)는 노드(2301)를 그의 새로운 직속 후속 노드로 식별하고 노드(2301)는 노드(2362)를 그의 새로운 직속 선행 노드로 식별한다.
새로운 직속 이웃 노드를 식별할 시에, 노드(2362, 2301)는 미점유 ID 범위(2314)(미점유 ID 255 내지 63. 이제 미점유 ID 30을 포함함)에 대한 책임을 분할하는 캐싱된 2자간 합의(2363)를 작성한다. 미점유 ID 범위(2314)는 이전에 노드(2302)의 책임이었던 미점유 ID 범위(2313)를 포함한다. 따라서, 미점유 ID 범위(2313)의 일부분은, 노드(2302)가 링(2350)을 탈퇴한 후, 노드(2362) 또는 노드(2301)의 책임으로 될 수 있다.
그에 따라, 책임 경계(2353)(미점유 ID(31)와 미점유 ID(32) 사이에 있음)으로 나타낸 바와 같이, 노드(2362)(ID=254) 및 노드(2301)(ID=30)는 캐싱된 2자간 합의(2363)를 작성한다. 캐싱된 2자간 합의(2363)에 따라, 노드(2362)(ID=254)는 그 자신은 물론 미점유 ID 255 내지 31에 대해 책임을 지고, 노드(2301)(ID=64)는 그 자신은 물론 ID 범위(32 내지 63)에 대해 책임을 진다. 노드(2201)와 노드(2202) 사이의 중간점이 미점유 ID(31)에 있지만, 각각의 미점유 ID가 단일의 노드의 책임이 되도록 노드(2362)가 미점유 ID(31)에 대한 책임을 배정받는다.
노드(2302)의 탈퇴와 캐싱된 2자간 합의(2363)의 작성 사이의 시간 동안에, 노드(2301, 2362)는 255와 63 사이의 범위에 있는 ID로 전달하도록 표시된 메시지를 처리하지 않는다. 그 대신에, 노드(2301, 2362)는 캐싱된 2자간 합의(2363)를 작성하기 위한 메시지를 제외한 임의의 메시지를 큐잉한다. 캐싱된 2자간 합의(2363)의 작성이 완료된 후에, 노드(2301, 2362)는 캐싱된 2자간 합의(2363)에 따라 메시지를 처리할 수 있다.
새로운 노드가 2개의 기존의 노드 사이에서 링에 가입할 때, 각각의 기존의 노드는 새로운 노드와의 라우팅 합의를 작성할 수 있다(따라서 어쩌면 미점유 ID들 중 일부분에 대한 책임을 포기할 수 있음). 이 작성은 본질적으로 기존의 노드가 책임지고 있는 일정 범위의 미점유 ID를 가입하는 노드와 기존의 노드 간에 분할할 수 있다. 즉, 각각의 기존의 노드는 어쩌면 기존의 노드의 미점유 ID의 일부분에 대한 책임을 가입하는 노드에게 넘길 수 있다.
이제 도 23C를 참조하면, 캐싱된 2자간 합의(2363)의 작성 후 언젠가, 노드(2304)(ID=44)가 링(2350)에 가입할 수 있다. 노드(2304)가 링(2350)에 가입한 후에, 노드(2362)는 노드(2304)를 그의 직속 후속 노드로서 검출할 수 있다. 마찬가지로, 노드(2301)는 노드(2304)를 그의 직속 선행 노드로서 검출할 수 있다. 각각의 검출에 응답하여, 미점유 ID 범위(2314)는 본질적으로 미점유 ID 범위(2315)(미점유 ID 255 내지 43) 및 미점유 ID 범위(2316)(미점유 ID 45 내지 63)로 분할된다. 미점유 ID 범위(2315, 2316)에 대한 책임을 분할하기 위해 새로운 캐싱된 2자간 합의가 작성될 수 있다.
이제 도 23D를 참조하면, 노드(2304)를 새로운 직속 후속 노드로서 식별할 시에, 노드(2362, 2304)는 미점유 ID 범위(2315)(미점유 ID 255 내지 43)에 대한 책임을 분할하는 캐싱된 2자간 합의(2394)를 작성한다. 미점유 ID 범위(2315)는 이전에 노드(2362)의 책임이었던 미점유 ID 범위(2314)의 일부분을 포함하고, 이 경우에 그의 일부는 이전에 노드(2301)의 책임이었다. 따라서, 노드(2362) 또는 노드(2301)의 책임이었던 미점유 ID 범위(2314)의 일부분은 노드(2304)가 링(2350)에 가입할 때 노드(2304)의 책임으로 될 수 있다.
그에 따라, 책임 경계(2393)(미점유 ID(23)와 미점유 ID(24) 사이에 있음)로 나타낸 바와 같이, 노드(2362)(ID=254) 및 노드(2304)(ID=44)는 캐싱된 2자간 합의(2394)를 작성한다. 캐싱된 2자간 합의(2394)에 따라, 노드(2362)(ID=254)는 그 자신은 물론 미점유 ID 255 내지 23에 대해 책임을 지고, 노드(2304)(ID=44)는 그 자신은 물론 ID 범위(24 내지 43)에 대해 책임을 진다. 노드(2201)와 노드(2202) 사이의 중간점이 미점유 ID 23에 있지만, 노드(2362)는 각각의 미점유 ID가 단일의 노드의 책임이 되도록 미점유 ID 23에 대한 책임을 배정받는다.
마찬가지로, 노드(2304)를 새로운 직속 선행 노드로서 식별할 시에, 노드(2301, 2304)는 미점유 ID 범위(2316)(미점유 ID 45 내지 64)에 대한 책임을 분할하는 캐싱된 2자간 합의(2383)를 작성한다. 미점유 ID 범위(2316)는 이전에 노드(2301)의 책임이었던 미점유 ID 범위(2314)의 일부분을 포함한다. 따라서, 노드(2301)의 책임이었던 미점유 ID 범위(2314)의 일부분은 노드(2304)가 링(2350)에 가입할 때 노드(2304)의 책임으로 될 수 있다.
그에 따라, 책임 경계(2373)(미점유 ID 54와 미점유 ID 55 사이에 있음)로 나타낸 바와 같이, 노드(2304)(ID=44) 및 노드(2301)(ID=64)는 캐싱된 2자간 합의(2383)를 작성한다. 캐싱된 2자간 합의(2383)에 따라, 노드(2304)(ID=44)는 그 자신은 물론 미점유 ID 45 내지 54에 대해 책임을 지고, 노드(2301)(ID=64)는 그 자신은 물론 ID 범위(55 내지 63)에 대해 책임을 진다. 노드(2201)와 노드(2202) 사이의 중간점이 미점유 ID 543에 있지만, 노드(2304)는 각각의 미점유 ID가 단일의 노드의 책임이 되도록 미점유 ID 54에 대한 책임을 배정받는다.
노드(2304)의 가입과 캐싱된 2자간 합의(2394)의 작성 사이의 시간 동안에, 노드(2362, 2304)는 255와 43 사이의 범위에 있는 ID로 전달하도록 표시된 메시지를 처리하지 않는다. 그 대신에, 노드(2362, 2304)는 캐싱된 2자간 합의(2394)를 작성하기 위한 메시지를 제외한 임의의 메시지를 큐잉한다. 캐싱된 2자간 합의(2394)의 작성이 완료된 이후에, 노드(2362, 2304)는 캐싱된 2자간 합의(2394)에 따라 메시지를 처리할 수 있다.
유사하게, 노드(2304)의 가입과 캐싱된 2자간 합의(2383)의 작성 사이의 시간 동안에, 노드(2304, 2301)는 45와 63 사이의 범위에 있는 ID로 전달하도록 표시된 메시지를 처리하지 않는다. 그 대신에, 노드(2304, 2301)는 캐싱된 2자간 합의(2383)를 작성하기 위한 메시지를 제외한 임의의 메시지를 큐잉한다. 캐싱된 2자간 합의(2383)의 작성이 완료된 후에, 노드(2304, 2301)는 캐싱된 2자간 합의(2383)에 따라 메시지를 처리할 수 있다.
노드(2304)의 관점에서 볼 때, 캐싱된 2자간 합의(2394)와 캐싱된 2자간 합의(2383)의 결합은 본질적으로 노드(2304), 노드(2362) 및 노드(2301) 간의 대응하는 3자간 합의(도시 생략)가 될 수 있다. 노드(2304)의 관점에서 볼 때, 대응하는 3자간 합의는 ID=254 내지 ID=64(경계값을 포함함)의 (할당된 및 미점유된) ID에 대한 책임을 정의한다.
도 26은 2자간 합의에 가입하는 방법(2600)의 흐름도의 일례를 나타낸 것이다. 방법(2600)은 도 23A 내지 도 23D에서의 노드 및 합의와 관련하여 설명될 것이다.
방법(2600)은 현재의 노드가 노드들의 링의 구성이 변했다는 표시에 액세스하는 동작 - 이 표시는 적어도 현재의 노드와 직속 이웃 노드 사이의 링 상의 미점유 ID에 대한 책임을 분할하는 2자간 합의를 작성할 필요가 있음을 나타냄 - (동작 2601)을 포함한다. 예를 들어, 도 23A 및 도 23B를 참조하면, 노드(2301) 및/또는 노드(2362)는, 예를 들어, 노드(2302)로부터, 노드(2302)의 모니터링을 통해, 또는 중재자로부터, 노드(2302)가 링(2350)을 탈퇴했다는 표시에 액세스할 수 있다. 노드(2302)가 링(2350)을 탈퇴했다는 표시는 미점유 ID 범위(2314)(미점유 ID 255 내지 63)에 대한 책임을 분할하는 2자간 합의를 작성할 필요성을 노드(2301) 및/또는 노드(2362)에게 알려준다.
대안으로서, 도 23C 및 도 23D를 참조하면, 노드(2301)는 노드(2304)가 링(2350)에 가입했다는 표시(예를 들어, 노드(2304)의 가입 프로세스의 일부로서 전송됨)에 액세스할 수 있다. 노드(2304)가 링(2350)에 가입했다는 표시는 미점유 ID 범위(2316)(미점유 ID 45 내지 63)에 대한 책임을 분할하는 2자간 합의를 작성할 필요성을 노드(2301)에게 알려준다. 유사하게, 노드(2362)는 노드(2304)가 링(2350)에 가입했다는 표시(예를 들어, 노드(2304)의 가입 프로세스의 일부로서 전송됨)에 액세스할 수 있다. 노드(2304)가 링(2350)에 가입했다는 표시는 미점유 ID 범위(2315)(미점유 ID 255 내지 43)에 대한 책임을 분할하는 2자간 합의를 작성할 필요성을 노드(2362)에게 알려준다.
방법(2600)은 현재의 노드와 직속 이웃 노드가 현재의 노드와 직속 이웃 노드 사이에 있는 미점유 ID들에 대한 책임을 분할하는 현재의 노드와 직속 이웃 노드 간의 책임 경계에 대해 합의하는 동작(동작 2602)을 포함한다. 현재의 노드와 책임 경계 사이의 미점유 ID들은 현재 노드의 책임이고, 책임 경계와 직속 이웃 노드 사이의 미점유 ID들은 직속 이웃 노드의 책임이다.
예를 들어, 도 23B를 참조하면, 노드(2301)와 노드(2362)는 본질적으로 미점유 ID 31과 32 사이에 있는 책임 경계(2353)에 대해 합의할 수 있다. 따라서, 노드(2301)와 책임 경계(2353) 사이에 있는 미점유 ID들(즉, 미점유 ID 32 내지 63)은 노드(2301)의 책임이다. 이와 마찬가지로, 책임 경계(2353)와 노드(2362) 사이에 있는 미점유 ID들(즉, 미점유 ID 255 내지 31)은 노드(2362)의 책임이다.
도 23D를 참조하면, 노드(2301)와 노드(2304)는 본질적으로 미점유 ID 54와 55 사이에 있는 책임 경계(2373)에 대해 합의할 수 있다. 따라서, 노드(2301)와 책임 경계(2373) 사이에 있는 미점유 ID들(즉, ID 55 내지 63)은 노드(2301)의 책임이다. 이와 마찬가지로, 책임 경계(2373)와 노드(2304) 사이의 미점유 ID들(즉, 미점유 ID 45 내지 54)은 노드(2304)의 책임이다.
계속하여 도 23D를 참조하면, 노드(2304)와 노드(2362)는 본질적으로 미점유 ID 23과 24 사이에 있는 책임 경계(2393)에 대해 합의할 수 있다. 따라서, 노드(2304)와 책임 경계(2393) 사이에 있는 ID들(즉, 미점유 ID 24 내지 43)은 노드(2304)의 책임이다. 이와 마찬가지로, 책임 경계(2393)와 노드(2362) 사이에 있는 미점유 ID들(즉, 미점유 ID 255 내지 23)은 노드(2362)의 책임이다.
도 6 및 이하의 설명은 본 발명이 구현될 수 있는 적합한 컴퓨팅 환경에 대한 간략하고 전반적인 설명을 제공하기 위한 것이다. 필수적인 것은 아니지만, 본 발명은 일반적으로 컴퓨터 시스템에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령어들과 관련하여 설명될 것이다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하거나 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 개체, 컴포넌트, 데이터 구조 등을 포함한다. 컴퓨터 실행가능 명령어, 관련 데이터 구조 및 프로그램 모듈은 본 명세서에 개시된 방법들의 동작들을 실행하는 프로그램 코드 수단의 일례를 나타낸다.
도 6을 참조하면, 본 발명을 구현하는 예시적인 시스템은 처리 장치(621), 시스템 메모리(622), 및 시스템 메모리(622)를 비롯한 각종 시스템 컴포넌트들을 처리 장치(621)에 연결시키는 시스템 버스(623)를 포함하는 컴퓨터 시스템(620) 형태의 범용 컴퓨팅 장치를 포함한다. 처리 장치(621)는 본 발명의 특징들을 포함한 컴퓨터 시스템(620)의 특징들을 구현하도록 설계된 컴퓨터 실행가능 명령어를 실행할 수 있다. 시스템 버스(623)는 메모리 버스 또는 메모리 컨트롤러, 주변장치 버스, 및 각종의 버스 아키텍처 중 임의의 것을 사용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 시스템 메모리는 판독 전용 메모리(ROM)(624) 및 랜덤 액세스 메모리(RAM)(625)를 포함한다. 시동 중과 같은 때에 컴퓨터 시스템(620) 내의 구성요소들 간의 정보 전송을 돕는 기본 루틴들을 포함하는 기본 입/출력 시스템(BIOS)(626)은 ROM(624)에 저장될 수 있다.
컴퓨터 시스템(620)은 또한 자기 하드 디스크(639)에 기록을 하거나 그로부터 판독을 하는 자기 하드 디스크 드라이브(627), 이동식 자기 디스크(629)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(628), 및, 예를 들어, CD-ROM 또는 기타 광 매체 등의 이동식 광 디스크(631)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(630)를 포함할 수 있다. 자기 하드 디스크 드라이브(627), 자기 디스크 드라이브(628), 및 광 디스크 드라이브(630)는 각각 하드 디스크 드라이브 인터페이스(632), 자기 디스크 드라이브 인터페이스(633), 및 광 드라이브 인터페이스(634)에 의해 시스템 버스(623)에 접속된다. 이들 드라이브 및 그와 연관된 컴퓨터 판독가능 매체는 컴퓨터 시스템(620)의 컴퓨터 실행가능 명령어, 데이터 구조, 프로그램 모듈, 및 기타 데이터의 비휘발성 저장을 제공한다. 본 명세서에 기술된 예시적인 실시예가 자기 하드 디스크(639), 이동식 자기 디스크(629) 및 이동식 광 디스크(631)를 이용하고 있지만, 자기 카세트, 플래쉬 메모리 카드, DVD(digital versatile disk), 베르누이 카트리지, RAM, ROM 등을 비롯한 데이터를 저장하는 다른 유형의 컴퓨터 판독가능 매체가 사용될 수 있다.
운영 체제(635), 하나 이상의 애플리케이션 프로그램(636), 기타 프로그램 모듈(637) 및 프로그램 데이터(638)를 비롯한 하나 이상의 프로그램 모듈을 포함하는 프로그램 코드 수단은 하드 디스크(639), 자기 디스크(629), 광 디스크(631), ROM(624) 또는 RAM(625) 상에 저장될 수 있다. 사용자는 키보드(640), 포인팅 장치(642), 또는 기타 입력 장치(도시 생략)(예를 들어, 마이크, 조이스틱, 게임 패드, 스캐너 등)를 통해 컴퓨터 시스템(620)에 명령 및 정보를 입력할 수 있다. 이들 및 기타 입력 장치는 시스템 버스(623)에 결합된 입/출력 인터페이스(646)를 통해 처리 장치(621)에 접속될 수 있다. 입/출력 인터페이스(646)는 논리적으로, 예를 들어, 직렬 포트 인터페이스, PS/2 인터페이스, 병렬 포트 인터페이스, USB(Universal Serial Bus) 인터페이스, 또는 IEEE(Institute of Electrical and Electronics Engineers) 1394 인터페이스(즉, FireWire 인터페이스) 등의 광범위한 서로 다른 인터페이스들 중 임의의 것을 나타내거나, 심지어 논리적으로 서로 다른 인터페이스들의 조합을 나타낼 수 있다.
모니터(647) 또는 다른 디스플레이 장치도 비디오 인터페이스(648)를 통해 시스템 버스(623)에 접속된다. 스피커(669) 또는 기타 오디오 출력 장치도 오디오 인터페이스(649)를 통해 시스템 버스(623)에 접속된다. 예를 들어, 프린터 등의 다른 주변 출력 장치(도시 생략)도 컴퓨터 시스템(620)에 접속될 수 있다.
컴퓨터 시스템(620)은, 예를 들어, 사무실 컴퓨터 네트워크(office-wide computer network) 또는 전사적 컴퓨터 네트워크(enterprise-wide computer network), 홈 네트워크, 인트라넷, 및/또는 인터넷 등의 네트워크에 접속가능하다. 컴퓨터 시스템(620)은 이러한 네트워크를 통해 외부 소스(예를 들어, 원격 컴퓨터 시스템, 원격 애플리케이션, 및/또는 원격 데이터베이스 등)와 데이터를 교환할 수 있다.
컴퓨터 시스템(620)은 네트워크 인터페이스(653)를 포함하며, 이 네트워크 인터페이스(653)를 통해 컴퓨터 시스템(620)은 외부 소스로부터 데이터를 수신하고 및/또는 외부 소스로 데이터를 전송한다. 도 6에 도시된 바와 같이, 네트워크 인터페이스(653)는 링크(651)를 통해 원격 컴퓨터 시스템(683)과 데이터를 교환하는 것을 용이하게 한다. 네트워크 인터페이스(653)는 논리적으로 하나 이상의 소프트웨어 및/또는 하드웨어 모듈(예를 들어, 네트워크 인터페이스 카드 및 대응하는 NDIS(Network Driver Interface Specification) 스택 등)을 나타낼 수 있다. 링크(651)는 네트워크의 일부(예를 들어, 이더넷 세그먼트)를 나타내고, 원격 컴퓨터 시스템(683)은 네트워크의 노드를 나타낸다.
마찬가지로, 컴퓨터 시스템(620)은 입/출력 인터페이스(646)를 포함하며, 이 입/출력 인터페이스(646)를 통해 컴퓨터 시스템(620)은 외부 소스로부터 데이터를 수신하고 및/또는 외부 소스로 데이터를 전송한다. 입/출력 인터페이스(646)는 링크(659)를 통해 모뎀(654)(예를 들어, 표준 모뎀, 케이블 모뎀, 또는 DSL(digital subscriber line) 모뎀)에 결합되며, 이 모뎀(654)을 통해 컴퓨터 시스템(620)은 외부 소스로부터 데이터를 수신하고 및/또는 외부 소스로 데이터를 전송한다. 도 6에 나타낸 바와 같이, 입/출력 인터페이스(646) 및 모뎀(654)은 링크(652)를 통해 원격 컴퓨터 시스템(693)과 데이터를 교환하는 것을 용이하게 한다. 링크(652)는 네트워크의 일부분을 나타내며, 원격 컴퓨터 시스템(693)은 네트워크의 노드를 나타낸다.
도 6이 본 발명에 적합한 운영 환경을 나타내고 있지만, 본 발명의 원리들은, 필요한 경우 적절히 수정하여, 본 발명의 원리들을 구현할 수 있는 시스템이라면 어느 시스템에서라도 이용될 수 있다. 도 6에 예시된 환경은 예시적인 것에 불과하며 본 발명의 원리들이 구현될 수 있는 각종의 환경의 작은 일부분조차도 나타낸 것이 결코 아니다.
본 발명에 따르면, 노드, 애플리케이션 계층, 및 기타 하위 계층은 물론 연관된 데이터(라우팅 테이블 및 노드 ID를 포함함)가 컴퓨터 시스템(620)과 연관된 컴퓨터 판독가능 매체 중 임의의 것에 저장되고 그로부터 액세스될 수 있다. 예를 들어, 이러한 모듈의 일부분 및 연관된 프로그램 데이터의 일부분이 시스템 메모리(622)에 저장하기 위해 운영 체제(635), 애플리케이션 프로그램(636), 프로그램 모듈(637) 및/또는 프로그램 데이터(638)에 포함될 수 있다.
대용량 저장 장치(예를 들어, 자기 하드 디스크(639) 등)가 컴퓨터 시스템(620)에 결합되어 있을 때, 이러한 모듈 및 연관된 프로그램 데이터도 대용량 저장 장치에 저장될 수 있다. 네트워크화된 환경에서, 컴퓨터 시스템(620)에 대해 나타나 있는 프로그램 모듈 또는 그의 일부분은 원격 컴퓨터 시스템(683) 및/또는 원격 컴퓨터 시스템(693)과 연관된 시스템 메모리 및/또는 대용량 저장 장치 등의 원격 메모리 저장 장치에 저장될 수 있다. 이러한 모듈의 실행은, 앞서 설명한 바와 같이, 분산 환경에서 수행될 수 있다.
노드들의 링에의 가입 및 그로부터의 탈퇴
도 27은 본 발명의 원리들이 이용될 수 있는 링 아키텍처(2700)를 나타낸 것이다. 링 아키텍처(2700)는 노드들의 링(2705)을 포함한다. 일부 실시예들에서, 노드들의 링(2705)은 상기한 바와 같은 도 23C에서의 링(2350)과 유사하거나 그와 동일할 수 있다. 노드들의 링(2705)은 바로 인접한 노드 1(2720)과 바로 인접한 노드 2(2730) 사이에서 링에 가입하고자 할 수도 있는 가입측 노드(2710)를 포함할 수 있다. 일부 실시예들에서, 가입측 노드(2710)는 도 23C에 기술된 것과 유사한 방식으로 노드들의 링(2710)에 가입할 수 있고, 여기서 가입측 노드는 노드(2301)와 노드(2362) 간의 캐싱된 합의에 기초하여 ID 범위를 결정한다. 노드의 가입 동안에 링 일관성(ring consistency)을 유지하는 방법이 도 27의 노드 및 데이터 항목을 참조하여 이하에서 더 상세히 기술된다.
도 28은 가입측 노드가 노드들의 링에 가입할 때 링 일관성을 유지하는 방법(2800)의 흐름도를 나타낸 것이다. 일부 실시예들에서, 방법(2800)은 다수의 서브 방법을 포함하며, 각각의 서브 방법은 다른 노드의 관점으로부터 나온 것이다. 이제부터, 방법(2800)이 환경(2700)의 컴포넌트 및 데이터는 물론 도 30의 상태도(3000)를 자주 참조하면서 설명될 것이다.
방법(2800)은 가입측 노드가 링 상의 복수의 다른 노드들의 이웃을 검출하는 동작 - 이 이웃은 적어도 바로 인접한 선행 노드 및 바로 인접한 후속 노드를 포함함 - (동작 2805)을 포함한다. 일부 경우에, 가입측 노드(2710)는 링(2705) 상의 복수의 다른 노드들의 이웃을 검출 및/또는 설정할 수 있으며, 여기서 이 이웃은 바로 인접한 노드(2720) 및 다른 바로 인접한 노드(2730)를 포함한다. 상태도(3000)에서와 같은 일부 실시예들에서, 가입측 노드(3005)는 스텝 1에서 소개 메시지(예를 들어, Intro(3006))를 전송함으로써 이웃을 설정할 수 있다. 이러한 소개 메시지를 수신하는 각각의 노드는 상태도의 스텝 2에서 확인 응답(ACK) 메시지(예를 들어, ACK(3007))로 응답할 수 있다. Intro(3006)는 가입측 노드를 식별하는 데 사용되는 하나 이상의 정보 부분을 포함할 수 있고 가입측 노드(3005)가 링(2705)에 가입하고자 한다는 것을 나타낼 수 있다.
가입측 노드(3005)에 의해 다시 수신되는 ACK 메시지로부터, 가입측 노드는 어느 노드가 링 상에서 그에 가장 가까운 것인지를 결정하도록 구성되어 있을 수 있다. 예를 들어, 각각의 ACK 메시지는 ID 범위 및/또는 링 상에서의 노드 위치를 나타내는 위치 식별자 및 노드가 책임지고 있는 범위를 포함할 수 있다. 따라서, 상태도(3000)에서, 가입측 노드(3005)는 바로 인접한 노드 3(3010)이 가입측 노드의 바로 인접한 선행 노드인지와 바로 인접한 노드 5(3015)가 가입측 노드의 바로 인접한 후속 노드인지를 판정할 수 있다. 게다가, 가입측 노드(3005)는 인접한 노드 1(3020) 및 인접한 노드 2(3025)가 가입측 노드와 동일한 링 상에 있지만 가입측 노드의 바로 가장 가까운 노드일 필요는 없는지를 판정할 수 있다. 따라서, 이웃 설정(3050)은 예시적인 상태도(3000)에 따라 달성될 수 있다.
방법(2800)은 가입측 노드가, 바로 인접한 선행 노드 및 바로 인접한 후속 노드 중에서 선택된 바로 인접한 노드들 중 하나에게, 가입측 노드와 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드의 의도를 알려주는 동작(동작 2810)을 포함한다. 예를 들어, 가입측 노드(2710)는, 바로 인접한 노드 1(2720) 및 바로 인접한 노드 2(2730) 중에서 선택된 바로 인접한 노드 1(2720)에게, 가입측 노드(2710)와 선택된 바로 인접한 노드(2720) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드(2710)의 의도를 알려줄 수 있다. 이상에서 설명한 바와 같이, ID 공간은 주어진 노드가 책임지고 있는 ID 범위(미점유 또는 기타)이다. 예를 들어, ID 공간은 주어진 노드가 책임지고 있는 노드 ID의 숫자 범위를 포함할 수 있다.
상태도(3000)에서와 같은 일부 실시예들에서, 가입측 노드(3005)가, 바로 인접한 선행 노드와 바로 인접한 후속 노드 중에서 선택된 바로 인접한 노드들 중 하나에게, 가입측 노드(3005)와 선택된 바로 인접한 노드(3010) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드의 의도를 알려주는 동작은 바로 인접한 선행 노드(3010)와 바로 인접한 후속 노드(3015) 중에서 선택된 바로 인접한 노드(3010)로 토큰 요청(token request)(3031)을 전송하는 동작을 포함하고, 이 토큰 요청은 노드 ID(이 노드 ID를 갖는 노드만이 응답을 할 수 있음) 및 제1 TTL(time-to-live) 기간 값(3031)을 포함하며, 이 제1 TTL 기간 값은 가입측 노드(3005)가 선택된 바로 인접한 노드와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타낸다.
일부 경우에, 토큰 요청 메시지(3031)는 가입측 노드(3005)의 예상된 소유권 범위의 업데이트된 상태를 나타내는 마커(marker)를 포함한다. TTL 값 및 모니터링 관계는 도 20의 방법(2000)에서 기술한 것과 실질적으로 동일할 수 있다.
방법(2800)은 가입측 노드가 선택된 바로 인접한 노드를 모니터링하고자 한다는 의도를 알려주는 동작(동작 2815)을 포함한다. 예를 들어, 가입측 노드(2710)는 모니터링 표시(2712)에 나타낸 바와 같이 바로 인접한 노드 1(2720)을 모니터링하고자 한다는 의도를 알려줄 수 있다. 이러한 모니터링 관계에서, 가입측 노드(2710)는 어떤 범위의 노드 ID를 모니터링하기로 합의할 수 있다. 일부 경우에, 어떤 범위는 바로 인접한 노드(2720)의 ID와 바로 인접한 노드(2730)의 ID 사이에 있는 ID들을 포함할 수 있다. 도 27에는 도시되어 있지 않지만, 일부 실시예들에서, 모니터링 표시(2712) 및 ID 공간 소유권 표시는 하나의 메시지로 결합될 수 있다.
방법(2800)은 제1 선택된 바로 인접한 노드가 가입측 노드와 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드의 의도를 나타내는 표시를 가입측 노드로부터 수신하는 동작(동작 2820)을 포함한다. 예를 들어, 바로 인접한 노드 1(2720)은 가입측 노드와 노드(2720) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드(2710)의 의도를 나타내는 표시(예를 들어, ID 공간 소유권 표시(2711))를 가입측 노드(2710)로부터 수신할 수 있다.
방법(2800)은 제1 선택된 바로 인접한 노드가 선택된 바로 인접한 노드를 모니터링하고자 한다는 가입측 노드의 의도를 나타내는 표시를 가입측 노드로부터 수신하는 동작(동작 2825)을 포함한다. 예를 들어, 바로 인접한 노드 1(2720)은 바로 인접한 노드(2720)를 모니터링하고자 한다는 가입측 노드의 의도를 나타내는 표시(예를 들어, 모니터링 표시(2712))를 가입측 노드(2710)로부터 수신할 수 있다.
방법(2800)은 제1 선택된 바로 인접한 노드가 가입측 노드와 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드의 의도의 수락을 나타내는 표시를 가입측 노드로 전송하는 동작(동작 2830)을 포함한다. 예를 들어, 바로 인접한 노드 1(2720)는 가입측 노드(2710)와 바로 인접한 노드(2720) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드의 의도의 수락을 나타내는 ID 공간 소유권 수락(2773)을 전송할 수 있다.
방법(2800)은 제1 선택된 바로 인접한 노드가 선택된 바로 인접한 노드를 모니터링하고자 한다는 가입측 노드의 의도의 수락을 나타내는 제2 표시를 가입측 노드로 전송하는 동작(동작 2831)을 포함한다. 예를 들어, 바로 인접한 노드 1(2720)은 선택된 바로 인접한 노드(2720)를 모니터링하고자 한다는 가입측 노드(2710)의 의도의 수락을 나타내는 모니터링 수락(2783)을 전송할 수 있다.
방법(2800)은 제1 선택된 바로 인접한 노드가 가입측 노드를 모니터링하고자 한다는 제1 선택된 바로 인접한 노드의 의도를 나타내는 제3 표시를 가입측 노드로 전송하는 동작(동작 2832)을 포함한다. 예를 들어, 바로 인접한 노드 1(2720)은 가입측 노드(2710)를 모니터링하고자 한다는 제1 선택된 바로 인접한 노드(2720)의 의도를 나타내는 모니터링 표시(2793)를 가입측 노드(2710)로 전송할 수 있다. 일부 실시예들에서, 제1, 제2 및 제3 표시는 하나의 표시로 결합될 수 있다. 부가하여 또는 대안으로서, 제1, 제2 및 제3 표시의 임의의 결합이 하나의 조합이 하나의 조합(예를 들어, 제1 표시와 제3 표시, 또는 제2 표시와 제3 표시)으로 결합될 수 있다.
방법(2800)은 가입측 노드가 가입측 노드와 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드의 의도의 수락을 나타내는 제1 표시를 선택된 바로 인접한 노드로부터 수신하는 동작(동작 2835)을 포함한다. 예를 들어, 가입측 노드(2710)는 가입측 노드(2710)와 바로 인접한 노드(2720) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드의 의도의 수락을 나타내는 ID 공간 소유권 수락(2773)을 바로 인접한 노드 1(2720)로부터 수신할 수 있다.
방법(2800)은 가입측 노드가 선택된 바로 인접한 노드를 모니터링하고자 한다는 가입측 노드의 의도의 수락을 나타내는 제2 표시를 선택된 바로 인접한 노드로부터 수신하는 동작(동작 2836)을 포함한다. 예를 들어, 가입측 노드(2710)는 선택된 바로 인접한 노드(2720)를 모니터링하고자 한다는 가입측 노드의 의도의 수락을 나타내는 모니터링 수락(2783)을 선택된 바로 인접한 노드(2720)로부터 수신할 수 있다.
방법(2800)은 가입측 노드가 가입측 노드를 모니터링하고자 한다는 제1 선택된 바로 인접한 노드의 의도를 나타내는 제3 표시를 선택된 바로 인접한 노드로부터 수신하는 동작(동작 2837)을 포함한다. 예를 들어, 가입측 노드(2710)는 가입측 노드(2710)를 모니터링하고자 한다는 선택된 바로 인접한 노드의 의도를 나타내는 모니터링 표시(2793)를 선택된 바로 인접한 노드(2720)로부터 수신할 수 있다. 일부 경우에, 제1, 제2 및 제3 표시는 하나의 표시로 결합될 수 있다. 부가하여 또는 대안으로서, 제1, 제2 및 제3 표시의 임의의 조합이 하나의 조합으로 결합될 수 있다.
상태도(3000)에서와 같은 일부 실시예들에서, 가입측 노드(3005)가 가입측 노드와 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 가입측 노드의 의도의 수락을 나타내고 가입측 노드(3005)를 모니터링하고자 한다는 선택된 바로 인접한 노드(3010)의 의도를 나타내는 표시를 선택된 바로 인접한 노드(3010)로부터 수신하는 동작은, 제1 토큰 전송(3032) - 이 제1 토큰 전송은 가입측 노드(3005)와 선택된 바로 인접한 노드(3010) 사이의 노드들의 링에 있는 미점유 노드 ID의 가입자 노드의 소유권 범위를 포함함 -, 제2 TTL 기간 값(3032) - 이 제2 TTL 기간 값은 선택된 바로 인접한 노드가 가입측 노드(3005)와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 -, 및 선택된 바로 인접한 노드(3010)가 가입측 노드를 모니터링하는 것을 나타내는 제1 설정 허가를 선택된 바로 인접한 노드(3010)로부터 수신하는 동작을 포함한다.
방법(2800)은 가입측 노드가 가입측 노드를 모니터링하고자 한다는 선택된 바로 인접한 노드의 의도의 수락을 알려주는 동작(동작 2840)을 포함한다. 예를 들어, 가입측 노드(2710)는 가입측 노드(2710)를 모니터링하고자 한다는 제1 선택된 바로 인접한 노드 1(2720)의 의도의 수락을 모니터링 합의(2714)에 표시할 수 있다. 상태도(3000)에서와 같은 일부 실시예들에서, 가입측 노드(3005)가 가입측 노드(3005)를 모니터링하고자 한다는 선택된 바로 인접한 노드(3010)의 의도의 수락을 알려주는 동작은, 가입측 노드(3005)를 모니터링하고자 한다는 선택된 바로 인접한 노드의 의도를 확인 응답하는 확인 응답 메시지(3033)를 선택된 바로 인접한 노드(3010)로 전송하는 동작을 포함한다.
다시 도 27 및 도 28을 참조하면, 방법(2800)은 제1 선택된 바로 인접한 노드가 가입측 노드(2710)를 모니터링하고자 한다는 제1 선택된 바로 인접한 노드의 의도의 수락을 나타내는 표시를 가입측 노드(2710)로부터 수신하는 동작(동작 2845)을 포함한다. 예를 들어, 바로 인접한 노드(2720)는 바로 인접한 노드(2720)와의 단방향 모니터링 관계에 참여하기로 합의하는 합의(예를 들어, 모니터링 관계 합의(2714))를 가입측 노드(2710)로부터 수신할 수 있다.
일부 실시예들에서, 선택된 바로 인접한 노드(2720)는, 부가하여 또는 대안으로서, 제2 선택된 바로 인접한 노드와의 모니터링 관계를 종료하고자 한다는 제1 노드의 의도를 제2 선택된 바로 인접한 노드에게 알려주는 동작, 제1 선택된 바로 인접한 노드와의 모니터링 관계를 종료하고자 한다는 제2 노드의 의도를 나타내는 표시를 제2 선택된 바로 인접한 노드로부터 수신하는 동작, 및 종료하고자 한다는 제2 노드의 의도를 확인 응답하는 동작을 수행할 수 있다. 예를 들어, 바로 인접한 노드 1(2720)은 바로 인접한 노드 2(2730)와의 모니터링 관계를 종료하고자 한다는 노드 1의 의도를 노드 2(2730)에게 알려줄 수 있다. 바로 인접한 노드 1(2720)은 또한 노드 1과의 모니터링 관계를 종료하고자 한다는 노드 2의 의도를 나타내는 표시를 노드 2(2730)로부터 수신할 수 있다. 바로 인접한 노드 1(2720)은 또한 종료하고자 한다는 노드 2의 의도를 확인 응답할 수 있다.
상태도(3000)에서와 같은 일부 경우에, 바로 인접한 노드 3(3010)은 상태도의 스텝 5(3034)에서 바로 인접한 노드 5(3015)와의 모니터링 관계를 종료하고자 한다는 노드 3의 의도를 노드 5(3015)에게 알려주도록 구성되어 있을 수 있다. 바로 인접한 노드 3(3010)은 또한 상태도의 스텝 6(3035)에서 노드 3과의 모니터링 관계를 종료하고자 한다는 노드 5의 의도를 나타내는 표시를 노드 5(3015)로부터 수신할 수 있다. 이것은 또한 일부 실시예들에서 확인 응답(3034)하는 역할을 할 수도 있다. 바로 인접한 노드 3(3010)은 또한 상태도의 스텝 7(3036)에서 종료하고자 한다는 노드 5의 의도를 확인 응답할 수도 있다. 유의할 점은 상태도(3000)의 스텝(1-8)이 직렬로 또는 병렬로 일어날 수 있다는 것이다. 따라서, 일부 실시예들에서, 예를 들어, (5)로 표시된 모든 스텝들은 동시에 일어날 수 있으며, 다른 스텝들은 직렬로 일어날 수 있다. 직렬로 또는 병렬로 수행되는 스텝들의 임의의 조합이 가능하다.
일부 실시예들에서, 방법(2800)은 또한 선택적으로 가입측 노드로부터 소개 메시지를 수신하는 동작 - 이 소개 메시지는 가입측 노드에 의해 소유된 것으로 표시된 노드 ID들의 예상된 소유권 범위를 포함함 - 및 확인 응답 메시지를 가입측 노드로 전송하는 동작 - 이 확인 응답 메시지는 가입측 노드에 의해 식별된 노드 ID들의 범위가 선택된 바로 인접한 노드의 노드 ID들의 범위와 일치한다는 표시를 포함함 - 을 포함한다. 일부 경우에, 노드 ID들의 범위는 소개 메시지 또는 확인 응답 메시지 어디에도 포함되지 않을 수 있다. 그 대신에, 노드 ID들의 범위가 메시지를 전송 또는 수신한 노드에 의한 수신 또는 전송 시에 계산될 수 있다.
방법(2800)은 바로 인접한 선행 노드 및 바로 인접한 후속 노드 중에서 선택된 다른 바로 인접한 노드가 가입측 노드와 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 가입측 노드에게 알려주는 동작(동작 2850)을 포함한다. 예를 들어, 바로 인접한 노드 1(2720)과 바로 인접한 노드 2(2730) 중에서 선택된 바로 인접한 노드 2(2730)는 가입측 노드(2710)와 바로 인접한 노드(2730) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 나타내는 ID 공간 소유권 표시(2784)를 가입측 노드(2710)에게 알려줄 수 있다.
방법(2800)은 다른 바로 인접한 노드가 가입측 노드를 모니터링하고자 한다는 다른 바로 인접한 노드의 의도를 알려주는 동작(동작 2851)을 포함한다. 예를 들어, 바로 인접한 노드 2(2730)는 가입측 노드(2710)를 모니터링하고자 한다는 노드 2(2730)의 의도를 알려줄 수 있다.
방법(2800)은 가입측 노드가 가입측 노드와 다른 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 나타내는 표시를 다른 바로 인접한 노드로부터 수신하는 동작(동작 2855)을 포함한다. 예를 들어, 가입측 노드(2710)는 가입측 노드(2710)와 바로 인접한 노드(2730) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 나타내는 ID 공간 소유권 표시(2784)를 바로 인접한 노드 2(2730)로부터 수신할 수 있다.
방법(2800)은 가입측 노드가 가입측 노드를 모니터링하고자 한다는 다른 바로 인접한 노드의 의도를 나타내는 표시를 다른 바로 인접한 노드로부터 수신하는 동작(동작 2856)을 포함한다. 예를 들어, 가입측 노드(2710)는 가입측 노드(2710)를 모니터링하고자 한다는 다른 바로 인접한 노드의 의도를 나타내는 모니터링 표시(2794)를 다른 바로 인접한 노드(2730)로부터 수신할 수 있다.
상태도(3000)에서와 같은 일부 실시예들에서, 가입측 노드(3005)가 가입측 노드(3005)와 다른 바로 인접한 노드(3015) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 나타내고 가입측 노드를 모니터링하고자 한다는 다른 바로 인접한 노드의 의도를 나타내는 표시를 다른 바로 인접한 노드(3015)로부터 수신하는 동작은, 제3 TTL 기간 값(3037)을 수신하는 동작을 포함하며, 이 제3 TTL 기간 값은 다른 바로 인접한 노드(3015)가 가입측 노드(3005)와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타낸다. 일부 실시예들에서, 가입측 노드는 스텝 6에서 제2 토큰 전송(3037)을 다른 바로 인접한 노드(3015)로부터 수신할 수 있으며, 이 제2 토큰 전송은 가입측 노드(3005)와 다른 바로 인접한 노드(3015) 사이의 미점유 노드 ID들의 가입측 노드의 소유권 범위를 포함한다. 다른 경우에, 이 소유권 범위는 가입측 노드 및 다른 바로 인접한 노드 중 어느 하나 또는 그 둘다에 의해 계산될 수 있다.
다시 도 27 및 도 28을 참조하면, 방법(2800)은 가입측 노드가 가입측 노드와 다른 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 설정하고자 한다는 가입측 노드의 의도를 다른 바로 인접한 노드에게 알려주는 동작(동작 2860)을 포함한다. 예를 들어, 가입측 노드(2710)는 가입측 노드(2710)와 바로 인접한 노드(2730) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 설정하고자 한다는 가입측 노드(2710)의 의도를 (예를 들어, ID 공간 소유권 표시(2721)로) 바로 인접한 노드 2(2730)에게 알려줄 수 있다.
상태도(3000)에서와 같은 일부 실시예들에서, 가입측 노드(3005)가 가입측 노드(3005)와 다른 바로 인접한 노드(3015) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 설정하고자 한다는 가입측 노드의 의도를 다른 바로 인접한 노드(3015)에게 알려주는 동작은, 가입측 노드(3005)와 다른 바로 인접한 노드(3015) 사이의 제2 소유권 범위를 설정하기 위한 설정 요청을 전송하는 동작(스텝 7의 3038)을 포함하며, 이 설정 요청(3038)은 제4 TTL 기간(3038) - 이 제4 TTL 기간은 가입측 노드(3005)가 다른 바로 인접한 노드(3015)와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 -, 및 가입측 노드가 다른 바로 인접한 노드(3015)를 모니터링한다는 것을 나타내는 제3 설정 허가를 포함한다. 일부 실시예들에서, 설정 요청(3038)은 또한 가입측 노드(3005)와 다른 바로 인접한 노드(3015) 사이의 제2 소유권 범위의 표시를 나타낼 수 있다. 다른 경우에, 앞서 설명한 바와 같이, 이 범위는 노드들의 링(2705) 상의 바로 인접한 노드 쌍에 의해 계산될 수 있다.
방법(2800)은 가입측 노드가 다른 바로 인접한 노드를 모니터링하고자 한다는 의도를 알려주는 동작(동작 2865)을 포함한다. 예를 들어, 가입측 노드(2710)는 바로 인접한 노드 2(2730)를 모니터링하고자 한다는 의도를 (예를 들어, 모니터링 표시(2722)를 통해) 알려줄 수 있다. 상태도(3000)에서와 같은 일부 실시예들에서, 가입측 노드(3005)가 가입측 노드(3005)와 다른 바로 인접한 노드(3015) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 설정하고자 한다는 가입측 노드의 의도를 다른 바로 인접한 노드(3015)에게 알려주는 동작은, 가입측 노드(3005)와 다른 바로 인접한 노드(3015) 사이의 제2 소유권 범위를 설정하기 위한 설정 요청(3038)을 전송하는 동작을 포함하며, 이 설정 요청(3038)은 가입측 노드와 다른 바로 인접한 노드 사이의 제2 소유권 범위, 제4 TTL 기간(3038) - 이 제4 TTL 기간은 가입측 노드가 다른 바로 인접한 노드와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 -, 및 가입측 노드가 다른 바로 인접한 노드를 모니터링한다는 것을 나타내는 제3 설정 허가(3038)를 포함한다.
방법(2800)은 다른 바로 인접한 노드가 가입측 노드와 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 설정하고자 한다는 가입측 노드의 의도의 표시를 수신하는 동작(동작 2870)을 포함한다. 예를 들어, 바로 인접한 노드 2(2730)는 가입측 노드(2710)와 바로 인접한 노드(2730) 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 설정하고자 한다는 가입측 노드의 의도를 나타내는 ID 공간 소유권 표시(2721)를 수신할 수 있다.
방법(2800)은 다른 바로 인접한 노드가 제1 선택된 바로 인접한 노드를 모니터링하고자 한다는 가입측 노드의 의도의 표시를 수신하는 동작(동작 2875)을 포함한다. 예를 들어, 바로 인접한 노드 2(2730)는 바로 인접한 노드(2730)를 모니터링하고자 한다는 가입측 노드의 의도를 나타내는 모니터링 표시(2722)를 수신할 수 있다.
방법(2800)은 다른 바로 인접한 노드가 가입측 노드를 모니터링하고자 한다는 다른 노드의 의도를 가입측 노드에게 알려주는 동작(동작 2880)을 포함한다. 예를 들어, 바로 인접한 노드 2(2730)는 가입측 노드(2710)를 모니터링하고자 한다는 바로 인접한 노드의 의도를 가입측 노드(2710)에게 (예를 들어, 모니터링 표시(2794)를 통해) 알려줄 수 있다.
일부 경우에, 바로 인접한 노드 2(2730)는, 부가하여 또는 대안으로서, 제1 선택된 바로 인접한 노드와의 모니터링 관계를 종료하고자 한다는 제2 선택된 바로 인접한 노드의 의도를 나타내는 표시를 제2 노드로부터 수신하는 동작, 제2 선택된 바로 인접한 노드와의 모니터링 관계를 종료하고자 한다는 제1 노드의 의도를 제2 선택된 바로 인접한 노드에게 알려주는 동작, 및 종료하고자 한다는 제1 노드의 의도를 확인 응답하는 확인 응답을 수신하는 동작을 수행할 수 있다. 다른 바로 인접한 노드는 또한 제2 선택된 바로 인접한 노드로부터의 표시를 확인 응답할 수 있다. 예를 들어, 바로 인접한 노드 2(2730)는 노드 2와의 모니터링 관계를 종료하고자 한다는 노드 1의 의도를 나타내는 표시를 바로 인접한 노드 1(2720)로부터 수신할 수 있다. 노드 2(2730)도 역시 종료하고자 한다는 노드 2의 의도를 확인 응답하는 확인 응답(상태도(3000)에서의 3036)을 수신할 수 있다. 노드 2(2730)는 또한 노드 1(2720)로부터의 표시를 확인 응답할 수 있다.
방법(2800)은 가입측 노드가 가입측 노드를 모니터링하고자 한다는 다른 바로 인접한 노드의 의도를 나타내는 표시를 다른 바로 인접한 노드로부터 수신하는 동작(동작 2885)을 포함한다. 예를 들어, 가입측 노드(2710)는 가입측 노드(2710)를 모니터링하고자 한다는 다른 바로 인접한 노드의 의도를 나타내는 모니터링 표시(2794)(예를 들어, 모니터링)를 바로 인접한 노드 2(2730)로부터 수신할 수 있다. 상태도(3000)에서와 같은 일부 실시예들에서, 가입측 노드가 가입측 노드를 모니터링하고자 한다는 다른 바로 인접한 노드의 의도를 나타내는 표시를 다른 바로 인접한 노드로부터 수신하는 동작은, 설정 요청에 대한 제4 설정 허가(예를 들어, 스텝 8에서의 3039)를 수신하는 동작을 포함하며, 이 제4 설정 허가는 다른 인접한 노드(3015)가 가입측 노드(3005)를 모니터링한다는 것을 나타낸다.
게다가, 가입측 노드(2710)는 부정 확인 응답(NAK) 메시지를 링 상의 노드들 중 적어도 하나(예를 들어, 바로 인접한 노드 1(2720))로부터 수신할 수 있으며, 여기서 NAK 메시지는 링에 대한 NAK 송신자의 뷰를 포함한다. 이웃에 대한 NAK 송신자의 뷰를 사용하여, 가입측 노드(2710)는 링에 대한 NAK 송신자의 뷰에 기초하여 이웃에 대한 그의 뷰를 업데이트할 수 있다.
도 29는 탈퇴측 노드가 노드들의 링을 탈퇴할 때 링 일관성을 유지하는 방법(2900)의 흐름도를 나타낸 것이다. 이제부터, 방법(2900)이 환경(2700) 및 도 31의 상태도(3100)의 컴포넌트 및 데이터를 자주 참조하여 설명될 것이다.
방법(2900)은 제1 선택된 바로 인접한 노드가 탈퇴측 노드가 노드들의 링을 탈퇴하는 동작의 표시를 수신하는 동작(동작 2910)을 포함한다. 예를 들어, 바로 인접한 노드 3(3110)는 탈퇴측 노드(3105)가 노드들의 링을 탈퇴하는 동작을 나타내는 표시를 링 상의 임의의 노드로부터(예를 들어, 탈퇴측 노드 4(3105)로부터) 수신할 수 있다. 일부 경우에, 탈퇴측 노드(3105)는 그 표시가 수신될 때 이미 노드들의 링을 탈퇴하였을 수 있다. 또는, 탈퇴측 노드(3105)는 노드들의 링을 탈퇴하는 중에 있거나 노드들의 링을 탈퇴하려고 계획하고 있을 수 있다. 일부 실시예들에서, 제1 선택된 바로 인접한 노드(3110)가 탈퇴측 노드(3105)가 노드들의 링을 탈퇴하고 있다는 표시를 수신하는 동작은, 제1 선택된 바로 인접한 노드(3110)가 탈퇴 메시지(3121)를 탈퇴측 노드(3105)로부터 수신하는 동작(상태도(3100)에서의 스텝 1)을 포함하며, 여기서 이 탈퇴 메시지는 탈퇴측 노드(3105)에 의해 소유된 것으로 표시된 노드 ID들의 소유권 범위를 포함할 수 있다. 다른 실시예들에서, 바로 인접한 노드(3110)는 표시(예를 들어, 탈퇴 표시(3121))를 노드들의 링 밖의 노드로부터(예를 들어, 기반 버스 및/또는 네트워크로부터) 수신할 수 있다.
방법(2900)은 제1 선택된 바로 인접한 노드가 탈퇴측 노드와 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 탈퇴측 노드의 ID 공간 소유권을 떠맡고자 한다는 의도를 나타내는 표시를 제2 선택된 바로 인접한 노드로 전송하는 동작(동작 2920)을 포함한다. 예를 들어, 바로 인접한 노드 3(3110)은 탈퇴측 노드(3105)와 바로 인접한 노드(3110) 사이의 ID 공간의 일부분에 대한 탈퇴측 노드의 ID 공간 소유권을 떠맡고자 한다는 의도를 나타내는 표시(예를 들어, 설정 및 TTL(3122))를 바로 인접한 노드 5(3115)로 전송할 수 있다.
방법(2900)은 제1 선택된 바로 인접한 노드가 제1 선택된 바로 인접한 노드와 제2 선택된 바로 인접한 노드 사이의 적어도 단방향 모니터링 관계의 설정을 나타내는 표시를 제2 선택된 바로 인접한 노드로 전송하는 동작(동작 2925)을 포함한다. 예를 들어, 바로 인접한 노드 3(3110)은 바로 인접한 노드 3(3110)과 바로 인접한 노드 5(3115) 사이의 적어도 단방향 모니터링 관계의 설정을 나타내는 표시(예를 들어, 설정 및 TTL(3122))를 바로 인접한 노드 5(3115)로 전송할 수 있다.
상태도(3100)에서와 같은 일부 실시예들에서, 제1 선택된 바로 인접한 노드가 탈퇴측 노드와 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 탈퇴측 노드의 ID 공간 소유권을 떠맡고자 한다는 의도를 나타내는 표시를 제2 선택된 바로 인접한 노드로 전송하는 동작은, 제1 선택된 바로 인접한 노드(3110)가 제1 선택된 바로 인접한 노드(3110)와 제2 선택된 바로 인접한 노드(3115) 사이의 소유권 범위를 설정하기 위한 제1 설정 요청(3122)을 제2 선택된 바로 인접한 노드(3115)로 (상태도(3100)의 스텝 2에서) 전송하는 동작 - 제1 설정 요청은 제1 TTL 기간(3122)을 포함하고, 이 제1 TTL 기간은 제1 선택된 바로 인접한 노드(3110)가 제2 선택된 바로 인접한 노드(3115)와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 -, 및 제1 인접 노드(3110)가 제1 설정 요청(3122)에 대한 제1 설정 허가(3123)를 (예를 들어, 상태도(3100)의 스텝 3에서) 수신하는 동작 - 제1 설정 허가(3123)는 제2 인접 노드(3115)가 제1 선택된 바로 인접한 노드(3110)를 모니터링한다는 것을 나타냄 - 을 포함한다.
방법(2900)은 제1 선택된 바로 인접한 노드가 탈퇴측 노드와 제1 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 떠맡고자 한다는 제1 노드의 의도의 수락을 나타내는 표시를 제2 선택된 바로 인접한 노드로부터 수신하는 동작(동작 2930)을 포함한다. 예를 들어, 바로 인접한 노드 3(3110)는 탈퇴측 노드(3105)와 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 떠맡고자 한다는 바로 인접한 노드 5의 의도의 수락을 나타내는 표시(예를 들어, 설정 및 TTL(3124))를 바로 인접한 노드 5(3115)로부터 수신할 수 있다.
방법(2900)은 제1 선택된 바로 인접한 노드가 제2 선택된 바로 인접한 노드와 제1 선택된 바로 인접한 노드 사이의 단방향 모니터링 관계의 설정을 나타내는 표시를 제2 선택된 바로 인접한 노드로부터 수신하는 동작(동작 2935)을 포함한다. 예를 들어, 바로 인접한 노드(3110)는 바로 인접한 노드(3115)와 바로 인접한 노드(3110) 사이의 단방향 모니터링 관계의 설정을 알려준다.
상태도(3100)에서와 같은 일부 실시예들에서, 제1 선택된 바로 인접한 노드가 탈퇴측 노드와 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 떠맡고자 한다는 제1 노드의 의도의 수락을 나타내고 제2 선택된 바로 인접한 노드와 제1 선택된 바로 인접한 노드 사이의 단방향 모니터링 관계의 설정을 나타내는 표시를 제2 선택된 바로 인접한 노드로부터 수신하는 동작은, 제1 인접 노드(3110)가 제1 인접 노드(3110)와 제2 인접 노드(3115) 사이의 소유권 범위를 설정하기 위한 제2 설정 요청을 (예를 들어, 상태도(3100)의 스텝 2에서) 제2 인접 노드(3115)로부터 수신하는 동작 - 이 제2 설정 요청은 제2 TTL 기간(3124)을 포함하고, 이 제2 TTL 기간은 제2 인접 노드(3115)가 제1 인접 노드(3110)와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 -, 및 제1 인접 노드(3110)가 제2 설정 요청에 대한 제2 설정 허가(3123)를 (예를 들어, 상태도(3100)의 스텝 3에서) 전송하는 단계 - 이 제2 설정 허가는 제1 인접 노드(3110)가 제2 인접 노드(3115)를 모니터링한다는 것을 나타냄 - 를 포함한다.
데이터 일관성(Data Consistency)
도 32는 본 발명의 원리들이 이용될 수 있는 링 아키텍처(3200)를 나타낸 것이다. 링 아키텍처(3200)는 노드들의 링(3205)을 포함한다. 일부 실시예들에서, 노드들의 링(3205)은 상기한 바와 같은 도 23C의 링(2350) 및/또는 도 27의 링(2705)와 유사하거나 그와 동일할 수 있다. 데이터 일관성을 유지하는 방법이 도 32의 노드 및 데이터 항목을 참조하여 이하에서 더 상세히 설명된다.
도 33은 연합 인프라(federation infrastructure) 내의 복제 세트(replica set) 내에서 데이터 액세스 트랜잭션을 수행하는 방법(3300)의 흐름도를 나타낸 것이다. 이제부터, 방법(3300)이 환경(3200)의 컴포넌트 및 데이터를 자주 참조하여 설명될 것이다.
일부 실시예들에서, 방법(3300)은 노드들의 복제 세트 내의 복수의 노드들 중에서 1차 노드를 선택하는 동작(동작 3310)을 포함한다. 예를 들어, 1차 노드(3211)가 노드들의 복제 세트(3210) 내의 복수의 노드들 중에서 선택될 수 있다. 데이터 일관성을 유지하는 데 도움을 주기 위해, 데이터의 하나 이상의 부분을 복제 또는 복사하기 위해 복제 세트가 생성될 수 있다. 따라서, 노드가 (고장에 의해 또는 매끄러운 탈퇴에 의해) 링을 탈퇴할 때, 다른 노드들이 탈퇴측 노드에 의해 보유된 정보를 갖게 된다. 일부 경우들에서, 복제 세트 내의 각각의 노드는, 1) 복제 세트의 ID, 2) 구성 순서 번호(configuration sequence number, CSN), 3) 복제 세트의 멤버쉽 및 누가 1차 노드인지, 4) 마지막으로 사용된 순서 번호(last used sequence number, LSN), 및 5) 복제 세트에 저장된 데이터를 포함할 수 있다. 1-3에 표현된 상태 정보는 복제 세트에 대한 "구성 상태(configuration state)"라고 할 수 있고, 4-5에 표현된 상태 정보는 복제 세트에 "저장된 데이터"라고 할 수 있다.
유의할 점은 라우팅 일관성 및 링 일관성에 관하여 이상에서 제공된 원리, 기재 및 설명이 지도자 선출(leader election)(즉, 1차 노드를 선택하는 것)과 관련하여 적용가능하다는 것이다. 예를 들어, 링 내에서 ID 공간 소유권을 유지하는 원리가 본 명세서에서 논의된 바와 같이 1차 노드 및 2차 노드에 적용될 수 있다. 일반적으로, 1차 노드 및 2차 노드의 속성이 이상의 섹션들에 설명된 다른 노드들 중 임의의 것 또는 그 전부와 부합된다.
일부 실시예들에서, 하나의 노드가 그의 1차 노드(1차 노드(3211))로서 역할하는 복제 세트(3210)가 생성될 수 있다. 1차 노드(3211)는 그의 LSN 및 CSN을 0으로 초기화할 수 있고 복제 멤버쉽을 초기화(그 자신만을 멤버로서 포함함)할 수 있다. 이어서, 이하에서 더 상세히 설명하는 바와 같이, 다양한 재구성 알고리즘을 사용하여 복제 세트에 노드들을 추가함으로써 복제 세트(3210)가 원하는 크기로 확장될 수 있다. 일부 경우에, 1차 노드가 아닌 복제 세트 내의 임의의 노드는 2차 노드라고 한다. LSN은 기록 동작과 재구성 동작 둘다에서의 전체적인 순서를 생성하기 위해 증분될 수 있다. CSN은 복제 세트에서의 마지막 구성 변화를 가리킬 수 있다. 따라서, 이 경우에, CSN은 LSN 시퀀스를 공유한다. LSN 시퀀스에서의 간극은 통상적으로 데이터 손실을 나타내며, 따라서 회피되어야만 한다.
방법(3300)은 1차 노드가 노드들의 복제 세트 내의 복수의 노드들 중에서 선택되었는지를 판정하는 동작 - 1차 노드는 클라이언트 데이터 액세스 요청에 액세스하여 이를 처리하도록 구성되어 있으며, 복제 세트는 선택된 1차 노드 및 하나 이상의 2차 노드를 포함함 - (동작 3320)을 포함한다. 예를 들어, 1차 노드(3211)는 자신이 노드들의 복제 세트(3210) 내의 복수의 노드들 중에서 선택되었는지를 판정할 수 있으며, 여기서 1차 노드(3211)는 클라이언트 데이터 액세스 요청(3215)을 받고 이를 처리하도록 구성되어 있으며 복제 세트(3210)는 1차 노드(3211) 및 2차 노드(3212)를 포함한다.
일부 경우에, 고장 허용을 향상시키기 위해 다수의 2차 노드를 추가하는 것이 바람직할 수 있다(즉, 더 많은 2차 노드가 동일한 데이터를 저장함). 추가할 2차 노드의 수는 허용가능 동시 고장의 최대 수에 기초하여 결정될 수 있다. 따라서, 허용가능 동시 고장의 최대 수가, 예를 들어, 3인 경우, 다른 3개가 고장난 후에도 적어도 하나의 노드가 여전히 복제 세트의 일부이도록 적어도 4개의 2차 노드를 갖는 것이 바람직할 수 있다. 일부 경우에, 복제 세트의 멤버이어야 하는 2차 노드의 수는 1차 노드의 이웃 내의 멤버의 수에 대응한다.
일부 경우에, 이러한 허용가능 동시 고장의 최대 수는 2차 노드의 임계 수와 관계되어 있을 수 있다. 이러한 2차 노드의 임계 수는 정족수(quorum)라고 한다. 데이터 액세스 요청(3215)이 데이터 기록 요청일 때, 2차 노드의 임계 수는 기록 정족수(write quorum)라고 할 수 있다. 이와 마찬가지로, 데이터 액세스 요청(3215)이 데이터 판독 요청일 때, 2차 노드의 임계 수는 판독 정족수(read quorum)라고 할 수 있다. 따라서, 판독 및 기록 정족수는 주어진 수의 허용가능 동시 고장에 대한 완전한 고장 허용(complete fault tolerance)을 제공하는 데 필요한 최소 임계 노드 수일 수 있다.
방법(3300)은 1차 노드가 하나 이상의 클라이언트 데이터 액세스 요청을 수신하는 동작 - 각각의 데이터 액세스 요청은 복제 세트 내의 2차 노드들 중 적어도 하나에서 액세스되는 데이터의 적어도 일부분을 나타냄 - (동작 3330)을 포함한다. 예를 들어, 1차 노드(3211)는 클라이언트(3250)로부터 클라이언트 데이터 액세스 요청(3215)을 수신할 수 있으며, 여기서 요청(3215)은 복제 세트(3210) 내의 2차 노드(3212)에서 액세스되는 데이터의 적어도 일부분을 나타낸다. 데이터 액세스 요청(3215)은, 예를 들어, 복제 세트 내의 노드들 중 적어도 하나에 기록되는 파일을 포함할 수 있다. 부가하여 또는 대안으로서, 데이터 액세스 요청(3215)은 복제 세트 내의 노드들 중 적어도 하나로부터 판독 및 검색되는 파일의 이름을 포함할 수 있다. 1차 노드(3211)는 착신 데이터 요청을 관리하고 복제 세트에 대응하는 구성 상태 정보를 비롯한 해당 정보를 2차 노드(3212)로 전송한다. 데이터의 일부분은 또한 노드의 DSN(data sequence number, 데이터 순서 번호), LSN, CSN, 1차 노드 ID 또는 2차 노드 ID를 비롯한 복제 세트 자체에 관한 일련의 제어 정보도 포함할 수 있다.
방법(3300)은 1차 노드가 클라이언트 데이터 액세스 요청이 수신되는 순서대로 상태를 변이시키는 클라이언트 데이터 액세스 요청들 각각에 DSN(data sequence number)을 할당하는 동작 - 이 데이터 순서 번호는 복제 세트 내의 노드들 각각이 따라야 하는 선형화된 처리 순서를 포함함 - (동작 3340)을 포함한다. 예를 들어, 1차 노드(3211)는 요청들이 수신되는 순서대로 상태를 변이시키는 각각의 클라이언트 데이터 액세스 요청(3215)에 DSN을 할당할 수 있다. DSN은 복제 세트(3210) 내의 노드들 각각이 따라야 하는 선형화된 처리 순서를 포함할 수 있다. 일부 경우에, 선형화된 처리 순서는 도 35에 나타낸 동작 시퀀스(sequence of operations)(3501)라고 할 수 있다. 요청이 상태를 변이시키지 않는 경우, 1차 노드(3211)는 데이터 순서 번호를 클라이언트 데이터 액세스 요청에 할당하는 것을 생략할 수 있다.
동작 시퀀스(3501)는 DSN(3505)에 따라, 수신된 순서로 배열되는 다수의 동작을 포함할 수 있다. 예를 들어, 1차 노드(3211)는 제1 동작을 나타내기 위해 OP1을 할당할 수 있고, 제2 동작을 나타내기 위해 OP2를 할당할 수 있으며, OPn으로 나타낸 바와 같이 이하 계속된다. OPn+1은 마지막으로 사용된 순서 번호(LSN, 3515)를 나타낼 수 있다. 상기한 바와 같이, LSN(3515)은 기록 동작 및 재구성 동작 둘다 중에서 전체적인 순서를 생성하기 위해 증분될 수 있다. CSN(3510)은 복제 세트(3210)에서의 마지막 구성 변화를 가리킬 수 있다. 일부 경우에, CSN(3510)은 LSN 시퀀스를 공유할 수 있다. LSN 시퀀스에서의 간극은 통상적으로 동작 시퀀스(3501)를 따르지 않았음을 나타내며, 이 결과 종종 데이터 손실이 일어난다.
방법(3300)은 1차 노드가 대응하는 데이터 순서 번호를 포함한 클라이언트 데이터 액세스 요청들 중 적어도 하나를 2차 노드들 중 적어도 하나로 전송하는 동작(동작 3350)을 포함한다. 예를 들어, 1차 노드(3211)는 할당된 DSN(3216)을 포함한 클라이언트 데이터 액세스 요청(3215)을 2차 노드(3212)로 전송할 수 있다. 일부 경우에, 클라이언트 데이터 액세스 요청은 기록 정족수 또는 판독 정족수 등의 정족수로 전송될 수 있다. 이 정족수는 예상된 정보로 또한 부가하여 1차 노드가 모르고 있는 다른 데이터 액세스 요청의 표시로 응답할 수 있다. 예를 들어, 2차 노드는 1차 노드(3211)가 선택되기 전에 다른 트랜잭션을 처리했을 수도 있거나, 1차 노드가 모르는 어떤 트랜잭션을 할당받았을 수도 있다. 따라서, 이 정보는 1차 노드(3211)로 전송될 수 있고 1차 노드의 동작 시퀀스(3501)를 업데이트하는 데 사용될 수 있다. 일부 경우에, 이 프로세스는 복제 세트 재구성 동안에만 일어나며, 이에 대해서는 이하에서 더 상세히 설명할 것이다.
방법(3300)은 1차 노드가, 적어도 임계 수의 2차 노드로부터, 클라이언트 데이터 액세스 요청의 수신을 나타내는 확인 응답을 수신하는 동작(동작 3360)을 포함한다. 예를 들어, 1차 노드(3211)는, 임계 수의 2차 노드(예를 들어, 판독 또는 기록 정족수)로부터, 클라이언트 데이터 액세스 요청(3215)의 수신을 확인 응답하는 확인 응답 메시지(3220)를 수신할 수 있다. 이 확인 응답(3220)은 또한 그 메시지를 전송한 2차 노드가 클라이언트 데이터 액세스 요청(3215)을 그의 데이터 액세스 큐(즉, 동작 시퀀스(3501))에 삽입했음을 나타낼 수 있다. 일부 경우에, 1차 노드(3211)는 복제 세트 내의 노드들 전부로부터 또는 그의 정족수로부터 이러한 확인 응답 메시지를 수신할 수 있다. 확인 응답은, 부가하여 또는 대안으로서, 클라이언트 데이터 액세스 요청의 수락 또는 거부를 나타낼 수 있다.
방법(3300)은 1차 노드가 데이터 액세스 요청을 커밋하는 동작 - 이 커밋하는 동작은 클라이언트 데이터 액세스 요청에 따라 데이터에 액세스하는 동작을 포함함 - (동작 3370)을 포함한다. 예를 들어, 1차 노드(3211)는 단일의 단계로 데이터 액세스 요청(3215)을 커밋할 수 있으며, 여기서 커밋하는 동작은 클라이언트 데이터 액세스 요청(3215)에 따라 데이터에 액세스하는 동작을 포함한다. 따라서, 데이터 액세스 요청이 기록 요청인 경우에, 1차 노드(3211)는 단일의 단계로 기록 요청을 커밋할 수 있다. 단일의 단계로 커밋하는 동작은 2차 노드들 각각으로부터 커밋 질의를 전송 및 수신하지 않고 행해질 수 있다. 단일의 단계로 커밋하는 동작은 비블로킹 트랜잭션(non-blocking transaction)이라고 할 수 있다. 상기한 바와 같이, 복제 세트 내에서의 고장 검출이 완벽하기 때문에, 1차 노드는 2차 노드들 각각으로부터 커밋 질의를 전송 및 수신할 필요가 없다.
일부 실시예들에서, 1차 노드(3211)는 클라이언트 데이터 액세스 요청(3215)을 제2 복제 세트로 전송할 수 있다. 제2 복제 세트는 1차 노드의 이웃과 다른 이웃 내에 있을 수 있다. 일부 경우에, 1차 노드의 이웃은 복제 세트 내의 노드들과 동일한 노드들을 포함하고 있다. 1차 노드(3211)는 복제 세트(3210)에게 클라이언트 데이터 액세스 요청(3215)의 제1 부분을 처리하도록 요청할 수 있고 제2 복제 세트에게 데이터 액세스 요청의 제2의 다른 부분을 처리하도록 요청할 수 있다. 그러나, 이러한 실시예들은 2-단계 커밋 프로세스를 사용한다. 예를 들어, 이 프로세스는 클라이언트 데이터 액세스 요청(3215)의 제1 부분에 대응하는 복제 세트(3210)로부터 응답을 수신하는 동작을 포함할 수 있다. 이 프로세스는 또한 데이터 액세스 요청의 제2의 다른 부분에 대응하는 제2 복제 세트로부터 응답을 수신하는 동작도 포함할 수 있다. 이들 응답이 결합될 수 있고, 이 결합된 응답에 기초하여, 최신의 데이터 액세스 응답이 발생될 수 있다.
예시적인 실시예에서, 1차 노드(3211)는 다음과 같이 클라이언트 데이터 액세스 요청에 응답할 수 있다. 1) 1차 노드(3211)가 애플리케이션 일관성 제약조건과 대조하여 요청을 유효성 검사한다. 1차 노드(3211)가 위반을 판정하는 경우, 1차 노드는 애플리케이션 일관성 위반(application consistency violation)이라는 고장 상태로 클라이언트(3250)에 응답할 수 있고 이하의 스텝 (7)로 건너뛴다. 2) 1차 노드(3211)는 1차 노드의 LSN을 원자적으로 증분시킴으로써 획득될 수 있는 순서 번호를 기록 동작에 할당한다. 이 예에서, 주어진 기록 동작과 연관된 순서 번호는 그의 DSN이라고 한다. 3) 1차 노드(3211)는 DSN, CSN 및 기록될 데이터를 모든 2차 노드들에게 전달하고 기록 정족수의 2차 노드가 응답하기를 기다린다(변형 방법은 1차 노드가 기록될 데이터를 기록 정족수에게만 전송하는 것일 수 있다).
4) 기록 정족수의 2차 노드들로부터 확인 응답을 들은 후에, 1차 노드(3211)는 로컬적으로 기록 동작을 수행하고 이 때가 기록 동작이 커밋된 것으로 간주되는 시점이다. 1차 노드(3211)는 역으로 성공 상태로 클라이언트에게 응답을 하고 이하의 스텝 (7)로 건너뛴다. 5) 1차 노드(3211)가 기록 정족수의 2차 노드들로부터 확인 응답을 받지 못한 경우, 1차 노드는 고장난 2차 노드를 제거하기 위해 재구성 동작을 개시한다. 6) 1차 노드(3211)가 로컬적으로 기록 동작을 수행하지 못한 경우, 1차 노드는 새로운 1차 노드로 전이하기 위해 재구성 동작을 개시하고, 그 자신을 복제 세트(3210)로부터 제거하며, 스텝 (7)로 건너뛴다. 7) 1차 노드(3211)는 그 다음 착신 클라이언트 데이터 액세스 요청을 기다린다. 유의할 점은 다른 실시예들이 가능하고, 이상에 설명한 바와 같이, 더 많은 또는 더 적은 스텝들을 포함할 수 있다는 것이다.
예시적인 실시예에서, 하나 이상의 2차 노드(3212)가 다음과 같이 데이터 기록 요청을 처리할 수 있다. 1) 2차 노드는 착신 기록 동작에 지정된 CSN을 그의 CSN과 비교한다. 지정된 CSN이 그의 CSN보다 작은 경우, 2차 노드는 요청을 무시하고 이하의 스텝 (4)로 건너뛴다. 2차 노드(3212)는 지정된 CSN이 그의 CSN보다 클 수 없다고 단언하는데, 그 이유는 이러한 조건이 불완전한 고장 검출기로 재구성이 이루어졌음을 암시하기 때문이다. 2) 2차 노드(3212)는 착신 기록 데이터 요청의 DSN을 그의 LSN과 비교한다. DSN이 그의 (LSN+1)보다 작은 경우, 2차 노드(3212)는 기록 데이터 요청을 무시한다. DSN이 그의 (LSN+1)보다 큰 경우, 2차 노드(3212)는 데이터 기록 요청을 버퍼링하고 이하의 스텝 (4)로 건너뛴다. 그렇지 않은 경우, 2차 노드(3212)는 그의 LSN을 원자적으로 증분시키고 데이터 기록 요청을 수락하며, 확인 응답(3220)을 반송한다. 2차 노드(3212)가 로컬 고장으로 인해 요청을 수락할 수 없는 경우, 2차 노드는 1차 노드에 재구성을 개시하여 2차 노드인 자신을 복제 세트로부터 제거하도록 요청한다. 3) 2차 노드(3212)는 현재 버퍼링된 동작들을 검사하고 이들 동작 각각을 검사하여, 여기에 기술하는 2차 노드의 LSN 값의 범위 내에 있는 DSN을 갖는 것을 수락할 때까지 이들 동작을 처리하며, 따라서 1차 노드에 의해 설정된 전체적인 순서를 유지한다. 4) 2차 노드(3212)는 1차 노드(3211)로부터의 그 다음 데이터 액세스 요청을 기다린다. 처리하는 동작은 관련 데이터를 안정된 저장 시설에 기록하는 동작을 포함할 수 있다.
데이터베이스 설정에서, 기록 트랜잭션을 수행하는 예시적인 방법은 다음과 같다. 1) "종료(abort)"를 비롯한 "커밋(commit)" 이전의 동작들에 대해, 1차 노드(3211)는 단순히 동작들을 로컬적으로 수행하고 이하의 스텝 (6)으로 건너뛴다. 2) "커밋"의 경우, 1차 노드(3211)는 트랜잭션을 로컬적으로 준비함으로써 트랜잭션 순서를 결정한다. 이 스텝은 또한 데이터베이스 일관성 제약조건과 대조하여 트랜잭션을 유효성 검사한다. 로컬 준비가 실패하는 경우, 고장 상태로 클라이언트(3250)에 응답을 하고 이하의 스텝 (6)으로 건너뛴다. 3) 1차 노드(3211)는 "커밋" 요청을 갖는 트랜잭션을 이전의 예에서 스텝 (2)-(3)에 기술된 바와 같이 2차 노드(3212)로 전달한다. 4) 1차 노드(3211)가 기록 정족수의 2차 노드로부터 확인 응답을 받은 후에, 1차 노드는 트랜잭션을 로컬적으로 커밋하고 클라이언트(3235)에게 성공을 보고한다. 5) 1차 노드(3211)가 기록 정족수의 2차 노드로부터 확인 응답을 받지 못한 경우, 1차 노드는 로컬적으로 준비한 트랜잭션을 종료하고 재구성 동작을 개시하여 고장난 2차 노드를 제거한다. 6) 1차 노드(3211)는 그 다음 착신 클라이언트 데이터 액세스 요청(3215)을 기다린다.
도 34는 연합 인프라 내에 일관성있는 복제 세트를 설정 및 유지하는 방법(3400)의 흐름도를 나타낸 것이다. 이제부터, 방법(3400)이 환경(3200)의 컴포넌트 및 데이터를 자주 참조하여 설명될 것이다.
방법(3400)은 노드들의 링 내의 복수의 노드들 중에서 복제 세트를 설정하는 동작 - 이 복제 세트는 1차 노드 및 하나 이상의 2차 노드를 멤버로서 포함함 - (동작 3410)을 포함한다. 예를 들어, 노드(3211, 3212) 및 노드들의 링(3205) 내의 다른 노드들 중에서 복제 세트(3210)가 설정될 수 있다. 복제 세트(3210)는 1차 노드(3211) 및 2차 노드(3212)를 멤버로서 포함할 수 있다. 일부 경우에, 복제 세트(3210)의 경계는 1차 노드 및 2차 노드가 역시 멤버로 되어 있는 이웃과 동일할 수 있다.
방법(3400)은 또한 복제 세트 멤버들 중 적어도 하나에 영향을 주는 복제 세트 구성 이벤트 발생을 나타내는 표시를 수신하는 동작(동작 3420)을 포함한다. 예를 들어, 복제 세트(3210) 내의 노드(3211, 3212) 중 임의의 것이 1차 노드(3211) 및 2차 노드(3212) 중 적어도 하나에 영향을 주는 복제 세트 구성 이벤트 발생의 표시를 수신할 수 있다. 복제 세트 구성 이벤트는 복제 세트 내의 노드 고장, 복제 세트로부터의 노드 탈퇴, 또는 노드가 복제 세트에 가입하는 것을 포함할 수 있다. 재구성을 야기하는 복제 세트의 노드들에 영향을 주는 다른 이벤트들도 가능하다. 일부 경우에, 이러한 구성 이벤트는 클라이언트 데이터 액세스 요청 동안에 일어날 수 있다.
방법(3400)은, 수신된 표시에 기초하여, 복제 세트가 재구성되어야 하는지를 판정하는 동작 - 이 재구성은, 복제 세트 구성 이벤트 발생에 기초하여, 기존의 2차 노드를 복제 세트로부터 제거하는 것, 새로운 2차 노드를 복제 세트에 추가하는 것, 갑자기 새로운 1차 노드로 전이하는 것, 및 매끄럽게 새로운 1차 노드로 전이하는 것 중 적어도 하나를 포함함 - (동작 3430)을 포함한다. 예를 들어, 수신된 표시에 기초하여, 복제 세트(3210) 내의 노드들 중 하나는 복제 세트(3210)가 재구성되어야 하는지를 판정할 수 있다. 이 재구성은, 어느 구성 이벤트가 발생했는지에 따라, 기존의 2차 노드를 복제 세트로부터 제거하는 것, 새로운 2차 노드를 복제 세트에 추가하는 것, 갑자기 새로운 1차 노드로 전이하는 것, 또는 매끄럽게 새로운 1차 노드로 전이하는 것을 포함할 수 있다.
복제 세트를 재구성하고 새로운 1차 노드로 전이하는 예시적인 방법 및 알고리즘이 이하에 기술되어 있다. 복제 세트 재구성의 예들은 일반적으로 1) 새로운 1차 노드로의 갑작스런 전이, 2) 새로운 1차 노드로의 매끄러운 전이, 3) 2차 노드의 제거, 및 4) 2차 노드의 추가를 비롯한 4가지 경우를 포함한다. 이들 4가지 일반적인 예들 각각은 독립적으로 일어날 수 있으며, 적어도 일부 실시예들에서, 기존의 1차 노드의 대체를 수반하지 않는다.
방법(3400)은 복제 세트 구성 이벤트에 대응하는 재구성에 따라 복제 세트를 재구성하는 동작(동작 3440)을 포함한다. 예를 들어, 복제 세트(3210)는 복제 세트 구성 이벤트에 대응하는 재구성에 따라 재구성될 수 있다. 따라서, 복제 세트 구성 이벤트가 노드 고장인 경우, 복제 세트(3210)는 2차 노드를 추가하는 것, 2차 노드를 제거하는 것, 또는 새로운 1차 노드로 전이하는 것에 의해 재구성될 수 있다. 유사하게, 복제 세트 구성 이벤트가 노드 가입인 경우, 복제 세트(3210)는 상기한 방법들 중 임의의 방법에 따라 재구성될 수 있다. 일부 경우에, 어떤 재구성 방법들은 어떤 재구성 이벤트들에 대응할 수 있다. 이러한 대응 관계는 사용자에 의해 구성될 수 있거나 자동적일 수 있다.
일부 경우에, 1차 노드(3211)는, 구성 상태 정보에 기초하여, 하나 이상의 복제 세트 재구성이 진행 중인지를 검출할 수 있다. 상기한 바와 같이, 재구성 프로세스 동안에, 복제 세트에 대해 새로운 1차 노드가 선택될 수 있다. 상기한 실시예들에 따르면, 링(3205) 내의 노드들은 새로운 1차 노드의 정보가 링 상의 다른 노드들에 대해 최신의 것이도록 하기 위해 새로운 1차 노드와 통신을 할 수 있다.
일부 실시예들에서, 도 34를 참조하여 상기한 것과 유사하거나 그와 동일한 일관성있는 복제 세트가 데이터에 액세스하여 이를 저장하는 데 사용될 수 있다. 예를 들어, 복제 세트(3210)는 복제 세트 노드들 중 하나 이상에(예를 들어, 2차 노드(3212)에) 데이터 저장의 일부분을 유지하도록 구성될 수 있다. 1차 노드(3211)는 클라이언트 데이터 액세스 요청(3215)을 수신할 수 있다. 요청(3215)은 노드들의 복제 세트(3210) 내의 적어도 하나의 노드에서 액세스될 수 있는 정보의 표시를 포함할 수 있다. 1차 노드는 요청을 직접 처리하거나 요청을 2차 노드로 전달할 수 있다. 1차 노드(3211)가 수신된 클라이언트 데이터 액세스 요청(3215)에 표시된 정보의 적어도 일부분에 액세스하지 못한 것으로 검출하는 경우에, 1차 노드(3211)는, 클라이언트 데이터 액세스 요청에 응답하여 1차 노드(3211) 상에 저장된 정보가 액세스되지 못하도록 하기 위해, 복제 세트로부터 그 자신을 제거할 수 있다. 이것은 오래된 또는 쓸모없는 정보를 반환할 가능성을 없애주며 클라이언트 데이터 액세스 요청(3215)에 응답하여 반환된 정보가 최신의 것이도록 한다.
일부 실시예들에 따르면, 새로운 1차 노드로의 갑작스런 전이는 다음과 같이 일어날 수 있다. 기존의 1차 노드가 고장날 때, 상기한 방법에 따라 신뢰성있는 지도자 선출 알고리즘을 사용하여 새로운 1차 노드가 선택된다. 클라이언트 동작을 수락하기 전에, 새로운 1차 노드는 오래된 1차 노드를 복제 세트로부터 제거하기 위해 이하의 구성 변경을 수행할 수 있다. 1) 새로운 1차 노드는 복제 세트 상태에 대한 정보를 가지고 있는지 알아보기 위해 검사를 한다. 새로운 1차 노드는, 정보를 가지고 있지 않는 경우, 암시적으로 복제 세트의 모든 멤버가 고장난 것으로 판정하고 이하의 스텝 (9)로 건너뛴다. 2) 새로운 1차 노드는 모든 기존의 2차 노드와 접촉했다는 측면에서 고정점(fix point)에 도달할 때까지 그의 CSN 및 LSN을 결정하기 위해 복제 세트의 모든 노드와 접촉을 한다. 이 스텝에서 수집된 정보를 사용하여, 새로운 1차 노드는 가장 이른 CSN, 가장 늦은 CSN 및 가장 늦은 LSN을 결정한다. 유의할 점은 가장 이른 CSN 및 가장 늦은 CSN이 어떤(또는 대부분의) 경우에 동일할 수 있다는 것이다. 가장 이른 CSN 및 가장 늦은 CSN이 서로 다를 때, 재구성 동작의 중간에서 1차 노드의 고장이 표시된다. 이어서, 가장 이른 CSN보다 큰 CSN을 갖는 임의의 복제가 분명히 최신의 데이터를 가지고 있다. 따라서, 이 스텝의 끝에서, 가장 이른 CSN과 가장 늦은 CSN이 서로 다를 때, 새로운 1차 노드는 이미 최신의 데이터를 가지고 있다. 그렇지 않은 경우, 새로운 1차 노드는 가장 늦은 CSN 이전에 기록된 데이터만을 가지고 있으며, 스텝 (3)에서의 검사는 가장 늦은 CSN 이후에 기록된 데이터도 가지고 있도록 한다.
3) 가장 이른 CSN 및 가장 늦은 CSN이 동일하고 새로운 1차 노드가 판독 정족수의 2차 노드와 접촉하지 못한 경우, 데이터 손실 가능성이 있으며 새로운 1차 노드는 이하의 스텝 (9)로 건너뛴다. 일부 경우에, 판독 정족수가 그의 기록 정족수와 교차하는 것이 아주 유리할 수 있다(또는 심지어 필요할 수 있다). 크기 기반 정족수의 경우, 판독 정족수는 (n-w)보다 큰 임의의 세트이며, 여기서 n은 CSN에 지정된 복제 노드의 수이고 w는 기록 정족수이다.
4) 새로운 1차 노드는 그의 보고된 LSN과 상기 스텝 (2)에서 결정된 가장 늦은 LSN 사이의 동작들을 그의 구성 내의 2차 노드들에게 전송함으로써 데이터에 대해 그의 구성 내의 2차 노드들을 통용시키려고 한다. 가장 이른 CSN 이후 가장 늦은 CSN까지의 불완전한 재구성 동작들은 이 스텝에서 단축된 무효 재구성 동작으로서 전송될 수 있다. 5) 새로운 1차 노드는 고장난 1차 노드(예를 들어, 1차 노드(3211)) 및 2차 노드(예를 들어, 2차 노드(3212))를 가장 늦은 CSN을 갖는 구성으로부터 제거한 후에 로컬적으로 새로운 복제 구성을 작성하고, 가장 늦은 LSN을 그의 LSN으로 삼고, LSN을 증분시킴으로써 획득된 CSN을 새로운 구성에 할당한다. 6) 새로운 1차 노드는 새로운 복제 구성을 모든 2차 노드들에게 전달한다.
7) 새로운 1차 노드가 모든 2차 노드들로부터 성공 상태를 받지 못하거나 상기 스텝 (6)에서 전송된 재구성 동작에 응답하여 임의의 2차 노드로부터 고장 상태를 들은 경우, 새로운 1차 노드는 상기 스텝 (2)-(6)을 재실행한다. 8) 적어도 2차 노드들 중 일부(또는 그 전부)로부터 성공 상태를 들은 후에, 새로운 1차 노드는 이하의 스텝 (10)으로 건너뛴다. 9) 새로운 1차 노드는 재난 복구를 수행하기 위해 데이터 센터 내의 벨을 울리는 것, 페이저 메시지를 전송하는 것 등의 조치들을 취한다. 일부 경우에, 복제 세트는 수동 개입만을 사용하여 복구될 수 있다. 10) 새로운 1차 노드는 이 시점에서 클라이언트 동작의 처리를 재개한다. 상기 스텝 (2)에서, 새로운 1차 노드는 이전의 1차 노드가 고장났을 때 복제 세트에 추가되고 있는 중이었던 새로운 2차 노드를 발견할 수 있다. 고정점은 새로운 1차 노드가 새로운 구성의 일부로 간주하는 안정된 2차 노드들의 세트를 포착하기 위한 것이다. 갑작스런 1차 노드 전이 부근에서의 최적화를 제거하고 새로운 2차 노드를 처리하는 경우, 이 고정점 계산이 제거될 수 있다.
일부 실시예들에 따르면, 새로운 1차 노드로의 매끄러운 전이는 다음과 같이 일어날 수 있다. 기존의 1차 노드로부터 새로운 1차 노드로의 전이는 복제 세트에 새로운 2차 노드를 추가하는 것(이하에서 설명할 것임)과 아주 유사하다. 유의할 점은 새로운 1차 노드가 복제 세트 내의 현재의 2차 노드이거나 그렇지 않을 수 있다는 것이다. 이 예에서, 잠재적인 새로운 1차 노드는 복제 세트의 일부가 되기 위해 이 알고리즘을 따른다. 1) 새로운 1차 노드는 복제 세트 내의 하나 이상의 기존의 2차 노드들과 접촉을 하여 그 2차 노드에게로 데이터를 전송한다. 2) 새로운 1차 노드는 기존의 1차 노드(예를 들어, 1차 노드(3211))와 동시에 접촉을 하여 그 1차 노드에게로 새로운 동작을 전달한다.
3) 새로운 1차 노드로부터 수신된 새로운 동작의 DSN이 2차 노드로부터 수신된 데이터보다 큰 경우, 새로운 1차 노드에 의해 전송된 새로운 기록 동작들을 2차 노드로부터 수신된 데이터와 병합한다. 4) 상기 스텝 (1)에서 새로운 1차 노드에 의해 접촉된 2차 노드들 전부가 데이터 전송이 완료되었음을 보고한 후에, 새로운 1차 노드는 기존의 1차 노드(3211)와 접촉을 하여 새로운 1차 노드가 복제 세트의 현재의 1차 노드가 되도록 구성 변경을 개시한다. 5) 스텝 (4)에서 전송된 재구성 요청에 대한 응답으로서 기존의 1차 노드로부터 성공 상태를 수신한 후에, 새로운 1차 노드는 복제 세트에 대한 1차 노드 역할을 맡는다. 6) 스텝 (5)에서의 재구성 요청 때까지, 새로운 1차 노드는 자신이 수신하는 클라이언트 동작들을 기존의 1차 노드로 전달한다.
일부 실시예들에 따르면, 2차 노드를 제거하는 프로세스는 다음과 같이 행해질 수 있다. 완벽한 고장 검출기(도 14 및 도 19와 관련하여 상기하였음)가 기존의 2차 노드(3212)가 고장났음을 링 노드들 중 하나(예를 들어, 1차 노드(3211))에게 보고할 때, 또는 기존의 2차 노드가 다른 노드들 중 하나와 접촉을 하여 자발적으로 그 자신을 복제 세트(3210)로부터 제거할 때, 노드들 중 하나(예를 들어, 1차 노드)는 이하의 알고리즘을 실행하여 2차 노드를 복제 세트로부터 제거할 수 있다. 이 예에서, 1) 1차 노드는 착신 클라이언트 동작들(예를 들어, 3215)의 처리를 차단하고 이들을 버퍼링하거나 클라이언트(예를 들어, 3250)에게 나중에 재시도하도록 요구한다. 2) 1차 노드는 고장난 2차 노드를 복제 세트 멤버쉽으로부터 제거함으로써 로컬적으로 새로운 복제 구성을 설치하고 그의 LSN을 원자적으로 증분시킴으로써 새로운 구성에 CSN을 할당한다. 일부 경우에, 이것은 재구성 동작이 데이터 동작과 동일한 시퀀스 스트림(sequence stream)으로 되어 있음을 의미한다. 3) 1차 노드는 새로운 구성을 모든 2차 노드로 전달한다. 4) 2차 노드들 중 적어도 일부(또는 그 전부)로부터 성공 상태를 들은 후에, 1차 노드는 클라이언트 동작의 처리를 재개한다.
이러한 재구성 프로세스 동안에, 재구성되는 2차 노드는 다음과 같이 거동할 수 있다. 1) 2차 노드는 재구성 동작의 CSN을 그의 LSN과 비교한다. CSN이 (LSN+1)보다 작은 경우, 2차 노드는 2차 노드에게 고장 상태를 전송하고 이하의 스텝 (3)으로 건너뛴다. CSN이 (LSN+1)과 같은 경우, 2차 노드는 그의 LSN을 원자적으로 증분시키고 재구성 동작을 수락하며, 성공 상태를 반송한다. 그렇지 않은 경우, 2차 노드는 재구성 동작을 버퍼링하고 이하의 스텝 (3)으로 건너뛴다. 2) 2차 노드는 현재 버퍼링된 동작들을 검사하고 이들 중 적어도 일부(또는 그 전부)를 검사할 때까지 이들을 처리한다. 3) 2차 노드는 1차 노드로부터의 그 다음 동작 요청을 기다린다.
고장 검출기의 완벽성은 이전의 재구성 및 새로운 재구성이 동시에 존재하지 않도록 한다. 일부 실시예들에서, 전체적인 가정은 고장-중단 고장(fail- stop failure)을 검출하는 데 사용될 수 있는 완벽한 고장 검출기가 존재한다는 것이다. 이런 의미에서 "완벽"의 사용은, 노드 인스턴스의 존재가 실제로 영구적으로 이용가능하지 않게 되지 않는 한, 고장 검출기가 그 노드 인스턴스가 이용가능하지 않게 되었다고 결코 보고하지 않는다는 가정을 말한다. 상기한 바와 같이, 고장 검출은 앞서 설명한 바와 같은 링 일관성 및 라우팅 일관성 속성들의 개념와 보조를 맞출 수 있고 그에 의존할 수 있다. 이전의 재구성 및 새로운 재구성이 동시에 존재하지 않기 때문에, 이것은 복제 세트 노드가 고장났거나 자발적으로 그 자신을 제거한 후에만 복제 세트 노드가 복제 세트로부터 제거되기 때문에 복제 세트 상태가 복제 세트 멤버 외부에 존재하지 않는다는 것을 의미한다. 이것은 복제 세트의 모든 멤버가 고장난 조건을 식별하는 데 당연히 유용한데, 그 이유는 새로 선택된 1차 노드가 이 조건 하에서는 복제 세트 상태에 액세스하지 못한다는 것을 깨닫게 될 것이기 때문이다.
이 예에서, 1차 노드가 재구성 동작이 완료될 때까지는 착신하는 동작들의 처리를 차단하기 때문에, 통신 사업자는 보이지 않게 된 재구성 동작들을 무시할 수 있게 된다. 재구성 동작을 개시한 1차 노드가 재구성 프로세스 동안에 고장나고 이 고장난 1차 노드에 의해 접촉된 2차 노드들도 이어서 고장날 때 재구성 동작이 보이지 않게 될 수 있다. 이러한 특성에 의해, 복제 세트의 기존의 2차 노드들 중에서 단일의 CSN을 발견하는 새로 선택된 1차 노드는 1차 노드가 발견한 CSN이 실제로 전체 시스템을 관찰하는 주관자의 관점에서 볼 때 가장 늦은 CSN이라는 것 또는 그 후에 보이지 않게 된 나중의 재구성 동작들 이후에 어떤 데이터 동작도 개시되지 않았다는 것을 확신할 수 있게 된다. 그 자체로서, 새로운 1차 노드로의 갑작스런 전이에 관한 예에서 설명하는 바와 같이, 새로 선택된 1차 노드가 기존의 2차 노드들 중에서 자신이 발견한 가장 늦은 CSN에 기초하여 데이터 손실을 판정하는 것이 안전하다.
재구성 동작들이 데이터 동작들과 동일한 시퀀스 내에 있을 수 있는 경우, 2차 노드들 중 적어도 일부(또는 그 전부)가 재구성 동작의 끝에서 데이터에 대해 통용된다(이들 모두가 동일한 LSN을 갖는다는 것을 의미함). 기록 정족수의 존재 시에, 이 속성에 의해 새로 선택된 1차 노드가 기존의 2차 노드들 중에서 발견하는 가장 늦은 CSN에 기초하여 새로 선택된 1차 노드가 데이터 손실을 판정하는 것이 안전하게 된다.
일부 실시예들에 따르면, 2차 노드를 추가하는 프로세스는 이하의 방식으로 행해질 수 있다. 이 예에서, 새로운 2차 노드는 복제 세트의 일부가 되기 위해 이하의 알고리즘을 따른다. 1) 새로운 2차 노드는 복제 세트로 데이터를 전송하기 위해 복제 세트 내의 하나 이상의 기존의 2차 노드들과 접촉한다. 2) 새로운 2차 노드는 이와 동시에 새로운 동작들을 1차 노드로 전달하기 위해 1차 노드(예를 들어, 3211)와 접촉한다. 3) 1차 노드로부터 수신된 새로운 동작의 DSN이 2차 노드로부터 수신된 데이터보다 큰 경우, 새로운 2차 노드는 1차 노드에 의해 전송된 새로운 기록 동작들을 2차 노드로부터 수신된 데이터와 병합한다. 4) 상기 스텝 (1)에서 새로운 2차 노드에 의해 접촉된 2차 노드들 중 적어도 일부(또는 그 전부)가 데이터 전송이 완료된 것으로 보고한 후에, 새로운 2차 노드는 1차 노드와 접촉하여 그 자신을 복제 세트에 추가하기 위해 구성 변경을 개시한다.
계속하여 이 예에서, 새로운 2차 노드를 복제 세트에 추가하기 위해 1차 노드가 따르는 알고리즘은 다음과 같다. 1) 새로운 2차 노드로부터의 제1 요청에 응답하여, 1차 노드는 예비의 새로운 2차 노드가 아직 복제 세트의 일부가 아니더라도 새로운 동작들을 예비의 새로운 2차 노드로 전달하기 시작한다. 2) 새로운 2차 노드로부터의 차후의 재구성 요청에 응답하여, 1차 노드는 "2차 노드의 제거" 예에서 상기한 거의 동일한 스텝들을 사용하여 재구성 동작을 개시할 수 있으며, 차이점은 새로운 구성이 기존의 2차 노드를 제거하는 대신에 새로운 2차 노드를 추가한다는 것이다.
도 36은 연합 인프라 내의 복제 세트로부터 데이터에 액세스하는 환경(3600)을 나타낸 것이다. 환경(3600)은 복수의 모듈들을 포함하는 데이터 액세스 시스템(3610)을 포함한다. 일반적으로, 이하에서 기술되는 각각의 모듈은 링 구현(예를 들어, 노드들의 링(3205)) 내에 존재하고, 이웃 및/또는 복제 세트를 이루고 있는 노드들, 보다 일반적으로는 노드들의 링 구성을 이루고 있는 노드들 및 이러한 노드들의 링 구성 내의 활성 노드가 되려고 하는 장치들에 걸쳐 분산 알고리즘으로서 구현될 수 있다. 이 시스템은 링 상에 복수의 노드들의 이웃을 설정하도록 구성되어 있는 이웃 설정 모듈 - 이 이웃은 적어도 바로 인접한 선행 노드 및 바로 인접한 후속 노드를 포함함 - (3620)을 포함한다. 노드들의 링(3205)은 바로 인접한 노드 1(3608)와 바로 인접한 노드 2(3609) 사이에서 링에 가입하고자 할 수 있는 가입측 노드(3606)를 포함할 수 있다. 일부 실시예들에서, 가입측 노드(3606)은 도 23C에 기술된 것과 유사한 방식으로 노드들의 링(3605)에 가입할 수 있으며, 여기서 가입측 노드는 노드(2301)와 노드(2362) 사이의 캐싱된 합의에 기초하여 ID 범위를 결정한다.
이 시스템은 또한 설정된 이웃 밖에 있는 가입측 노드가 노드들의 링에 설정된 이웃에 가입하고자 한다는 의도를 나타냈는지를 판정하도록 구성된 의도 판정 모듈(3625)을 포함한다. 의도 판정 모듈(3625)은 노드들의 이웃의 설정을 나타내는 이웃 표시(3621)를 이웃 설정 모듈(3620)로부터 수신할 수 있다. 이웃은 바로 인접한 노드 1(3608), 가입측 노드(3606) 및 바로 인접한 노드 2(3609)를 포함할 수 있다. 의도 판정 모듈(3625)은 가입하고자 한다는 가입측 노드의 의도(3626)를 일관성 유지 모듈(3630)로 전송할 수 있다.
일관성 유지 모듈(3630)은 복수의 노드들 내의 각각의 노드가 이웃 내의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖도록 설정된 이웃 내에서의 일관성을 유지하도록 구성되어 있을 수 있다. "노드들의 링에의 가입 및 그로부터의 탈퇴"라는 제목 하에서 상기한 바와 같이, 가입측 노드(3606)가 노드들의 링(3605)에 가입할 때 이웃 내에서의 일관성이 유지될 수 있다. 일관성 유지 모듈(3630)은 일관성 표시(3631)를 선택 판정 모듈(3635)로 전송할 수 있다. 유의할 점은, 일부 실시예들에서, 링의 ID 공간에서의 주어진 ID에서 모든 상태가 일관성있게 유지되기 위해, 임의의 주어진 순간에 그 ID를 소유하는 링 노드가 누구의 1차 노드인지의 상태 단위에 대해 복제 세트가 형성되어 있다. 주어진 ID에 대해 ID 공간 소유권이 (일관성있게) 노드들 간에 이전하는 것처럼, 소유측 노드에 저장된(또는 그에 의해 제어되는) 임의의 서비스 상태 단위의 대응하는 1차성(primary-ness)도 그렇다. 이 실시예에서, ID 공간 소유권 및 1차성은 동시에 이전된다.
선택 판정 모듈은 복수의 노드들 내의 노드들 중 하나가 1차 노드에 의해 지시된 대로 클라이언트 데이터 액세스 요청에 응답하도록 구성된 노드들의 복제 세트에 대해 책임지고 있는 1차 노드로 선택되었는지를 판정하도록 구성되어 있다. 1차 노드 선택과 관련하여 앞서 설명한 바와 같이, 선택 판정 모듈은 1차 노드가 복제 노드(설정된 이웃 내의 모든 노드들을 포함할 수 있음)에 대해 선택되었는지를 판정하고 어느 노드가 1차 노드로 선택되었는지의 표시(3636)를 요청 수신 모듈로 전송할 수 있다. 앞서 설명한 바와 같이, 이러한 지도자 선출은 본 문서에서 이전에 정의한 바와 같은 링 일관성 및 라우팅 일관성의 원리들(적어도 부분적으로 완벽한 고장 검출기 메커니즘을 형성하는 모니터링 합의를 포함함)을 따를 수 있다.
요청 수신 모듈(3640)은 하나 이상의 클라이언트 데이터 액세스 요청을 클라이언트(3615)로부터 수신하도록 구성되어 있을 수 있으며, 여기서 각각의 데이터 액세스 요청(3641)은 복제 세트 내의 노드들 중 적어도 하나에서 액세스되는 데이터의 적어도 일부분을 나타낸다. 요청 수신 모듈(3640)은 또한 1차 노드 표시(3636)를 수신할 수 있다. 1차 노드 표시(3636) 및 데이터 액세스 요청(3641)은 결합되어(3641A 및 3636A) 데이터 액세스 모듈(3645)로 보내질 수 있다(또는 각각이 별도로 전송될 수 있음(도시 생략)). 데이터 액세스 모듈(3645)은 통신(3607)을 통해 노드들의 링(3605) 내의 노드들 중 하나 이상과 통신을 하고 클라이언트 데이터 액세스 요청(3641)에 표시된 데이터에 액세스하도록 구성될 수 있다. 따라서, 노드들이 노드들의 링(3605)에 가입하고 그로부터 탈퇴하며 일관성이 유지되고 1차 노드가 선택되며 데이터가 신뢰성있게 액세스되는 전체적인 시스템이 구현될 수 있다. 이 시스템에 기술된 모듈들 각각은 이들 기능은 물론 각각의 모듈에 대응하는 상기 섹션들에 더 상세히 기술된 다른 기능들도 수행할 수 있다.
일부 실시예들에서, 액세스되는 데이터는 서비스를 포함한다. 예를 들어, 가입측 노드(3606)는 클라이언트(3615)가 액세스하고자 하는 서비스를 제공할 수 있다. 예를 들어, 이 서비스는 이메일 애플리케이션일 수 있다. 클라이언트(3615)는 액세스될 데이터를 표시할 수 있고, 데이터 액세스 시스템(3610)은 데이터 액세스 시스템에 의해 유지되는 링 및 데이터 일관성으로 인해 가입측 노드가 링을 탈퇴하는지 여부에 상관없이 데이터에 액세스하도록 구성될 수 있다. 다른 경우에, 제공되는 서비스는 잠금 관리자(lock manager), 데이터 저장 시스템, 생산자-소비사 큐 또는 임의의 다른 서비스일 수 있다. 시스템이 데이터베이스 등의 데이터에 액세스하는 데 사용되는 경우, 시스템(3610)은 복제 세트에서 데이터에 대한 원자성(atomicity), 일관성(consistency), 격리성(isolation) 및 영속성(durability)(ACID) 속성들 각각을 유지하도록 구성될 수 있다. 따라서, 어느 노드가 실제로 데이터를 포함하고 있는지, 어느 노드가 노드들의 링에 가입하거나 그로부터 탈퇴하는지, 또는 데이터를 포함하는 상당 수의 노드들이 고장났는지에 상관없이 일관성있고 신뢰성있는 데이터 액세스를 제공하도록 구성될 수 있는 시스템이 제공된다.
일부 경우에, 서비스에 의해 노출되는 동작들이 상태를 변이시키는 동작과 상태를 변이시키지 않는 동작으로 분할될 수 있다. 저장 서비스의 경우, 상태를 변이시키는 동작들은 "기록(write)"이라고 할 수 있고, 상태를 변이시키지 않는 동작들은 "판독(read)"이라고 한다. 잠금 관리자 서비스의 경우, 상태를 변이시키는 동작들은 "획득(acquire)" 및 "해제(release)"라고 하고, 상태를 변이시키지 않는 동작들은 "질의(query)"라고 한다. 생산자-소비자 큐(때때로 분산 계산을 위해 사용됨)의 경우, 상태를 변이시키는 동작들은 "인큐잉(enqueue)" 및 "디큐잉(dequeue)"이라고 하고, 상태를 변이시키지 않는 동작들은 "피크(peek)"라고 한다. 따라서, 본 명세서에서의 일부 실시예들에서, 용어 "기록"은 상태를 변이시키는 임의의 동작을 말하고, 용어 "판독"은 상태를 변이시키지 않는 임의의 동작을 말한다.
일부 경우에, 판독 동작들은 1차 노드(3211)에 의해 로컬적으로 처리된다. 클라이언트-요청된 상태가 그곳에 존재하지 않기 때문에 예비 1차 노드에서 판독이 충족될 수 없는 경우, 그 상태는 어느 2차 노드에도 (확실히) 존재하지 않게 된다. 일부 실시예들에서, 기록 동작들은 1차 노드(3211)를 통해 순서화될 수 있다. 이러한 경우에, 1차 노드(3211)는 실제로는 적어도 기록 정족수의 2차 노드가 그 자신이 그 상태를 기록했음을 확인 응답을 할 때까지는 클라이언트-제공 상태를 로컬적으로 기록하지 않을 수도 있다. 이어서, 1차 노드(3211)는 실제로는 상태를 로컬적으로 기록한다(또는 기록하려고 시도한다). 일부 실시예들에서는, 재구성이 복제 세트 멤버(1차 노드 또는 2차 노드)가 요청된 상태를 기록할 수 없을 때는 언제라도 일어날 수 있다. 이러한 경우에, 노드는 그 자신을 복제 세트로부터 제거함으로써 복제 세트에서의 재구성을 개시할 수 있다. 게다가, 응답하지 않는 임의의 2차 노드는 고장나게 되고(이것은 완벽한 고장 검출기로 인해 보장됨) 1차 노드는 그 2차 노드를 복제 세트로부터 제거함으로써 재구성을 트리거한다. 일부 경우에, 이것에 의해 1차 노드가 복제 세트에 대해 1차 노드인 것을 그만두지 않게 된다.
데이터 액세스 시스템(3610)은 클라이언트 데이터 기록 요청에 따라 데이터를 기록하도록 구성될 수 있다. 따라서, 데이터 액세스 요청(3641)(또는 데이터 액세스 요청(3215))이 기록 요청이거나 기록 요청을 포함하는 경우에, 1차 노드(3211)는 클라이언트 데이터 기록 요청에 표시된 데이터를 2차 노드 내의 데이터 저장소에 기록하도록 2차 노드(3212)에 지시할 수 있다. 일부 경우에, 1차 노드는 2 단계로 기록 요청을 하나 이상의 2차 노드(3212)로 복제한다. 이러한 변형례의 이점은 기록 정족수가 복제 세트(3210) 내의 모든 2차 노드로 이루어져 있는 경우 판독 동작이 2차 노드에 의해 서비스될 수 있게 한다는 것이다. 일부 경우에, 2차 노드 및 1차 노드에서 기록 동작을 수락하는 것은 노드들 각각이 개별적으로 이용가능한 안정된 저장 장치에 데이터를 기록하는 것과 같은 부가적인 로직을 트리거할 수 있다.
데이터 액세스 시스템(3610)은 클라이언트 데이터 판독 요청에 따라 데이터를 판독하도록 구성될 수 있다. 따라서, 데이터 액세스 요청(3641)(또는 데이터 액세스 요청(3215))이 판독 요청이거나 판독 요청을 포함하는 경우, 1차 노드(3211) 또는 2차 노드(3212)는 판독 요청을 직접 처리하도록 구성될 수 있다. 일부 경우에, 1차 노드(3211)가 요청에 표시된 데이터를 판독하도록 2차 노드에 요청할 필요가 없다. 다른 경우에, 2차 노드는 데이터를 판독할 수 있고 클라이언트 데이터 판독 요청에 대해 자율적으로 응답할 수 있다.
본 발명은 본 발명의 정신 또는 필수적인 특성을 벗어나지 않고 다른 구체적인 형태들로 구현될 수 있다. 기술된 실시예들은 모든 측면에서 단지 예시적인 것이며 제한적이 아닌 것으로 간주되어야 한다. 따라서, 본 발명의 범위는 이상의 설명이 아니라 첨부된 청구항에 의해 나타내어진다. 청구항들의 등가성의 범위 및 의미 내에 속하는 모든 변경들은 청구항들의 범위 내에 포함된다.

Claims (45)

  1. 양방향 라우팅을 위해 구성된 노드들의 링의 연합 인프라(federation infrastructure)에서, 가입측 노드가 상기 노드들의 링에 가입할 때 링 일관성을 유지하는 방법으로서,
    가입측 노드가 상기 링 상의 복수의 다른 노드들의 이웃을 검출하는 단계 - 상기 이웃은 적어도 바로 인접한 선행 노드 및 바로 인접한 후속 노드를 포함함 -,
    상기 가입측 노드가, 상기 바로 인접한 선행 노드 및 상기 바로 인접한 후속 노드 중에서 선택된 상기 바로 인접한 노드들 중 한쪽 노드에게, 상기 가입측 노드와 상기 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 상기 가입측 노드의 의도를 알려주는 단계,
    상기 가입측 노드가 상기 선택된 바로 인접한 노드를 모니터링하고자 한다는 의도를 알려주는 단계,
    상기 가입측 노드가 상기 가입측 노드와 상기 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 상기 가입측 노드의 의도의 수락을 나타내는 제1 표시를 상기 선택된 바로 인접한 노드로부터 수신하는 단계,
    상기 가입측 노드가 상기 선택된 바로 인접한 노드를 모니터링하고자 한다는 상기 가입측 노드의 의도의 수락을 나타내는 제2 표시를 상기 선택된 바로 인접한 노드로부터 수신하는 단계,
    상기 가입측 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 제1 선택된 바로 인접한 노드의 의도를 나타내는 제3 표시를 상기 선택된 바로 인접한 노드로부터 수신하는 단계, 및
    상기 가입측 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 선택된 바로 인접한 노드의 의도의 수락을 알려주는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 가입측 노드가 상기 가입측 노드와 다른쪽의 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 나타내는 표시를 상기 다른쪽의 바로 인접한 노드로부터 수신하는 단계,
    상기 가입측 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 다른쪽의 바로 인접한 노드의 의도를 나타내는 표시를 상기 다른쪽의 바로 인접한 노드로부터 수신하는 단계,
    상기 가입측 노드가 상기 가입측 노드와 상기 다른쪽의 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 설정하고자 한다는 상기 가입측 노드의 의도를 상기 다른쪽의 바로 인접한 노드에게 알려주는 단계,
    상기 가입측 노드가 상기 다른쪽의 바로 인접한 노드를 모니터링하고자 한다는 의도를 알려주는 단계, 및
    상기 가입측 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 다른쪽 의 바로 인접한 노드의 의도를 나타내는 표시를 상기 다른쪽의 바로 인접한 노드로부터 수신하는 단계
    를 더 포함하는 방법.
  3. 제1항에 있어서, 상기 가입측 노드가, 상기 바로 인접한 선행 노드 및 상기 바로 인접한 후속 노드 중에서 선택된 상기 바로 인접한 노드들 중 한쪽 노드에게, 상기 가입측 노드와 상기 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 상기 가입측 노드의 의도를 알려주는 단계는,
    상기 바로 인접한 선행 노드 및 상기 바로 인접한 후속 노드 중에서 선택된 바로 인접한 노드로 토큰 요청을 전송하는 단계를 포함하고,
    상기 토큰 요청은,
    노드 ID(node identifier) - 이 노드 ID를 갖는 노드만이 응답을 할 수 있음 -, 및
    제1 TTL(time-to-live) 기간 값 - 이 제1 TTL 기간 값은 상기 가입측 노드가 상기 선택된 바로 인접한 노드와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 -
    을 포함하는 방법.
  4. 제1항에 있어서, 상기 제1, 제2 및 제3 표시는 단일의 표시로 결합되는 방법.
  5. 제4항에 있어서, 상기 단일의 표시를 수신하는 단계는,
    상기 선택된 바로 인접한 노드로부터 제1 토큰 전송을 수신하는 단계를 포함하고,
    상기 제1 토큰 전송은,
    상기 가입측 노드와 상기 선택된 바로 인접한 노드 사이에 있는 상기 노드들의 링 내의 미점유 노드 ID들에 대한 상기 가입측 노드의 소유권 범위,
    제2 TTL 기간 값 - 이 제2 TTL 기간 값은 상기 선택된 바로 인접한 노드가 상기 가입측 노드와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 -, 및
    상기 선택된 바로 인접한 노드가 상기 가입측 노드를 모니터링하는 것을 나타내는 제1 설정 허가(establish grant)
    를 포함하는 방법.
  6. 제1항에 있어서, 상기 가입측 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 선택된 바로 인접한 노드의 의도의 수락을 알려주는 단계는,
    상기 선택된 바로 인접한 노드로 확인 응답 메시지(acknowledgement message)를 전송하는 단계를 포함하며,
    상기 확인 응답 메시지는,
    상기 가입측 노드와 상기 선택된 바로 인접한 노드 사이의 제1 소유권 범위, 및
    상기 가입측 노드가 상기 선택된 바로 인접한 노드를 모니터링하는 것을 나타내는 제2 설정 허가
    를 포함하는 방법.
  7. 제2항에 있어서, 상기 가입측 노드가 상기 가입측 노드와 상기 다른쪽의 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 나타내고 상기 가입측 노드를 모니터링하고자 한다는 상기 다른쪽의 바로 인접한 노드의 의도를 나타내는 표시를 상기 다른쪽의 바로 인접한 노드로부터 수신하는 단계는,
    상기 다른쪽의 바로 인접한 노드로부터 제2 토큰 전송을 수신하는 단계를 포함하고,
    상기 제2 토큰 전송은,
    제3 TTL 기간 값 - 이 제3 TTL 기간 값은 상기 다른쪽의 바로 인접한 노드가 상기 가입측 노드와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 - 을 포함하는 방법.
  8. 제7항에 있어서, 상기 가입측 노드가 상기 가입측 노드와 상기 다른쪽의 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 설정하고자 한다는 상기 가입측 노드의 의도를 상기 다른쪽의 바로 인접한 노드에게 알려주는 단계는,
    상기 가입측 노드와 상기 다른쪽의 바로 인접한 노드 사이의 제2 소유권 범위를 설정하기 위한 설정 요청을 전송하는 단계를 포함하며.
    상기 설정 요청은,
    제4 TTL 기간 - 이 제4 TTL 기간은 상기 가입측 노드가 상기 다른쪽의 바로 인접한 노드와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 -, 및
    상기 가입측 노드가 상기 다른쪽의 바로 인접한 노드를 모니터링하는 것을 나타내는 제3 설정 허가
    를 포함하는 방법.
  9. 제7항에 있어서, 상기 가입측 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 다른쪽의 바로 인접한 노드의 의도를 나타내는 표시를 상기 다른쪽의 바로 인접한 노드로부터 수신하는 단계는,
    상기 설정 요청에 대한 제4 설정 허가를 수신하는 단계를 포함하며,
    상기 제4 설정 허가는 상기 다른쪽의 바로 인접한 노드가 상기 가입측 노드를 모니터링한다는 것을 나타내는 방법.
  10. 제1항에 있어서,
    상기 가입측 노드가 상기 링 상의 노드들 중 적어도 하나의 노드로부터 부정 확인 응답(negative acknowledge, NAK) 메시지를 수신하는 단계 - 상기 NAK 메시지 는 상기 링에 대한 상기 NAK 송신자의 뷰(view)의 표시를 포함함 -, 및
    상기 링에 대한 상기 NAK 송신자의 뷰에 기초하여 상기 이웃에 대한 상기 가입측 노드의 뷰를 업데이트하는 단계
    를 더 포함하는 방법.
  11. 양방향 라우팅을 위해 구성된 노드들의 링의 연합 인프라(federation infrastructure)에서 - 상기 노드들의 링은 제1 선택된 바로 인접한 노드 및 제2 선택된 바로 인접한 노드를 포함함 -, 가입측 노드가 상기 제1 바로 인접한 노드와 상기 제2 바로 인접한 노드 사이에서 상기 노드들의 링에 가입할 때 링 일관성을 유지하는 방법으로서,
    제1 선택된 바로 인접한 노드가 상기 가입측 노드와 상기 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 상기 가입측 노드의 의도를 나타내는 표시를 상기 가입측 노드로부터 수신하는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 선택된 바로 인접한 노드를 모니터링하고자 한다는 상기 가입측 노드의 의도를 나타내는 표시를 상기 가입측 노드로부터 수신하는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 가입측 노드와 상기 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖고자 한다는 상기 가입측 노드의 의도의 수락을 나타내는 제1 표시를 상기 가입측 노드로 전송하는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 선택된 바로 인접한 노드를 모니터링하고자 한다는 상기 가입측 노드의 의도의 수락을 나타내는 제2 표시를 상기 가입측 노드로 전송하는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 제1 선택된 바로 인접한 노드의 의도를 나타내는 제3 표시를 상기 가입측 노드로 전송하는 단계, 및
    상기 제1 선택된 바로 인접한 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 제1 선택된 바로 인접한 노드의 의도의 수락을 나타내는 표시를 상기 가입측 노드로부터 수신하는 단계
    를 포함하는 방법.
  12. 제11항에 있어서,
    상기 제1 선택된 바로 인접한 노드가 제2 선택된 바로 인접한 노드와의 모니터링 관계를 종료하고자 한다는 상기 제1 노드의 의도를 상기 제2 선택된 바로 인접한 노드에 알려주는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 제1 선택된 바로 인접한 노드와의 모니터링 관계를 종료하고자 한다는 상기 제2 노드의 의도를 나타내는 표시를 상기 제2 선택된 바로 인접한 노드로부터 수신하는 단계, 및
    상기 제1 선택된 바로 인접한 노드가 종료하고자 한다는 상기 제2 노드의 의도를 확인 응답하는 단계
    를 더 포함하는 방법.
  13. 제11항에 있어서,
    상기 가입측 노드에 의해 소유되는 것으로 표시된 노드 ID들의 예상된 소유권 범위를 포함하는 소개 메시지를 상기 가입측 노드로부터 수신하는 단계, 및
    상기 가입측 노드에 의해 식별된 노드 ID들의 범위가 상기 선택된 바로 인접한 노드의 노드 ID들의 범위와 일치한다는 표시를 포함하는 확인 응답 메시지를 상기 가입측 노드로 전송하는 단계
    를 더 포함하는 방법.
  14. 양방향 라우팅을 위해 구성된 노드들의 링의 연합 인프라(federation infrastructure)에서 - 상기 노드들의 링은 제1 선택된 바로 인접한 노드 및 제2 선택된 바로 인접한 노드를 포함함 -, 가입측 노드가 상기 제1 바로 인접한 노드와 상기 제2 바로 인접한 노드 사이에서 상기 노드들의 링에 가입할 때 링 일관성을 유지하는 방법으로서,
    바로 인접한 선행 노드와 바로 인접한 후속 노드 중에서 선택된 제1 선택된 바로 인접한 노드가 상기 가입측 노드와 상기 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 상기 가입측 노드에 알려주는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 제1 선택된 바로 인접한 노드의 의도를 알려주는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 가입측 노드와 상기 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 설정하고자 한다는 상기 가입측 노드의 의도의 표시를 수신하는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 제1 선택된 바로 인접한 노드를 모니터링하고자 한다는 상기 가입측 노드의 의도의 표시를 수신하는 단계, 및
    상기 제1 선택된 바로 인접한 노드가 상기 가입측 노드를 모니터링하고자 한다는 상기 제1 선택된 바로 인접한 노드의 의도를 상기 가입측 노드에게 알려주는 단계
    를 포함하는 방법.
  15. 제14항에 있어서,
    상기 제1 선택된 바로 인접한 노드가 상기 제1 선택된 바로 인접한 노드와의 모니터링 관계를 종료하고자 한다는 상기 제2 노드의 의도를 나타내는 표시를 제2 선택된 바로 인접한 노드로부터 수신하는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 제2 선택된 바로 인접한 노드와의 모니터링 관계를 종료하고자 한다는 상기 제1 노드의 의도를 상기 제2 선택된 바로 인접한 노드에게 알려주는 단계, 및
    상기 제1 선택된 바로 인접한 노드가 종료하고자 한다는 상기 제1 노드의 의도를 확인 응답하는 확인 응답을 수신하는 단계
    를 더 포함하는 방법.
  16. 양방향 라우팅을 위해 구성된 노드들의 링의 연합 인프라(federation infrastructure)에서 - 상기 노드들의 링은 탈퇴측 노드(leaving node), 제1 선택된 바로 인접한 노드, 및 제2 선택된 바로 인접한 노드를 포함하고, 상기 제1 및 제2 노드는 상기 링 상에서 상기 탈퇴측 노드와 바로 인접해 있음 -, 상기 탈퇴측 노드가 상기 노드들의 링을 탈퇴할 때 링 일관성을 유지하는 방법으로서,
    상기 제1 선택된 바로 인접한 노드가 상기 탈퇴측 노드가 상기 노드들의 링을 탈퇴하는 동작의 표시를 수신하는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 탈퇴측 노드와 상기 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 상기 탈퇴측 노드의 ID 공간 소유권을 떠맡고자 한다는 의도를 나타내는 표시를 상기 제2 선택된 바로 인접한 노드로 전송하는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 제1 선택된 바로 인접한 노드와 상기 제2 선택된 바로 인접한 노드 사이의 적어도 단방향 모니터링 관계의 설정을 나타내는 표시를 상기 제2 선택된 바로 인접한 노드로 전송하는 단계,
    상기 제1 선택된 바로 인접한 노드가 상기 탈퇴측 노드와 상기 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 떠맡고자 한다는 상기 제1 노드의 의도의 수락을 나타내는 표시를 상기 제2 선택된 바로 인접한 노드로부터 수신하는 단계, 및
    상기 제1 선택된 바로 인접한 노드가 상기 제2 선택된 바로 인접한 노드와 상기 제1 선택된 바로 인접한 노드 사이의 적어도 단방향 모니터링 관계의 설정을 나타내는 표시를 상기 제2 선택된 바로 인접한 노드로부터 수신하는 단계
    를 포함하는 방법.
  17. 제16항에 있어서, 상기 제1 선택된 바로 인접한 노드가 상기 탈퇴측 노드가 상기 노드들의 링을 탈퇴하는 동작의 표시를 수신하는 단계는,
    상기 제1 선택된 바로 인접한 노드가 탈퇴 메시지를 상기 노드들의 링 상의 노드들 중 적어도 하나의 노드로부터 수신하는 단계 - 상기 탈퇴 메시지는 상기 탈퇴측 노드에 의해 소유된 것으로 표시된 노드 ID들의 소유권 범위를 포함함 - 를 포함하는 방법.
  18. 제17항에 있어서, 상기 제1 선택된 바로 인접한 노드가 상기 탈퇴측 노드와 상기 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 상기 탈퇴측 노드의 ID 공간 소유권을 떠맡고자 한다는 의도를 나타내는 표시를 상기 제2 선택된 바로 인접한 노드로 전송하는 단계는,
    상기 제1 선택된 바로 인접한 노드가 상기 제1 선택된 바로 인접한 노드와 상기 제2 선택된 바로 인접한 노드 사이의 소유권 범위를 설정하기 위한 제1 설정 요청을 상기 제2 선택된 바로 인접한 노드로 전송하는 단계 - 상기 제1 설정 요청은 제1 TTL 기간을 포함하며, 이 제1 TTL 기간은 상기 제1 선택된 바로 인접한 노드가 상기 제2 선택된 바로 인접한 노드와의 모니터링 관계가 유효할 것으로 가정 할 수 있는 기간을 나타냄 -, 및
    상기 제1 선택된 바로 인접한 노드가 상기 제1 설정 요청에 대한 제1 설정 허가를 수신하는 단계 - 상기 제1 설정 허가는 상기 제2 선택된 바로 인접한 노드가 상기 제1 선택된 바로 인접한 노드를 모니터링하는 것을 나타냄 -
    를 포함하는 방법.
  19. 제18항에 있어서, 상기 제1 선택된 바로 인접한 노드가 상기 탈퇴측 노드와 상기 제1 선택된 바로 인접한 노드 사이의 ID 공간의 일부분에 대한 ID 공간 소유권을 떠맡고자 한다는 상기 제1 노드의 의도의 수락을 나타내는 표시를 상기 제2 선택된 바로 인접한 노드로부터 수신하는 단계는,
    상기 제1 선택된 바로 인접한 노드가 상기 제1 선택된 바로 인접한 노드와 상기 제2 선택된 바로 인접한 노드 사이의 소유권 범위를 설정하기 위한 제2 설정 요청을 상기 제2 선택된 바로 인접한 노드로부터 수신하는 단계 - 상기 제2 설정 요청은 제2 TTL 기간을 포함하며, 이 제2 TTL 기간은 상기 제2 선택된 바로 인접한 노드가 상기 제1 선택된 바로 인접한 노드와의 모니터링 관계가 유효할 것으로 가정할 수 있는 기간을 나타냄 -, 및
    상기 제1 선택된 바로 인접한 노드가 상기 제2 설정 요청에 대한 제2 설정 허가를 전송하는 단계 - 상기 제2 설정 허가는 상기 제1 선택된 바로 인접한 노드가 상기 제2 선택된 바로 인접한 노드를 모니터링하는 것을 나타냄 -
    를 포함하는 방법.
  20. 양방향 라우팅을 위해 구성된 노드들의 링의 연합 인프라(federation infrastructure)에서, 연합 인프라 내에 유지되는 복제 세트 내에서 데이터 액세스 트랜잭션을 수행하는 방법으로서,
    노드들의 복제 세트 내의 복수의 노드들 중에서 1차 노드가 선택된 것으로 판정하는 단계 - 상기 1차 노드는 클라이언트 데이터 액세스 요청을 수락하고 이를 처리하도록 구성되어 있고, 상기 복제 세트는 상기 1차 노드와 하나 이상의 2차 노드들을 포함함 -,
    상기 1차 노드가 하나 이상의 클라이언트 데이터 액세스 요청들을 수신하는 단계 - 각각의 데이터 액세스 요청은 상기 복제 세트 내의 적어도 상기 1차 노드에서 액세스될 데이터의 적어도 일부분을 나타냄 -,
    상기 1차 노드가 상기 클라이언트 데이터 액세스 요청들이 수신되는 순서대로 상태를 변이시키는 상기 클라이언트 데이터 액세스 요청들 각각에 데이터 순서 번호를 할당하는 단계 - 상기 데이터 순서 번호는 상기 복제 세트 내의 노드들 각각이 따라야 하는 선형화된 처리 순서를 포함함 -,
    상기 1차 노드가 대응하는 데이터 순서 번호들을 포함하는 상기 클라이언트 데이터 액세스 요청들 중 적어도 하나를 상기 2차 노드들 중 적어도 하나로 전송하는 단계,
    상기 1차 노드가 상기 클라이언트 데이터 액세스 요청의 수신을 나타내는 확인 응답을 적어도 임계 수의 2차 노드들로부터 수신하는 단계, 및
    상기 1차 노드가 상기 데이터 액세스 요청을 커밋하는 단계
    를 포함하며,
    상기 커밋하는 단계는 상기 클라이언트 데이터 액세스 요청에 따라 상기 데이터에 액세스하는 단계를 포함하는 방법.
  21. 제20항에 있어서, 상기 1차 노드는 단일의 단계로 상기 데이터 액세스 요청을 커밋하는 방법.
  22. 제20항에 있어서, 상기 노드들의 복제 세트 내의 복수의 노드들 중에서 1차 노드를 선택하는 단계를 더 포함하는 방법.
  23. 제20항에 있어서, 허용가능 동시 고장의 최대 수에 기초하여 상기 복제 세트의 멤버들로 되는 2차 노드들의 수를 결정하는 단계를 더 포함하는 방법.
  24. 제20항에 있어서, 상기 확인 응답은 상기 클라이언트 데이터 액세스 요청의 수락 또는 거부 중 적어도 하나를 나타내는 방법.
  25. 제20항에 있어서, 상기 임계 수의 2차 노드들은 정족수(quorum)를 나타내는 방법.
  26. 제25항에 있어서, 예비 1차 노드(would-be primary node)가 모르고 있는 트랜잭션을 결정하기 위해 상기 예비 1차 노드가 상기 정족수의 2차 노드들로 요청을 전송하는 단계를 더 포함하는 방법.
  27. 제25항에 있어서, 상기 정족수의 각각의 멤버가 적어도 상기 클라이언트 데이터 액세스 요청을 LSN에 의해 순서화된 각각의 멤버의 데이터 액세스 큐에 삽입했다는 표시를 상기 정족수의 각각의 멤버로부터 수신하는 단계를 더 포함하는 방법.
  28. 제20항에 있어서, 상기 데이터의 일부분은 LSN, CSN, DSN, 1차 노드 ID 및 2차 노드 ID 중 적어도 하나를 포함한 상기 복제 세트 자체에 관한 일련의 제어 정보를 포함하는 방법.
  29. 제20항에 있어서, 단일의 단계로 상기 데이터 액세스 요청을 커밋하는 단계는,
    상기 2차 노드들 중 어느 것과도 커밋 질의를 전송 및 수신하지 않고 상기 데이터에 액세스하는 단계를 포함하는 방법.
  30. 제20항에 있어서, 상기 클라이언트 데이터 액세스 요청을 제2 복제 세트로 전송하는 단계를 더 포함하며, 상기 제2 복제 세트는 상기 제1 노드의 이웃과 다른 이웃 내에 있는 방법.
  31. 제30항에 있어서, 상기 복제 세트는 상기 클라이언트 데이터 액세스 요청의 제1 부분을 처리하도록 요청받고, 상기 제2 복제 세트는 상기 데이터 액세스 요청의 제2의 다른 부분을 처리하도록 요청받는 방법.
  32. 제31항에 있어서,
    상기 클라이언트 데이터 액세스 요청의 상기 제1 부분에 대응하는 상기 복제 세트로부터 응답을 수신하는 단계,
    상기 데이터 액세스 요청의 상기 제2의 다른 부분에 대응하는 상기 제2 복제 세트로부터 응답을 수신하는 단계,
    상기 응답들을 결합하는 단계, 및
    상기 결합된 응답들에 기초하여, 최신의 데이터 액세스 응답을 발생하는 단계
    를 더 포함하는 방법.
  33. 양방향 라우팅을 위해 구성된 노드들의 링의 연합 인프라(federation infrastructure)에서, 연합 인프라 내의 복제 세트로부터 데이터에 액세스하는 시스템으로서,
    상기 링 상에 복수의 노드들의 이웃을 설정하도록 구성된 이웃 설정 모듈 - 상기 이웃은 적어도 바로 인접한 선행 노드 및 바로 인접한 후속 노드를 포함함 -,
    상기 설정된 이웃 밖의 가입측 노드가 상기 노드들의 링 내의 상기 설정된 이웃에 가입하고자 한다는 의도를 나타냈는지를 판정하도록 구성된 의도 판정 수단,
    상기 복수의 노드들 내의 각각의 노드가 상기 이웃 내의 ID 공간의 일부분에 대한 ID 공간 소유권을 갖도록 상기 설정된 이웃 내에서 일관성을 유지하도록 구성된 일관성 유지 모듈,
    상기 복수의 노드들 내의 상기 노드들 중 하나가 1차 노드에 의해 지시된 대로 클라이언트 데이터 액세스 요청들에 응답하도록 구성된 노드들의 복제 세트에 대한 책임을 지는 1차 노드로 선택되었는지를 판정하도록 구성된 선택 결정 모듈,
    하나 이상의 클라이언트 데이터 액세스 요청들을 수신하도록 구성된 요청 수신 모듈 - 각각의 데이터 액세스 요청은 상기 복제 세트 내의 노드들 중 적어도 하나에서 액세스되는 데이터의 적어도 일부분을 나타냄 -, 및
    상기 클라이언트 데이터 액세스 요청에 표시된 데이터에 액세스하도록 구성된 데이터 액세스 모듈
    을 포함하는 시스템.
  34. 제33항에 있어서, 상기 데이터 액세스 모듈은 클라이언트 데이터 기록 요청에 따라 데이터를 기록하도록 구성되는 시스템.
  35. 제34항에 있어서, 상기 1차 노드는 상기 클라이언트 데이터 기록 요청에 표시된 데이터를 2차 노드에 의해 관리되는 데이터 저장소에 기록하도록 2차 노드에 지시하는 시스템.
  36. 제34항에 있어서, 상기 1차 노드는 2 단계로 상기 기록 요청을 하나 이상의 2차 노드로 복제하는 시스템.
  37. 제33항에 있어서, 상기 데이터 액세스 모듈은 클라이언트 데이터 판독 요청에 따라 데이터를 판독하도록 구성되는 시스템.
  38. 제37항에 있어서, 상기 클라이언트 데이터 판독 요청은 2차 노드에 의해 직접 처리되는 시스템.
  39. 제33항에 있어서, 1차 노드의 상기 설정된 이웃은 그 1차 노드의 복제 세트의 2차 노드들의 세트인 시스템.
  40. 양방향 라우팅을 위해 구성된 노드들의 링의 연합 인프라(federation infrastructure)에서, 연합 인프라 내에 일관성있는 복제 세트를 설정 및 유지하는 방법으로서,
    노드들의 링 내의 복수의 노드들 중에서 복제 세트를 설정하는 단계 - 상기 복제 세트는 1차 노드 및 하나 이상의 2차 노드들을 멤버로서 포함함 -,
    상기 복제 세트 멤버들 중 적어도 하나에 영향을 주는 복제 세트 구성 이벤트 발생을 나타내는 표시를 수신하는 단계,
    상기 수신된 표시에 기초하여, 상기 복제 세트가 재구성되어야 하는지를 판정하는 단계 - 상기 재구성은 상기 복제 세트 구성 이벤트 발생에 기초하여 상기 복제 세트로부터 기존의 2차 노드를 제거하는 것, 상기 복제 세트에 새로운 2차 노드를 추가하는 것, 새로운 1차 노드로 갑자기 전이하는 것, 및 새로운 1차 노드로 매끄럽게 전이하는 것 중 적어도 하나를 포함함 -, 및
    상기 복제 세트 구성 이벤트에 대응하는 재구성에 따라 상기 복제 세트를 재구성하는 단계
    를 포함하는 방법.
  41. 제40항에 있어서, 상기 복제 세트 구성 이벤트는 상기 복제 세트 내에서의 노드 고장, 상기 복제 세트로부터의 노드 탈퇴, 및 노드가 상기 복제 세트에 가입하는 것 중 적어도 하나를 포함하는 방법.
  42. 제40항에 있어서, 상기 복제 세트 노드들 중 하나 이상에 의해 제어되는 데이터 저장소의 일부분을 유지하는 단계를 더 포함하는 방법.
  43. 제42항에 있어서,
    상기 1차 노드가 클라이언트 데이터 액세스 요청을 수신하는 단계 - 상기 클라이언트 데이터 액세스 요청은 노드들의 복제 세트 내의 적어도 하나의 노드에서 액세스되는 정보의 표시를 포함함 -,
    상기 1차 노드가 상기 수신된 클라이언트 데이터 액세스 요청에 표시된 정보의 적어도 일부분에 액세스하지 못하였음을 검출하는 단계, 및
    상기 클라이언트 데이터 액세스 요청에 응답하여 상기 1차 노드 상에 저장된 정보가 액세스되지 못하도록 하기 위해 상기 1차 노드가 그 자신을 상기 복제 세트로부터 제거하는 단계
    를 더 포함하는 방법.
  44. 제40항에 있어서, 구성 상태 정보에 기초하여, 진행 중인 하나 이상의 복제 세트 재구성을 검출하는 단계를 더 포함하는 방법.
  45. 제40항에 있어서, 상기 복제 세트에 대한 새로운 1차 노드를 선택하는 단계를 더 포함하는 방법.
KR1020097009457A 2006-11-09 2007-11-08 연합 인프라 내의 일관성 KR101455420B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US86513606P 2006-11-09 2006-11-09
US60/865,136 2006-11-09
US11/936,589 2007-11-07
US11/936,556 2007-11-07
US11/936,556 US8090880B2 (en) 2006-11-09 2007-11-07 Data consistency within a federation infrastructure
US11/936,589 US20080288659A1 (en) 2006-11-09 2007-11-07 Maintaining consistency within a federation infrastructure
PCT/US2007/084058 WO2008060938A2 (en) 2006-11-09 2007-11-08 Consistency within a federation infrastructure

Publications (2)

Publication Number Publication Date
KR20090098791A true KR20090098791A (ko) 2009-09-17
KR101455420B1 KR101455420B1 (ko) 2014-10-27

Family

ID=40028660

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097009457A KR101455420B1 (ko) 2006-11-09 2007-11-08 연합 인프라 내의 일관성

Country Status (6)

Country Link
US (3) US20080288659A1 (ko)
EP (1) EP2095248B1 (ko)
JP (3) JP2010509871A (ko)
KR (1) KR101455420B1 (ko)
CN (2) CN102035886B (ko)
WO (1) WO2008060938A2 (ko)

Families Citing this family (217)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7047301B2 (en) * 2000-01-31 2006-05-16 F5 Networks, Inc. Method and system for enabling persistent access to virtual servers by an LDNS server
AU2003209194A1 (en) 2002-01-08 2003-07-24 Seven Networks, Inc. Secure transport for mobile communication network
US8468126B2 (en) 2005-08-01 2013-06-18 Seven Networks, Inc. Publishing data in an information community
US7917468B2 (en) 2005-08-01 2011-03-29 Seven Networks, Inc. Linking of personal information management data
US7853563B2 (en) 2005-08-01 2010-12-14 Seven Networks, Inc. Universal data aggregation
US8782654B2 (en) 2004-03-13 2014-07-15 Adaptive Computing Enterprises, Inc. Co-allocating a reservation spanning different compute resources types
EP2339469A1 (en) 2004-03-13 2011-06-29 Adaptive Computing Enterprises, Inc. System and method for a self-optimizing reservation in time of compute resources
US20070266388A1 (en) 2004-06-18 2007-11-15 Cluster Resources, Inc. System and method for providing advanced reservations in a compute environment
US8176490B1 (en) 2004-08-20 2012-05-08 Adaptive Computing Enterprises, Inc. System and method of interfacing a workload manager and scheduler with an identity manager
US8010082B2 (en) 2004-10-20 2011-08-30 Seven Networks, Inc. Flexible billing architecture
WO2006045102A2 (en) 2004-10-20 2006-04-27 Seven Networks, Inc. Method and apparatus for intercepting events in a communication system
US8014321B2 (en) 2004-10-22 2011-09-06 Microsoft Corporation Rendezvousing resource requests with corresponding resources
US8549180B2 (en) 2004-10-22 2013-10-01 Microsoft Corporation Optimizing access to federation infrastructure-based resources
US8392515B2 (en) * 2004-10-22 2013-03-05 Microsoft Corporation Subfederation creation and maintenance in a federation infrastructure
US20110082928A1 (en) 2004-10-22 2011-04-07 Microsoft Corporation Maintaining consistency within a federation infrastructure
US20080288659A1 (en) 2006-11-09 2008-11-20 Microsoft Corporation Maintaining consistency within a federation infrastructure
CA2586763C (en) 2004-11-08 2013-12-17 Cluster Resources, Inc. System and method of providing system jobs within a compute environment
US7706781B2 (en) 2004-11-22 2010-04-27 Seven Networks International Oy Data security in a mobile e-mail service
FI117152B (fi) 2004-12-03 2006-06-30 Seven Networks Internat Oy Sähköpostiasetusten käyttöönotto matkaviestimelle
US8863143B2 (en) 2006-03-16 2014-10-14 Adaptive Computing Enterprises, Inc. System and method for managing a hybrid compute environment
US7752633B1 (en) 2005-03-14 2010-07-06 Seven Networks, Inc. Cross-platform event engine
US9231886B2 (en) 2005-03-16 2016-01-05 Adaptive Computing Enterprises, Inc. Simple integration of an on-demand compute environment
ES2614751T3 (es) 2005-04-07 2017-06-01 Iii Holdings 12, Llc Acceso bajo demanda a recursos informáticos
US8438633B1 (en) 2005-04-21 2013-05-07 Seven Networks, Inc. Flexible real-time inbox access
WO2006136660A1 (en) 2005-06-21 2006-12-28 Seven Networks International Oy Maintaining an ip connection in a mobile network
US8584145B1 (en) 2010-08-06 2013-11-12 Open Invention Network, Llc System and method for dynamic transparent consistent application-replication of multi-process multi-threaded applications
US8621275B1 (en) 2010-08-06 2013-12-31 Open Invention Network, Llc System and method for event-driven live migration of multi-process applications
US7769395B2 (en) 2006-06-20 2010-08-03 Seven Networks, Inc. Location-based operations and messaging
US7778282B2 (en) * 2006-12-18 2010-08-17 Microsoft Corporation Propagation of conflict knowledge
US8150800B2 (en) * 2007-03-28 2012-04-03 Netapp, Inc. Advanced clock synchronization technique
US8015427B2 (en) * 2007-04-23 2011-09-06 Netapp, Inc. System and method for prioritization of clock rates in a multi-core processor
US8805425B2 (en) 2007-06-01 2014-08-12 Seven Networks, Inc. Integrated messaging
US8693494B2 (en) 2007-06-01 2014-04-08 Seven Networks, Inc. Polling
US20080320097A1 (en) * 2007-06-22 2008-12-25 Tenoware R&D Limited Network distributed file system
US8041773B2 (en) 2007-09-24 2011-10-18 The Research Foundation Of State University Of New York Automatic clustering for self-organizing grids
US8572429B2 (en) * 2007-10-09 2013-10-29 Cleversafe, Inc. Optimistic data writing in a dispersed storage network
US20090132716A1 (en) * 2007-11-15 2009-05-21 Junqueira Flavio P Fault-tolerant distributed services methods and systems
US8364181B2 (en) 2007-12-10 2013-01-29 Seven Networks, Inc. Electronic-mail filtering for mobile devices
US9002828B2 (en) 2007-12-13 2015-04-07 Seven Networks, Inc. Predictive content delivery
US8793305B2 (en) 2007-12-13 2014-07-29 Seven Networks, Inc. Content delivery to a mobile device from a content service
US8107921B2 (en) 2008-01-11 2012-01-31 Seven Networks, Inc. Mobile virtual network operator
US7934117B2 (en) * 2008-01-25 2011-04-26 Microsoft Corporation Routing token transfer and recovery protocol in rendezvous federation
US8862657B2 (en) 2008-01-25 2014-10-14 Seven Networks, Inc. Policy based content service
US20090193338A1 (en) 2008-01-28 2009-07-30 Trevor Fiatal Reducing network and battery consumption during content delivery and playback
US8417775B2 (en) * 2008-02-27 2013-04-09 Microsoft Corporation Neighborhood maintenance in the federation
US9021071B2 (en) 2008-06-09 2015-04-28 International Business Machines Corporation Methods of federating applications providing modular data
US8787947B2 (en) 2008-06-18 2014-07-22 Seven Networks, Inc. Application discovery on mobile devices
US8078158B2 (en) 2008-06-26 2011-12-13 Seven Networks, Inc. Provisioning applications for a mobile device
US8099571B1 (en) 2008-08-06 2012-01-17 Netapp, Inc. Logical block replication with deduplication
US8909759B2 (en) 2008-10-10 2014-12-09 Seven Networks, Inc. Bandwidth measurement
US8443062B2 (en) 2008-10-23 2013-05-14 Microsoft Corporation Quorum based transactionally consistent membership management in distributed storage systems
US8275912B2 (en) * 2008-10-24 2012-09-25 Microsoft Corporation Bootstrap rendezvous federation
US7934118B2 (en) * 2008-10-24 2011-04-26 Microsoft Corporation Failure notification in rendezvous federation
US8904039B1 (en) 2008-11-10 2014-12-02 Tanium Inc. Large-scale network querying and reporting
US8903973B1 (en) 2008-11-10 2014-12-02 Tanium Inc. Parallel distributed network management
US8086729B1 (en) 2008-11-10 2011-12-27 Tanium Inc. Distributed statistical detection of network problems and causes
US9158579B1 (en) 2008-11-10 2015-10-13 Netapp, Inc. System having operation queues corresponding to operation execution time
US8477638B2 (en) * 2008-12-02 2013-07-02 Cisco Technology, Inc. Latency enhancements for multicast traffic over spatial reuse protocol (SRP)
US8307085B2 (en) * 2010-03-16 2012-11-06 Microsoft Corporation Storing state of distributed architecture in external store
US8655848B1 (en) 2009-04-30 2014-02-18 Netapp, Inc. Unordered idempotent logical replication operations
US8321380B1 (en) 2009-04-30 2012-11-27 Netapp, Inc. Unordered idempotent replication operations
US8135025B2 (en) 2009-06-03 2012-03-13 Microsoft Corporation Asynchronous communication in an unstable network
US8671072B1 (en) 2009-09-14 2014-03-11 Netapp, Inc. System and method for hijacking inodes based on replication operations received in an arbitrary order
US10877695B2 (en) 2009-10-30 2020-12-29 Iii Holdings 2, Llc Memcached server functionality in a cluster of data processing nodes
US8473690B1 (en) 2009-10-30 2013-06-25 Netapp, Inc. Using logical block addresses with generation numbers as data fingerprints to provide cache coherency
US11720290B2 (en) 2009-10-30 2023-08-08 Iii Holdings 2, Llc Memcached server functionality in a cluster of data processing nodes
US8799367B1 (en) 2009-10-30 2014-08-05 Netapp, Inc. Using logical block addresses with generation numbers as data fingerprints for network deduplication
US8621268B2 (en) * 2009-11-25 2013-12-31 Cleversafe, Inc. Write threshold utilization in a dispersed storage system
US8832281B2 (en) * 2010-01-08 2014-09-09 Tangome, Inc. Utilizing resources of a peer-to-peer computer environment
US9832104B2 (en) * 2010-02-11 2017-11-28 Microsoft Technology Licensing, Llc Reliable broadcast in a federation of nodes
CN102884733B (zh) * 2010-05-11 2016-07-06 Lg电子株式会社 用于在共存系统中选择主装置的方法
FR2960369B1 (fr) * 2010-05-20 2013-03-01 Bull Sas Procede d'optimisation de routage dans un cluster comprenant des liens de communication statiques et programme d'ordinateur mettant en oeuvre ce procede
US8352658B2 (en) 2010-05-27 2013-01-08 Microsoft Corporation Fabric based lock manager service
US8341368B2 (en) 2010-06-07 2012-12-25 International Business Machines Corporation Automatic reallocation of structured external storage structures
US8838910B2 (en) 2010-06-07 2014-09-16 International Business Machines Corporation Multi-part aggregated variable in structured external storage
KR20130042544A (ko) 2010-07-09 2013-04-26 엘지전자 주식회사 상호공존 방식에서 대표 기기 선출 방법
US9077630B2 (en) 2010-07-26 2015-07-07 Seven Networks, Inc. Distributed implementation of dynamic wireless traffic policy
EP3651028A1 (en) 2010-07-26 2020-05-13 Seven Networks, LLC Mobile network traffic coordination across multiple applications
GB2495066B (en) 2010-07-26 2013-12-18 Seven Networks Inc Mobile application traffic optimization
US8838783B2 (en) 2010-07-26 2014-09-16 Seven Networks, Inc. Distributed caching for resource and mobile network traffic management
WO2012031301A1 (en) 2010-09-03 2012-03-08 Jackson Robert Lewis Jr Sparse dynamic selection trees
WO2012037518A1 (en) 2010-09-17 2012-03-22 Oracle International Corporation System and method for facilitating protection against run-away subnet manager instances in a middleware machine environment
US9069842B2 (en) * 2010-09-28 2015-06-30 The Mitre Corporation Accessing documents using predictive word sequences
US8724645B2 (en) * 2010-09-28 2014-05-13 Microsoft Corporation Performing computations in a distributed infrastructure
US9201890B2 (en) * 2010-10-04 2015-12-01 Dell Products L.P. Storage optimization manager
US8589732B2 (en) 2010-10-25 2013-11-19 Microsoft Corporation Consistent messaging with replication
US9060032B2 (en) 2010-11-01 2015-06-16 Seven Networks, Inc. Selective data compression by a distributed traffic management system to reduce mobile data traffic and signaling traffic
WO2012060995A2 (en) 2010-11-01 2012-05-10 Michael Luna Distributed caching in a wireless network of content delivered for a mobile application over a long-held request
US8326985B2 (en) 2010-11-01 2012-12-04 Seven Networks, Inc. Distributed management of keep-alive message signaling for mobile network resource conservation and optimization
US8903954B2 (en) 2010-11-22 2014-12-02 Seven Networks, Inc. Optimization of resource polling intervals to satisfy mobile device requests
GB2499534B (en) 2010-11-01 2018-09-19 Seven Networks Llc Caching adapted for mobile application behavior and network conditions
US8843153B2 (en) 2010-11-01 2014-09-23 Seven Networks, Inc. Mobile traffic categorization and policy for network use optimization while preserving user experience
US9330196B2 (en) 2010-11-01 2016-05-03 Seven Networks, Llc Wireless traffic management system cache optimization using http headers
WO2012060997A2 (en) 2010-11-01 2012-05-10 Michael Luna Application and network-based long poll request detection and cacheability assessment therefor
US8484314B2 (en) 2010-11-01 2013-07-09 Seven Networks, Inc. Distributed caching in a wireless network of content delivered for a mobile application over a long-held request
WO2012071283A1 (en) 2010-11-22 2012-05-31 Michael Luna Aligning data transfer to optimize connections established for transmission over a wireless network
US9710344B1 (en) 2010-12-13 2017-07-18 Amazon Technologies, Inc. Locality based quorum eligibility
US8473775B1 (en) * 2010-12-14 2013-06-25 Amazon Technologies, Inc. Locality based quorums
US10366100B2 (en) 2012-07-26 2019-07-30 Mongodb, Inc. Aggregation framework system architecture and method
US11544288B2 (en) 2010-12-23 2023-01-03 Mongodb, Inc. Systems and methods for managing distributed database deployments
US9881034B2 (en) 2015-12-15 2018-01-30 Mongodb, Inc. Systems and methods for automating management of distributed databases
US11615115B2 (en) 2010-12-23 2023-03-28 Mongodb, Inc. Systems and methods for managing distributed database deployments
US10977277B2 (en) 2010-12-23 2021-04-13 Mongodb, Inc. Systems and methods for database zone sharding and API integration
US10262050B2 (en) 2015-09-25 2019-04-16 Mongodb, Inc. Distributed database systems and methods with pluggable storage engines
US10346430B2 (en) 2010-12-23 2019-07-09 Mongodb, Inc. System and method for determining consensus within a distributed database
US8572031B2 (en) 2010-12-23 2013-10-29 Mongodb, Inc. Method and apparatus for maintaining replica sets
US9805108B2 (en) 2010-12-23 2017-10-31 Mongodb, Inc. Large distributed database clustering systems and methods
US10713280B2 (en) 2010-12-23 2020-07-14 Mongodb, Inc. Systems and methods for managing distributed database deployments
US10698775B2 (en) 2016-05-31 2020-06-30 Mongodb, Inc. Method and apparatus for reading and writing committed data
US10614098B2 (en) 2010-12-23 2020-04-07 Mongodb, Inc. System and method for determining consensus within a distributed database
US10997211B2 (en) 2010-12-23 2021-05-04 Mongodb, Inc. Systems and methods for database zone sharding and API integration
US8996463B2 (en) 2012-07-26 2015-03-31 Mongodb, Inc. Aggregation framework system architecture and method
US10740353B2 (en) 2010-12-23 2020-08-11 Mongodb, Inc. Systems and methods for managing distributed database deployments
US9740762B2 (en) 2011-04-01 2017-08-22 Mongodb, Inc. System and method for optimizing data migration in a partitioned database
CN102014076B (zh) * 2010-12-24 2012-04-18 北京航天测控技术有限公司 一种PCIe重试缓冲区及其实现方法
GB2501416B (en) 2011-01-07 2018-03-21 Seven Networks Llc System and method for reduction of mobile network traffic used for domain name system (DNS) queries
US9063852B2 (en) * 2011-01-28 2015-06-23 Oracle International Corporation System and method for use with a data grid cluster to support death detection
US8625424B2 (en) * 2011-02-23 2014-01-07 Hp Ventures A/S Method and system for routing information in a network
US8712975B2 (en) 2011-03-08 2014-04-29 Rackspace Us, Inc. Modification of an object replica
US8510267B2 (en) 2011-03-08 2013-08-13 Rackspace Us, Inc. Synchronization of structured information repositories
US8554951B2 (en) 2011-03-08 2013-10-08 Rackspace Us, Inc. Synchronization and ordering of multiple accessess in a distributed system
US8538926B2 (en) * 2011-03-08 2013-09-17 Rackspace Us, Inc. Massively scalable object storage system for storing object replicas
WO2012145544A2 (en) 2011-04-19 2012-10-26 Seven Networks, Inc. Device resource sharing for network resource conservation
WO2012149434A2 (en) 2011-04-27 2012-11-01 Seven Networks, Inc. Detecting and preserving state for satisfying application requests in a distributed proxy and cache system
GB2504037B (en) 2011-04-27 2014-12-24 Seven Networks Inc Mobile device which offloads requests made by a mobile application to a remote entity for conservation of mobile device and network resources
US9369341B2 (en) * 2011-05-15 2016-06-14 Orbit Communication Systems Ltd. Static ring network for vehicle communications
US9077641B2 (en) * 2011-05-15 2015-07-07 Orbit Communication Systems Ltd. Static ring network for vehicle communications
US8713649B2 (en) 2011-06-03 2014-04-29 Oracle International Corporation System and method for providing restrictions on the location of peer subnet manager (SM) instances in an infiniband (IB) network
CN103597795B (zh) 2011-06-03 2016-12-21 甲骨文国际公司 无限带宽(ib)网络中认证所发现的组件的身份的系统和方法
EP2737741A4 (en) 2011-07-27 2015-01-21 Seven Networks Inc SURVEILLANCE OF MOBILE APPLICATION ACTIVITIES IN SEARCH OF MALICIOUS TRAFFIC ON A MOBILE DEVICE
US8924347B1 (en) * 2011-10-05 2014-12-30 Google Inc. Database replication
EP2789138B1 (en) 2011-12-06 2016-09-14 Seven Networks, LLC A mobile device and method to utilize the failover mechanisms for fault tolerance provided for mobile traffic management and network/device resource conservation
US8918503B2 (en) 2011-12-06 2014-12-23 Seven Networks, Inc. Optimization of mobile traffic directed to private networks and operator configurability thereof
WO2013086447A1 (en) 2011-12-07 2013-06-13 Seven Networks, Inc. Radio-awareness of mobile device for sending server-side control signals using a wireless network optimized transport protocol
EP2788889A4 (en) 2011-12-07 2015-08-12 Seven Networks Inc FLEXIBLE AND DYNAMIC INTEGRATION SCHEMES OF A TRAFFIC MANAGEMENT SYSTEM WITH VARIOUS NETWORK OPERATORS TO REDUCE NETWORK TRAFFIC
US8955097B2 (en) 2011-12-13 2015-02-10 Mcafee, Inc. Timing management in a large firewall cluster
WO2013086683A1 (zh) * 2011-12-13 2013-06-20 华为技术有限公司 数据配置及其回退方法和设备
US9832095B2 (en) 2011-12-14 2017-11-28 Seven Networks, Llc Operation modes for mobile traffic optimization and concurrent management of optimized and non-optimized traffic
WO2013090212A1 (en) 2011-12-14 2013-06-20 Seven Networks, Inc. Mobile network reporting and usage analytics system and method using aggregation of data in a distributed traffic optimization system
WO2013090821A1 (en) 2011-12-14 2013-06-20 Seven Networks, Inc. Hierarchies and categories for management and deployment of policies for distributed wireless traffic optimization
EP2801236A4 (en) 2012-01-05 2015-10-21 Seven Networks Inc DETECTION AND MANAGEMENT OF USER INTERACTIONS WITH FRONT PANEL APPLICATIONS ON A MOBILE DEVICE IN DISTRIBUTED CACHE STORES
US9116862B1 (en) 2012-01-17 2015-08-25 Amazon Technologies, Inc. System and method for data replication using a single master failover protocol
US9069827B1 (en) 2012-01-17 2015-06-30 Amazon Technologies, Inc. System and method for adjusting membership of a data replication group
US8843441B1 (en) 2012-01-17 2014-09-23 Amazon Technologies, Inc. System and method for maintaining a master replica for reads and writes in a data store
WO2013116856A1 (en) 2012-02-02 2013-08-08 Seven Networks, Inc. Dynamic categorization of applications for network access in a mobile network
WO2013116852A1 (en) 2012-02-03 2013-08-08 Seven Networks, Inc. User as an end point for profiling and optimizing the delivery of content and data in a wireless network
US8812695B2 (en) 2012-04-09 2014-08-19 Seven Networks, Inc. Method and system for management of a virtual network connection without heartbeat messages
US10263899B2 (en) 2012-04-10 2019-04-16 Seven Networks, Llc Enhanced customer service for mobile carriers using real-time and historical mobile application and traffic or optimization data associated with mobile devices in a mobile network
US20130311550A1 (en) * 2012-05-17 2013-11-21 Infinite Convergence Solutions, Inc Multi-site Server and Client Resynchronization Process and Devices
US20140006543A1 (en) * 2012-06-29 2014-01-02 William M Pitts Distributed filesystem atomic flush transactions
WO2014011216A1 (en) 2012-07-13 2014-01-16 Seven Networks, Inc. Dynamic bandwidth adjustment for browsing or streaming activity in a wireless network based on prediction of user behavior when interacting with mobile applications
US11544284B2 (en) 2012-07-26 2023-01-03 Mongodb, Inc. Aggregation framework system architecture and method
US10872095B2 (en) 2012-07-26 2020-12-22 Mongodb, Inc. Aggregation framework system architecture and method
US11403317B2 (en) 2012-07-26 2022-08-02 Mongodb, Inc. Aggregation framework system architecture and method
US9559894B2 (en) * 2012-08-22 2017-01-31 Oracle International Corporation System and method for supporting high available (HA) network communication in a middleware machine environment
US20140075170A1 (en) * 2012-09-12 2014-03-13 International Business Machines Corporation Automated firmware voting to enable multi-enclosure federated systems
US9146794B2 (en) * 2012-10-01 2015-09-29 Microsoft Technology Licensing, Llc Enhanced arbitration protocol for nodes in a cluster
US9161258B2 (en) 2012-10-24 2015-10-13 Seven Networks, Llc Optimized and selective management of policy deployment to mobile clients in a congested network to prevent further aggravation of network congestion
CN102984267B (zh) * 2012-12-07 2016-05-11 北京搜狐新媒体信息技术有限公司 一种实现分布式缓存节点动态更新到客户端的方法及系统
US20140177497A1 (en) 2012-12-20 2014-06-26 Seven Networks, Inc. Management of mobile device radio state promotion and demotion
US9059961B2 (en) * 2012-12-21 2015-06-16 Tanium Inc. Creation and maintenance of self-organizing communication orbits in distributed networks
US11172470B1 (en) 2012-12-21 2021-11-09 Tanium Inc. System, security and network management using self-organizing communication orbits in distributed networks
US20140189298A1 (en) * 2012-12-27 2014-07-03 Teresa Morrison Configurable ring network
US9806951B2 (en) 2013-01-18 2017-10-31 Microsoft Technology Licensing, Llc Cluster voter model
US9241314B2 (en) 2013-01-23 2016-01-19 Seven Networks, Llc Mobile device with application or context aware fast dormancy
US8874761B2 (en) 2013-01-25 2014-10-28 Seven Networks, Inc. Signaling optimization in a wireless network for traffic utilizing proprietary and non-proprietary protocols
US9326185B2 (en) 2013-03-11 2016-04-26 Seven Networks, Llc Mobile network congestion recognition for optimization of mobile traffic
US9304815B1 (en) * 2013-06-13 2016-04-05 Amazon Technologies, Inc. Dynamic replica failure detection and healing
US9065765B2 (en) 2013-07-22 2015-06-23 Seven Networks, Inc. Proxy server associated with a mobile carrier for enhancing mobile traffic management in a mobile network
US10223184B1 (en) * 2013-09-25 2019-03-05 Amazon Technologies, Inc. Individual write quorums for a log-structured distributed storage system
CN103607448B (zh) * 2013-11-18 2016-08-24 四川川大智胜软件股份有限公司 一种atc系统动态数据存储的方法
US9769037B2 (en) 2013-11-27 2017-09-19 Tanium Inc. Fast detection and remediation of unmanaged assets
GB2524073A (en) * 2014-03-14 2015-09-16 Ibm Communication method and system for accessing media data
US10873645B2 (en) 2014-03-24 2020-12-22 Tanium Inc. Software application updating in a local network
US9667738B2 (en) 2014-03-24 2017-05-30 Tanium Inc. Local data caching for data transfers on a network of computational devices
US9769275B2 (en) 2014-03-24 2017-09-19 Tanium Inc. Data caching and distribution in a local network
US10989531B2 (en) * 2014-08-15 2021-04-27 Commonwealth Scientific And Industrial Research Organisation Method of setting-up a range-based tracking system utilizing a tracking coordinate system
US9715433B2 (en) * 2014-08-29 2017-07-25 Netapp, Inc. Reconciliation in sync replication
US10198558B2 (en) * 2014-10-06 2019-02-05 Red Hat, Inc. Data source security cluster
US20160149760A1 (en) * 2014-11-20 2016-05-26 Cisco Technology, Inc. Multi-stage convergence and intent revocation in a network environment
JP6602866B2 (ja) * 2014-12-01 2019-11-06 インフォマティカ エルエルシー 並列持続性を有するメッセージブローカシステム
CN106155780B (zh) * 2015-04-02 2020-01-31 阿里巴巴集团控股有限公司 一种基于时间的节点选举方法及装置
US9910752B2 (en) 2015-04-24 2018-03-06 Tanium Inc. Reliable map-reduce communications in a decentralized, self-organizing communication orbit of a distributed network
US11461208B1 (en) 2015-04-24 2022-10-04 Tanium Inc. Reliable map-reduce communications in a decentralized, self-organizing communication orbit of a distributed network
US10713275B2 (en) 2015-07-02 2020-07-14 Mongodb, Inc. System and method for augmenting consensus election in a distributed database
US10846411B2 (en) 2015-09-25 2020-11-24 Mongodb, Inc. Distributed database systems and methods with encrypted storage engines
US10423626B2 (en) 2015-09-25 2019-09-24 Mongodb, Inc. Systems and methods for data conversion and comparison
US10673623B2 (en) 2015-09-25 2020-06-02 Mongodb, Inc. Systems and methods for hierarchical key management in encrypted distributed databases
US10394822B2 (en) 2015-09-25 2019-08-27 Mongodb, Inc. Systems and methods for data conversion and comparison
US10498744B2 (en) 2016-03-08 2019-12-03 Tanium Inc. Integrity monitoring in a local network
US11886229B1 (en) 2016-03-08 2024-01-30 Tanium Inc. System and method for generating a global dictionary and performing similarity search queries in a network
US11372938B1 (en) 2016-03-08 2022-06-28 Tanium Inc. System and method for performing search requests in a network
US10929345B2 (en) 2016-03-08 2021-02-23 Tanium Inc. System and method of performing similarity search queries in a network
US11609835B1 (en) 2016-03-08 2023-03-21 Tanium Inc. Evaluating machine and process performance in distributed system
US10482242B2 (en) 2016-03-08 2019-11-19 Tanium Inc. System and method for performing event inquiries in a network
US11153383B2 (en) 2016-03-08 2021-10-19 Tanium Inc. Distributed data analysis for streaming data sources
US10387248B2 (en) * 2016-03-29 2019-08-20 International Business Machines Corporation Allocating data for storage by utilizing a location-based hierarchy in a dispersed storage network
US10621050B2 (en) 2016-06-27 2020-04-14 Mongodb, Inc. Method and apparatus for restoring data from snapshots
US10481963B1 (en) * 2016-06-29 2019-11-19 Amazon Technologies, Inc. Load-balancing for achieving transaction fault tolerance
US10872074B2 (en) 2016-09-30 2020-12-22 Microsoft Technology Licensing, Llc Distributed availability groups of databases for data centers
US10263661B2 (en) 2016-12-23 2019-04-16 Sierra Nevada Corporation Extended range communications for ultra-wideband network nodes
US10523498B2 (en) * 2016-12-23 2019-12-31 Sierra Nevada Corporation Multi-broker messaging and telemedicine database replication
US11232000B1 (en) * 2017-02-24 2022-01-25 Amazon Technologies, Inc. Moving database partitions from replica nodes
US10606863B2 (en) * 2017-03-15 2020-03-31 International Business Machines Corporation Monotonic transactions in a multi-master database with loosely coupled nodes
US10812434B2 (en) 2017-03-23 2020-10-20 Blackberry Limited Apparatus and method for maintaining message databases in eventual consistency distributed database systems
US10659561B2 (en) * 2017-06-09 2020-05-19 Microsoft Technology Licensing, Llc Service state preservation across nodes
US10866868B2 (en) 2017-06-20 2020-12-15 Mongodb, Inc. Systems and methods for optimization of database operations
WO2019010459A1 (en) * 2017-07-07 2019-01-10 Buki Pablo Javier METHODS AND SYSTEMS FOR PROCESSING CHAIN TRANSACTIONS OF FAST AND HIGH VOLUME SETTING BLOCKS
US10824729B2 (en) 2017-07-14 2020-11-03 Tanium Inc. Compliance management in a local network
US10564863B2 (en) * 2018-04-24 2020-02-18 International Business Machines Corporation Identifying an availability of a system
US10649685B2 (en) * 2018-07-16 2020-05-12 International Business Machines Corporation Site-centric alerting in a distributed storage system
US11343355B1 (en) 2018-07-18 2022-05-24 Tanium Inc. Automated mapping of multi-tier applications in a distributed system
US10841365B2 (en) 2018-07-18 2020-11-17 Tanium Inc. Mapping application dependencies in a computer network
US10931559B2 (en) * 2018-11-02 2021-02-23 Cisco Technology, Inc. Distribution of network-policy configuration, management, and control using model-driven and information-centric networking
US11831670B1 (en) 2019-11-18 2023-11-28 Tanium Inc. System and method for prioritizing distributed system risk remediations
US11563764B1 (en) 2020-08-24 2023-01-24 Tanium Inc. Risk scoring based on compliance verification test results in a local network
US11706302B1 (en) * 2022-06-03 2023-07-18 Dell Products L.P. Efficient topics in transport protocols

Family Cites Families (147)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4747100A (en) 1986-08-11 1988-05-24 Allen-Bradley Company, Inc. Token passing network utilizing active node table
JPH05235975A (ja) * 1992-02-25 1993-09-10 Toshiba Corp 光リングlanシステム
US5689701A (en) 1994-12-14 1997-11-18 International Business Machines Corporation System and method for providing compatibility between distributed file system namespaces and operating system pathname syntax
US5745683A (en) 1995-07-05 1998-04-28 Sun Microsystems, Inc. System and method for allowing disparate naming service providers to dynamically join a naming federation
US5978813A (en) * 1995-09-25 1999-11-02 International Business Machines Corporation System for providing synchronization between a local area network and a distributing computer environment
US5996075A (en) 1995-11-02 1999-11-30 Sun Microsystems, Inc. Method and apparatus for reliable disk fencing in a multicomputer system
JPH09218840A (ja) * 1996-02-13 1997-08-19 Canon Inc 情報処理方法とその装置と情報処理システム
US5831975A (en) 1996-04-04 1998-11-03 Lucent Technologies Inc. System and method for hierarchical multicast routing in ATM networks
US6574654B1 (en) 1996-06-24 2003-06-03 Oracle Corporation Method and apparatus for lock caching
US6253292B1 (en) 1997-08-22 2001-06-26 Seong Tae Jhang Distributed shared memory multiprocessor system based on a unidirectional ring bus using a snooping scheme
US6178174B1 (en) 1997-08-26 2001-01-23 International Business Machines Corporation Optimistic, eager rendezvous transmission mode and combined rendezvous modes for message processing systems
US5999712A (en) 1997-10-21 1999-12-07 Sun Microsystems, Inc. Determining cluster membership in a distributed computer system
US6269452B1 (en) 1998-04-27 2001-07-31 Cisco Technology, Inc. System and method for fault recovery for a two line bi-directional ring network
US6456597B1 (en) 1998-05-04 2002-09-24 Hewlett Packard Co. Discovery of unknown MAC addresses using load balancing switch protocols
US6279034B1 (en) 1998-06-03 2001-08-21 International Business Machines Corporation Distributed monitor timer service for use in a distributed computing environment
US7076507B1 (en) 1998-07-08 2006-07-11 Required Technologies, Inc. Value-instance-connectivity computer-implemented database
US6304556B1 (en) 1998-08-24 2001-10-16 Cornell Research Foundation, Inc. Routing and mobility management protocols for ad-hoc networks
US7430171B2 (en) 1998-11-19 2008-09-30 Broadcom Corporation Fibre channel arbitrated loop bufferless switch circuitry to increase bandwidth without significant increase in cost
US6480473B1 (en) * 1998-12-29 2002-11-12 Koninklijke Philips Electronics N.V. Verification of active nodes in an open network
US6115804A (en) 1999-02-10 2000-09-05 International Business Machines Corporation Non-uniform memory access (NUMA) data processing system that permits multiple caches to concurrently hold data in a recent state from which data can be sourced by shared intervention
US6401120B1 (en) * 1999-03-26 2002-06-04 Microsoft Corporation Method and system for consistent cluster operational data in a server cluster using a quorum of replicas
US6839348B2 (en) 1999-04-30 2005-01-04 Cisco Technology, Inc. System and method for distributing multicasts in virtual local area networks
US6546415B1 (en) 1999-05-14 2003-04-08 Lucent Technologies Inc. Network management system using a distributed namespace
US6850987B1 (en) 1999-06-01 2005-02-01 Fastforward Networks, Inc. System for multipoint infrastructure transport in a computer network
US6411967B1 (en) 1999-06-18 2002-06-25 Reliable Network Solutions Distributed processing system with replicated management information base
US7463648B1 (en) 1999-08-23 2008-12-09 Sun Microsystems, Inc. Approach for allocating resources to an apparatus based on optional resource requirements
US7117273B1 (en) 2000-01-25 2006-10-03 Cisco Technology, Inc. Methods and apparatus for maintaining a map of node relationships for a network
US6269085B1 (en) 2000-02-03 2001-07-31 Sun Microsystems, Inc. Method and apparatus for hierarchical discovery and pruning of slow members of a multicast group
US6917985B2 (en) 2000-03-10 2005-07-12 The Regents Of The University Of California Core assisted mesh protocol for multicast routing in ad-hoc Networks
EP1139602A1 (en) 2000-03-31 2001-10-04 Lucent Technologies Inc. Method and device for multicasting
US6553377B1 (en) 2000-03-31 2003-04-22 Network Associates, Inc. System and process for maintaining a plurality of remote security applications using a modular framework in a distributed computing environment
US7123620B1 (en) 2000-04-25 2006-10-17 Cisco Technology, Inc. Apparatus and method for scalable and dynamic traffic engineering in a data communication network
US6775703B1 (en) * 2000-05-01 2004-08-10 International Business Machines Corporation Lease based safety protocol for distributed system with multiple networks
AU2001268674B2 (en) 2000-06-22 2007-04-26 Microsoft Technology Licensing, Llc Distributed computing services platform
US6947963B1 (en) 2000-06-28 2005-09-20 Pluris, Inc Methods and apparatus for synchronizing and propagating distributed routing databases
US7139270B1 (en) 2000-08-22 2006-11-21 Lucent Technologies Inc. Systems and method for transporting multiple protocol formats in a lightwave communication network
US20020129086A1 (en) 2000-08-31 2002-09-12 The Regents Of The University Of California Cluster-based aggregated switching technique (CAST) for routing data packets and information objects in computer networks
US7370223B2 (en) * 2000-09-08 2008-05-06 Goahead Software, Inc. System and method for managing clusters containing multiple nodes
JP2002123406A (ja) * 2000-10-17 2002-04-26 Pfu Ltd 高信頼性システム
DE60142750D1 (de) 2000-10-26 2010-09-16 British Telecomm Optimale routenplanung in handover-szenarien
US7379994B2 (en) 2000-10-26 2008-05-27 Metilinx Aggregate system resource analysis including correlation matrix and metric-based analysis
US20020150094A1 (en) 2000-10-27 2002-10-17 Matthew Cheng Hierarchical level-based internet protocol multicasting
US6836756B1 (en) 2000-11-13 2004-12-28 Nortel Networks Limited Time simulation techniques to determine network availability
US6947434B2 (en) 2000-11-16 2005-09-20 Telefonaktiebolaget Lm Ericsson (Publ) Subgroup multicasting in a communications network
CA2326851A1 (en) 2000-11-24 2002-05-24 Redback Networks Systems Canada Inc. Policy change characterization method and apparatus
AU2002234258A1 (en) 2001-01-22 2002-07-30 Sun Microsystems, Inc. Peer-to-peer network computing platform
US7062563B1 (en) 2001-02-28 2006-06-13 Oracle International Corporation Method and system for implementing current user links
US6625604B2 (en) 2001-03-09 2003-09-23 Hewlett-Packard Development Company, L.P. Namespace service in a distributed file system using a database management system
US7085825B1 (en) 2001-03-26 2006-08-01 Freewebs Corp. Apparatus, method and system for improving application performance across a communications network
US7113536B2 (en) 2001-04-16 2006-09-26 Telefonaktiebolaget L M Ericsson (Publ) Rendezvous point interpiconet scheduling
US6928578B2 (en) * 2001-05-10 2005-08-09 International Business Machines Corporation System, method, and computer program for selectable or programmable data consistency checking methodology
WO2003001377A2 (en) 2001-06-22 2003-01-03 Wonderware Corporation Installing supervisory process control and manufacturing software from a remote location and maintaining configuration data links in a run-time environment
US7181547B1 (en) 2001-06-28 2007-02-20 Fortinet, Inc. Identifying nodes in a ring network
GB2377140B (en) 2001-06-29 2005-01-19 Ibm Method and apparatus for recovery from faults in a loop network
US6922791B2 (en) 2001-08-09 2005-07-26 Dell Products L.P. Failover system and method for cluster environment
US7493363B2 (en) 2001-09-19 2009-02-17 Microsoft Corporation Peer-to-peer group management and method for maintaining peer-to-peer graphs
ITMI20012088A1 (it) 2001-10-10 2003-04-10 Cit Alcatel Metodo per propagare l'informazione di guasto in una rete rpr e relativo tipo di pacchetto rpr
US6983397B2 (en) 2001-11-29 2006-01-03 International Business Machines Corporation Method, system, and program for error handling in a dual adaptor system where one adaptor is a master
US7426573B2 (en) 2001-12-12 2008-09-16 Alcatel Lucent System and method for providing service availability data for a communication network
US7076796B2 (en) 2002-01-04 2006-07-11 Reeves Drue A Virtual media from a directory service
US7231463B2 (en) 2002-01-04 2007-06-12 Intel Corporation Multi-level ring peer-to-peer network structure for peer and object discovery
US20030145086A1 (en) 2002-01-29 2003-07-31 O'reilly James Scalable network-attached storage system
JP3937855B2 (ja) 2002-02-06 2007-06-27 日本電気株式会社 マルチリング制御方法およびそれを用いるノード並びに制御プログラム
CN1177436C (zh) 2002-02-09 2004-11-24 华为技术有限公司 移动网络中多播用户的管理方法
US7043550B2 (en) 2002-02-15 2006-05-09 International Business Machines Corporation Method for controlling group membership in a distributed multinode data processing system to assure mutually symmetric liveness status indications
US6779093B1 (en) * 2002-02-15 2004-08-17 Veritas Operating Corporation Control facility for processing in-band control messages during data replication
US7617289B2 (en) * 2002-02-22 2009-11-10 Bea Systems, Inc. System and method for using a data replication service to manage a configuration repository
US7254634B1 (en) * 2002-03-08 2007-08-07 Akamai Technologies, Inc. Managing web tier session state objects in a content delivery network (CDN)
US7039719B2 (en) 2002-03-21 2006-05-02 Hewlett-Packard Development Company, L.P. Distributed system with an efficient atomic broadcast mechanism
US7512649B2 (en) 2002-03-22 2009-03-31 Sun Microsytems, Inc. Distributed identities
US7103884B2 (en) * 2002-03-27 2006-09-05 Lucent Technologies Inc. Method for maintaining consistency and performing recovery in a replicated data storage system
US7290262B2 (en) 2002-05-21 2007-10-30 International Business Machine Corporation Method and apparatus for dynamically determining information for deploying a web service
EP1543420B1 (en) * 2002-07-29 2012-04-04 Open Invention Network LLC Consistent message ordering for semi-active and passive replication
EP1394999A1 (en) 2002-08-07 2004-03-03 Infineon Technologies AG Method for routing of data packets and routing apparatus
US7849140B2 (en) 2002-08-29 2010-12-07 Oracle America, Inc. Peer-to-peer email messaging
US7613796B2 (en) 2002-09-11 2009-11-03 Microsoft Corporation System and method for creating improved overlay network with an efficient distributed data structure
US7239605B2 (en) 2002-09-23 2007-07-03 Sun Microsystems, Inc. Item and method for performing a cluster topology self-healing process in a distributed data system cluster
US7200657B2 (en) 2002-10-01 2007-04-03 International Business Machines Corporation Autonomic provisioning of network-accessible service behaviors within a federated grid infrastructure
US6909721B2 (en) 2002-10-31 2005-06-21 Nokia Corporation Device detection and service discovery system and method for a mobile ad hoc communications network
US7289520B2 (en) 2002-11-20 2007-10-30 Hewlett-Packard Development Company, L.P. Method, apparatus, and system for expressway routing among peers
US6850487B2 (en) 2002-12-05 2005-02-01 The Regents Of The University Of California Method and apparatus for guaranteeing a failure-recovery time in a wavelength-division multiplexing network
EP1515495B1 (en) 2002-12-11 2008-04-02 Nippon Telegraph and Telephone Corporation Method and device for multicast communication path calculation
US7584298B2 (en) 2002-12-13 2009-09-01 Internap Network Services Corporation Topology aware route control
US7404006B1 (en) 2002-12-20 2008-07-22 Symantec Operating Corporation Publishing a network address in a computer network
US7480708B2 (en) 2002-12-23 2009-01-20 Sap Ag Method and computer program product for managing data consistency
US7137018B2 (en) 2002-12-31 2006-11-14 Intel Corporation Active state link power management
JP2004221756A (ja) 2003-01-10 2004-08-05 Sony Corp 情報処理装置および情報処理方法、並びにコンピュータ・プログラム
US7747731B2 (en) 2003-03-27 2010-06-29 Nokia Corporation Minimizing message processing latency in a communication network
US7120824B2 (en) * 2003-05-09 2006-10-10 International Business Machines Corporation Method, apparatus and program storage device for maintaining data consistency and cache coherency during communications failures between nodes in a remote mirror pair
US6988173B2 (en) 2003-05-12 2006-01-17 International Business Machines Corporation Bus protocol for a switchless distributed shared memory computer system
US7426637B2 (en) 2003-05-21 2008-09-16 Music Public Broadcasting, Inc. Method and system for controlled media sharing in a network
US7032089B1 (en) * 2003-06-09 2006-04-18 Veritas Operating Corporation Replica synchronization using copy-on-read technique
EP1494394A1 (en) 2003-06-30 2005-01-05 Sony International (Europe) GmbH Distance-aware service mechanism for determining the availability of remote services in wireless personal area networks
US7334062B1 (en) * 2003-07-22 2008-02-19 Symantec Operating Corporation Technique to monitor application behavior and tune replication performance
JP3857258B2 (ja) 2003-07-25 2006-12-13 東日本電信電話株式会社 グリッドコンピューティングシステム、及びグリッドコンピューティングシステムにおける計算資源収集方法
US20050031119A1 (en) 2003-08-04 2005-02-10 Yuying Ding Method and communications device for secure group communication
US7680152B2 (en) 2003-08-07 2010-03-16 Robert Bosch Gmbh Method for establishing a user of a data network as a pilot master
US20050050320A1 (en) 2003-09-02 2005-03-03 Microsoft Corporation Branding framework
US20050091399A1 (en) 2003-09-30 2005-04-28 Candan Kasim S. Resource-aware adaptive multicasting in a shared proxy overlay network
US7289501B2 (en) 2003-11-06 2007-10-30 Teknovus, Inc. Method and apparatus for bandwidth-efficient multicast in ethernet passive optical networks
US20050108481A1 (en) * 2003-11-17 2005-05-19 Iyengar Arun K. System and method for achieving strong data consistency
US20050111352A1 (en) 2003-11-21 2005-05-26 Boon Ho Method and system for monitoring a network containing routers using a backup routing protocol
US7243089B2 (en) 2003-11-25 2007-07-10 International Business Machines Corporation System, method, and service for federating and optionally migrating a local file system into a distributed file system while preserving local access to existing data
KR100576935B1 (ko) 2003-12-22 2006-05-10 한국전자통신연구원 온톨로지 기반의 애드혹 서비스 검색 시스템 및 방법
US7420954B2 (en) 2004-01-13 2008-09-02 General Motors Corporation Efficient lightweight information dissemination algorithm for mobile wireless ad hoc networks
US7313565B2 (en) 2004-02-19 2007-12-25 Microsoft Corporation Data overlay, self-organized metadata overlay, and associated methods
US20050220106A1 (en) 2004-03-31 2005-10-06 Pierre Guillaume Raverdy Inter-wireless interactions using user discovery for ad-hoc environments
US7730207B2 (en) 2004-03-31 2010-06-01 Microsoft Corporation Routing in peer-to-peer networks
US7383271B2 (en) * 2004-04-06 2008-06-03 Microsoft Corporation Centralized configuration data management for distributed clients
US7478263B1 (en) * 2004-06-01 2009-01-13 Network Appliance, Inc. System and method for establishing bi-directional failover in a two node cluster
US7512064B2 (en) 2004-06-15 2009-03-31 Cisco Technology, Inc. Avoiding micro-loop upon failure of fast reroute protected links
US7805407B1 (en) * 2004-06-16 2010-09-28 Oracle America, Inc. System and method for dynamic configuration of replicated database servers
GB0416074D0 (en) * 2004-07-17 2004-08-18 Ibm Controlling data consistency guarantees in storage apparatus
US7472133B2 (en) * 2004-07-30 2008-12-30 Microsoft Corporation System and method for improved prefetching
US7715396B2 (en) 2004-08-19 2010-05-11 Microsoft Corporation Network routing
US7640299B2 (en) 2004-09-30 2009-12-29 Microsoft Corporation Optimizing communication using scaleable peer groups
US7613703B2 (en) 2004-09-30 2009-11-03 Microsoft Corporation Organizing resources into collections to facilitate more efficient and reliable resource access
US8392515B2 (en) 2004-10-22 2013-03-05 Microsoft Corporation Subfederation creation and maintenance in a federation infrastructure
US8014321B2 (en) 2004-10-22 2011-09-06 Microsoft Corporation Rendezvousing resource requests with corresponding resources
US20110082928A1 (en) 2004-10-22 2011-04-07 Microsoft Corporation Maintaining consistency within a federation infrastructure
US7730220B2 (en) * 2004-10-22 2010-06-01 Microsoft Corporation Broadcasting communication within a rendezvous federation
US8095600B2 (en) 2004-10-22 2012-01-10 Microsoft Corporation Inter-proximity communication within a rendezvous federation
US8549180B2 (en) 2004-10-22 2013-10-01 Microsoft Corporation Optimizing access to federation infrastructure-based resources
US8095601B2 (en) 2004-10-22 2012-01-10 Microsoft Corporation Inter-proximity communication within a rendezvous federation
US20080288659A1 (en) 2006-11-09 2008-11-20 Microsoft Corporation Maintaining consistency within a federation infrastructure
US20060090003A1 (en) 2004-10-22 2006-04-27 Microsoft Corporation Rendezvousing resource requests with corresponding resources
US7694167B2 (en) 2004-10-22 2010-04-06 Microsoft Corporation Maintaining routing consistency within a rendezvous federation
US7958262B2 (en) 2004-10-22 2011-06-07 Microsoft Corporation Allocating and reclaiming resources within a rendezvous federation
JP4371056B2 (ja) * 2005-01-07 2009-11-25 ブラザー工業株式会社 ノード装置、ネットワーク参加処理プログラム、及びネットワーク参加処理方法等
US20060155781A1 (en) 2005-01-10 2006-07-13 Microsoft Corporation Systems and methods for structuring distributed fault-tolerant systems
GB2422505A (en) * 2005-01-20 2006-07-26 Agilent Technologies Inc Sampling datagrams
US20060182050A1 (en) * 2005-01-28 2006-08-17 Hewlett-Packard Development Company, L.P. Storage replication system with data tracking
US7467265B1 (en) * 2005-06-30 2008-12-16 Symantec Operating Corporation System and method for block conflict resolution within consistency interval marker based replication
US7827262B2 (en) * 2005-07-14 2010-11-02 Cisco Technology, Inc. Approach for managing state information by a group of servers that services a group of clients
US7739239B1 (en) * 2005-12-29 2010-06-15 Amazon Technologies, Inc. Distributed storage system with support for distinct storage classes
JP4727437B2 (ja) * 2006-02-03 2011-07-20 株式会社日立製作所 データベースを有するストレージシステムの記憶制御方法
US7673069B2 (en) 2006-02-24 2010-03-02 Microsoft Corporation Strong routing consistency protocol in structured peer-to-peer overlays
US20070214194A1 (en) 2006-03-07 2007-09-13 James Reuter Consistency methods and systems
US7881223B2 (en) 2006-03-31 2011-02-01 Panasonic Corporation Method for on demand distributed hash table update
US20080069082A1 (en) 2006-09-19 2008-03-20 Bea Systems, Inc. Service router for use with a service-oriented architecture environment
US7822002B2 (en) 2006-12-29 2010-10-26 Intel Corporation Dynamic address redemption by proxy in statically addressed wireless personal area networks
US20090006596A1 (en) 2007-06-27 2009-01-01 Veluchamy Dinakaran Dynamic address redemption and routing in ZigBee networks
US8417775B2 (en) 2008-02-27 2013-04-09 Microsoft Corporation Neighborhood maintenance in the federation
TWI390869B (zh) 2008-04-24 2013-03-21 Univ Nat Taiwan 網路資源分配系統及方法
US7934118B2 (en) 2008-10-24 2011-04-26 Microsoft Corporation Failure notification in rendezvous federation
US9344438B2 (en) 2008-12-22 2016-05-17 Qualcomm Incorporated Secure node identifier assignment in a distributed hash table for peer-to-peer networks
US8307085B2 (en) 2010-03-16 2012-11-06 Microsoft Corporation Storing state of distributed architecture in external store

Also Published As

Publication number Publication date
US20080288659A1 (en) 2008-11-20
EP2095248A4 (en) 2014-12-03
JP2010509871A (ja) 2010-03-25
US20080288646A1 (en) 2008-11-20
US8090880B2 (en) 2012-01-03
JP2013102527A (ja) 2013-05-23
WO2008060938A2 (en) 2008-05-22
US20120036237A1 (en) 2012-02-09
US8990434B2 (en) 2015-03-24
KR101455420B1 (ko) 2014-10-27
WO2008060938A3 (en) 2008-08-28
CN101535977A (zh) 2009-09-16
JP5498594B2 (ja) 2014-05-21
JP2014116968A (ja) 2014-06-26
CN101535977B (zh) 2011-09-14
CN102035886B (zh) 2012-12-12
EP2095248A2 (en) 2009-09-02
EP2095248B1 (en) 2016-05-04
JP5798644B2 (ja) 2015-10-21
CN102035886A (zh) 2011-04-27

Similar Documents

Publication Publication Date Title
KR101455420B1 (ko) 연합 인프라 내의 일관성
US9647917B2 (en) Maintaining consistency within a federation infrastructure
US8549180B2 (en) Optimizing access to federation infrastructure-based resources
US7694167B2 (en) Maintaining routing consistency within a rendezvous federation
US7958262B2 (en) Allocating and reclaiming resources within a rendezvous federation
US8392515B2 (en) Subfederation creation and maintenance in a federation infrastructure
JP5049344B2 (ja) ランデブーフェデレーション内の近傍域間通信
RU2431184C2 (ru) Межблизостная связь в федерации рандеву
US20060088015A1 (en) Establishing membership within a federation infrastructure
US20070002774A1 (en) Broadcasting communication within a rendezvous federation
JP2009543447A5 (ko)

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee