KR101429555B1 - 고 가용성 데이터를 제공하기 위한 시스템 및 방법 - Google Patents
고 가용성 데이터를 제공하기 위한 시스템 및 방법 Download PDFInfo
- Publication number
- KR101429555B1 KR101429555B1 KR1020097005859A KR20097005859A KR101429555B1 KR 101429555 B1 KR101429555 B1 KR 101429555B1 KR 1020097005859 A KR1020097005859 A KR 1020097005859A KR 20097005859 A KR20097005859 A KR 20097005859A KR 101429555 B1 KR101429555 B1 KR 101429555B1
- Authority
- KR
- South Korea
- Prior art keywords
- data
- data set
- copies
- hosts
- host
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/219—Managing data history or versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2097—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/82—Solving problems relating to consistency
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
일 실시예는 복수의 데이터 센터들에서 데이터 세트를 저장하는 컴퓨터로 구현되는 데이터 프로세싱 시스템 및 방법에 관한 것이다. 데이터 센터들, 및 데이터 센터들 내의 호스트들은 예를 들면 다층 고리 구조에 따라 조직될 수 있다. 해싱 배치는 데이터의 기록 및 판독이 일어나는 데이터 센터들 및 호스트들을 선택하기 위해 고리 배치를 구현하도록 사용될 수 있다. 버전 기록들은 판독이 일어난 후에 데이터 세트들 사이의 인과관계들을 평가하기 위해 사용될 수 있다.
Description
관련 출원의 교차 참조
본 출원은 2006년 3월 31일에 출원된, "System and Method for Providing High Availability Data"의 명칭을 갖는 미국 특허출원 제11/394,648호의 일부계속출원이며, 그 내용은 전적으로 여기에 참고문헌으로 포함된다.
기업 컴퓨팅 환경에서는 종종 특정 사업 응용에 관련된 데이터에 접속할 필요가 있다. SPOF(single point of failure; 단일 지점 장애)를 피하기 위해, 데이터는 종종 다른 위치(예컨대, 소정의 데이터 센터 내의 다른 위치들, 다른 데이터 센터들 등)에 있는 다수의 호스트들에 저장된다. 이에 따라, 예를 들면, 만일 특정 데이터 세트가 한 호스트에서 이용불가능하게 되면(예컨대, 호스트 장애에 기인하여, 네트워크 분할 또는 기타 네트워크 장애 등에 기인하여), 클라이언트 프로세스는 다른 호스트에서 데이터를 접속할 수 있다. 개개의 호스트들은 높은 가용성이 없을 수 있지만, 이 개개의 호스트들의 결합은 더 높은 가용성을 갖는 해법을 제공한다.
동일한 데이터를 다수의 위치에 저장할 때, 직면하는 문제는 데이터의 다양 한 복사본들 사이의 일관성(consistency)을 유지하는 것이다. 한 호스트에서 존재하는 데이터 세트의 상태는 다른 호스트에서 존재하는 데이터 세트의 상태와 일치하지 않을 수 있다. 예를 들면, 만일 클라이언트 프로세스가 한 호스트에서 데이터 세트에 대한 변경을 가하고, 이 데이터 세트는 이 후에 그 호스트에서 이용불가능하게 된다면, 이 호스트에서 데이터 복사본에 가하진 변경은 적어도 순간적으로 손실될 수 있다. 데이터 세트의 최신 버전은 다른 호스트로부터 획득될 수 있다. 그러나, 만일 클라이언트 프로세스가 다른 호스트로부터의 데이터 세트에서 동작을 시작한다면, 다른 데이터 세트에 반영되지 않은 변화를 갖는 각각의 2개의 데이터 세트 버전에서 일어나는 더 큰 문제가 잠재적으로 발생할 수 있다.
이에 따라, 진행중인 필요들은 고 가용성(highly available)의 데이터를 제공할 수 있는 시스템 및 방법을 위해 존재한다. 특정 형태 및 장점들이 소개되더라도, 본원의 사상은 또한 이들 형태들 및 장점들 중 임의의 것을 달성할 필요가 없는 시스템 및 방법을 달성하기 위해 적용될 수도 있다는 것이 이해되어야 한다.
일 실시예는 복수의 데이터 센터들 내의 호스트들에서 데이터 세트를 저장하는 단계를 포함하는 컴퓨터로 구현된 데이터 프로세싱 방법에 관한 것이다. 데이터 센터들과, 이 데이터 센터들 내의 호스트들은 예컨대 다층 고리 배치 방식(multi-tiered ring arrangement)에 따라 조직될 수 있다. 일 실시예에서, 해싱(hashing) 배치 방식은 데이터 세트의 기록 및 판독이 일어나는 데이터 센터 및 호스트들을 선택하기 위해, 고리 배치 방식을 구현하도록 사용된다. 다른 실시예에서, 버전 기록(history)은 또한 호스트에서 기록되고 판독되며, 판독이 일어난 후에 데이터 세트들 사이의 인과관계를 평가하기 위해 사용된다.
본 발명의 양호한 실시예를 나타내는 동안, 상세한 설명 및 특정 실시예들이 제한하기 위한 것이 아닌 설명의 목적으로 기술된다. 본 발명의 범위 내의 다양한 수정 및 변경들이 본 발명의 사상으로부터 벗어나지 않고 이루어질 수 있고, 본 발명은 그러한 수정들을 모두 포함한다.
도 1은 일 실시예에 따른 데이터 프로세싱 시스템의 블럭도이다.
도 2는 일 실시예에 따른 다른 데이터 프로세싱 시스템의 블럭도이다.
도 3은 일 실시예에 따라 더 상세히 도 1의 데이터 세트 서비스를 도시하는 블럭도이다.
도 4는 일 실시예에 따라 도 1의 시스템에 의해 구현되는 기록 동작의 흐름도이다.
도 5는 일 실시예에 따라 도 1의 시스템에 의해 구현되는 판독 동작의 흐름도이다.
도 6은 일 실시예에 따라 도 1의 시스템에 의해 구현되는 데이터 조정 및 갱신 동작의 흐름도이다.
도 7은 일 실시예에 따라 도 1의 시스템에서 데이터 복사 및 부하 균형과 관련하여 사용되는 해시 동작의 도면이다.
도 8은 일 실시예에 따라 도 7에 도시된 해시 동작의 다른 도면이다.
도 9는 일 실시예에 따라 도 1의 시스템의 증가하는 확장성 형태를 도시한 도면이다.
도 10은 일 실시예에 따라 도 1의 시스템에서 사용되는 데이터 복사 배치의 도면이다.
도 11은 일 실시예에 따라 도 1의 시스템에서 사용되는 호스트 우선 목록의 도면이다.
도 12는 일 실시예에 따라 도 1의 시스템에서 사용되는 부하 균형 배치의 도면이다.
도 13a-13b는 일 실시예에 따라 도 1의 시스템에 의해 구현되는 기록 동작의 흐름도이다.
도 14a-14b는 일 실시예에 따라 도 1의 시스템에 의해 구현되는 핸드-오프 동작을 포함하는 기록 동작의 흐름도이다.
도 15a-15b는 일 실시예에 따라 도 1의 시스템에 의해 구현되는 판독 동작의 흐름도이다.
도 16은 일 실시예에 따라 도 1의 시스템에서 사용되는 데이터 버저닝 배치의 흐름도이다.
도 17은 일 실시예에 따라 더 상세히 도 1의 데이터 세트 서비스를 도시하는 블럭도이다.
도 18은 일 실시예에 따라 도 17의 시스템에서 데이터 복사 및 부하 균형과 관련하여 사용되는 해시 동작의 도면이다.
도 19는 일 실시예에 따라 도 17의 시스템에서 사용되는 데이터 센터 및 호스트 우선 목록들의 도면이다.
도 20은 일 실시예에 따라 도 17의 시스템에 의해 구현되는 접속 동작의 흐름도이다.
도 21-24는 일 실시예에 따라 더 상세히 도 20의 접속 동작의 측면들을 도시하는 도면이다.
도 25는 일 실시예에 따라 도 17의 시스템에서 사용되는 메시지 필터이다.
I. 시스템 구조
도 1을 참조하면, 일 실시예에 따른 데이터 프로세싱 시스템(100)이 도시된다. 데이터 프로세싱 시스템(100)은 사용자 컴퓨터(102), 통신 네트워크(104), 및 네트워크 서비스 시스템(106)을 포함한다. 사용자 컴퓨터(102)는 통신 네트워크(104)를 통해 네트워크 서비스 시스템(106)에 접속할 수 있다. 네트워크 서비스 시스템(106)은 네트워크 인터페이스(110), 데이터 세트 서비스(112), 및 하나 또는 그 이상의 기타 서비스(114)를 포함한다. 네트워크 인터페이스(110)는 통신 네트워크(104)를 통해 사용자로부터 데이터를 수신하고, 사용자에게 데이터를 제공한다. 예를 들면, 네트워크 인터페이스(110)는 데이터 세트 서비스(112)뿐만 아니라 기타 서비스들(114)에 의해 생성 및/또는 유지되는 기타 데이터에 의해 유지되는 데이터 세트들에 대한 접속을 사용자 컴퓨터(102)에 제공할 수 있다.
데이터 세트 서비스는 데이터 세트들을 저장할 수 있는 데이터 스토리지(storage) 시스템(118)을 포함한다. 데이터 상태는 사용자 상호작용 및/또는 시스템(106)의 기타 변화에 기초하여 시간에 따라 변할 수 있다. 본원에서 용어 "데이터 세트"는 시간에 따라 변할 수 있는 임의의 데이터를 가리킨다. 예를 들면, 각각의 데이터 세트는 데이터 세트로부터 부가되거나, 제거되거나, 또는 수정될 수 있는 하나 또는 그 이상의 품목(item)들을 포함할 수 있다. 데이터 스토리지 시스템(118)은 고 가용성을 갖는 방법으로 정보를 저장하도록 구성되고, 이에 따라 시스템 장애 발생시(예컨대, 호스트 장애, 네트워크 장애 등), 이하 기재되는 바와 같이 데이터 세트는 높은 수준의 일관성을 갖는 가용성을 유지한다. 일 실시예에서, 데이터 스토리지 시스템(118)은 버클리 데이터베이스 거래 데이터 스토리지 시스템(Berkeley database transaction data storage system)을 사용하여 구현된다.
이제 도 2를 또한 참조하면, 도 2는 데이터 프로세싱 시스템(100)의 다른 예시를 제공한다. 도 2의 실시예에서, 네트워크 서비스 시스템(106)은 상업용 웹사이트 시스템(116)이고, 네트워크 인터페이스(110)는 네트워크 쇼핑 인터페이스(120)이다. 상업용 웹사이트 시스템(116)은 예컨대, 수천개의 호스트들 또는 그 이상을 포함하는 분산형 컴퓨팅 환경(distributed computing environment)으로 구현될 수 있다. 상업용 웹사이트 시스템(116)은 사용자 컴퓨터(102)를 동작하는 사용자에게 접속가능한 상업용 웹사이트(예컨대, 온라인 소매 웹사이트)를 품목들(예컨대, 상품, 서비스, 신청 등)을 위한 상점에 제공할 수 있다. 이러한 일 실시예에서, 네트 워크 쇼핑 인터페이스(120)는 품목들의 표시 및/또는 판매를 용이하게 하기 위해 웹사이트 상에서 그래픽 데이터 및/또는 문자 데이터를 사용자에게 제공할 수 있다. 사용자에게 제공되는 데이터는 가격 결정, 크기, 이용가능성, 구입을 위해 최근에 선택된 품목 등과 같은 품목 정보를 포함할 수 있다. 상업용 쇼핑 인터페이스(120)는 또한 사용자가 관심이 있는 품목들을 나타내는 데이터, 거래를 완성하기 위해 필요한 데이터 등과 같은 데이터를 사용자로부터 수신하도록 구성될 수 있다.
도 2의 예시에서, 데이터 세트 서비스(112)는 웹사이트의 사용자에 의한 구매 또는 향후 구매를 위해 선택되는 품목들의 목록들을 유지하는 쇼핑 카트(shopping cart) 데이터 서비스(122)로 도시된다. 이러한 예시에서, 각각의 데이터 세트는 특정 고객에게 관련된 쇼핑 카트일 수 있다. 데이터 세트는 쇼핑 카트의 품목들에 대한 품목 식별 정보, 사용자가 선택하였지만 아직 구매되지 않은 품목들에 대한 품목 정보, 쇼핑 카트의 품목들의 수량 정보 등을 포함할 수 있다. 쇼핑 카트 데이터 서비스(122)는 쇼핑 카트들과 연관된 기타 사업 논리를 포함할 수 있는 쇼핑 카트 서비스(124)를 통해 접속될 수 있다. 웹사이트 시스템(116)은 예컨대, 사용자의 쇼핑 카트의 전부 또는 일부를 나타내는 웹페이지와 같이 데이터 세트의 전부 또는 일부를 포함하는 웹사이트의 사용자들을 위한 웹 페이지들을 발행할 수 있다. 다른 예시적인 실시예에서, 데이터 세트는 사용자의 상호작용에 기초하여, 혹은 방문자의 편의를 위해, 또는 웹사이트의 동작을 용이하게 하기 위해 웹사이트 시스템(116)에 의해 수집될 수 있는 기타 데이터를 포함할 수 있다. 예를 들면, 데이터 세트 서비스(112)는 또한 특정 개체와 관련된 데이터 세트(예컨대, 웹사이트의 여러 사용자, 웹사이트 상의 여러 세션, 웹사이트 상에서 형성되는 여러 거래들, 웹사이트에서 제공되는 여러 품목들, 웹사이트에 의해 제공되는 품목들의 여러 카테고리, 웹사이트상에서 발행되는 여러 광고들, 웹사이트의 여러 페이지들 등)를 유지할 수 있다. 또한 인식될 수 있는 것과 같이, 도 2가 웹사이트 시스템을 도시하고 있을지라도, 데이터 프로세싱 시스템(100)은 다른 응용들에서 사용될 수 있다.
도 1을 다시 참조하면, 데이터 세트 서비스(112)는 국소적(local) 프로세스들과 원격(remote) 프로세스들와 모두 연관되어 사용될 수 있다. 원격 프로세스들의 배경에서, 데이터 세트 서비스(112)에 대한 판독 및 기록 요청들은 통신 네트워크(104)에 의해 원격 프로세스로부터 수신될 수 있다. 예를 들면, 네트워크 서비스 시스템(106)은 인터넷을 가로질러 API(application programming interface; 응용 프로그래밍 인터페이스)을 통해 원격 프로세스들로 접속가능한 서비스들을 제공할 수 있다. 이러한 서비스 요청들은 예컨대 자신의 데이터 프로세싱 시스템의 동작을 보조하기 위해 제3자들에 의해 만들어질 수 있다.
이제 도 3 내지 6을 참조하면, 데이터 세트 서비스(112)의 구성 및 동작이 더욱 상세히 도시된다. 도 3에 도시된 바와 같이, 데이터 세트 서비스(112)는 복수의 호스트들(130)을 포함할 수 있다. 여기서, 용어 "복수"는 2개 또는 그 이상을 의미한다. 예를 들면, 데이터 세트 서비스(112)는 수십, 수백, 또는 수천개의 호스트들(130) 또는 그 이상을 포함할 수 있다. 일 실시예에서, 각각의 호스트(130)는 기능적으로 동등하다(예컨대, 동일한 코드를 실행하거나, 동일한 코드의 관련 버전 들을 실행함). 각각의 호스트(130)는 이하 도 3-16에 기재된 동작을 수행하기 위해 구성된 저장된 프로그램 논리를 포함할 수 있다. 이하 기재되는 바와 같이, 데이터 세트 스토리지 시스템(118)은 호스트들(130)을 가로질러 분산될 수 있고, 이에 따라 각각의 호스트(130)는 데이터 세트들의 일부분을 저장한다. 각각의 호스트(130)는 (키-값 쌍들(key value pairs)의) 데이터의 부분집합을 저장하고, 시스템은 각각의 데이터 세트의 N개의 복사본들을 유지하고자 시도한다(N은 복사 인자를 나타내는 양의 정수, 또는 데이터 세트를 복사하는 횟수임). N 값은 설정가능하고, 데이터의 영속성, 가용성, 및 일관성 모두에 영향을 준다. 만일 시스템에 S개의 물리적 호스트들이 있다면, 전체 시스템(106)은 S≥N 물리적 호스트들을 포함하며(더 작은 S일지라도, 더 낮은 전체 시스템 가용성을 가짐), 각각의 호스트(130)는 데이터 세트의 대략적으로 N/S를 저장한다. 대안적으로, 만일 이종(heterogeneous) 호스트들(130)이 사용된다면, 각각의 호스트(130)는 시스템(106)의 각각의 호스트(130) 부담(weight)에 비례하는 부담을 갖는 데이터 세트의 수를 저장한다. 각각의 호스트(130)의 부담은 각각의 호스트(130)의 리소스(resource)에 기초하여 판단될 수 있다. 예를 들면, 각각의 호스트(130)의 부담은 각각의 호스트(130)의 상대적인 능력에 기초하여 판단될 수 있고(예컨대, 처리 용량, 저장 용량, 및/또는 네트워크 용량에 기초하여 판단됨), 이에 따라 더욱 강력한 호스트들(130)은 더 많은 데이터 세트들을 저장할 수 있다. N 값은 또한 각각의 데이터 세트 또는 각각의 데이터 유형 기초 상에서 설정되어 가용성/영속성을 허용하기 위해, 각각의 데이터 세트 또는 각각의 데이터 유형 기초 상에서 설정가능하도록 생성될 수 있다.
도 4에 도시된 것과 같이, 클라이언트 프로세스(client process; 134)(예컨대, 서비스들(114) 중 하나)로부터 수신되는 데이터를 저장하기 위해, 데이터 세트 서비스(112)는 클라이언트 프로세스(134)로부터 기록 요청을 수신하고(단계 150), 다수의 호스트들(130)에서 데이터를 기록하는 것으로 응답한다(단계 152). (이 출원의 목적을 위해, 용어 "클라이언트 프로세스"는 예컨대 본원에서 데이터 세트 서비스(112)와 같은 임의의 기타 프로그램 논리로부터 데이터 세트들을 요청할 수 있는 임의의 프로그램 논리를 가리킨다). 일 실시예에서, 데이터는 이하 기재되는 것과 같이, 우선 목록들에 기초하여 다수의 호스트들(130)에서 기록된다. 이 데이터가 기록된 이후에, 응답은 클라이언트 프로세스(134)로 송신되어 기록 동작이 수행된 것을 확인한다(단계 154). 예시적인 기록 동작은 도 7-12, 도 13a-13b, 및 도 14a-14b와 관련하여 더 상세히 설명된다.
도 5에 도시된 것과 같이, 클라이언트 프로세스(134)로 데이터를 제공하기 위해, 데이터 세트 서비스(112)는 클라이언트 프로세스(134)로부터 판독 요청을 수신하고(단계 160), 다수의 호스트들(130)에서 데이터를 판독하는 것으로 응답한다(단계 162). 이 데이터가 판독된 후에, 응답은 클라이언트 프로세스(134)로 송신되고, 이 클라이언트 프로세스는 판독 동작이 수행되었음을 확인하고, 요청된 데이터를 포함한다(단계 164). 예시적인 판독 동작들은 도 15a-15b와 관련하여 더 상세히 기재된다.
도 6과 관련하여, 모든 관련 네트워크 연결 및 호스트들(130)이 양호할 때 (예컨대, 가용하고 응답이 있을 때), 판독 동작에 수반되는 호스트들(130)은 일관 된 데이터를 제공한다. 그러나, 네트워크 연결들 또는 호스트들(130) 중 하나 또는 그 이상이 불량하거나 장애가 있을 때, 호스트들(130)은 동일한 데이터 세트의 다른 버전들을 제공할 수 있다. 따라서, 도 6에 도시된 것과 같이, 데이터 세트들이 클라이언트 프로세스에서 수신된 후에(단계 170), 데이터 세트들은 조정될 수 있다(단계 172). 조정된 데이터 세트는 이후에 저장을 위해 데이터 서비스(112)로 송신될 수 있다(단계 174). 이하 상세히 기재되는 바와 같이, 동일한 데이터 세트의 일관된 버전들의 존재는 데이터 버저닝 배치 방식(data versioning arrangement)을 사용하여 검색될 수 있다. 데이터 버저닝 배치는 또한 모순된 버전들을 조정하기 위해 버전 조정 논리(136)(도 3에 도시된 것과 같이, 클라이언트 프로세스(134)의 일부로서 또는 이와 관련하여 제공됨)에 의해 사용될 수 있다. 예시적인 데이터 버저닝 배치는 도 16과 관련하여 이하 더 상세히 기재된다.
Ⅱ. 판독/기록 동작의 조정(coordination)
A. 호스트들 상의 데이터 세트들의 분할
도 7-8을 참조하면, 일 실시예에서, 데이터 세트 서비스(112)는 시스템(106) 내의 호스트들(130) 상의 데이터 세트들을 분할하기 위한 메카니즘(mechanism)을 포함한다. 일 실시예에서, 이하 기재된 것과 같이, 일관된 해싱 배치 방식(consistent hashing arrangement)은 데이터 세트들을 저장하기 위해 사용될 수 있고, 이에 따라 데이터는 호스트들(130) 상에서 상대적으로 균일하게 분포된다. 다른 실시예에서, 다른 데이터 분할 배치 방식들이 사용될 수 있다.
도 7을 참조하면, 일 실시예에서, 데이터 세트 서비스(112)에 의해 저장된 데이터에 접속하기 위해(예컨대, 판독 동작 또는 기록 동작을 통하여 이루어짐), 클라이언트 프로세스들은 각각의 요청들이 가리키는 데이터 세트에 대한 키를 포함하는 데이터 요청들을 송신한다. 예를 들면, 쇼핑 카트 응용의 배경에서, 키는 쇼핑 카트와 관련된 사용자의 사용자 ID에 기초하여 생성될 수 있다(예컨대, 사용자 ID는 키로서 사용될 수 있다). 키들은 데이터 세트와 연관되고 해시 함수(hash function)에 대한 입력으로서 사용하기에 적절한 임의의 데이터 값일 수 있다. 도 7에 도시된 바와 같이, 키는 키의 함수로서 해시 값 h를 생성하는 해시 함수(182)에 적용된다. 일 실시예에서, 해시 함수(182)는 해시 범위 상에서 해시 값들의 대략적으로 균일한 확산을 달성한다. 예시적인 실시예에서, 해시 값들은 해시 범위 {0, 2128} 상에서 확산되는 것으로 도시되지만, 임의의 수의 해시 값, 또는 실제적으로 임의의 크기의 해시 범위가 사용될 수 있다.
데이터 세트 서비스(112)의 활성 참가자(active participant)가 되는 경우, 각각의 호스트(130)는 해시 범위 상에서 위치들의 세트를 할당받는다. 설명의 목적을 위해, 본원의 나머지 부분의 설명에서 호스트 A, 호스트 B, 호스트 C, 호스트 D, 및 호스트 E로 도시된 바와 같이, 데이터 세트 서비스(112)를 구현하는 5개의 호스트들(130)이 있는 것으로 가정한다. 실시에 있어서, 데이터 세트 서비스(112) 는 수십개, 수백개, 또는 수천개의 호스트들(130) 또는 그 이상으로 구현될 수 있다는 것이 인지될 것이다.
도 8을 참조하면, 도 8은 판독 동작 또는 기록 동작에 대한 책임(responsibility)이 해시 값에 기초하여 특정 호스트(130)에 할당되는 방식을 도시한다. 각각의 호스트(130)는 해시 범위의 자신의 위치로부터 이전 호스트(130)의 위치까지 확장하는 해시 값들과 관련하여 판독/기록 동작을 책임진다. 예를 들면, 만일 호스트 A, B, C, D, 및 E이 각각 해시 값들 h1, h2, h3, h4, 및 h5에 위치된다면, 호스트 B는 해시 값들 h1<h≤h2의 범위에 대하여 책임을 지고, 호스트 C는 해시 값들 h2<h≤h3의 범위에 대하여 책임을 진다. 책임의 할당은 호스트 A에 대해 "둘러싸고", 즉, 호스트 A는 해시 값 h5<h≤2128 및 0<h≤h1의 범위를 책임진다. 동작에 있어서, 예를 들면, 키 k1 및 k2를 갖는 데이터 세트들은 고리(184) 상에 위치를 두기 위해 키들 k1 및 k2를 해싱(hashing)하고, 데이터 세트의 해싱된 키보다 더 큰 위치를 갖는 1번째 호스트(130)를 발견하기 위해 고리(184)를 시계방향으로 움직이는 것에 의해 호스트들(130)에 할당된다. 키 k1의 경우, 대응하는 데이터 세트가 할당된 더 큰 위치를 갖는 1번째 호스트는 호스트 A이다. 키 k2의 경우, 대응하는 데이터 세트가 할당된 더 큰 위치를 갖는 1번째 호스트는 호스트 B이다.
도 7-8에 도시된 배치 방식은 각각의 호스트(130)가 고리(184) 상의 자신과 자신의 이전 호스트(130) 사이의 고리(184) 영역에 대하여 책임을 지게 한다. 예를 들면, 호스트 B는 자신과 호스트 A 사이의 고리(184) 부분을 책임진다. 만일 호스트(130)가 가입하거나 탈퇴하면, 이는 고리(184) 상의 직후의 후행자(successor)의 책임에만 영향을 주며, 나머지 다른 호스트들(130)은 영향을 받지 않는다. 이는 도 9에 도시되어 있으며, 여기서 호스트 F의 추가는 고리(184) 상의 자신의 직후의 후행자의 책임에 영향을 주지만, 호스트 A와 같은 다른 호스트들(130)의 책임에는 영향을 주지 않는다. 따라서, 개개의 호스트들(130)은 호스트들(130)에 대해 데이터 세트들의 분할의 전체적 재-맵핑(remapping) 없이 추가 또는 제거될 수 있고, 이에 따라 확장성(scalability)의 향상을 촉진한다.
1. 데이터 복사
이제 도 10-11을 참조하면, 도 7-8의 해싱 배치 방식은 데이터 복사를 제공하도록 사용될 수 있다. 도 10에서, 데이터 세트가 고리(184) 상에서 단순히 직후의 후행(successor) 호스트(130)에 할당되는 것 대신에, 데이터 세트는 먼저 N개의 후행 호스트들(130)에 할당된다. 이하 기재되는 바와 같이, 데이터 세트 서비스(112)는 호스트들(130) 사이에 데이터의 N개의 복사본들이 있도록 보장하기 위해 동작할 수 있고, 각각의 호스트(130)는 자신과 자신의 N번째 선행자(predecessor) 사이의 고리(184) 영역에 대해 책임진다.
도 11에 도시된 바와 같이, 이러한 배치 방식에서, 각각의 키는 호스트 들(130)의 우선(preference) 목록(190)을 갖고, 이 우선 목록은 각각의 호스트들(130)이 키에 기초하여 생성된 해시 값으로부터 고리(184) 주변에 시계방향으로 이동하는 동안 1번째 만나는 순서이다. 우선 목록(190)은 데이터 세트에 접속(예컨대, 판독 또는 기록)하기 위해 사용되는 호스트들(130)의 우선되는 순서를 나타낸다. 모든 호스트들(130)이 양호할 때, 우선 목록(190)의 상위 N개의 호스트들은 데이터 세트를 저장한다. 만일 특정 호스트(130)에 장애가 일어나거나, 네트워크 분할이 있다면, 데이터 세트는 우선 목록(190)내의 더 낮게 위치된 호스트들(130)에 일시적으로 저장될 수 있다. 만일 다수의 호스트들(130)에 장애가 발생하면, 데이터 세트는 우선 목록(190) 내에 다수의 더 낮게 위치된 호스트들(130)에 저장될 수 있다. N=3일 때, 키 k1과 연관된 데이터 세트를 접속하는 클라이언트 프로세스(134)는 키 k1의 위치로부터 고리(184) 주변을 시계방향으로 이동하는 것에 의해 볼 수 있는 것과 같이 호스트 A, B, 및 D (및 임의의 이전 호스트들이 가용하지 않다면 E, 및 이후에 C)의 순서로 판독 또는 기록한다. 키 K2와 연관된 데이터 세트를 접속하는 클라이언트 프로세스(134)는 키 k2의 해시 위치로부터 고리(184) 주변을 시계방향으로 이동하는 것에 의해 볼 수 있는 것과 같이 호스트 B,D, 및 E (및 임의의 이전 호스트들이 가용하지 않다면 C, 및 이후에 A)의 순서로 판독 또는 기록한다. 상기 지적한 바와 같이, 값 N은 설정가능한 값이며, 따라서 더 많은 호스트들(130)이 데이터 세트들의 더 많은 복사를 허용하기 위해 시스템(106)에 추가될 수 있다. 이에 따라, 데이터 세트들의 가용성의 수준은 설정가능하고, 적절한 수의 호스트 들(130)을 사용하여 원하는 만큼 높게 생성될 수 있다.
모든 호스트들(130)이 가용할 때, 동일한 데이터 세트 상의 계속되는 동작들은 N개의 호스트들의 동일한 세트를 접속하고, 이에 따라 일관성이 유지된다(즉, 동작은 동일한 키 상에서 이전 동작에 의해 판독/기록된 동일한 데이터에 접속한다). 네트워크 또는 호스트 장애가 있을 때, 동일한 데이터 세트에 대한 계속되는 동작들은 호스트들(130)의 다른 세트들을 접속할 수 있지만, 이 동작들은 접속되는 호스트들 내에서 어느 정도 중첩되는 한 계속해서 일관될 것이다. 예를 들면, 키 k1 상의 1번째 동작은 호스트 A, B, 및 D를 접속할 수 있다. 이후에, 만일 호스트 B가 가용하지 않으면, k1 상의 2번째 동작은 호스트들 A, D, 및 E를 접속할 것이다. 따라서, 우선 목록(190)에서 가장 높은 가용 호스트들(130)을 접속하는 것에 의해, 동작으로부터 동작으로의 호스트들의 가용성의 작은 변경들은 일관성에 부정적으로 영향을 미치지 않으며, 이는 이어지는 접속들이 중첩하는 호스트들을 수반할 수 있기 때문이다. 적어도 N개의 호스트들의 가용성은 호스트 세트들 사이에 중첩하는 영역이 없도록 2번의 연속적 동작들 동안 변경해야 한다. 상기 지적한 바와 같이, 값 N은 설정가능한 값이며, 이에 따라 일관성의 개연성 보장(probabilistic guarantee)은 설정가능하며, 원하는 대로 높게 생성될 수 있다. 이는 전체적 일관성(시스템 응답은 데이터에 대한 절대적인 최후의 변경을 반영함) 및 개체적(subjective) 일관성(시스템의 응답은 현재의 요청을 생성한 클라이언트에 의해 생성되는 최종 변경을 반영함) 모두의 개연성 보장을 포함한다.
일 실시예에서, 데이터 세트들 상의 클라이언트 동작들은 다수의 위치들(예컨대, 서버들)에서 서비스될 수 있다. 게다가, 동일한 데이터 세트 상의 연속적 동작들은 다른 서버들에 의해 서비스될 수 있다. 일 실시예에서, 소정의 데이터 세트를 저장하는 호스트들(130)을 접속하기 위해, 서버는 해시 공간의 호스트 위치(우선 목록(190)을 계산하기 위함)뿐만 아니라 호스트들(130)의 가용성(우선 목록(190)의 가장 높음 N개의 가용 호스트들을 선택하기 위함)에 관한 정보를 저장한다. 네트워크 또는 호스트 장애 존재시, 다른 서버들이 호스트들의 가용성과 관련한 다른 정보를 저장할 수 있다. 시스템에 가입 또는 탈퇴하는 호스트들이 존재시, 다른 서버들은 해시 공간의 세트 위치들과 관련한 다른 정보를 저장할 수 있다. 예를 들면, 서버 X는 호스트 A가 데이터 세트 서비스(112)에 참가했는지 인식하지 못할 수 있다. 그러므로, 키 k1을 갖는 데이터 세트 상의 동작을 서비스하는 데 있어서, 서버 X는 호스트들 B, D, 및 E에 접속할 수 있다. 다른 서버 Y는 이미 호스트 A와 호스트 A의 해시 위치 모두를 인식했을 수 있다. 이러한 정보에 기초하여, 키 k1 상의 차후 동작을 서비스할 때, 서버 Y는 호스트들 A, B, 및 D에 접속할 수 있다. 따라서, 우선 목록(190)의 가장 높은 가용 호스트들(130)에 접속하는 것에 의해, 기록 및 판독 동작 동안 적어도 하나의 호스트에 접속할 가능성이 향상된다. 따라서, 호스트 가용성과 서버에서 서버로의 해시 위치들과 관련한 정보의 작은 차이들은 다음 동작 동안 일관성에 부정적인 영향을 주지 않는다. 상술한 바와 같이, 이러한 일관성의 개연성 보장은 N 값에 의해 판단된다.
일 실시예에서, 우선 목록(190)은 해싱 함수(182)의 동작에 의해 구현될 수 있다(예컨대, 별도로 저장될 필요가 없음). 다른 실시예에서, 우선 목록(190)은 저장될 수 있다. 이해할 수 있는 바와 같이, 다른 인자들이 우선 목록(190)을 생성할 때 고려될 수 있다. 우선 목록(190)은 그러한 인자들을 고려하여 수동 또는 자동으로 생성될 수 있다. 예를 들면, 가용성 및 영속성을 더 향상시키기 위해, 우선 목록(190)은 상대적으로 낮은 상관 장애(correlated failure) 가능성을 갖는 동일한 우선 목록(190)의 호스트들(130)을 포함하도록 생성될 수 있다. 예를 들면, 만일 시스템(100)이 다수의 네트워크 상에 분산된다면, 서로 장애를 일으킬 가능성이 적은 호스트들(130)의 세트들이 있을 수 있다. 따라서, 시스템(100)은 데이터 세트의 N개의 복사본에 대해 N개의 호스트들을 선택하여 가용성 및 영속성을 최대화하고, 이에 따라 낮은 상관 장애를 가질 수 있다. 마찬가지로, 낮은 장애 상관은 호스트들(130)이 여러 하드웨어 상에서 실행되거나, 여러 프로그램 논리 구현을 사용하거나, 지리적으로 다른 영역들에서 실행되거나 이들의 결합된 형태로 실행되는 경우에 또한 존재할 수 있다. 예를 들면, 고리(184) 둘레를 시계방향으로 이동할 때, 규칙들의 세트는 만나는 호스트(130)가 고려되도록 요구되는 임의의 추가적 기준들에 부합하는지 평가하기 위해 적용될 수 있다.만일 만나는 호스트(130)가 추가적 기준에 부합하지 않는다면, 상기 추가적 기준에 부합하는 호스트를 만날 때까지 고리(184) 둘레를 계속 전진할 수 있다.
기타 배치 방식들이 또한 지리적 다양성(diversity)을 달성하기 위해 사용될 수 있다. 예를 들면, 단일 고리(184)를 사용하는 것 대신에, 적층된 고리 배치 방 식이 사용될 수 있다. 이러한 배치 방식의 예시는 도 17-25와 관련하여 이하 더 상세히 기재된다.
2. 부하 균형(Load Balancing)
도 12를 참조하면, 호스트들(130)은 부하 균형을 촉진하기 위해, 즉 비균등한(non-uniform) 데이터를 방지하고, 그렇지 않으면 고리(184) 상의 각각의 호스트(130)의 무작위 위치 할당에 의해 생성될 수 있는 부하 분산을 방지하기 위해 고리(184) 상의 다수의 위치들에 할당될 수 있다. 따라서, 도 12에서, 호스트들 A, B, C, D, 및 E는 고리(184) 상의 다수의 위치들에 할당된다. 이러한 다수의 위치 선정은 각각의 호스트(130)에 할당되는 다수의 데이터 세트들의 편차를 감소키는 경향이 있으며, 이는 고리(184) 상의 증가된 수의 무작위 배치가 각각의 호스트(130)에 할당되는 다수의 데이터 세트들이 평균값으로 수렴하게 하는 경향이 있기 때문이다. 따라서, 고리(184) 상에서 각각의 호스트(130)에 더 많은 위치들을 할당하는 것은 부하 균형을 향상시킨다. 일 실시예에서, 각각의 만나는 호스트(130)의 1번째 경우에만 우선 목록(190)에 위치된다. 키 k1의 경우, 대응하는 데이터 세트가 할당되는 더 큰 위치를 갖는 1번째 호스트는 호스트 A이다. N=4일 때, 키 k1과 연관된 데이터 세트에 접속하는 프로세스는 호스트들 A, B, C, 및 D에 판독 또는 기록한다. 키 k1에 대한 우선 목록(190)은 호스트가 고리(184) 상의 다수의 위 치를 갖고, 호스트들이 다른 순서로 만나게 되는 것으로 인해 상기와 다르다. 키 k2의 경우, 대응하는 데이터 세트가 할당되는 더 큰 위치를 갖는 1번째 호스트는 호스트 B이다. 키 k2와 연관된 데이터 세트에 접속하는 클라이언트 프로세스(134)는 순서대로 호스트 B, C, D, 및 A에 대해 판독 또는 기록한다. 다른 예시적인 실시예에서, 각각의 만나는 호스트(130)의 다수의 경우들은 예컨대 이전에 이용불가능했던 호스트(130)에 재시도하기 위해 우선 목록(190)에 위치될 수 있다.
호스트들을 고리(184) 상에 다수의 위치들에 할당하는 것은 또한 이종 하드웨어의 활용을 용이하게 하고, 다시 말해서 더 강력한 호스트들(130)이 고리(184) 상의 더 많은 위치들에 할당될 수 있고, 덜 강력한 호스트들(130)이 고리(184) 상의 더 적은 위치들에 할당될 수 있다. 예를 들면, 도 12에서 호스트 E는 임의의 다른 호스트보다 더 적은 위치들을 갖고, 따라서 덜 강력한 호스트로 추정된다. 이해할 수 있는 바와 같이, 호스트들의 범위는 각각의 호스트들이 다른 호스트들(130)보다 더 또는 덜 강력하게 사용될 수 있다. 특정 호스트(130)에 할당되는 위치들의 수는 특정 호스트(130)의 상대적인 능력의 함수일 수 있다.
부가적으로, 만일 충분한 수의 위치들이 각각의 호스트(130)에 할당된다면, 각각의 호스트(130)는 각각의 다른 호스트들(130)과 선행/후행 관계를 가질 수 있다. 이에 따라, 만일 호스트들(130) 중 하나가 비가용하게 되거나, 중지되면, 중지된 호스트(130)에 의해 운용되는 부하(load)는 데이터 가용성을 손실하지 않고 남아있는 가용 호스트들(130)을 교차하여 대략적으로 균등하게 분산될 수 있다. 마찬 가지로, 호스트(130)가 다시 가용하게 되거나, 새로운 호스트(130)가 데이터 세트 서비스(112)에 부가되면, 새로운 가용 호스트(130)는 각각의 다른 가용 호스트들(130)로부터 대략적으로 균등한 양의 부하를 덜 수 있다.
B. 판독/기록 접속 동작
이제 도 13a-13b, 14a-14b, 및 15a-15b를 참조하면, 판독 및 기록 동작들이 도시된다. 판독/기록 동작들은 클라이언트 프로세스들(134)에 의해 데이터 세트 서비스(112)에 형성된 서비스 요청에 의해 촉발될 수 있다. 서비스 요청을 수신하는 경우, 데이터 세트 서비스(112)는 요청된 동작을 수행하고, 클라이언트 프로세스(134)에 응답을 제공한다.
데이터 세트 서비스(112)에서, 호스트들(130) 중 하나는 판독 또는 기록 요청을 조정할 책임이 있다. 판독 또는 기록 요청을 조정할 책임을 갖는 호스트(130)는 본원에서 조정자(coordinator)로서 언급된다. 일 실시예에서, 조정자는 우선 목록(190)에 기재된 1번째 호스트(130)이며, 판독 또는 기록 요청의 조정은 국소적 판독 또는 기록 동작의 수행을 포함한다. 예를 들면, 서비스 요청은 다른 호스트(130)에 의해 초기에 수신될 수 있고, 이 호스트(130)는 조정자로서 역할을 하는 호스트(130)(예컨대, 우선 목록(190)의 최상위 호스트)로 서비스 요청을 전송하는 결정을 형성할 수 있다. 다른 실시예에서, 조정자는 우선 목록(190) 상에 없는 호스트(130)와 같은 다른 호스트(130)일 수 있고, 판독 또는 기록 요청의 조정은 국 소적 판독 또는 기록 동작을 수행하는 것을 포함하지 않는다. 예를 들면, 조정자는 초기에 판독 또는 기록 요청을 수신하는 임의의 호스트(130)일 수 있지만, 우선 목록(190)의 최상위 부근에서 일어나지 않으며, 서비스 요청을 우선 목록(190)의 최상위 근처의 호스트로 전송하는 결정을 형성하지 않는다. 예시를 제공하기 위해, 본원에서 조정자는 우선 목록(190)에 기재된 1번째 호스트(130)인 것으로 추정된다.
일 실시예에서, 상기와 같이, 판독 및 기록 동작들은 우선 목록(190)의 1번째 N개의 양호한 호스트들에 접속할 수 있고, 잠재적으로 중지된 또는 접속불가능한 호스트들(130) 상에서는 생략될 수 있다. 모든 호스트들(130)이 양호할 때, 키의 우선 목록(190)내의 최상위 N개의 호스트들(130)이 접속될 수 있다. 호스트 장애 또는 네트워크 분할이 있을 때, 우선 목록(190)의 더 아래에 있는 호스트들(130)이 대신에 접속될 수 있고, 이에 따라 높은 가용성을 유지한다.
먼저 도 13a-13b를 참조하면, 예시적인 기록 동작이 도시된다. 도 13a에서, 버전 Vn +1에 대한 기록 요청은 (상기 기재된 것과 같이, 직접적으로 또는 간접적으로) 클라이언트 프로세스(134)로부터 호스트 A에 의해 수신된다. 도 12에 도시된 것과 같이 고리(184) 상의 호스트들(130)이 도 12에 도시된 것과 같이 분산된 것으로 추정할 때, 키 k1에 대한 우선 목록(190)은 PL={A, B, C, D, E}이다. 호스트 A는 이 예시에서 조정자이며, 국소적으로 기록 동작을 수행한다(단계 150). 이후에 호스트 A는 나머지 N-1개의 최상위에 위치된 도달가능한 호스트들, 즉 호스트 B 및 C(예컨대, N=3인 경우임)에 새로운 버전 Vn +1을 복사하고, 또한 기록 동작을 수행하고 추가적인 복사본을 저장한다(단계 152).
데이터 세트가 저장될 때, 데이터 자체에 추가하여, 데이터 및 벡터 클럭(vector clock)이 또한 저장된다. 키는 데이터 세트가 이후에 식별되게 한다. 벡터 클럭은 동일한 데이터 세트의 다른 버전들 사이에서 인과관계를 포착하기 위해 데이터 버저닝(data versioning)을 위해 사용되며, 데이터 세트들의 버전들과 연관된 {호스트ID, 카운터(counter)} 쌍들의 목록을 포함한다. 벡터 클럭의 사용을 통한 데이터 버저닝은 도 16과 관련하여 이하 더 상세히 기재된다.
도 13B에서, 호스트 B 및 C는 기록 동작이 성공적이었는지 호스트 A에 보고하며, 호스트 A는 기록 동작이 성공적이었는지 확인하는 클라이언트 프로세스(134)에 응답한다(단계 154). 일 실시예에서, 기록 동작이 성공적으로 간주되기 위해, 기록 동작은 반드시 W개의 호스트들에서 성공적이어야 하며, 여기서 W는 설정가능한 값이고, W≤N이다. 따라서, 예를 들면, 만일 N=3이고, W=2일 때, 기록 동작이 3개의 호스트들(130)에서 시도되었을지라도 만일 2개의 호스트들(130)에서 성공적이라면, 기록 동작은 성공적인 것으로 간주된다. 만일 기록 동작이 하나 또는 그 이상의 호스트들(130)에서 성공적이라면, 데이터 세트의 복사본들은 이하 더 상세히 기재하는 바와 같이, 여전히 우선 목록(190)의 최상위 N개의 호스트들로 균등하게 이동할 수 있다. 따라서, 기록 동작이 상기 기재된 시험 세트에 따라 성공적이지 못한 것으로 간주될지라도, 최상위 N개의 호스트들에서 데이터 세트의 균등한 일관 성은 여전히 달성될 수 있다.
도 14a-14b를 참조하면, 데이터 핸드-오프(hand-off)를 갖는 기록 동작이 도시된다. 데이터 핸드-오프는 데이터 세트에 대해 우선 목록(190) 내의 N 개의 최상위에 위치된 호스트들에 데이터를 이동시키도록 시도하는 메카니즘이다. 예를 들면, 상기 기재된 바와 같이, 일반적으로 조정자는 우선 목록(190) 내의 최상위 N개의 호스트들에 데이터를 송신하려고 시도한다. 그러나, 만일 호스트들(130) 중 하나 또는 그 이상이 중지(down)되면, 조정자는 우선 목록(190)의 더 아래에 있는 호스트들(130)에 데이터를 송신한다. 우선 목록(190)은 기록 동작들(및 판독 동작들)에 참여할 호스트들(130)의 잘 정의된 시퀀스(sequence)를 제공하고, 데이터 핸드-오프 메카니즘은 우선 목록(190)의 N개의 최상위에 위치된 호스트들(130)에 다시 데이터를 이동시키도록 사용된다.
따라서, 도 14a에 도시된 것과 같이, 호스트 A는 도 13a와 같이 버전 Vn +1에 대해 기록 요청을 수신한다. 이 후에 호스트 A는 기록 동작을 수행하고, 나머지 N개의 최상위에 위치된 도달가능한 호스트들 B 및 C에 새로운 버전을 복사하려 시도한다. 도시된 예시에서, 호스트 C는 일시적으로 장애를 갖고, 이에 따라 호스트 D에서 기록이 시도된다. 호스트 D에 기록된 데이터는 어떤 호스트(130)가 데이터를 수신 및 기록해야 하는지(예컨대 호스트 C) 제안하는 힌트로 태그(tag)를 달 수 있고, 이에 따라 얼마 후에 호스트 D는 데이터를 호스트 C로 전송할 수 있다. 도 14b에서, 호스트 C가 양호할 때, 데이터 핸드-오프가 생성되고, 이 데이터는 호스트 C 로 다시 복사된다. 이에 따라 데이터는 우선 목록(190)의 N개의 최상위에 위치된 호스트들 중 하나인 호스트 C로 다시 이동된다.
일 실시예에서, 관련된 기술들은 데이터 세트들의 손실된 복사본들을 회복하기 위해 사용될 수 있다. 예를 들면, 호스트들(130)이 참가 또는 탈퇴할 때, 데이터가 잘못된 곳에 놓이게 될 수 있는 우선 목록(190)의 상응하는 변경이 일어난다. 예를 들면, 시스템(100)에 부가된 호스트(130)는 우선 목록들(190)의 다른 호스트들(130)의 순위(ranking)를 대신할 것이다. 이러한 상황에서, 데이터 핸드-오프를 구현하기 위해, 호스트들(130)의 쌍은 주기적으로 공통적으로 공유하는 범위의 비교를 수행할 수 있고, 이어서 상기 비교 동안 탐지된 임의의 차이를 해소하기 위해 필요한 데이터 전송을 수행한다. 예를 들면, 최상위 N개의 호스트들 중 하나가 아닌 키들의 범위를 보유하는 호스트(발신자)는 최상위 N개의 호스트들 중 어느 하나(수신자)를 무작위로 선택할 수 있다. 다른 예시에서, 호스트는 예컨대 호스트가 최근에 데이터 세트 서비스(112)에 가입했기 때문에 데이터를 비유사하게 갖는 최상위 N개의 호스트들 내의 한 호스트를 선택할 수 있다. 2개의 호스트들(130)은 이후에 그 범위 내의 낮은 수준의 데이터 베이스 비교를 진행할 수 있고, 발신자는 상기 비교에 의해 탐지되는 임의의 차이를 해소하기 위해 수신기가 저장하고 있는 것보다 더 최신의 임의의 데이터 세트들을 전송할 수 있다. 이 데이터는 우선 목록(190)의 적어도 하나의 호스트(130)로 이동할 수 있고, 이후에 우선 목록(190)의 나머지 호스트들(130)로 전달될 수 있다. 예를 들면, 나머지 호스트들(130)로의 전달은 키들의 일부 세트에 대한 우선 목록들(190)의 최상위 N개의 호스트들 내에 있 는 호스트들(130)의 쌍들에 저장된 데이터 세트들을 비교하는 것에 의해 구현될 수 있다. 일 실시예에서, 머클 트리(Merkle tree)들은 2개의 호스트들에 저장된 데이터 사이의 세트 차이들을 효과적으로 발견하기 위해 사용될 수 있다. 예를 들면, 머클 트리는 트리의 각각의 노드가 하부 트리의 데이터 상에서 계산되는 요약(또는 해시 값(hash value))을 포함하게 사용될 수 있고, 리브(leave)들은 하나 이상의 데이터 값들(예컨대, 키, 버전, 및 클럭)의 해시들을 포함하게 사용될 수 있다. 트리들의 내용물의 차이는 데이터 요약(해시 값들)이 다른 것을 따라 브랜치(branch)들을 반복하는 것에 의해 발견될 수 있다. 비교 효율을 향상시키기 위해, 머클 트리는 블룸 필터(Bloom filter)를 사용하여 인코딩될 수 있다.
상기 기재된 메카니즘을 사용하여, 데이터 세트 서비스(112)는 데이터 세트들의 가장 최근 버전들의 복사본들을 우선 목록들(190)의 최상위 N개 호스트들로 동적으로 이동시키고자 발신 시도를 생성한다. 이에 따라, 데이터 세트의 가장 최근 버전의 복사본들이 우선 목록(190)의 더 낮은 호스트들(130)에서 초기에 복사될 수 있을지라도, 또는 다른 이유로 최상위 N개 호스트들 중 하나에서 손실하게 될지라도, 복사본들은 결국 우선 목록들(190)의 최상위 N개 호스트들로 다시 이동할 것이며, 이는 결국 최상위 N개 호스트들에서 데이터 세트의 일관성을 결과할 것이다.
도 15a-15b를 참조하면, 우선 목록(190)을 사용하여 수행되는 예시적인 판독 동작(148)이 도시된다. 도 15a에서, 판독 요청은 클라이언트 프로세스(134)로부터 (상기 기재된 바와 같이, 직접적으로 또는 간접적으로)호스트 A에 의해 수신된다(단계 160). 호스트 A는 국소적 판독의 수행과 병렬로 B 및 C로부터 데이터를 요청 하는 것에 의해 판독 동작을 조정한다. 도 15b에서, 호스트 A는 호스트 B 및 C로부터 판독 결과를 수신하고(단계 162), 클라이언트 프로세스(134)로 응답을 제공한다(단계 164).
판독 요청을 수신할 때, 조정자는 이 키에 대한 우선 목록(190)의 N개의 최상위에 위치된 도달가능한 호스트들(130)로부터의 키에 대한 데이터의 모든 존재하는 버전들을 요청할 수 있고, 클라이언트 프로세스(134)로 결과를 돌려주기 전에 R개 응답들을 대기한다(여기서 R은 성공적인 판독 동작에 참여하기 위해 필요한 호스트들의 수). 도 15a-15b의 예시에서, 값 R은 3과 같은 세트이다.
값 W와 같이, 값 R은 설정가능하다. 예를 들면, R=1일 때, 호스트 A가 성공적인 판독으로 응답하면, 이 판독으로부터의 데이터는 사용을 위해 클라이언트 프로세스(134)로 리턴(return)된다. 다른 예시로서, R=2이면, 데이터는 판독이 호스트들 A 및 B 모두에서 수행될 때까지 리턴되지 않을 수 있다. 이러한 2개의 판독을 수행하는 경우, 시스템(100)은 데이터가 동일한 버전이고 R=1일 때 동일한 데이터를 리턴한다는 것을 인지한다. 또 다른 실시예에서, R=3이면, 데이터는 판독이 호스트 A, B, 및 C 상에 수행될 때까지 리턴되지 않을 수 있다.
값 R 및 W는 일관된 높은 성능을 제공하기 위해 N보다 적도록 설정가능할 수 있다. R + W > N이 되도록 R 및 W 값들을 설정하는 것은 판독 및 기록 동작에 참여하는 호스트들(130)의 세트 사이의 설정가능한 높은 중첩 가능성이 있는 정족수(quorum) 형의 시스템을 결과한다. 더 높은 N이 설정되면, 시스템은 더욱 가용성 및 내구성(durability)을 갖게 되는데, 이는 적어도 1번의 복사가 존재하는 경우가 높기 때문이다. 반면에, 데이터는 호스트들(130)의 동일한 세트에 기록되거나 동일한 세트로부터 판독할 필요는 없다는 것이 주목될 수 있다. 예를 들면, 데이터 세트는 우선 목록(190) 상에서 더 높은 호스트들(130)로 데이터 핸드-오프를 통해 이동되는 우선 목록(190)상의 더 낮은 호스트들(130)에 기록될 수 있고, 우선 목록(190) 상에서 더 높은 호스트들(130)로부터 최종적으로 판독된다. 우선 목록(190)의 최상위 N개 호스트들에서 데이터 세트의 최종적인 일관성이 달성된다. 다른 실시예에서, R 및 W는 N보다 훨씬 더 작게 설정될 수 있고(예컨대, R + W < N), 데이터 세트의 복사본들은 (조정자에 부가하여) W-1개의 호스트들에만 송신될 수 있다. 이러한 일 실시예에서, 상기 언급된 데이터 회복 메카니즘들은 최상위 N개 호스트들 중 나머지 호스트들에 데이터 세트를 전달하도록 사용될 수 있다.
일 실시예에서, 데이터 세트 서비스(112)에 대한 응용 프로그래밍 인터페이스가 다음과 같이 설정될 수 있다. 예를 들면, 명령은 다음 식을 가질 수 있다.
write(Key, Value, Context)→ResultCode.
read(Key)→ValueList, Context, ResultCode.
여기서, 키(Key)는 바이트의 무제한 시퀀스이며, 값(Value)은 데이터(바이트들의 무제한 시퀀스) 및 메타데이터(metadata)(값이 기록된 최종 시간을 포함하는 값에 대한 정보를 포함하는 판독 전용, 임의의, 확장가능 데이터 세트, 진단 및 디버깅 정보 등)를 포함하는 객체이며; 값목록(ValueList)은 값들의 목록이며; 콘텍스트(Context)는 판독-수정-기록 주기에 대한 벡터 클럭 상태(vector clock state)를 추적하기 위해 스토리지 시스템에 의해 내부적으로 사용된 불분명 객체(opaque object)이며; 결과코드(ResultCode)는 판독 또는 기록 동작이 성공적이었는지에 대한 코드 표시이다.
콘텍스트가 진부하지 않다면, 즉 개입(intervening) 기록이 이미 이 키 상에 발생하였다면, 기록 동작은 값 파라미터에 의해 특정된 값으로 키에 의해 식별된 값을 변경한다. 일 실시예에서, 클라이언트 프로세스(134)는 판독-수정-기록 주기(최적 록킹(optismistic locking))를 재시작한다. 다른 실시예에서, 클라이언트 프로세스(134)는 기록 동작이 계속되도록 허용할 수 있고, 이러한 경우 데이터 세트의 버전들의 충돌이 있을 수 있다. 판독 동작은 키와 연관된 값(들)에 대해 데이터 세트 서비스(112)내의 룩업(lookup)을 수행한다. 성공적으로 판독된 임의의 및 모든 값들은 값목록에 리턴된다. 불분명 콘텍스트 객체는 차후의 갱신 동작에서 사용하기 위해 리턴된다. 만일 다수의 값들이 리턴되면, 클라이언트 프로세스(134)는 모든 값들에 대해 조정 동작을 수행할 것이 예정된다. 만일 차후의 갱신이 (리턴된 콘텍스트를 사용하여) 수행되면, 갱신된 값은 값목록에서 리턴된 모든 값들에, (만일 존재한다면) 값에 임의의 부가적 변경을 더한 조정을 표현한다고 추정된다.
이해될 수 있는 바와 같이, 더 높거나 더 낮은 복잡도 수준의 응용 프로그래밍 인터페이스가 사용될 수 있다. 예를 들면, 일 실시예에서, 값 객체는 예컨대 오래된/버려진 데이터가 결국 삭제되도록 데이터가 유지되어야 하는 시간이 특정되는 것과 관련한 정보를 허용하는 유형(type) 파라미터를 포함할 수 있다.
다른 실시예에서, 키는 두 부분(분할(partition)-키, 객체(object)-키)으로 분할되어 사용될 수 있다. 이러한 실시예에서, 분할-키는 키 파라미터에 대해 상기 기재된 바와 같이 키에 대한 우선 목록(190)을 생성하도록 해싱될 수 있다. 이에 따라 동일한 분할-키를 공유하는 2개의 데이터 세트들은 동일한 우선 목록(190)을 가질 수 있고, 이에 따라 각각의 데이터 세트의 복사본들은 매우 높은 가능성을 갖고 호스트들(130)의 동일한 세트 상에 존재할 것이다. 이러한 방식은 호스트들의 동일한 세트가 분할-키를 공유하는 모든 키들에 대한 우선 목록(190)의 최상위 N개 호스트들에 있기 때문에 최적화(optimization)로서 서로 간에 여러 데이터 세트들을 접속하는 것을 허용한다. 예를 들면, 도 2의 상업용 웹사이트 예시에서, 호스트들(130)의 동일 세트 상의 특정 사용자에 관련된 모든 데이터 세트들(예컨대, 쇼핑 카트, 프로파일, 신용카드 정보 등)을 저장하는 것이 요구될 수 있다. 이러한 데이터 세트들의 각각에 대해 동일한 분할-키를 사용하는 것에 의해, 데이터 세트들은 호스트들(130)의 동일 세트 상에 저장된다. (분할-키, 객체-키) 결합은 고유하게 사용자에 대한 각각의 개별 데이터 세트를 식별한다. 이러한 배치에 의해 가능하게 형성되는 다른 최적화는 분할-키를 공유하는 키들 상의 범위 쿼리(query)들이다. 예를 들면, 이러한 범위 쿼리들은 분할-키에 대한 우선 목록(190)의 최상위 N개에 있는 단일 호스트(130)를 접속하는 것에 의해 소정의 분할-키에 대한 모든 객체-키를 통해 반복하도록 사용될 수 있다.
다른 실시예에서, 유형 파라미터는 클라이언트 프로세스(134)가 기록되고 있는 데이터의 유형을 특정할 수 있도록 기록 명령에 부가될 수 있다(예컨대, write(Key, Value, Context, Type)→ResultCode). 데이터 세트 서비스(112)는 최종 접속된 후에 특정 시간 양의 데이터를 삭제하도록 설정될 수 있다(예컨대, 데이터 가 더 이상 필요하지 않을 때 저장 공간을 교정하기 위함). 삭제 전에 허용된 시간은 데이터 유형에 기초할 수 있다. 유형은 또한 (예컨대, 데이터의 일부 유형들이 다른 것들보다 더 중요할 수 있는 경우에) 데이터 세트 서비스(112)가 저장되어야하는 데이터의 복사본의 수를 결정하기 위해 사용될 수 있다.
다른 실시예에서, 판독 콘텍스트는 또한 판독 명령에 입력으로서 전달될 수 있다(예컨대, read(Key, Context)→ValueList, Context, ResultCode). 이러한 실시예에서, 판독 명령으로 입력으로서 전달된 판독 콘텍스트는 이전 판독의 결과로서 획득될 수 있다. 판독 동작으로 입력으로서 이를 다시 전달하는 것에 의해, 클라이언트 프로세스(134)는 이전 판독 동작 동안 접속된 데이터 세트의 특정 버전을 검색하는 것에 관심을 나타낼 수 있다. 이해될 수 있는 것과 같이, 응용 프로그래밍 인터페이스 상의 다른 변형이 또한 가능하다.
Ⅲ. 데이터 버저닝(Versioning)
A. 벡터 클럭들의 동작
도 16을 참조하면, 데이터 버저닝 배치가 개시된다. 전술된 바와 같이, 높은 가용성을 제공하기 위해, 데이터 세트 서비스(112)는 다른 호스트들(130) 상의 동일 시간에 존재하는 동일 데이터의 다수의 버전들을 허용한다. 발신 시도는 우선 목록(190)의 최상위 N개 호스트들에 데이터 세트들의 가장 최신 버전들의 복사본을 이동하도록 형성되지만, 이러한 프로세스는 순간적인 것이 아니다. 이동이 일어나기 전에, 데이터 세트의 오래된 버전들의 복사본들이 우선 목록(190)의 다양한 호스트들에서 존재할 수 있고, 심지어 우선 목록(190)의 최상위 또는 그 근처에 있는 호스트들(130)에 존재할 수 있다. 이에 따라, 예컨대 한 호스트(130)가 일시적으로 손실된 오래된 변경들을 반영하는 하나의 버전을 가질 수 있고, 다른 호스트(130)가 오래된 변경들이 가용하지 않은 동안 생성된 새로운 변경들을 반영하는 다른 버전을 가질 수 있다.
일 실시예에서, 동일 데이터 세트의 2개 복사본들이 데이터 세트의 다른 버전들인지 여부, 및 서로 간에 관련된 차이를 갖는지 판단할 수 있는 것이 요구될 수 있다. 또한 이러한 차이들을 평가할 수 있어, 이에 따라 2개의 버전들이 충돌되는 상황에서(예컨대, 각각의 버전은 다른 버전에 반영되지 않은 데이터를 포함함) 2개의 버전이 서로 간의 선행-후행 관계를 갖는 상황을 구별하는 것이 가능할 것이 요구될 수 있다(예컨대, 한 버전은 단지 구식이고, 다른 버전에 통합됨).
일 실시예에서, 버전 기록은 데이터 세트의 각각의 복사본으로 저장된다. 예를 들면, 버전 기록은 포착 인과관계가 동일 데이터 세트의 다른 버전들 사이에서 형성되는 벡터 클럭들의 형태로 저장될 수 있다. 벡터 클럭들은 2개의 버전들이 충돌되는지에 대한 판단을 허용하기 위해 데이터 세트의 버전 기록에 대한 충분한 정보를 정밀하게 저장할 수 있다. 일 실시예에서, 벡터 클럭은 데이터 세트들의 버전들과 연관된 {호스트 ID, 카운터} 쌍들의 목록을 포함한다. 호스트 ID 값은 기록 동작을 조정하였던 호스트를 나타낸다. 카운터 값은 호스트가 데이터 세트에 기록 한 횟수를 나타낸다. 카운터 값은 데이터 버전에 대한 인과관계 정보, 다시 말해서 변경이 그 버전을 앞섰던 요약을 인코딩한다.
데이터 세트의 2개의 버전들이 인과관계 순서를 갖는지 (및 이에 따라 하나가 망각될 수 있는지) 여부, 또는 병렬 브랜치들 상에 있는지 (그리고 이에 따라 조정이 필요한지)에 대한 판단을 시도할 때, 이들의 벡터 클럭들을 조사하는 것으로 충분하다. 만일 하나가 다른 벡터 클럭의 모든 호스트-ID들에 대해 더 크거나 동일한 카운터 값들을 갖는다면, 전자(former)는 후자(latter)로부터 전래된 것이며, 이 후자는 망각될(forgotten) 수 있다. 따라서, 벡터 클럭들은 클라이언트 프로세스들(134)이 데이터 진화의 다수의 브랜치들이 다시 하나로 무너지도록 동일 데이터의 다수의 버전들을 조정하게 허용한다.
도 16은 데이터 세트 서비스(112)에 의해 사용될 수 있는 데이터 버저닝의 예시를 도시한다. 초기에, 단계(400)에서, 데이터 세트는 비어있다. 단계(402)에서, 클라이언트 프로세스(134)는 호스트 A를 사용하여 비어 있는 데이터 버전 V0를 갱신한다. 기록을 조정하는 호스트 A는 이전 버전의 클럭을 복사하고, 호스트 A와 연관된 카운터 값을 증가시키며, 데이터 버전 V1에 대한 벡터 클럭을 생성한다. 이러한 경우, 이것이 1번째 갱신이기 때문에 카운터는 1만큼 증가된다. 데이터 세트 서비스(112)는 데이터 버전 V1 및 연관된 벡터 클럭[(A,1)] 저장하고, 예컨대 호스트 A는 국소적 기록 동작을 수행하며, 부가적인 국소적 기록 동작을 수행하고 부가적 복사본을 저장하도록 호스트 B 및 C에 새로운 버전을 (새로운 벡터 클럭을 따 라) 추가적으로 송신한다. 데이터 세트 서비스(112)가 상업용 웹사이트 시스템내의 쇼핑 카트 정보를 저장하는 일 예시적인 실시예에서, 이러한 갱신은 방문자가 쇼핑 카트에 품목(item)을 부가하는 것으로 인해 발생될 수 있다. 이해될 수 있는 것과 같이, 데이터 세트의 새로운 "버전"을 구성하는 것은 응용에 의존하여 변경될 수 있다.
도 16에서, 조정자는 우선 목록(190)의 N개의 최상위에 위치된 도달가능한 호스트들 중 하나이다. 상술된 바와 같이, 조정자는 또한 우선 목록(190)의 N개의 최상위에 위치된 도달가능한 호스트들 중 하나가 아닌 호스트(130)일 수 있다. 이러한 실시예에서, 기록 요청을 수신할 때, 조정자는 새로운 버전에 대한 벡터 클럭을 생성하고 국소적으로 새로운 버전을 저장하기 위해 그 키에 대한 우선 목록(190)의 N개의 최상위에 위치된 도달가능한 호스트들(130) 중 하나를 선택할 수 있다. 조정자는 전술된 바와 같이, 나머지 N개의 최상위에 위치된 도달가능한 호스트들로 새로운 버전을 (새로운 벡터 클럭에 따라) 송신할 수 있다.
단계(404)에서, 동일한 클라이언트 프로세스(134)는 호스트 A를 사용하여 데이터 버전 V1을 갱신한다. 기록을 조정하는 호스트 A는 이전 버전의 클럭을 복사하고, 호스트 A와 연관된 카운터 값을 2로 증가시키고, 데이터 버전 V2에 대한 벡터 클럭을 생성한다. 다시, 호스트 A는 데이터 버전 V2과 이와 연관된 벡터 클럭 [(A, 2)]을 국소적 기록 동작들을 위해 호스트 B 및 C로 전송하고, 부가적 복사본들을 저장한다. 버전 V2는 버전 V1으로부터 전래되고, 따라서 버전 V1을 중첩기록(over- write)하지만, 아직 버전 V2를 나타내지 않는 호스트 분할들에서 버전 V1을 계속 갖는 복사본들이 있을 수 있다.
단계(406)에서, 동일한 프로세스는 요청을 조정하기 위해 호스트 B를 사용하여 데이터 버전 V2를 갱신한다. 예를 들면, 호스트 A는 가용하지 않을 수 있다. 새로운 호스트 B는 갱신을 조정하기 때문에, 새로운 벡터 클럭 입력(entry)이 1의 카운터 값으로 호스트 B와 연관되어 생성된다. 데이터 세트 서비스(112)는 데이터 버전 V3, 및 연관된 클럭 [(A, 2);(B, 1)]을 저장한다. 데이터 버전 V2에 대한 벡터 클럭은 또한 버전 기록을 유지하거나 더 복잡한 조정이 수행되도록 하기 위해 원한다면 저장될 수 있다. 단계(406) 이후에, 버전 V1은 인지하지만, 버전 V2는 인지하지 못한 호스트는 버전 V3 및 이에 관련된 벡터 클럭을 수신할 수 있다. 호스트는 버전 V1이 결과적으로 버전 V3을 선행하고 이에 따라 버전 V3에 의해 중첩 기록되는 버전 V1과 버전 V3 각각의 클럭들 [(A, 1)] 및 [(A, 2);(B, 1)]을 비교하는 것에 의해 판단할 수 있다. 반면에 만일 다른 순서의 이벤트(event)가 발생하고, 데이터 버전 V3에 대한 벡터 클럭이 버전 V1의 클럭의 모든 호스트들에 대한 더 적거나 동일한 카운터들을 갖는다면, 버전 V3는 버전 V1에 선행하여, 제거될 수 있다.
단계(408)에서, 다른 클라이언트 프로세스(134)는 버전 V2를 판독하고, 이를 호스트 C를 사용하여 갱신하도록 시도한다. 예를 들면, 호스트 A 및 B는 가용하지 않을 수 있다. 제시된 예시에서, 호스트 C는 단계(406)의 기록 동작에 참여되지 않았고, 버전 V3을 인지하지 않은 것으로 가정된다. 새로운 호스트 C는 갱신을 조정하고, 새로운 벡터 클럭 입력은 1의 카운터 값으로 호스트 C와 연관되어 생성된다. 데이터 세트 서비스(112)는 데이터 버전 V4 및 이에 연관된 클럭 [(A, 2);(C, 1)]을 저장한다. 단계(408) 이후에, 버전 V1 또는 버전 V2을 인지한 호스트는 버전 V4와 이와 연관된 벡터 클럭을 수신한 경우에 버전 V1 및 V2가 새로운 데이터에 의해 중첩 기록되고 제거될 수 있다는 것을 판단할 수 있다.
단계(410)에서, 클라이언트 프로세스(134)는 버전 V3 및 V4 모두를 판독한다. 예를 들면, 판독 동작은 호스트 A에 의해 조정될 수 있고, 또한 호스트 B 및 C를 수반할 수 있다. 호스트 A는 벡터 클럭 [(A, 2)]을 갖는 데이터 세트의 복사본, 벡터 클럭 [(A, 2);(B, 1)]을 갖는 호스트 B로부터의 데이터 세트의 복사본, 및 벡터 클럭 [(A, 2);(C, 1)]을 갖는 호스트 C로부터의 데이터 세트의 복사본을 획득한다. 판독의 콘텍스트는 버전 V3 및 V4의 클럭들, 즉 [(A, 2);(B, 1);(C, 1)]의 요약이다. 호스트 A는 버전 V3와 V4 사이에 인과 관계가 없다는 것을 발견할 것이며, 그 이유는 벡터 클럭들의 조사로부터 서로를 반영하지 않는 버전 V3 및 V4 각각에 변경이 있기 때문이다. 버전 V3 및 V4는 이후에 조정된다.
일 실시예에서, 데이터 세트 서비스(112)(이 예시에서 호스트 A)는 클라이언트 서비스(134)에 다수의 버전들을 제공하고, (또는 클라이언트 프로세스(134)와 연관된 버전 조정 논리(136)를 제공하고), 이후에 조정을 수행할 방법을 결정한다. 이러한 배치는 조정을 수행하기 위해 사용되는 임의의 사업적 논리가 데이터 세트 서비스(112) 대신에 클라이언트 프로세스(134)와 연관되거나 저장되게 허용한다. 클라이언트 프로세스(134) 및 버전 조정 논리(136)가 분리되어 도시될지라도, 클라이언트 프로세스(134) 및 버전 조정 논리(136)가 통합된 방식으로 제공될 수 있다는 것이 이해될 것이다. 다른 실시예에서, 버전 조정 논리(136)는 데이터 세트 서비스(112)를 가질 수 있다. 다수의 버전들은 다른 버전들을 단일 조정된 버전으로 생성하도록 병합하는 것에 의해, 데이터의 분석을 수행하여 불일치 대 불일치의 경우 불일치들을 취급하는 방법을 판단하는 것에 의해 어떤 것을 유지할지 결정하도록 버전들 상의 내정된 순서 지정(default ordering)을 사용하여 조정될 수 있다. 이해될 수 있는 바와 같이 다른 접근 방식들이 용도에 따라 다른 상황에서 더 최선일 수 있다.
단계(412)에서, 기록 요청은 클라이언트 프로세스(134)로부터 수신된다. 호스트 A는 기록을 조정하고, 벡터 클럭의 대응하는 카운터 값을 갱신한다. 갱신된 버전은 또한 조정 동작과 관련없는 클라이언트 프로세스(134)에 의해 구현되는 다른 변경을 포함할 수 있다. 새로운 버전 V5는 벡터 클럭 [(A, 3);(B, 1);(C, 1)]을 가질 것이다.
단계(412)에서, 호스트 A는 임의의 변경이 조정에 더하여 데이터 세트에 구현되는지에 관계없이 카운터 수를 [(A, 3);(B, 1);(C, 1)]으로 갱신한다는 것이 주 목될 수 있다. 단일 버전은 벡터 클럭 [(A, 2);(B, 1);(C, 1)]으로 존재하지 않고, 따라서 벡터 클럭에서 카운터를 갱신하는 것은 원조(parent) 클럭을 새로운 클럭과 구별한다. 부가적으로, 카운터의 증가는 다수의 클라이언트 프로세스들이 동일 시간에 조정을 시도할 수 있지만(예컨대, 조정을 위해 다른 호스트들을 사용함) 다른 결과에 도달할 수 있기 때문에 바람직하다(예컨대, 다른 병합 논리로 인해, 조정뿐만 아니라 변경도 부가하기 때문임). 만일 카운터가 갱신되지 않는다면, 다른 병합 시도들이 동일 클럭, 즉 [(A, 2);(B, 1);(C, 1)]에 할당될 수 있고, 따라서 서로 구별가능하지 않을 수 있다.
B. 벡터 클럭 정보 및 절단(truncation)
일 실시예에서, 단지 {호스트 ID, 카운터} 쌍을 포함하는 대신에, 벡터 클럭은 다수의 추가적인 값들을 포함하고, 다음 식을 갖는다.
Vector Clock={(<Host ID><host-gen><key-gen>),<counter>,<time-stamp>}
호스트 ID(Host ID)는 호스트에 대한 고유 식별자이고, 카운터 파라미터는 데이터 버전에 대한 인과관계 정보를 인코딩하며, 전술된 {호스트 ID, 카운터}에 대응한다. 일 실시예에서, (<Host ID><host-gen><key-gen>) 파라미터들의 결합은 호스트 ID만 관련되어 전술된 방식에서 동작한다. 다시 말해서, 호스트는 만일 3개 의 파라미터들(<Host ID><host-gen><key-gen>) 중 임의의 하나가 다르다면 다른 호스트로 간주된다(즉, 데이터 세트의 다른 버전들 사이에 인과관계가 없음을 의미할 수 있다).
일 실시예에서, 호스트(130)는 벡터 클럭을 동기적으로 디스크(disk)에 기록하지 않는다. 그래서, 호스트가 각각의 키에 대해 생성하였던 시퀀스 번호를 망각하고 결과적으로 그 시퀀스 번호를 재사용함에 따라, 벡터 클럭들의 일관성을 손상시킬 수 있는 잠재성이 존재한다. (예컨대 호스트 장애 이후에) 망각의 위험이 식별될 때, 호스트(130)는 자신의 <host-gen> 파라미터를 갱신하여, 이에 따라 (임의의 키에 대해) 생성하는 모든 미래의 벡터 클럭들에 대해 전체적으로 다른 호스트인 듯이 보인다. 따라서, 호스트(130)를 재시동할 때 <host-gen> 파라미터의 증가는 장애 이전에 생성된 벡터 클럭들이 재시동 이후에 생성된 벡터 클럭들과 구별되게 한다. 이해될 수 있는 바와 같이, 각각의 벡터 클럭에 대한 카운터는 비한정된 방식으로 단조롭게 증가한다. 일 실시예에서, 비한정된 카운터 수를 방지하기 위해, 각각의 호스트는 주기적으로 예컨대 <host-gen> 파라미터를 증가시키는 것에 의해 새로운 고유의 신원(identity)을 선택하도록 주기적으로 강제된다. 예를 들면, 호스트는 재시동 후에 새로운 고유 신원을 할당받을 수 있고, 이에 따라 <counter> 파라미터를 0이되게 할 수 있다. 이는 단일 호스트(130)가 신원을 변경하기 전에 조정할 수 있는 기록의 수에 의해 한정되는 최고로 가능한 카운터 값을 결과한다. 다른 실시예에서, 신원 변경은 만일 자신의 카운터 값들 중 하나 또는 그 이상이 사전에 정해진 임계값에 도달한다면 호스트에서 자동적으로 촉발될 수 있다.
<key-gen> 파라미터는 키 생성 카운터를 추적하기 위해 사용될 수 있다. 일 실시예에서, 데이터 핸드-오프 이후에, 호스트들(130)은 획득되었던 임의의 데이터를 삭제한다. 이는 우선 목록(190) 상에 더 낮은 호스트들(130)에 대한 저장 공간을 절약한다. 동시에, 호스트들(130)은 데이터 핸드-오프 이후에 증가되는 <key-gen> 파라미터를 유지하고, 이에 따라 호스트(130)가 기록 동작을 수행하도록 요청되는 추정되는 다음 번의 임의의 인과관계를 방지할 수 있다. 예를 들면, 만일 호스트 D가 벡터 클럭 [(A, 3),(D, 1)]을 갖는 데이터 세트의 버전에 대한 기록 동작을 조정하고, 데이터 핸드-오프를 수행하고, 후에 벡터 클럭 [(A, 2)]를 갖는 데이터 세트의 버전에 대해 다른 기록 동작을 조정하도록 요청된다면, 갱신된 데이터 세트가 벡터 클럭 [(A, 3),(D, 2)]을 갖는 것이 부적절할 것이다. 이러한 상황에서 새로운 <key-gen>을 할당하는 것에 의해, 호스트(130)는 새로운 호스트와 유사하게 나타나도록 생성되고, 이에 따라 2개의 버전 사이의 인과관계의 출현을 피할 수 있다. 일 실시예에서, 각각의 호스트(130)는 키 당 개별적 <key-gen>을 유지하고, 변경된 신원(예컨대, 변경된 <Host ID> 또는 갱신된 자신의 <host-gen>)을 지속하기 때문에 벡터 클럭을 생성하였던 모든 키에 대해 키 생성을 기억한다. 마찬가지로, 각각의 호스트(130)는 또한 대응하는 <key-gen> 파라미터 또는 <host-gen> 파라미터 중 어느 하나가 갱신되었기 때문에 키에 대해 벡터 클럭에서 사용된 마지막 <counter> 파라미터를 기억할 수 있다.
<time-stamp> 파라미터는 데이터 세트의 연령(age) 및 벡터 클럭의 입력들을 감시하기 위해 사용될 수 있다. 일부 응용에서, 만일 데이터가 사전에 정해진 연령을 초과한다면, 데이터를 삭제하는 것이 바람직하다. 예를 들면, 쇼핑 카트 응용에서, 며칠, 몇 주, 몇 달, 또는 몇 년 등의 기간 동안 방치되었던 쇼핑 카트를 삭제하는 것이 바람직할 수 있다. 이 시간-스탬프(time-stamp)는 이러한 방식으로 데이터 세트들의 삭제를 제공하도록 사용될 수 있다. 부가적으로, 시간-스탬프는 또한 벡터 클럭 절단을 위해 사용될 수 있다. 이해될 수 있는 바와 같이, 데이터 세트와 연관된 기록 동작을 조정한 다른 호스트들(또는 다른 <host-gen> 또는 <key-gen> 파라미터들을 갖는 동일한 호스트들)의 목록의 길이가 증가함에 따라, 그 데이터 세트에 대한 벡터 클럭의 길이는 포함된 쌍들을 증가시킨다(즉, 벡터 클럭에 포함된 {호스트 ID, 카운터} 쌍의 목록의 길이가 증가하기 때문임). 따라서, 타임-스탬프를 사용하여, 사전에 정해진 길이의 연령을 갖는 벡터 클럭들은 삭제되거나 절단될 수 있다.
다른 실시예에서, 벡터 클럭들을 사용하는 것 대신에, 다른 버전 기록 메카니즘들이 데이터 세트들의 변경을 추적하기 위해 사용될 수 있다. 예를 들면, 해시 기록들이 또한 사용될 수 있다. 본원에서, 용어 "버전 기록"은 시간 상에서 데이터 세트의 변경을 추적하기 위해(즉, 존재하는 변경을 추적하고, 변경의 특성을 추적할 필요는 없음) 사용될 수 있는 임의의 데이터 구조를 가리킨다. 인지될 수 있는 것과 같이, 다른 버전 기록 메카니즘들이 디스크 공간 사용, 대역폭, 오래된 버전들을 삭제할 때 일관성 유지, 속도, 및 인과적 선행(precedence)을 탐지하기 용이함 등의 견지에서 다른 거래(tradeoff)를 제공할 수 있다. 일 실시예에서, 버전 기 록 메카니즘은 데이터 세트의 2개 또는 그 이상의 복사본들 사이에서 인과적 선행(충돌로서 전술된 인과적 부재)의 탐지를 허용하는 데 사용된다. 버전 기록 메카니즘은 데이터 손실 없이 버전 충돌이 일어나게 허용하고(가용성), 우선 목록들 내의 최상위에 있는 호스트들로 데이터를 이동할 때 일관성을 유지하는 것을 용이하게 하도록 사용될 수 있다.
Ⅳ. 다수 데이터 센터들
A. 다수 데이터 센터 배치의 구조
도 17-25를 참조하면, 데이터 프로세싱 시스템(100)의 다른 실시예가 도시된다. 도 17-25에서, 데이터 세트들은 다층 고리 구조에 따라 호스트들(130) 상에 분할된다. 다층 고리 배치는 예를 들면 호스트들이 다른 지리적 위치에(예컨대, 다른 도시, 다른 국가, 다른 대륙 등에 있을 수 있는 다른 데이터 센터들) 위치된 데이터 세트 스토리지 시스템을 구현하기 위해 사용될 수 있다. 예를 들면, 데이터는 호스트들 사이에 상관된 장애 가능성을 감소시키기 위해 다른 데이터 센터들을 교차하여 복사될 수 있다. 단일 데이터 센터의 장애는 전체적 시스템의 가용성에 크게 영향을 줄 수 없다. 추가적으로, (네트워크 지연의 견지에서) 가까운 데이터 센터로 클라이언트 요청을 재유도(redirecting)하는 것에 의해, 단 대 단(end-to-end) 데이터 검색 응답 시간은 감소될 수 있다. 다층 고리 배치는 또한 예를 들면 공통 데이터 센터내에 위치된 호스트들과 같은 다른 이유로 인해 사용될 수 있다. 예를 들면, 고리의 다른 층들은 데이터 센터내의 영역들, 데이터 센터 내의 호스트들의 특정 랙(rack) 등을 구체화하기 위해 사용될 수 있다. 도 17에서 예시를 제공하기 위해, 다층 고리 배치 방식이 호스트들이 다른 데이터 센터들에 위치된 데이터 스토리지 세트 스토리지 시스템을 구현하기 위해 사용된다고 가정된다.
먼저 도 17을 참조하면, 도 17은 데이터 프로세싱 시스템(100)이 2-계층 또는 2-레벨 고리 배치를 포함하는 일 실시예를 도시한다. 2계층 고리 배치 방식은 도 1 및/또는 도 2에 도시된 데이터 세트 서비스(112)를 구현하기 위해 사용될 수 있다. 도 17에서, 데이터 프로세싱 시스템(100)은 상부 레벨 고리(504)에 논리적으로 위치된 복수의 데이터 센터들(502)을 포함한다. 4개의 데이터 센터들(502)이 도시될지라도, 구현시 임의의 수의 데이터 센터들(502)이 사용될 수 있다는 것을 이해할 수 있다.
데이터 센터들(502)은 통신 네트워크(508)에 의해 서로 연결될 수 있다(예컨대, WAN(wide area network), 인터넷 등). 데이터 센터들(502) 사이의 메시징(messaging)은 도 25와 관련하여 이하 더 상세히 기재되는 메시지 필터들(510)을 통해 전달할 수 있다. 도 1-2와 같이, 각각의 데이터 센터들(502)은 통신 네트워크(104)(예컨대, 인터넷)에 의해 다양한 사용자 컴퓨터들(102)에 의해 접속될 수 있다.
각각의 데이터 센터들(502)은 각각의 하부 레벨 고리(184) 상에 논리적으로 위치된 복수의 호스트들(130)을 포함한다. 도시된 실시예에서, 각각의 하부 레벨 고리(184)는 다른 데이터 센터(502)에 대응한다. 각각의 데이터 센터(502)내에, 각각의 고리(184) 상의 호스트들(130)은 또한 도 3-16과 관련하여 상기 기재된 것과 같이 동작할 수 있다. 하부 레벨 고리들(184)은 동질적 또는 이질적일 수 있다(예컨대, 다른 수의 호스트들을 갖거나, 다른 해시 함수를 갖거나, 다른 구성을 갖는 등). 또한, 이하 기재되는 바와 같이, 데이터 센터들(502)과 관련된 상부 레벨 고리(504)의 동작은 호스트들(130)과 관련하여 도 3-16과 연관되어 상기 기재된 것과 같이 고리(184)의 동작과 동일할 수 있다.
도 18을 참조하면, 일 실시예에서, 데이터 세트 스토리지 시스템(118)은 각각의 데이터 센터(502)가 데이터 세트들의 일 부분을 저장하도록 데이터 센터들(502)을 교차하여 분산될 수 있다. 각각의 데이터 센터들(502)은 최상부 레벨 고리(504) 상의 해시 값의 범위(또는 이하 더 상세히 기재되는 것과 같이 최상부 레벨 고리(504) 상의 해시 값들의 범위들의 세트들)에 대한 책임을 갖고, 각각의 데이터 센터(502)는 호스트들(130)과 고리(184)와 관련하여 상기 기재된 것과 동일한 방식으로 해시 범위 내의 자신의 위치로부터 이전의 데이터 센터(502)의 위치로 확장하는 해시 값들와 연관된 판독/기록 동작들을 책임진다. 데이터 세트에 접속하기 위한 요청이 수신될 때(예컨대, 판독 동작 또는 기록 동작을 통해), 키는 데이터 세트가 접속될 수 있는 데이터 센터(들)(502)를 판단하기 위해 상부 레벨 고리(504)에 대한 해시 함수에 적용된다. (도 18에서, 지정들 DC1-DC4은 각각 다르게 도 17의 4개의 데이터 센터들(502)을 지정한다.) 키는 또한 데이터가 접속될 수 있는 관련된 데이터 센터(들)(502) 내의 호스트들(103)을 판단하기 위해 하부 레벨 고리(184)에 대한 해시 함수에 적용된다. 상부 레벨 고리(504)에 대해 사용되는 해시 함수는 해시 함수(해시 함수들)가 하부 레벨 고리들(184)에 대해 사용되는 것과 동일하거나 다를 수 있다. 마찬가지로, 상기와 같이, 하부 레벨 고리들(184) 각각에 대해 사용되는 해시 함수는 해시 함수(또는 해시 함수들)가 다른 하부 레벨 고리들(184)에 대해 사용되는 것과 동일하거나 다를 수 있다. 도 18에 도시된 맵핑(mapping) 배치로, 개별 데이터 센터들(504)은 데이터 세트들의 분할(partitioning)을 데이터 센터들(504)로 전체적인 재-맵핑(remapping)하지 않고 부가 또는 제거될 수 있고, 이에 따라 확장성(scalability)을 촉진시킨다.
일 실시예에서, 데이터 센터들을 교차하는 데이터 복사는 또한 호스트들(130)과 관련하여 도 10에서 상기 기재된 것과 동일한 방식으로 제공될 수 있다. 따라서, 도 18에 도시된 것과 같이, 데이터 세트가 고리(504) 상에서 단순히 직접 데이터 센터(502)에 할당되는 것 대신에, 데이터 세트는 1번째 M개의 후행(sucessor) 데이터 센터들(502)로 할당될 수 있다. 데이터 세트 스토리지 서비스(112)는 데이터 세트가 M개의 데이터 센터들(502)에서 복사되는 것을 보장하도록 동작할 수 있고, 각각의 데이터 센터(502)는 자신과 자신의 M번째 선행자(predecessor) 사이의 고리(504) 영역에 대해 책임을 가질 수 있다.
소정의 데이터 세트의 복사본을 저장하는 데이터 센터들(502)의 수는 예컨대 데이터 세트 기초, 데이터 유형 기초 등에 의해 설정가능할 수 있다. 이해될 수 있는 바와 같이, 유지되는 각각의 데이터 세트의 복사본들의 수는 다른 것들 사이에서 통신 네트워크(508)의 원하는 가용성 수준, 및 원하는 갱신 트래픽 수준에 기초 하여 판단될 수 있다. 다시 말해서, 가용성은 더 많은 복사본들이 다른 데이터 센터들을 교차하여 저장될 때 증가한다. 그러나, 통신 네트워크(508) 상의 네트워크 트래픽의 양은 또한 데이터 세트의 복사본들이 일관성 있게 보유될 때 갱신 동안 증가한다. 데이터 세트가 데이터 센터(502) 내에 복사된다고 가정할 때, 데이터 세트를 복사하는 데이터 센터(502) 내의 호스트들의 수는 또한 예컨대 데이터 센터 대 데이터 센터 기초, 데이터 세트 기초, 데이터 유형 기초 등에 의해 설정가능할 수 있다.
일 실시예에서, 데이터 센터들을 교차하는 부하 균형이 또한 호스트들(130)과 관련하여 도 12에 상기 기재된 것과 동일한 방식으로 제공될 수 있다. 예를 들면, 데이터 센터들(502)은 고리(504) 상에 다수의 위치들에 할당될 수 있다. 이러한 배치 방식은 비균일한 데이터 및 부하 분산을 방지하기 위해 사용될 수 있고, 그렇지 않으면 고리(504) 상의 각각의 데이터 센터(502)의 무작위 위치 배치 방식으로 생성될 수 있다. 이러한 다수의 위치는 각각의 데이터 센터(502)에 할당되는 데이터 세트들의 수의 편차를 감소시키는 경향이 있으며, 이는 고리(184) 상의 무작위 배치의 증가된 수가 각각의 데이터 센터(502)에 할당된 데이터 세트들의 수가 평균 값 상에서 수렴하게 하기 때문이다. 부가적으로, (예컨대, 프로세싱 용량, 저장 용량, 및/또는 네트워크 용량에 기초하여 판단되는 것과 같이) 고리(504) 상의 다수의 위치들에 데이터 센터들(502)을 할당하는 것은 또한 이종(heterogeneous) 데이터 센터들의 사용을 용이하게 하고, 다시 말해서 더 강력한 데이터 센터들(502)이 고리(504) 상의 더 많은 위치들에 할당될 수 있고, 덜 강력한 데이터 센 터들(502)이 고리(504) 상의 더 적은 위치들에 할당될 수 있다. 부가적으로, 고리(504) 상의 다수의 위치들에 데이터 센터들(502)을 할당하는 것은 또한 데이터 센터들 사이에서 부하를 전달하는 것을 용이하게 하며, 이는 각각의 데이터 센터(502)가 다른 데이터 센터들(502)과 선행/후행 관계를 가질 수 있기 때문이다(충분한 수의 위치들이 고리(504) 상의 각각의 데이터 센터(502)에 할당되는 것을 가정함). 따라서, 예를 들면, 만일 데이터 센터들(502) 중 하나가 가용하지 않게 되거나 중지되면, 중지된 데이터 센터(502)에 의해 취급되된 부하는 데이터 가용성의 손실 없이 나머지 가용한 데이터 센터들(502)을 교차하여 대략 균일하게 분산될 수 있다.
도 19를 참조할 때, 각각의 데이터 세트는 각각의 데이터 센터들(502)이 1번째 만나는 순서인 데이터 센터들(502)의 우선 목록(519)을 가질 수 있고, 한편 키에 기초하여 생성되는 해시 값으로부터 고리(504) 주변을 시계방향으로 이동한다. 우선 목록(519)은 데이터 세트를 접속하기 위해(예컨대, 판독, 기록 등) 사용되는 데이터 센터들(502)의 우선되는 순서를 나타낸다. 모든 데이터 센터들(502)이 가용할 때, 우선 목록(519)의 최상위 M개 데이터 센터들(502)은 데이터 세트를 저장한다. 동일 데이터 세트 상의 연속적 동작들은 M개 데이터 센터들의 동일 세트를 접속할 수 있고, 이에 따라 일관될 수 있다(즉, 한 동작은 동일 키 상에서 이전 동작에 의해 판독/기록되었던 동일 데이터를 접속한다). 만일 우선 목록(519)의 하나 또는 그 이상의 데이터 센터들(502)에 장애가 발생하면, 또는 만일 네트워크 분할이 있는 경우, 데이터 세트는 데이터 센터(502) 또는 우선 목록(519)에 낮게 위치 된 데이터 센터들(502)에 일시적으로 저장될 수 있고, 이에 따라 높은 가용성을 유지한다. 부가적으로, 동일 데이터 세트에 대한 연속적 동작들이 데이터 센터들(502)의 다른 세트들을 접속할지라도, 동작들은 접속되는 데이터 센터들(502)의 세트들 내에 일부 중첩이 있는 한 지속적으로 일관될 수 있다. 우선 목록(519)의 최상위에 있는 가용한 데이터 센터들(502)을 접속하는 것에 의해, 동작으로부터 동작으로의 호스트들의 가용성의 작은 변경들은 일관성에 부정적인 영향을 주지 않는데, 이는 계속되는 접속들이 중첩하는 데이터 센터들을 수반할 수 있기 때문이다.
우선 목록(519)은 예를 들면 해시 함수에 기초하여 계산될 수 있다. 일 실시예에서, 소정의 데이터 세트를 저장하는 데이터 센터들(502)에 접속하기 위해, 각각의 호스트(130)는 (우선 목록(519)을 계산하기 위해) 해시 공간의 데이터 센터 위치들과 관련된 정보뿐만 아니라 (우선 목록(519)의 최상위에 있는 M개 가용 데이터 센터들을 선택하기 위해) 데이터 센터들(502)의 가용성에 관련된 정보를 저장할 수 있다. 다른 실시예에서, 우선 목록(519)은 예를 들면, 저장되는 우선 목록(519)이 해시 함수에 기초하여 생성되게 하고, 우선 목록(519)을 생성할 때 고려되도록 요구될 수 있는 다른 인자들에 기초하여 생성되게 하기 위해 저장될 수 있다.
B. 접속 동작들
이제 도 20-24를 참조하면, 데이터 센터들(502)에 저장된 데이터 세트들을 접속하는 것과 관련된 동작들이 도시된다. 도 20은 일 실시예에 따라 도 17의 시스 템에 의해 구현되는 접속 동작의 흐름도이다. 도 21-24는 일 실시예에 따라 더 상세히 도 20의 접속 동작의 측면들을 도시한 도면이다.
단계(602)에서, 연결이 데이터 센터(502)와 사용자 컴퓨터(102)에 개설된다. 이해될 수 있는 바와 같이, 각각의 데이터 센터(502)는 데이터 세트 서비스(112)를 구현하는 호스트들(130)뿐만 아니라, 네트워크 인터페이스(110) 및 기타 서비스들(114)을 구현하는 다른 호스트들을 포함할 수 있다. 이에 따라, 도 21과 관련하여, 연결은 예컨대 네트워크 인터페이스(110)를 구현하는 호스트들 중 하나일 수 있는 호스트(532)와 개설될 수 있다.
일 실시예에서, 사용자 컴퓨터(102)와의 연결은 (예컨대, 무작위적 기초상에서 잠재적으로) 데이터 센터(502)에서 개설될 수 있고, 다른 데이터 센터(502)로 재유도될 수 있다. 예를 들면, 도 21에서, 사용자 컴퓨터(102)와의 연결은 데이터 센터 DC4의 호스트(532)에 의해 개설될 수 있고(단계(602)), 예컨대 더 가까울 수 있거나, 덜 부하를 가질 수 있거나, 연결을 유지하기 위해 더 적합하게 하는 다른 특성들을 나타낼 수 있는 다른 데이터 센터 DC1의 다른 호스트(534)에 전송된다(단계 604).
단계(606)에서, 데이터 접속 요청(예컨대, 판독 요청, 기록 요청 등)이 수신된다. 도 22와 관련하여, 데이터 접속 요청은 클라이언트 프로세스(134)를 실행할 수 있는 호스트(536)로부터 데이터 세트 서비스(112)의 호스트(130)에 의해 수신될 수 있다(도 3 참조). 예를 들면, 도 2에 상기 제공된 예시의 배경에서, 호스트(534)는 네트워크 인터페이스(110)를 구현하는 호스트들 중 하나일 수 있고, 사 용자 컴퓨터(102)에 연결될 수 있으며, 호스트(536)는 쇼핑 카트 서비스(124)를 구현하는 호스트들 중 하나일 수 있고, 호스트(534)로부터 요청들을 수신할 수 있으며, 호스트(130)는 데이터 세트 서비스(112)를 구현하는 호스트들 중 하나일 수 있고, 호스트(536)로부터 접속 요청들을 수신할 수 있다. 데이터 세트에 대한 접속 요청이 데이터 센터(502)의 호스트(130)에서 수신될 때, 호스트(130)는 데이터 세트가 단계(608)에서 데이터 센터(502)에 국소적으로 저장되는지 판단한다. 데이터 세트는 예컨대 데이터 센터(502)가 우선 목록(519)의 최상위 M개 데이터 센터들 중 하나이기 때문에, 데이터 센터(502)가 우선 목록(519)에서 더 낮은 자리에 있지만, 데이터 세트가 우선 목록(519)의 최상위 M개 데이터 센터들 중 하나인 데이터 센터(502)에 이동할 때까지 데이터 세트를 일시적으로 저장하고 있기 때문에, 데이터 센터(502)가 사용자와 연결을 개설하고 데이터 세트의 차용된(leased) 복사본을 일시적으로 저장하였기 때문에(이하 더 상세히 기술함), 또는 다른 이유로 인해 데이터 센터(502)에 국소적으로 저장될 수 있다. 만일 데이터 세트가 국소적으로 저장된다면, 응답은 단계(610)에서 데이터 세트의 국소적 복사본 또는 복사본들(가능하게는 하나 이상의 버전)에 기초하여 제공될 수 있다. 그렇지 않으면, 호스트(130)는 데이터 센터들(502) 중 다른 것들로부터 데이터 세트의 복사본 또는 복사본들(가능하게는 하나 이상의 버전)을 획득할 수 있다. 만일 데이터 세트의 버전의 충돌이 있다면(예컨대, 데이터 센터내의 버전들의 충돌, 다른 데이터 센터들로부터의 버전들의 충돌, 또는 양쪽 모두), 임의의 이러한 충돌 버전들은 데이터 세트를 요청하는 특정 클라이언트 프로세스(134)와 연관된 데이터 세트 버전 조정 논리(136) 로 보고될 수 있고, 상기 기재된 바와 같이 데이터 세트 버전 조정 논리(136)에 의해 해결될 수 있다. 예시를 제공하기 위해, 데이터 센터 DC1는 데이터 세트의 복사본을 저장하는 M개 데이터 센터들 중 하나가 아니라고 가정한다. 따라서, 데이터 센터 DC1에서의 호스트(130)는 다른 데이터 센터들로부터 데이터 세트의 복사본들을 획득하기 위해 조정자로서 동작한다.
단계(612)에서, 접속 요청이 수신된 이후에, 데이터 세트에 대한 키는 상부 레벨 고리(504) 및 하부 레벨 고리(184)에 대한 해시 함수에 적용된다. 단계(614)에서, 도 22와 관련하여, 데이터 센터 DC1(조정자로서 동작함)에서의 호스트(130)는 우선 목록(519)의 최상위 데이터 센터들 중 하나 또는 그 이상으로부터 데이터를 요청한다. 일 실시예에서, 호스트(130)는 상부 레벨 고리(504)에 대한 해시 함수에 키를 적용하고, (예컨대, 데이터 센터들 DC2 및 DC3이 데이터 세트에 대한 우선 목록(519)의 최상부에 있는지 판단한 후에) 데이터 센터들 DC2 및 DC3에 접속 요청을 송신한다. 접속 요청이 데이터 센터들 DC2 및 DC3에서 각각 호스트들(130)에 의해 수신될 때, 이 호스트들(130)은 데이터 세트를 저장하는 각각의 데이터 센터 내의 호스트들(130)을 판단하기 위해 하부 레벨 고리(184)에 대한 해시 함수에 키를 적용한다. 이러한 방식으로, 데이터 센터 DC1에서 호스트(130)가 원격 데이터 센터들 DC2 및 DC3의 고리들(184) 상의 호스트들(130)의 위치들과 관련된 정보를 저장할 필요는 없다. 다른 실시예에서, 각각의 데이터 센터들(502)에서 각각의 호스트들(130)은 이 정보를 저장하고, 데이터 센터 DC1에서 호스트(130)는 상부 레벨 고리(504) 및 하부 레벨 고리(184) 모두에 키를 적용할 수 있다.
일 실시예에서, 데이터 세트는 사용자 컴퓨터(102)와의 연결이 개설될 때 프리패치(pre-fetch)될 수 있다. 예를 들면, 도 2의 쇼핑 카트 예시의 배경에서, 사용자 컴퓨터(102)는 호스트(534)와 연결을 개설할 수 있지만, 종종 쇼핑 카트 데이터 세트에 대한 요청이 형성되기 전일 수 있다. 예를 들면, 사용자는 쇼핑 카트 데이터 세트를 접속하는 것을 필요로 하는 동작을 수행하기 전 시간 동안 구매할 수 있다. 따라서 데이터 세트는 사용자가 쇼핑 카트 데이터 세트로의 접속을 필요로하는 동작을 수행하기 위해 대기할 필요없이 연결이 사용자 컴퓨터(102)와 개설되는 대로 원격 데이터 센터들(502)로부터 판독 동작을 수행하는 것에 의해 프리패치될 수 있다. 결과적으로, 데이터 세트의 국소적 복사본은 사용자가 쇼핑 카트 데이터 세트로의 접속을 필요로하는 동작을 수행할 때 즉시 가용할 수 있다. 이러한 배치는 통신 네트워크(508)에 의해 데이터 세트를 획득하는 것과 연관된 네트워크 지연을 방지하기 위해 사용될 수 있다.
단계(616)에서, 원격 데이터 센터들(502)은 접속 요청을 처리하고, 데이터 센터 DC1에서 호스트(130)에 의해 수신되는 응답을 송신한다. 일 실시예에서, 판독 동작이 성공적으로 되도록 하기 위해, 판독 동작은 RDC 데이터 센터들에서 성공적이어야만 하며, 여기서 RDC는 설정가능한 값이며, RDC≤M이다. 일 실시예에서, 기록 동작이 성공적으로 간주되도록 하기 위해, 기록 동작은 WDC 데이터 센터들에서 성공적이어야만 하며, 여기서 WDC는 설정가능한 값이며, WDC≤M이다. 값들 RDC 및 WDC을 RDC+ WDC>M이 되도록 설정하는 것은 판독 및 기록 동작들에 참여하는 데이터 센터들(502)의 세트 사이의 설정가능한 높은 중첩 가능성이 있는 정족수(quorum) 형 시스템을 결과한다.
이해될 수 있는 바와 같이, 데이터 센터들(502)로부터 데이터 세트들을 접속할 때, 데이터 세트들은 상기 호스트들(130)과 관련하여 기재된 것과 같이, 데이터 센터들(502)의 동일 세트로부터 판독되거나 기록될 필요는 없다. 예를 들면, 데이터 세트는 우선 목록(519)에서 더 낮은 자리에 있는 데이터 센터들(502)로 기록될 수 있고, 우선 목록(519) 상의 더 높이 있는 데이터 센터들(502)로 데이터 핸드-오프를 통해 이동될 수 있으며, 결국 우선 목록(519) 상에 더 높이 있는 데이터 센터(502)로부터 판독할 수 있다. 이러한 방식으로, 우선 목록(519)의 최상위 M개 데이터 센터들에서 데이터 세트의 종국적인 일관성이 달성될 수 있다. 데이터 센터들(502)은 또한 공통으로 공유하는 범위들의 낮은 레벨의 데이터베이스 비교를 주기적으로 수행할 수 있으며, 이후에 비교 동안 탐지되는 임의의 차이(예컨대, 데이터 세트들의 손실된 복사본들로 인함)를 조정하기 위해 필요한 데이터 전송을 수행할 수 있다. 따라서, 데이터 세트 서비스(112)는 우선 목록(519)의 최상위 M개 데이터 센터들로 데이터 세트들의 가장 최신 버전들의 복사본들을 동적으로 이동하려고 발신 시도를 생성할 수 있다. 데이터 세트의 가장 최신 버전의 복사본들이 초기에는 우선 목록(519)의 더 낮은 데이터 센터들(502)에 복사되거나, 또는 다른 이유로 인해 최상위 M개 데이터 센터들 중 하나에서 손실되게 될 수 있을지라도, 복사 본들은 종국적으로 우선 목록(519)의 최상위 M개 데이터 센터들로 다시 이동하고, 종국적으로 최상위 M개 데이터 센터들에서 데이터 세트의 일관성을 결과할 수 있다.
단계(618)에서, 다양한 호스트들(130) 및 데이터 센터들(502)로부터 수신된 모든 데이터 세트들에 대한 버전 기록들은 다른 데이터 센터들로부터 수신된 데이터 세트들 사이의 일관성을 검사하기 위해 비교된다. 일 실시예에서, 버전 기록들은 벡터 클럭들이고, 도 16과 관련하여 상기 기재된 것과 같은 벡터 클럭 배치는 다른 데이터 센터들(502)에서 저장된 동일 데이터 세트의 다른 버전들 사이의 인과관계를 포착하기 위해 사용된다. 예를 들면, 모든 호스트(130)는 임의의 소정의 2개 호스트들(130)이 다른 센터들일지라도 서로 구별될 수 있도록, 보편적으로 고유한 <Host ID> 파라미터를 가질 수 있다. 이러한 구조에서, 데이터 버저닝을 수행하기 위해 사용되는 논리는 호스트들(130)이 다층 고리 배치 방식에 따라 조직되는 사실을 인식(또는 고려)할 필요는 없다. 다른 실시예에서, 데이터 버저닝은 하부 레벨 고리(184)의 레벨 및 상부 레벨 고리(504)의 레벨에서 별도로 수행된다. 이러한 실시예에서, 벡턱 클럭은 기록 동작을 조정하는 데이터 센터를 나타내는 <data center ID> 파라미터를 포함할 수 있다.
단계(620)에서, 도 24를 참조할 때, 데이터 세트는 원격 데이터 센터들에서 리프레시(refresh)된다. 일 실시예에서, 데이터 세트가 획득되면, 데이터 세트는 일정 시간 기간(본원에서는 "차용 시간") 동안 데이터 센터 DC1에 보유된다. 이어서, 추가적 판독 동작들은 차용 기간이 만료되지 않는 한 국소적으로 수행된다. 예 를 들면, 데이터 센터가 데이터 세트에 대한 판독을 수신할 때, 원격 데이터 센터들(502)로 판독 요청을 송신하지 않고 국소적 호스트(130)로부터 데이터 세트를 리턴한다. 기록 동작과 관련하여, 일 실시예에서, 기록 동작들은 이하 기재되는 것과 같이 메시지 필터(message filter)를 사용하여 제어될 수 있다. 다른 실시예에서, 기록 동작들은 판독 동작들에 대해 상기 기재된 것과 같이 동일한 차용 배치(lease arrangement)를 사용하여 수행될 수 있다. 다시 말해서, 데이터 세트에 대해 갱신을 수신할 때, 호스트(130)는 국소적으로 갱신을 수행하고, 차용의 만료가 있는 경우에만 다른 데이터 센터들(502)로 비동기적으로 갱신을 전달한다. 데이터 세트의 국소적 복사 상에서 동작하는 것에 의해, 사용자 컴퓨터(102)에서 경험되는 지연이 감소된다. 다른 실시예에서, 메시지 필터 또는 차용 배치 모두 사용되지 않고, 갱신들은 즉시 다른 데이터 센터들(502)로 전달된다.
예컨대 소매용 웹사이트와 같은 네트워크 서비스 환경에서, 차용 시간은 사용자 컴퓨터들(102)의 평균 세션(session) 시간에 기초하여 판단될 수 있고, 만일 사용자 컴퓨터(102)와의 세션이 활성(active)이면 확장될 수 있다. 그러나, 이 차용 시간 동안, 데이터 세트가 동시적으로 다수의 데이터 센터들에서 접속되고 있다면(예컨대, 만일 다수의 사용자 컴퓨터들(102)이 다른 데이터 센터들에서 동일 데이터 세트를 접속하고 있는 경우) 데이터 세트의 다른 복사본들이 발생하여 충돌 가능성이 있다. 이러한 상황에서, (도 24에 도시된 것과 같은) 국소적 복사본을 리프레시하고, 다른 데이터 센터들에 유지된 다른 복사본과 상기 국소적 복사본을 동기시키는 것이 바람직할 수 있다. 어느 정도 충돌이 다른 데이터 센터들(502)에 저 장된 데이터 세트에서 일어나면, 충돌이 데이터 세트 버전 조정 논리(136)에 의해 해결될 수 있다.
C. 메시지 필터 동작들
이제 도 25를 참조하면, 일 실시예에서, 예컨대 만일 데이터 센터들 내에 데이터 저장 비용이 네트워크 트래픽(예컨대, 피크(peak) 네트워크 트래픽, 평균 네트워크 트래픽 등)의 수준에 의해 영향받는다면 원하는 수준의 가용성이 부합되는 동안 데이터 센터들을 교차하여 통신 비용을 감소시키는 것이 바람직할 수 있다. 예를 들면, 다른 데이터 센터들로의 데이터 세트의 직접 전달을 방지하여 트래픽 버스트(traffic burst)를 평탄하게 하는 것이 바람직할 수 있다.
이 때문에, 데이터 센터들(502) 각각의 메시지 필터들(510)은 네트워크 트래픽을 변화시키기 위해 사용될 수 있다. 각각의 메시지 필터(510)는 대응하는 데이터 센터(502)에 논리적으로 집중될 수 있다. 메시지 필터(510)는 데이터 센터(502)내의 호스트들(130)로부터 기록 요청들을 수신하고 즉시 또는 지연되는 방식으로 기록 요청을 전달하도록 설정될 수 있다. 도 25에 도시된 것과 같이, 데이터 센터(502)는 버스트(552)가 있는 네트워크 트래픽을 생성한다. 메시지 필터(510)는 상기 버스트를 평탄하게 하고 네트워크 트래픽이 시간 기간 동안 확산되는 대역폭 윤곽(554)을 생성하도록 동작한다. 다른 예시로서, 메시지 필터(510)는 (벡터 클럭들의 분석에 기초하여) 데이터 세트의 오래된 버전들을 폐기하고, 데이터 세트의 가장 최신 버전만을 전송하도록 설정될 수 있다. 메시지 필터(510)는 또한 신뢰성 있는 메시지 스토리지 시스템으로서 동작하도록 설정될 수 있다. 예를 들면, 만일 데이터 센터(502)가 중지되거나 메시지(들)를 수신하도록 사용될 수 없다면, 메시지 필터(510)는 메시지를 저장하고, 데이터 센터(502)가 다시 연결될 때 그 메시지를 송신하도록 설정될 수 있다.
본 발명은 도면들을 참조하여 상기 기술되었다. 이 도면들은 본 발명의 시스템, 방법, 및 프로그램을 구현하는 특정 실시예들의 몇몇 상세부를 도시한다. 그러나, 도면으로 본 발명을 설명하는 것은 본 발명 상에 도면에 존재할 수 있는 임의의 제한들을 부여하는 것으로서 해석되어서는 안 된다. 동작을 달성하기 위한 방법, 시스템, 및 임의의 기계-판독가능 매체(machine-readable media) 상의 프로그램 제품들을 예상한다. 본 발명의 실시예들은 현존하는 컴퓨터 프로세서를 사용하여, 또는 이 목적 또는 다른 목적을 위해 통합된 특정 목적용 컴퓨터 프로세서에 의해, 또는 내장된(hardwired) 시스템에 의해 구현될 수 있다.
상기 기재된 바와 같이, 본 발명의 범위 내의 실시예들은 기계-실행가능(executalbe) 명령들 또는 저장된 데이터 구조를 운반하거나 갖는 기계-판독가능 매체를 포함하는 프로그램 제품을 포함한다. 이러한 기계-판독가능 매체는 범용 또는 특정 목적용 컴퓨터, 또는 프로세서를 갖는 다른 기계에 의해 접속될 수 있는 임의의 가용한 매체일 수 있다. 예시로서, 이러한 기계-판독가능 매체는 RAM, ROM, EPROM, EEPROM, CD-ROM 또는 기타 광 디스크 스토리지, 자기 디스크 스토리지 혹은 기타 자기 스토리지 장치, 또는 기계-실행가능 명령들 또는 데이터 구조의 형태의 원하는 프로그램 코드를 운반 또는 저장하도록 사용될 수 있고 범용 또는 특정 목적용 컴퓨터 또는 프로세서가 있는 기타 기계에 의해 접속될 수 있는 임의의 기타 매체를 포함할 수 있다. 정보가 네트워크 또는 다른 통신 연결 상에서 기계로 전달 또는 제공될 때(유선, 무선, 또는 유선 혹은 무선의 결합), 이 기계는 이 연결을 기계-판독가능 매체로서 적절히 간주한다. 따라서, 임의의 이러한 연결은 기계-판독가능 매체로 적절히 불린다. 상기 결합은 또한 기계-판독가능 매체의 범위 내에 포함된다. 기계-실행가능 명령은 예를 들면 범용 컴퓨터, 특정 목적용 컴퓨터, 또는 특정 목적 프로세싱 기계가 특정 함수나 함수들의 그룹을 수행하게 하는 명령 및 데이터를 포함한다.
본 발명의 실시예들은 예컨대 네트워크 환경에서 기계들에 의해 실행되는 프로그램 모듈의 형태의 프로그램 코드와 같은 기계-실행가능 명령들을 포함하는 프로그램 제품에 의해 일 실시예에서 구현될 수 있는 방법 단계들의 일반적 배경에서 설명된다. 일반적으로, 프로그램 모듈들은 특정 작업들을 수행하거나 특정 추상 데이터 유형들을 구현하는 루틴(routine), 프로그램, 객체(object), 구성 요소(component), 데이터 구조 등을 포함한다. 데이터 구조 및 프로그램 모듈과 연관된 기계-실행가능 명령들은 본원에 기재된 방법들의 단계들을 실행하기 위한 프로그램 코드의 예시를 표현한다. 그러한 실행가능 명령들 또는 연관된 데이터 구조들의 특정 시퀀스는 그러한 단계들에 기재된 기능들을 구현하기 위해 대응하는 동작의 예시들을 표현한다.
본 발명의 실시예들은 프로세스들을 갖는 하나 또는 그 이상의 원격 컴퓨터 들로 논리적 연결을 사용하여 네트워크 환경에서 실시될 수 있다. 논리적 연결은 제한하기 위함이 아닌 예시로서 본원에 기재되는 LAN(local area network) 및 WAN을 포함할 수 있다. 그러한 네트워킹(networking) 환경은 사무실 전체 또는 회사 전체 컴퓨터 네트워크, 인트라넷, 및 인터넷에서 평범한 것이며, 광범위한 다양한 통신 프로토콜들을 사용할 수 있다. 당해 기술의 숙련되 자는 네트워크 컴퓨팅 환경이 개인용 컴퓨터, 핸드-헬드 장치, 다중-프로세서(multi-processor) 시스템, 마이크로프로세서 기반 혹은 프로그램가능한 소비자 장치, 네트워크 PC, 서버, 미니컴퓨터, 메인프레임(mainframe) 컴퓨터 등을 포함하는 다수의 유형의 컴퓨터 시스템 설정을 통상적으로 포함할 것이다. 따라서, 도 1에 도시된 사용자 컴퓨터(102)는 데스크톱 컴퓨터, 랩톱 컴퓨터, 셋톱 박스, PDA, 셀룰러 전화, 매체 재생기, 웹 패드(web pad), 태플릿(tablet) 등에 제한되지 않고 이들을 포함할 수 있다. 본 발명의 실시예들은 또한 작업들이 통신 네트워크를 통해 (유선 링크, 무선 링크 중 어느 하나에 의해, 또는 유선 혹은 무선 링크의 결합에 의해) 연결되는 국소적(local) 또는 원격 프로세싱 장치들에 의해 수행되는 분산형 컴퓨팅 환경에서 실시될 수 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈은 국소적 및 원격 메모리 스토리지 장치 모두에 위치될 수 있다.
본 발명의 전체 시스템 또는 일부분을 구현하기 위한 예시적인 시스템은 프로세싱 유닛, 시스템 메모리, 및 시스템 메모리를 포함하는 다양한 시스템 구성 요소들을 프로세싱 유닛에 결합하는 시스템 버스를 포함하는 컴퓨터의 형태의 범용 컴퓨팅 장치를 포함할 수도 있다. 시스템 메모리는 ROM 및 RAM을 포함할 수 있다. 컴퓨터는 또한 자기 하드 디스크로부터 판독하거나 여기에 기록하기 위한 자기 하드 디스크, 삭제가능한 자기 디스크로부터 판독하거나 여기에 기록하기 위한 자기 디스크 드라이브, 및 CD-ROM 또는 기타 광 매체와 같은 삭제가능한 광 디스크로부터 판독하거나 여기에 기록하기 위한 광 디스크 드라이브를 포함할 수 있다. 드라이브들 및 이들에 연관된 기계-판독가능 매체는 기계-실행가능 명령, 데이터 구조, 프로그램 모듈, 및 컴퓨터를 위한 기타 데이터의 비휘발성 스토리지를 제공한다.
본원에 제공되는 흐름도가 방법 단계의 특정 순서를 도시할지라도, 이 단계들의 순서는 도시된 것과 다를 수 있다는 것이 인정된다는 것을 주목해야 한다. 또한 2개 이상의 단계들은 동시에 또는 부분적으로 동시에 수행될 수 있다. 이러한 변형은 선택된 소프트웨어 및 하드웨어에 의존하거나, 설계자의 선택에 의존할 수 있다. 이러한 변형들은 본 발명의 범위 내에 있다는 것이 인정된다. 마찬가지로, 본 발명의 소프트웨어 및 웹 구현은 다양한 데이터베이스 검색 단계, 상관 단계, 비교 단계, 및 결정 단계를 달성하기 위해 규칙 기반 논리 및 기타 논리를 가진 표준 프로그래밍 기술로 달성될 수 있다. 상세한 설명과 청구범위에서 사용되는 단어 "엔진"은 소프트웨어 코드의 하나 또는 그 이상의 줄(line)들, 및/또는 하드웨어 구현, 및/또는 수동 입력 수신을 위한 장비를 사용하는 구현을 포함하도록 의도된다. 엔진, 인터페이스, 데이터베이스, 브라우저(browser) 등과 같은 구성 요소들은 서로 통신될 수 있는데, 이는 이러한 구성 요소들이 통합된 방식으로 제공되어 이들이 네트워크와 같은 통신 링크를 통해 서로 통신하는 등의 이유 때문일 수 있다.
전술한 본 발명의 상세한 설명은 설명과 묘사의 목적으로 제공되었다. 기재 된 정확한 형태로 본 발명을 규명해내거나 제한하기 위해 의도되지 않고, 수정 및 변형은 상기 사상에 비추어 가능하며, 또는 본 발명의 실시로부터 획득될 수 있다. 실시예들은 본 발명의 원칙들을 설명하기 위해 선택되고 설명되었으며, 본 발명의 실시 응용은 당해 기술의 숙련자가 숙고하여 특정 사용에 적합한 다양한 수정 및 다양한 실시예로 본 발명을 활용하는 것을 가능하게 한다.
Claims (37)
- 컴퓨터로 구현되는 데이터 스토리지 시스템(computer-implemented data storage system)에 있어서,프로세서; 및상기 시스템이 데이터 스토리지(data storage)를 제공하도록 구성하는 하나 또는 그 이상의 컴퓨터-실행가능(computer-executable) 논리 구성요소들을 포함하는 메모리를 포함하고,상기 컴퓨터-실행가능 논리 구성요소들은,고리형 토폴로지(ring topology)에 대응하는 복수의 데이터 센터들에, 그리고 상기 복수의 데이터 센터들 내의 복수의 호스트들에 복수의 데이터 세트들을 저장하기 위한 책임(responsibility)을 맵핑(map)하도록 구성된 맵핑 논리부(mapping logic);상기 복수의 데이터 센터들의 제 1 부분집합(subset) 내의 상기 복수의 호스트들의 제 1 부분집합에, 데이터 세트의 제 1 복수의 복사본들(copies)을 기록하도록 구성된 데이터 세트 복사(replication) 논리부로서, 상기 복수의 호스트들의 상기 제 1 부분집합은 상기 데이터 세트를 위한 우선 목록에 대응하고, 상기 복수의 데이터 센터들의 제 1 부분집합은 상기 고리형 토폴로지 상의 사전에 결정된 위치에 의해 식별되고, 복수-부분 키의 함수로서 식별되는 상기 사전에 결정된 위치는 상기 데이터 세트에 대응하는, 상기 데이터 세트 복사 논리부;상기 복수의 데이터 센터들의 제 2 부분집합(subset) 내의 상기 복수의 호스트들의 제 2 부분집합에서 상기 데이터 세트의 제 2 복수의 복사본들(copies)을 판독함으로써 상기 데이터 세트의 단일 복사본을 제공하기 위한 요청에 응답하도록 구성된 데이터 세트 검색(retrieval) 논리부로서, 상기 복수의 호스트들의 상기 제 2 부분집합은 상기 데이터 세트를 위한 우선 목적에 대응하는, 데이터 세트 검색 논리부; 및상기 데이터 세트의 단일 복사본을 제공하기 위하여, 상기 데이터 세트의 제 2 복수의 복사본들 사이의 인과관계들을 평가하도록 구성된 데이터 세트 비교 논리부를 포함하고,인과관계들의 상기 평가는,상기 데이터 세트의 상기 제 2 복수의 복사본들 중의 복사본들로서, 상기 데이터 세트의 상기 제 2 복수의 복사본들 중의 다른 복사본들의 인과적 선행들이 아닌 복사본들에 내정된 순서 지정을 적용하는 것;상기 데이터 세트의 상기 제 2 복수의 복사본들 중의 복사본들로서, 상기 데이터 세트의 상기 제 2 복수의 복사본들 중의 다른 복사본들의 인과적 선행들이 아닌 복사본들을 병합하는 것; 및상기 데이터 세트의 상기 제 2 복수의 복사본들 중의 복사본들로서, 상기 데이터 세트의 상기 제 2 복수의 복사본들 중의 다른 복사본들의 인과적 선행들이 아닌 복사본들 사이의 비일관성들에 특정한 조정 알고리즘을 적용하는 것 중의 적어도 하나를 포함하고,상기 데이터 세트를 기록하기 위한 상기 복수의 호스트들의 상기 제 1 부분집합과, 상기 데이터 세트를 판독하기 위한 상기 복수의 호스트들의 상기 제 2 부분집합은 독립적으로 결정되는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 스토리지 시스템.
- 청구항 1에 있어서,상기 맵핑 논리부는 해시 함수(hash function)에 기초하여 해시 값을 생성하도록 구성된 논리부를 포함하고, 개개의 데이터 센터들이 해시 범위의 다수의 다른 부분들 내에 상기 복수의 데이터 세트들의 부분집합들을 저장하는 책임을 갖도록, 상기 복수의 데이터 센터들 각각은 상기 해시 함수의 상기 해시 범위 내에 다수의 위치들을 갖는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 스토리지 시스템.
- 청구항 2에 있어서,상기 해시 값은 제 1 해시 값이고, 상기 해시 함수는 제 1 해시 함수이며, 상기 해시 범위는 제 1 해시 범위이고, 상기 맵핑 논리부는 제 2 해시 범위 내의 제 2 해시 함수에 기초하여 제 2 해시 값을 생성하도록 구성된 논리부를 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 스토리지 시스템.
- 청구항 3에 있어서,개개의 데이터 센터들이 상기 제 2 해시 범위의 다수의 다른 부분들 내에 상기 복수의 데이터 세트들의 부분집합들을 저장하기 위한 책임을 갖도록, 상기 데이터 센터들 각각은 상기 제 2 해시 범위 내에 다수의 위치들을 갖는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 스토리지 시스템.
- 청구항 1에 있어서,데이터 차용(lease)의 만료 이후에 상기 데이터 세트의 다른 복사본들을 갱신하도록 구성된 차용 논리부를 더 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 스토리지 시스템.
- 청구항 1에 있어서,상기 데이터 세트 검색 논리부는 상기 데이터 세트의 상기 제 2 복사본들을 프리패치(pre-fetch)하도록 구성된 것을 특징으로 하는 컴퓨터로 구현되는 데이터 스토리지 시스템.
- 청구항 1에 있어서,상기 데이터 세트 비교 논리부는 상기 데이터 세트의 상기 제 2 복사본들의 각각에 따라 저장된 버전 기록들에 기초하여 상기 인과관계들을 평가하도록 구성되고, 상기 버전 기록들은 각각의 해시 기록들 및 각각의 벡터 클럭들 중의 적어도 하나를 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 스토리지 시스템.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 프로세서가 다음의 단계들을 실행하도록 하는 컴퓨터로 구현되는 데이터 프로세싱 방법에 있어서,각각의 데이터 세트에 대응하는 복수-부분 키를 위한 제 1 및 제 2 해시 함수들을 이용하여, 고리형 토폴로지에 대응하는 복수의 데이터 센터들에서 그리고 상기 복수의 데이터 센터들 내의 복수의 호스트들에서 복수의 데이터 세트들을 저장하는 책임(responsibility)을 맵핑(mapping)하는 단계로서, 상기 제 1 해시 함수는 상기 복수의 데이터 센터들 중의 선택된 데이터 센터들에서 상기 복수의 데이터 세트들을 저장하기 위한 책임을 맵핑하고 상기 복수-부분 키의 제 1 부분을 입력으로서 이용하고, 상기 제 2 해시 함수는 상기 선택된 데이터 센터들 내의 상기 복수의 호스트들 중의 선택된 호스트들에서 상기 복수의 데이터 세트들을 저장하기 위한 책임을 맵핑하고 상기 복수-부분 키의 제 2 부분을 입력으로서 이용하는, 상기 맵핑하는 단계;상기 데이터 세트의 복수의 복사본들(copies) 각각에 대한 버전 기록(version history)을 기록하는 단계를 포함하며, 상기 복수의 데이터 센터들의 부분집합의 사전에 결정된 위치에 기초하여, 상기 복수의 데이터 센터들의 부분집합에서 데이터 세트의 복수의 복사본들을 저장하는 단계; 및상기 데이터 세트의 상기 복수의 복사본들 각각에 대한 버전 기록들에 기초하여 상기 데이터 세트의 복사본들 사이의 인과관계들을 평가하는 단계를 포함하고,인과관계들의 상기 평가는,상기 데이터 세트의 상기 복수의 복사본들 중의 복사본들로서, 상기 데이터 세트의 상기 복수의 복사본들 중의 다른 복사본들의 인과적 선행들이 아닌 복사본들에 내정된 순서 지정을 적용하는 것;상기 데이터 세트의 상기 복수의 복사본들 중의 복사본들로서, 상기 데이터 세트의 상기 복수의 복사본들 중의 다른 복사본들의 인과적 선행들이 아닌 복사본들을 병합하는 것, 및상기 데이터 세트의 상기 복수의 복사본들 중의 복사본들로서, 상기 데이터 세트의 상기 복수의 복사본들 중의 다른 복사본들의 인과적 선행들이 아닌 복사본들 사이의 비일관성들에 특정한 조정 알고리즘을 적용하는 것 중의 적어도 하나를 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 프로세싱 방법(computer-implemented data processing method).
- 청구항 16에 있어서,상기 기록하는 단계는 상기 복수의 데이터 센터들의 부분집합의 우선 목록(preference list)에 따라 수행되고, 상기 우선 목록은 해시 함수(hash function)에 기초하는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 프로세싱 방법.
- 청구항 17에 있어서,해시 키(key) 및 상기 해시 함수에 기초하여 해시 값을 생성하는 단계를 더 포함하고, 상기 해시 키는 상기 데이터 세트와 연관되며 상기 해시 함수에 대한 입력으로서 적용되고, 상기 해시 함수는 상기 복수의 데이터 세트들을 저장하기 위한 책임을 맵핑하고, 상기 복수의 데이터 센터들의 부분집합은 상기 해시 값에 기초하여, 그리고 다른 데이터 센터들이 이용불가능한지 여부에 기초하여, 상기 데이터 세트를 저장하도록 선택되는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 프로세싱 방법.
- 청구항 18에 있어서,개개의 데이터 센터들이 상기 고리형 토폴로지 내의 다수의 위치들에 대응하는 상기 해시 범위의 다수의 다른 부분들 내에 상기 복수의 데이터 세트들의 부분집합들을 저장하기 위한 책임을 갖도록, 상기 데이터 센터들 각각은 상기 해시 범위 내의 상기 해시 값에 기초하여 사전에 결정된 위치를 갖는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 프로세싱 방법.
- 청구항 16에 있어서,상기 저장하는 단계는 우선 목록(preference list)에 따라 수행되며, 상기 우선 목록은 상기 데이터 세트의 복수의 복사본들이 저장되는 데이터 센터들의 순위(ranking)를 제공하며, 미리 할당된 값은 상기 기록하는 단계가 수행될 상기 우선 목록 내의 데이터 센터들의 수를 결정하고,상기 방법은, 제 2 데이터 센터가 이용가능하게 된 이후에, 제 1 데이터 센터로부터 제 2 데이터 센터로 상기 데이터 세트의 상기 복수의 복사본들 중 하나를 이동하는 단계를 더 포함하고, 상기 제 2 데이터 센터는 상기 제 1 데이터 센터보다 상기 우선 목록 상 더 높이 있는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 프로세싱 방법.
- 청구항 16에 있어서,상기 복수의 데이터 센터들은 네트워크를 거쳐서 사용자들에게 접속가능한 네트워크 서비스 시스템을 구현하고, 상기 네트워크 서비스 시스템은 상기 사용자들에게 접속가능한 웹사이트(website)를 제공하는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 프로세싱 방법.
- 청구항 21에 있어서,상기 웹사이트는 상업용 웹사이트이고, 상기 데이터 세트는 상기 사용자들 중 1인을 위한 쇼핑 카트(shopping cart)에 대한 쇼핑 카트 데이터를 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 데이터 프로세싱 방법.
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/508,129 | 2006-08-22 | ||
US11/508,129 US7925624B2 (en) | 2006-03-31 | 2006-08-22 | System and method for providing high availability data |
PCT/US2007/076535 WO2008024850A2 (en) | 2006-08-22 | 2007-08-22 | System and method for providing high availability data |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20090085572A KR20090085572A (ko) | 2009-08-07 |
KR101429555B1 true KR101429555B1 (ko) | 2014-08-12 |
Family
ID=39107643
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020097005859A KR101429555B1 (ko) | 2006-08-22 | 2007-08-22 | 고 가용성 데이터를 제공하기 위한 시스템 및 방법 |
Country Status (5)
Country | Link |
---|---|
US (5) | US7925624B2 (ko) |
EP (1) | EP2062125B1 (ko) |
JP (4) | JP5426380B2 (ko) |
KR (1) | KR101429555B1 (ko) |
WO (1) | WO2008024850A2 (ko) |
Families Citing this family (123)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GT199800127A (es) * | 1997-08-29 | 2000-02-01 | Combinaciones terapeuticas. | |
US7925624B2 (en) | 2006-03-31 | 2011-04-12 | Amazon Technologies, Inc. | System and method for providing high availability data |
US7707136B2 (en) | 2006-03-31 | 2010-04-27 | Amazon Technologies, Inc. | System and method for providing high availability data |
US7660952B2 (en) * | 2007-03-01 | 2010-02-09 | International Business Machines Corporation | Data bus bandwidth scheduling in an FBDIMM memory system operating in variable latency mode |
US8028257B2 (en) * | 2007-03-01 | 2011-09-27 | International Business Machines Corporation | Structure for data bus bandwidth scheduling in an FBDIMM memory system operating in variable latency mode |
US8930522B2 (en) * | 2007-06-29 | 2015-01-06 | Alcatel Lucent | Replica/cache locator, an overlay network and a method to locate replication tables and caches therein |
US8255916B2 (en) * | 2008-04-10 | 2012-08-28 | Hewlett-Packard Development Company, L.P. | Apparatus, and associated method, for allocating processing amongst data centers |
US9372900B2 (en) * | 2008-08-08 | 2016-06-21 | Adobe Systems Incorporated | Method and system for processing measurement data for website statistics |
GB0817022D0 (en) | 2008-09-17 | 2008-10-22 | Sage Technologies Ltd | Information synchronisation |
US8260742B2 (en) * | 2009-04-03 | 2012-09-04 | International Business Machines Corporation | Data synchronization and consistency across distributed repositories |
US8316213B1 (en) | 2009-07-31 | 2012-11-20 | Amazon Technologies, Inc. | Management of object mapping information corresponding to a distributed storage system |
US8639724B1 (en) * | 2009-07-31 | 2014-01-28 | Amazon Technologies, Inc. | Management of cached object mapping information corresponding to a distributed storage system |
US8285925B1 (en) | 2009-07-31 | 2012-10-09 | Amazon Technologies, Inc. | Management of object mapping information corresponding to a distributed storage system |
US8621182B1 (en) | 2009-07-31 | 2013-12-31 | Amazon Technologies, Inc. | Management of object mapping information corresponding to a distributed storage system |
US8521771B1 (en) | 2009-07-31 | 2013-08-27 | Amazon Technologies, Inc. | Management of class-associated object mapping information corresponding to a distributed storage system |
US9395933B2 (en) | 2009-09-01 | 2016-07-19 | Nec Corporation | Distributed storage system, distributed storage method, and program and storage node for distributed storage |
US8914457B2 (en) * | 2009-10-06 | 2014-12-16 | Red Hat, Inc. | Caching of nodes in cache cluster |
GB0920644D0 (en) * | 2009-11-25 | 2010-01-13 | Geniedb | System for improved record consistency and availability |
US8756192B2 (en) * | 2010-01-07 | 2014-06-17 | Microsoft Corporation | Dispatching conflicting data changes |
WO2011099904A1 (en) * | 2010-02-12 | 2011-08-18 | Telefonaktiebolaget L M Ericsson (Publ) | Trust discovery in a communications network |
US9015126B2 (en) | 2010-05-22 | 2015-04-21 | Nokia Corporation | Method and apparatus for eventually consistent delete in a distributed data store |
JP2012018487A (ja) * | 2010-07-06 | 2012-01-26 | Fujitsu Ltd | ノード決定プログラム、ノード決定装置およびノード決定方法 |
JP2017010569A (ja) * | 2010-10-22 | 2017-01-12 | 株式会社インテック | 分散型データベースシステムおよび分散型データ処理システム |
CN102479155B (zh) * | 2010-11-30 | 2014-07-02 | 国际商业机器公司 | 用于网络应用服务器***的内存过载管理的方法和*** |
US8874505B2 (en) * | 2011-01-11 | 2014-10-28 | Hitachi, Ltd. | Data replication and failure recovery method for distributed key-value store |
WO2012103463A1 (en) * | 2011-01-28 | 2012-08-02 | Etsy, Inc. | Systems and methods for shopping in an electronic commerce environment |
US10650399B2 (en) | 2011-01-28 | 2020-05-12 | Etsy, Inc. | Systems and methods for shopping in an electronic commerce environment |
WO2012103920A1 (en) * | 2011-01-31 | 2012-08-09 | Telefonaktiebolaget L M Ericsson (Publ) | Distributed database |
US20140372516A1 (en) * | 2011-02-02 | 2014-12-18 | Imvu Inc. | System and method for providing a scalable translation between polling-based clients and connection-based message queues |
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 |
EP2500848A1 (en) | 2011-03-15 | 2012-09-19 | Amadeus S.A.S. | Method and system for centralized reservation context management on multi-server reservation system |
EP2500856A1 (en) | 2011-03-15 | 2012-09-19 | Amadeus S.A.S. | Method and system for providing a session involving a plurality of software applications |
ES2689112T3 (es) * | 2011-03-15 | 2018-11-08 | Amadeus S.A.S. | Método y sistema para mecanismo de sincronización en sistema de reservas de múltiples servidores |
JP2012221419A (ja) * | 2011-04-13 | 2012-11-12 | Hitachi Ltd | 情報記憶システム及びそのデータ複製方法 |
US8650324B2 (en) * | 2011-04-27 | 2014-02-11 | Skype | System and method for reliable distributed communication with guaranteed service levels |
US9235620B2 (en) | 2012-08-14 | 2016-01-12 | Amadeus S.A.S. | Updating cached database query results |
EP2541473A1 (en) | 2011-06-27 | 2013-01-02 | Amadeus S.A.S. | Method and system for a pre-shopping reservation system with increased search efficiency |
JP5664467B2 (ja) * | 2011-06-13 | 2015-02-04 | 富士通株式会社 | 検索プログラム、検索方法、検索装置、およびノード |
US8683008B1 (en) | 2011-08-04 | 2014-03-25 | Google Inc. | Management of pre-fetched mapping data incorporating user-specified locations |
JP5733124B2 (ja) * | 2011-09-12 | 2015-06-10 | 富士通株式会社 | データ管理装置、データ管理システム、データ管理方法、及びプログラム |
US8280414B1 (en) | 2011-09-26 | 2012-10-02 | Google Inc. | Map tile data pre-fetching based on mobile device generated event analysis |
US8204966B1 (en) | 2011-09-26 | 2012-06-19 | Google Inc. | Map tile data pre-fetching based on user activity analysis |
US8930320B2 (en) | 2011-09-30 | 2015-01-06 | Accenture Global Services Limited | Distributed computing backup and recovery system |
US9275374B1 (en) | 2011-11-15 | 2016-03-01 | Google Inc. | Method and apparatus for pre-fetching place page data based upon analysis of user activities |
US8711181B1 (en) | 2011-11-16 | 2014-04-29 | Google Inc. | Pre-fetching map data using variable map tile radius |
US9063951B1 (en) | 2011-11-16 | 2015-06-23 | Google Inc. | Pre-fetching map data based on a tile budget |
US8886715B1 (en) | 2011-11-16 | 2014-11-11 | Google Inc. | Dynamically determining a tile budget when pre-fetching data in a client device |
JP5759881B2 (ja) * | 2011-12-08 | 2015-08-05 | 株式会社日立ソリューションズ | 情報処理システム |
US9305107B2 (en) | 2011-12-08 | 2016-04-05 | Google Inc. | Method and apparatus for pre-fetching place page data for subsequent display on a mobile computing device |
US9197713B2 (en) | 2011-12-09 | 2015-11-24 | Google Inc. | Method and apparatus for pre-fetching remote resources for subsequent display on a mobile computing device |
US8803920B2 (en) | 2011-12-12 | 2014-08-12 | Google Inc. | Pre-fetching map tile data along a route |
US9389088B2 (en) | 2011-12-12 | 2016-07-12 | Google Inc. | Method of pre-fetching map data for rendering and offline routing |
JP5845877B2 (ja) | 2011-12-20 | 2016-01-20 | 富士通株式会社 | 情報処理装置、データ制御方法およびデータ制御プログラム |
JP5723309B2 (ja) * | 2012-03-05 | 2015-05-27 | 日本電信電話株式会社 | サーバおよびプログラム |
US8832234B1 (en) | 2012-03-29 | 2014-09-09 | Amazon Technologies, Inc. | Distributed data storage controller |
US8930364B1 (en) * | 2012-03-29 | 2015-01-06 | Amazon Technologies, Inc. | Intelligent data integration |
US8918392B1 (en) | 2012-03-29 | 2014-12-23 | Amazon Technologies, Inc. | Data storage mapping and management |
US8935203B1 (en) | 2012-03-29 | 2015-01-13 | Amazon Technologies, Inc. | Environment-sensitive distributed data management |
JP6055197B2 (ja) * | 2012-04-06 | 2016-12-27 | 日本電信電話株式会社 | データベースシステム |
US9332387B2 (en) | 2012-05-02 | 2016-05-03 | Google Inc. | Prefetching and caching map data based on mobile network coverage |
US8788468B2 (en) * | 2012-05-24 | 2014-07-22 | International Business Machines Corporation | Data depulication using short term history |
US9002939B2 (en) * | 2012-06-03 | 2015-04-07 | International Business Machines Corporation | Adaptive and dynamic replication management in cloud computing |
US8925059B2 (en) * | 2012-06-08 | 2014-12-30 | Lockheed Martin Corporation | Dynamic trust connection |
US8948177B2 (en) | 2012-07-30 | 2015-02-03 | Hewlett-Packard Development Company, L.P. | Policy based routing |
US8849942B1 (en) | 2012-07-31 | 2014-09-30 | Google Inc. | Application programming interface for prefetching map data |
JP5969315B2 (ja) * | 2012-08-23 | 2016-08-17 | 日本電信電話株式会社 | データ移行処理システムおよびデータ移行処理方法 |
US9268784B1 (en) | 2012-09-19 | 2016-02-23 | Emc Corporation | Content-aware distributed deduplicating storage system based on locality-sensitive hashing |
US8918372B1 (en) * | 2012-09-19 | 2014-12-23 | Emc Corporation | Content-aware distributed deduplicating storage system based on consistent hashing |
WO2014077918A1 (en) * | 2012-11-19 | 2014-05-22 | Board Of Regents, The University Of Texas System | Robustness in a scalable block storage system |
US9547858B2 (en) | 2012-11-28 | 2017-01-17 | Bank Of America Corporation | Real-time multi master transaction |
US20140164175A1 (en) * | 2012-12-11 | 2014-06-12 | Rawllin International Inc. | Shopping cart list |
CN104052611B (zh) * | 2013-03-12 | 2017-04-19 | 华中科技大学 | 一种云存储***数据可用性维护方法及其装置 |
JP6028850B2 (ja) | 2013-03-13 | 2016-11-24 | 日本電気株式会社 | データ多重化システム |
US11841844B2 (en) * | 2013-05-20 | 2023-12-12 | Amazon Technologies, Inc. | Index update pipeline |
US9304815B1 (en) | 2013-06-13 | 2016-04-05 | Amazon Technologies, Inc. | Dynamic replica failure detection and healing |
JP2015108927A (ja) * | 2013-12-04 | 2015-06-11 | 日本電気株式会社 | 情報処理装置、データ同期方法及びプログラム |
US10102228B1 (en) | 2014-02-17 | 2018-10-16 | Amazon Technologies, Inc. | Table and index communications channels |
US10216768B1 (en) | 2014-02-17 | 2019-02-26 | Amazon Technologies, Inc. | Table and index communications channels |
US9547706B2 (en) * | 2014-03-10 | 2017-01-17 | Dropbox, Inc. | Using colocation hints to facilitate accessing a distributed data storage system |
JP6361254B2 (ja) * | 2014-04-15 | 2018-07-25 | 日本電気株式会社 | オブジェクト配置装置、オブジェクト配置方法、及び、プログラム |
US10210171B2 (en) * | 2014-06-18 | 2019-02-19 | Microsoft Technology Licensing, Llc | Scalable eventual consistency system using logical document journaling |
US9424151B2 (en) | 2014-07-02 | 2016-08-23 | Hedvig, Inc. | Disk failure recovery for virtual disk with policies |
US9558085B2 (en) | 2014-07-02 | 2017-01-31 | Hedvig, Inc. | Creating and reverting to a snapshot of a virtual disk |
US9483205B2 (en) * | 2014-07-02 | 2016-11-01 | Hedvig, Inc. | Writing to a storage platform including a plurality of storage clusters |
US9798489B2 (en) | 2014-07-02 | 2017-10-24 | Hedvig, Inc. | Cloning a virtual disk in a storage platform |
US10067722B2 (en) | 2014-07-02 | 2018-09-04 | Hedvig, Inc | Storage system for provisioning and storing data to a virtual disk |
US9875063B2 (en) | 2014-07-02 | 2018-01-23 | Hedvig, Inc. | Method for writing data to a virtual disk using a controller virtual machine and different storage and communication protocols |
US9864530B2 (en) | 2014-07-02 | 2018-01-09 | Hedvig, Inc. | Method for writing data to virtual disk using a controller virtual machine and different storage and communication protocols on a single storage platform |
US9544837B2 (en) * | 2014-07-29 | 2017-01-10 | Time Warner Cable Enterprises Llc | Communication management and targeted message delivery |
US9800575B1 (en) | 2014-09-24 | 2017-10-24 | Ebay Inc. | Assigning storage responsibility in a distributed data storage system with replication |
US11095715B2 (en) | 2014-09-24 | 2021-08-17 | Ebay Inc. | Assigning storage responsibility in a distributed data storage system with replication |
US9754002B2 (en) * | 2014-10-07 | 2017-09-05 | Excalibur Ip, Llc | Method and system for providing a synchronization service |
US9438534B2 (en) * | 2014-10-14 | 2016-09-06 | Telefonaktiebolaget Lm Ericsson (Publ) | Method and system for data set migration over a circuit switching network |
US10223394B1 (en) * | 2015-03-24 | 2019-03-05 | Amazon Technologies, Inc. | Data reconciliation |
JP6459702B2 (ja) * | 2015-03-26 | 2019-01-30 | 日本電気株式会社 | データベースシステム、情報記憶方法、プログラム |
US9348880B1 (en) * | 2015-04-01 | 2016-05-24 | Palantir Technologies, Inc. | Federated search of multiple sources with conflict resolution |
US9881176B2 (en) | 2015-06-02 | 2018-01-30 | ALTR Solutions, Inc. | Fragmenting data for the purposes of persistent storage across multiple immutable data structures |
US10121019B2 (en) * | 2015-06-02 | 2018-11-06 | ALTR Solutions, Inc. | Storing differentials of files in a distributed blockchain |
JP6499038B2 (ja) * | 2015-08-04 | 2019-04-10 | 株式会社東芝 | ストレージ管理装置、方法、及びストレージシステム |
JP6627323B2 (ja) * | 2015-08-18 | 2020-01-08 | 富士通株式会社 | 情報処理装置、情報処理システム、情報処理方法及び情報処理プログラム |
US10324919B2 (en) * | 2015-10-05 | 2019-06-18 | Red Hat, Inc. | Custom object paths for object storage management |
US11226985B2 (en) * | 2015-12-15 | 2022-01-18 | Microsoft Technology Licensing, Llc | Replication of structured data records among partitioned data storage spaces |
US10248174B2 (en) | 2016-05-24 | 2019-04-02 | Hedvig, Inc. | Persistent reservations for virtual disk using multiple targets |
JP6674099B2 (ja) * | 2016-06-10 | 2020-04-01 | 富士通株式会社 | 情報管理プログラム、情報管理方法、及び情報管理装置 |
US10698780B2 (en) * | 2016-08-05 | 2020-06-30 | Nutanix, Inc. | Implementing availability domain aware replication policies |
US10701176B1 (en) * | 2016-09-23 | 2020-06-30 | Amazon Technologies, Inc. | Messaging using a hash ring with host groups |
US10341434B2 (en) * | 2017-05-22 | 2019-07-02 | Oath Inc. | Method and system for high availability topology for master-slave data systems with low write traffic |
CN108427694A (zh) * | 2017-06-08 | 2018-08-21 | 国云科技股份有限公司 | 一种微信小程序平台批量删除购物车数据的方法 |
US10474377B2 (en) * | 2017-07-06 | 2019-11-12 | Facebook, Inc. | Optimizing data writes in a distributed computing system |
CN108256348B (zh) * | 2017-11-30 | 2021-08-20 | 深圳大学 | 一种密文搜索结果验证方法及其*** |
US10848468B1 (en) | 2018-03-05 | 2020-11-24 | Commvault Systems, Inc. | In-flight data encryption/decryption for a distributed storage platform |
US11392610B2 (en) | 2018-10-05 | 2022-07-19 | Red Hat, Inc. | Scalable object storage with intelligent replication |
US10855757B2 (en) | 2018-12-19 | 2020-12-01 | At&T Intellectual Property I, L.P. | High availability and high utilization cloud data center architecture for supporting telecommunications services |
US11429576B2 (en) * | 2019-07-23 | 2022-08-30 | Macrometa Corporation | Methods and systems for garbage deletion in a document database |
EP3790224A1 (en) * | 2019-09-04 | 2021-03-10 | I25S ApS | Sparsed merkle tree method and system for processing sets of data for storing and keeping track of the same in a specific network |
US11509717B2 (en) | 2019-11-13 | 2022-11-22 | Microsoft Technology Licensing, Llc | Cross datacenter read-write consistency in a distributed cloud computing platform |
WO2021106228A1 (ja) | 2019-11-30 | 2021-06-03 | 合同会社Ysコーポレーション | 緩み止めナット |
US11494394B2 (en) * | 2019-12-30 | 2022-11-08 | Paypal, Inc. | Data versioning in a multi-datacenter topology |
US11301473B1 (en) * | 2021-06-18 | 2022-04-12 | Sas Institute Inc. | Dataset overlap query system |
US11843663B1 (en) * | 2023-01-03 | 2023-12-12 | Huawei Cloud Computing Technologies Co., Ltd. | Vector-scalar logical clock and associated method, apparatus and system |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5924096A (en) | 1997-10-15 | 1999-07-13 | Novell, Inc. | Distributed database using indexed into tags to tracks events according to type, update cache, create virtual update log on demand |
US6047323A (en) | 1995-10-19 | 2000-04-04 | Hewlett-Packard Company | Creation and migration of distributed streams in clusters of networked computers |
JP2004157793A (ja) * | 2002-11-07 | 2004-06-03 | Fuji Photo Film Co Ltd | コンテンツ共有システム |
JP2006195744A (ja) * | 2005-01-13 | 2006-07-27 | Brother Ind Ltd | 情報配信システム、配信要求プログラム、転送プログラム、配信プログラム等 |
Family Cites Families (43)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH021052A (ja) * | 1988-06-08 | 1990-01-05 | Nec Corp | 多段構成ハッシュ表によるシンボル登録・検索方式 |
US5893117A (en) * | 1990-08-17 | 1999-04-06 | Texas Instruments Incorporated | Time-stamped database transaction and version management system |
JP3213766B2 (ja) * | 1992-03-16 | 2001-10-02 | 株式会社日立製作所 | レプリケートファイル更新システム |
US5390359A (en) * | 1992-03-20 | 1995-02-14 | International Business Machines Corporation | Storing and retrieving records in a computer system |
US5974238A (en) | 1996-08-07 | 1999-10-26 | Compaq Computer Corporation | Automatic data synchronization between a handheld and a host computer using pseudo cache including tags and logical data elements |
US5881292A (en) | 1996-09-26 | 1999-03-09 | Microsoft Corporation | Dynamic versioning system for multiple users of multi-module software system |
US5909540A (en) * | 1996-11-22 | 1999-06-01 | Mangosoft Corporation | System and method for providing highly available data storage using globally addressable memory |
US6073209A (en) * | 1997-03-31 | 2000-06-06 | Ark Research Corporation | Data storage controller providing multiple hosts with access to multiple storage subsystems |
US6148337A (en) | 1998-04-01 | 2000-11-14 | Bridgeway Corporation | Method and system for monitoring and manipulating the flow of private information on public networks |
US6157955A (en) * | 1998-06-15 | 2000-12-05 | Intel Corporation | Packet processing system including a policy engine having a classification unit |
JP4689137B2 (ja) * | 2001-08-08 | 2011-05-25 | 株式会社日立製作所 | リモートコピー制御方法、及びストレージシステム |
US6785278B1 (en) * | 1998-12-10 | 2004-08-31 | International Business Machines Corporation | Methods, systems and computer program products for hashing address values |
JP2000250799A (ja) * | 1999-03-02 | 2000-09-14 | Mitsubishi Electric Corp | 複製ファイル管理システム |
US6597700B2 (en) * | 1999-06-30 | 2003-07-22 | Nortel Networks Limited | System, device, and method for address management in a distributed communication environment |
US6434662B1 (en) * | 1999-11-02 | 2002-08-13 | Juniper Networks, Inc. | System and method for searching an associative memory utilizing first and second hash functions |
US7249175B1 (en) * | 1999-11-23 | 2007-07-24 | Escom Corporation | Method and system for blocking e-mail having a nonexistent sender address |
US6434681B1 (en) * | 1999-12-02 | 2002-08-13 | Emc Corporation | Snapshot copy facility for a data storage system permitting continued host read/write access |
JP2001337858A (ja) * | 2000-05-25 | 2001-12-07 | Mitsubishi Electric Corp | 複製データ管理システム |
US6523036B1 (en) * | 2000-08-01 | 2003-02-18 | Dantz Development Corporation | Internet database system |
US6748559B1 (en) * | 2000-10-19 | 2004-06-08 | International Business Machines Corporation | Method and system for reliably defining and determining timeout values in unreliable datagrams |
US6862609B2 (en) * | 2001-03-07 | 2005-03-01 | Canopy Group, Inc. | Redundant storage for multiple processors in a ring network |
TW579463B (en) | 2001-06-30 | 2004-03-11 | Ibm | System and method for a caching mechanism for a central synchronization server |
US7526425B2 (en) * | 2001-08-14 | 2009-04-28 | Evri Inc. | Method and system for extending keyword searching to syntactically and semantically annotated data |
JP4039484B2 (ja) | 2002-02-28 | 2008-01-30 | インターナショナル・ビジネス・マシーンズ・コーポレーション | XPath評価方法、これを用いたXML文書処理システム及びプログラム |
US7058639B1 (en) * | 2002-04-08 | 2006-06-06 | Oracle International Corporation | Use of dynamic multi-level hash table for managing hierarchically structured information |
US8204992B2 (en) * | 2002-09-26 | 2012-06-19 | Oracle America, Inc. | Presence detection using distributed indexes in peer-to-peer networks |
EP1554642A1 (en) * | 2002-10-15 | 2005-07-20 | Powerdsine Ltd. | Direct current power pooling |
US7155405B2 (en) * | 2002-12-31 | 2006-12-26 | Symbol Technologies, Inc. | System for communicating product and service related information to a user based on direction of movement |
US7743022B2 (en) * | 2003-02-28 | 2010-06-22 | Microsoft Corporation | Method and system for synchronizing data shared among peer computing devices |
US20040230862A1 (en) * | 2003-05-16 | 2004-11-18 | Arif Merchant | Redundant data assigment in a data storage system |
US7096316B1 (en) | 2003-06-30 | 2006-08-22 | Veritas Operating Corporation | Multi-host environment with coordinated distributed logging for writes to a raid storage volume |
US7480658B2 (en) * | 2003-07-16 | 2009-01-20 | Joltid Ltd. | Distributed database system and method having nodes co-ordinated in a decentralized manner |
US7457880B1 (en) * | 2003-09-26 | 2008-11-25 | Ximeta Technology, Inc. | System using a single host to receive and redirect all file access commands for shared data storage device from other hosts on a network |
JP2007511820A (ja) * | 2003-10-27 | 2007-05-10 | アーカイヴァス インコーポレイテッド | 独立ノード冗長アレイに対するポリシーに基づく管理 |
WO2005078606A2 (en) * | 2004-02-11 | 2005-08-25 | Storage Technology Corporation | Clustered hierarchical file services |
US8055745B2 (en) * | 2004-06-01 | 2011-11-08 | Inmage Systems, Inc. | Methods and apparatus for accessing data from a primary data storage system for secondary storage |
US20060031323A1 (en) | 2004-06-29 | 2006-02-09 | International Business Machines Corporation | Systems, methods, and media for database synchronization on a network |
WO2006053580A1 (en) * | 2004-11-16 | 2006-05-26 | Ntt Docomo, Inc. | Method, apparatus and program products for management of information about shared files in a mobile network |
US7984180B2 (en) * | 2005-10-20 | 2011-07-19 | Solarflare Communications, Inc. | Hashing algorithm for network receive filtering |
US8032790B2 (en) * | 2005-10-27 | 2011-10-04 | International Business Machines Corporation | Testing of a system logging facility using randomized input and iteratively changed log parameters |
US8447829B1 (en) * | 2006-02-10 | 2013-05-21 | Amazon Technologies, Inc. | System and method for controlling access to web services resources |
US7707136B2 (en) | 2006-03-31 | 2010-04-27 | Amazon Technologies, Inc. | System and method for providing high availability data |
US7925624B2 (en) * | 2006-03-31 | 2011-04-12 | Amazon Technologies, Inc. | System and method for providing high availability data |
-
2006
- 2006-08-22 US US11/508,129 patent/US7925624B2/en not_active Expired - Fee Related
-
2007
- 2007-08-22 WO PCT/US2007/076535 patent/WO2008024850A2/en active Application Filing
- 2007-08-22 JP JP2009525761A patent/JP5426380B2/ja active Active
- 2007-08-22 EP EP07814342.7A patent/EP2062125B1/en active Active
- 2007-08-22 KR KR1020097005859A patent/KR101429555B1/ko active IP Right Grant
-
2011
- 2011-04-11 US US13/084,495 patent/US8706688B2/en not_active Expired - Fee Related
-
2013
- 2013-11-28 JP JP2013246423A patent/JP5666677B2/ja active Active
-
2014
- 2014-04-21 US US14/257,757 patent/US9679008B2/en active Active
- 2014-12-10 JP JP2014250357A patent/JP6033830B2/ja active Active
-
2016
- 2016-03-02 US US15/059,234 patent/US11556518B2/en active Active
- 2016-10-26 JP JP2016209832A patent/JP6415513B2/ja active Active
-
2017
- 2017-06-12 US US15/620,638 patent/US11520770B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6047323A (en) | 1995-10-19 | 2000-04-04 | Hewlett-Packard Company | Creation and migration of distributed streams in clusters of networked computers |
US5924096A (en) | 1997-10-15 | 1999-07-13 | Novell, Inc. | Distributed database using indexed into tags to tracks events according to type, update cache, create virtual update log on demand |
JP2004157793A (ja) * | 2002-11-07 | 2004-06-03 | Fuji Photo Film Co Ltd | コンテンツ共有システム |
JP2006195744A (ja) * | 2005-01-13 | 2006-07-27 | Brother Ind Ltd | 情報配信システム、配信要求プログラム、転送プログラム、配信プログラム等 |
Also Published As
Publication number | Publication date |
---|---|
JP2014075143A (ja) | 2014-04-24 |
US11556518B2 (en) | 2023-01-17 |
JP5666677B2 (ja) | 2015-02-12 |
US20140229432A1 (en) | 2014-08-14 |
JP2015084243A (ja) | 2015-04-30 |
WO2008024850A2 (en) | 2008-02-28 |
US20070282915A1 (en) | 2007-12-06 |
JP2017059246A (ja) | 2017-03-23 |
US20160179872A1 (en) | 2016-06-23 |
JP6415513B2 (ja) | 2018-10-31 |
US20110184920A1 (en) | 2011-07-28 |
EP2062125B1 (en) | 2019-06-05 |
WO2008024850A3 (en) | 2008-12-24 |
JP2010501942A (ja) | 2010-01-21 |
US20170286476A1 (en) | 2017-10-05 |
EP2062125A4 (en) | 2011-10-05 |
EP2062125A2 (en) | 2009-05-27 |
US8706688B2 (en) | 2014-04-22 |
US7925624B2 (en) | 2011-04-12 |
JP6033830B2 (ja) | 2016-11-30 |
JP5426380B2 (ja) | 2014-02-26 |
US11520770B2 (en) | 2022-12-06 |
KR20090085572A (ko) | 2009-08-07 |
US9679008B2 (en) | 2017-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101429555B1 (ko) | 고 가용성 데이터를 제공하기 위한 시스템 및 방법 | |
US11288002B2 (en) | System and method for providing high availability data | |
US20240205073A1 (en) | System and method for data replication using a single master failover protocol | |
CN108683516B (zh) | 一种应用实例的升级方法、装置和*** | |
JP4317876B2 (ja) | データストレージシステムにおける冗長データ割り当て | |
EP2996308B1 (en) | Massively scalable object storage system | |
CN104823170B (zh) | 分布式缓存群集管理 | |
EP2521336B1 (en) | Massively scalable object storage system | |
JP2023546249A (ja) | トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム | |
US20190129976A1 (en) | Apparatus for controlling synchronization of metadata on network and method for the same | |
CN101278540A (zh) | 用于保持旨在与大型数据库对接的多层软件***中的缓存内容的一致性的***和方法 | |
CN110784498B (zh) | 一种个性化数据容灾方法及装置 | |
CN103207867A (zh) | 处理数据块的方法、发起恢复操作的方法和节点 | |
WO2016177130A1 (zh) | 通讯节点的选择方法及装置 | |
CN113220795B (zh) | 基于分布式存储的数据处理方法、装置、设备以及介质 | |
CN110830582B (zh) | 一种基于服务器集群选主方法和装置 | |
JP5480046B2 (ja) | 分散トランザクション処理システム、装置、方法およびプログラム | |
CN118227579A (zh) | 一种跨域集群数据的处理方法、装置、设备及介质 | |
CN117742571A (zh) | 一种数据处理方法、装置、设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20170726 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20180727 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20190725 Year of fee payment: 6 |