KR101677418B1 - 분산형 스토리지 시스템에서 데이터 재구성의 우선순위화 - Google Patents

분산형 스토리지 시스템에서 데이터 재구성의 우선순위화 Download PDF

Info

Publication number
KR101677418B1
KR101677418B1 KR1020167023620A KR20167023620A KR101677418B1 KR 101677418 B1 KR101677418 B1 KR 101677418B1 KR 1020167023620 A KR1020167023620 A KR 1020167023620A KR 20167023620 A KR20167023620 A KR 20167023620A KR 101677418 B1 KR101677418 B1 KR 101677418B1
Authority
KR
South Korea
Prior art keywords
chunks
stripe
data
chunk
effective redundancy
Prior art date
Application number
KR1020167023620A
Other languages
English (en)
Other versions
KR20160106187A (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 KR20160106187A publication Critical patent/KR20160106187A/ko
Application granted granted Critical
Publication of KR101677418B1 publication Critical patent/KR101677418B1/ko

Links

Images

Classifications

    • 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/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1464Management of the backup or restore process for networked environments
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/008Reliability or availability analysis
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/1088Reconstruction on already foreseen single or plurality of spare disks
    • 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/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/1092Rebuilding, e.g. when physically replacing a failing disk
    • 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
    • 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/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1461Backup scheduling policy
    • 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/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • G06F11/1469Backup restoration techniques
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error 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/2053Error 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 where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space
    • 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
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/1515Reed-Solomon codes

Abstract

분산형 스토리지 시스템(100)에서 복구를 위한 데이터(312)를 우선순위화하는 방법(600)은, 청크(330)들을 갖는 파일(310)의 각각의 스트라이프(320)에 대해, 스트라이프가 고가용도 청크(330a) 또는 저가용도 청크(330b)를 포함하는지를 결정하는 단계, 및 각각의 스트라이프에 대한 유효 중복성 값(ER)을 결정하는 단계를 포함한다. 유효 중복성 값은 청크들 및 대응하는 스트라이프와 연관된 임의의 시스템 도메인(402)에 기초한다. 분산형 스토리지 시스템은 시스템 도메인들을 포함하는 시스템 계층(400)을 가진다. 활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스가능한 반면, 비활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스불가능하다. 이 방법은 또한, 임계 유효 중복성(ERT) 값보다 작은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들을 실질적으로 즉각적으로 재구성하는 단계, 및 임계 기간 이후에, 액세스불가능한 저가용도 및 기타의 액세스불가능한 고가용도 청크들을 재구성하는 단계를 포함한다.

Description

분산형 스토리지 시스템에서 데이터 재구성의 우선순위화{PRIORITIZING DATA RECONSTRUCTION IN DISTRIBUTED STORAGE SYSTEMS}
본 개시내용은 분산형 스토리지 시스템에서 데이터 재구성을 우선순위화하는 것에 관한 것이다.
분산형 시스템은 일반적으로 많은 소결합된(loosely coupled) 컴퓨터들을 포함하며, 이들 각각은 통상적으로 컴퓨팅 자원(예를 들어, 하나 이상의 프로세서) 및/또는 스토리지 자원(예를 들어, 메모리, 플래시 메모리, 및/또는 디스크)을 포함한다. 분산형 스토리지 시스템은 분산형 시스템의 스토리지 자원 상에 스토리지 추상화(예를 들어, 키/값 저장소 또는 파일 시스템)를 오버레이한다. 분산형 스토리지 시스템에서, 하나의 컴퓨터에서 실행 중인 서버 프로세스는 그 컴퓨터의 스토리지 자원을 다른 컴퓨터에서 실행 중인 클라이언트 프로세스에 엑스포트(export)할 수 있다. 원격 프로시져 호출(RPC; remote procedure call)은 서버 프로세스로부터 클라이언트 프로세스로 데이터를 전송할 수 있다. 대안으로서, 원격 직접 메모리 액세스(RDMA; Remote Direct Memory Access) 프리미티브들은 서버 하드웨어로부터 클라이언트 프로세스들로 데이터를 전송하는데 이용될 수 있다.
본 개시내용의 한 양태는 분산형 스토리지 시스템에서 복구를 위한 데이터를 우선순위화하는 방법을 제공한다. 이 방법은, 청크들을 갖는 복수의 스트라이프를 포함하는 파일의 각각의 스트라이프에 대해, 데이터 처리 디바이스를 이용하여, 스트라이프가 고가용도 청크 또는 저가용도 청크를 포함하는지를 결정하는 단계, 및 데이터 처리 디바이스를 이용하여, 파일의 각각의 스트라이프에 대한 유효 중복성 값(effective redundancy value)을 결정하는 단계를 포함한다. 유효 중복성 값은 청크들 및 대응하는 스트라이프와 연관된 임의의 시스템 도메인에 기초한다. 분산형 스토리지 시스템은 시스템 도메인들을 포함한 시스템 계층을 가진다. 게다가, 각각의 시스템 도메인은 활성 상태 또는 비활성 상태를 가진다. 활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스가능한 반면, 비활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스불가능하다. 시스템 도메인은, 스케쥴링된 유지보수, 미스케쥴링된 고장, 또는 기타의 이유 동안에 비활성 상태에 들어갈 수 있다. 스트라이프의 청크들이 액세스불가능하게 되면, 이 방법은, 선택사항으로서, 데이터 처리 디바이스를 이용하여, 실질적으로 즉각적으로, 임계 유효 중복성 값보다 낮은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들을 재구성(reconstruct)하는 단계를 포함한다. 게다가, 스트라이프의 청크들이 액세스불가능하게 되면, 이 방법은 또한 선택사항으로서 임계 기간 이후에: 1) 액세스불가능한, 저가용도 청크들; 및 2) 임계 유효 중복성보다 크거나 같은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들을 재구성하는 단계를 포함한다. 따라서, (유효 중복성 값에 기초하여) 손실될 위험이 높은 소정의 고가용도 청크는, 손실될 위험이 높지 않은 저가용도 청크 또는 기타의 고가용도 청크보다 비교적 더 빠른 재구성을 수신한다.
본 개시내용의 구현은 다음과 같은 선택사항적 피쳐들 중 하나 이상을 포함할 수 있다. 일부 구현에서, 이 방법은, 시스템 도메인이 비활성 상태일 때 시스템 도메인과 연관된 파일의 각각의 스트라이프에 대한 유효 중복성 값을 업데이트하는 단계를 더 포함한다. 임계 기간은 약 15분 내지 약 30분일 수 있다. 다른 임계 기간도 역시 가능하다.
시스템 계층은, 제1, 제2, 제3, 및 제4 시스템 레벨 등의, 시스템 레벨들을 포함할 수 있다. 제1 시스템 레벨은, 데이터 처리 디바이스, 비일시적 메모리 디바이스, 또는 네트워크 인터페이스 제어기의 호스트 머신에 대응한다. 각각의 호스트 머신은 시스템 도메인을 가진다. 제2 시스템 레벨은, 호스트 머신을 하우징하는 랙(rack)의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응한다. 랙의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가진다. 제3 시스템 레벨은, 연관된 랙을 갖는 셀의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응한다. 셀의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가진다. 제4 시스템 레벨은 셀들의 분배 센터 모듈에 대응하고, 각각의 분배 센터 모듈은 시스템 도메인을 가진다.
일부 예에서, 각각의 스트라이프에 대해, 이 방법은 각각의 시스템 레벨에 대한 유효 중복성 값을 결정하는 단계를 포함한다. 복제 청크를 갖는 복제된 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 대응하는 시스템 레벨에서 적어도 하나의 가용 복제 청크를 갖는 고유한 시스템 도메인의 수를 식별하는 단계를 포함한다. 제2 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 데이터 액세스가능성을 유지하면서 비활성일 수 있는 제2 시스템 레벨 내의 고유한 시스템 도메인의 수를 식별하는 단계를 포함한다. 또한, 제3 또는 제4 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 데이터 액세스가능성을 유지하면서 비활성일 수 있고 나머지 시스템 도메인들에 비해 최대수의 청크를 가질 수 있는 제3 또는 제4 레벨 내의 시스템 도메인을 식별하는 단계를 포함한다. 추가로, 하나보다 많은 시스템 도메인이 최대수의 청크를 가질 때, 이 방법은 시스템 도메인들 중 하나를 무작위로 선택하는 단계를 포함한다.
일부 구현에서, 데이터 청크, 코드-체크 청크, 및 워드-체크 청크를 갖는 네스팅형 코드 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 컬럼-유효 중복성 또는 스트라이프-유효 중복성 중 하나를 결정하는 단계를 더 포함한다. 컬럼-유효 중복성을 결정하는 단계는, 컬럼 내의 다른 청크들로부터 재구성될 수 있는 컬럼 내의 고유한 청크들의 개수를 식별하는 단계; 및 스트라이프 내의 다른 청크들로부터 재구성될 수 있는 스트라이프 내의 고유한 청크들의 개수를 식별하는 것을 포함한 스트라이프-유효 중복성을 결정하는 단계를 포함한다.
본 개시내용의 또 다른 양태는 분산형 스토리지 시스템에서 복구를 위한 데이터를 우선순위화하는 방법을 제공한다. 이 방법은, 컴퓨팅 프로세서를 이용하여, 파일의 각각의 스트라이프에 대한 유효 중복성 값을 결정하는 단계를 포함하고, 파일은 청크들을 갖는 스트라이프들을 포함하며, 유효 중복성 값은 청크들 및 대응하는 스트라이프와 연관된 임의의 시스템 도메인에 기초하며, 분산형 스토리지 시스템은 시스템 도메인들을 포함하는 시스템 계층을 가지며, 각각의 시스템 도메인은 활성 상태 또는 비활성 상태를 가진다. 시스템 도메인이 비활성 상태에 있을 때, 이 방법은 그 시스템 도메인과 연관된 파일의 각각의 스트라이프에 대한 유효 중복성 값을 업데이트하는 단계를 포함한다. 또한, 이 방법은, 그 유효 중복성 값이 임계 유효 중복성 값보다 작을 때 스트라이프의 재구성을 야기하는 단계를 포함한다.
본 개시내용의 이 양태의 구현은 다음과 같은 선택사항적 피쳐들 중 하나 이상을 포함할 수 있다. 일부 구현에서, 시스템 계층은, 제1, 제2, 제3, 및 제4 레벨을 포함한다. 제1 시스템 레벨은, 데이터 처리 디바이스, 비일시적 메모리 디바이스, 또는 네트워크 인터페이스 제어기의 호스트 머신에 대응한다. 각각의 호스트 머신은 시스템 도메인을 가진다. 제2 시스템 레벨은, 호스트 머신을 하우징하는 랙(rack)의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응한다. 랙의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가진다. 제3 시스템 레벨은, 연관된 랙을 갖는 셀의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응한다. 셀의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가진다. 제4 시스템 레벨은 셀들의 분배 센터 모듈에 대응하고, 각각의 분배 센터 모듈은 시스템 도메인을 가진다. 일부 예에서, 이 방법은, 각각의 스트라이프에 대해, 각각의 시스템 레벨에 대한 유효 중복성 값을 결정하는 단계를 더 포함한다.
일부 예에서, 복제 청크를 갖는 복제된 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 대응하는 시스템 레벨에서 적어도 하나의 가용 복제 청크를 갖는 고유한 시스템 도메인의 수를 식별하는 단계를 포함한다. 제2 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 데이터 액세스가능성을 유지하면서 비활성일 수 있는 제2 시스템 레벨 내의 고유한 시스템 도메인의 수를 식별하는 단계를 포함한다. 일부 예에서, 제3 또는 제4 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 데이터 액세스가능성을 유지하면서 비활성일 수 있고 나머지 시스템 도메인들에 비해 최대수의 청크를 가질 수 있는 제3 또는 제4 레벨 내의 시스템 도메인을 식별하는 단계를 포함한다. 하나보다 많은 시스템 도메인이 최대수의 청크를 가질 때, 이 방법은 시스템 도메인들 중 하나를 무작위로 선택하는 단계를 포함한다.
일부 구현에서, 데이터 청크, 코드-체크 청크, 및 워드-체크 청크를 갖는 네스팅형 코드 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 컬럼-유효 중복성 또는 스트라이프-유효 중복성 중 하나를 결정하는 단계를 포함한다. 컬럼-유효 중복성을 결정하는 단계는, 컬럼 내의 다른 청크들로부터 재구성될 수 있는 컬럼 내의 고유한 청크들의 개수를 식별하는 단계; 및 스트라이프 내의 다른 청크들로부터 재구성될 수 있는 스트라이프 내의 고유한 청크들의 개수를 식별하는 것을 포함한 스트라이프-유효 중복성을 결정하는 단계를 포함한다.
일부 구현에서, 이 방법은 스트라이프가 고가용도 청크 또는 저가용도 청크를 포함하는지를 결정하는 단계를 포함한다. 스트라이프의 청크들이 액세스불가능하게 되면, 이 방법은, 데이터 처리 디바이스를 이용하여, 실질적으로 즉각적으로, 임계 유효 중복성 값보다 낮은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들을 재구성하는 단계를 포함한다. 게다가, 스트라이프의 청크들이 액세스불가능하게 되면, 이 방법은 또한 임계 기간 이후에: 1) 액세스불가능한, 저가용도 청크들; 및 2) 임계 유효 중복성보다 크거나 같은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들을 재구성하는 단계를 포함한다. 임계 기간은 약 15분 내지 약 30분일 수 있다. 다른 임계 기간도 역시 가능하다.
본 개시내용의 역시 또 다른 양태는 분산형 스토리지 시스템에서 복구를 위한 데이터를 우선순위화하기 위한 시스템을 제공한다. 이 시스템은 메모리 호스트들을 포함하고, 각각의 메모리 호스트는 비일시적 메모리 및 메모리 호스트와 통신하는 컴퓨터 프로세서를 가진다. 컴퓨터 프로세서는 메모리 호스트들에 걸쳐 파일의 스트라이핑을 관리하는 명령어를 실행하고, 각각의 파일은 청크들을 갖는 스트라이프들을 포함한다. 청크들을 갖는 복수의 스트라이프를 갖는 파일의 각각의 스트라이프에 대해, 컴퓨터 프로세서는 데이터 처리 디바이스를 이용하여 스트라이프가 고가용도 청크 또는 저가용도 청크를 포함하는지를 결정한다. 또한, 컴퓨터 프로세서는 파일의 각각의 스트라이프에 대한 유효 중복성 값을 결정한다. 유효 중복성 값은 청크들 및 대응하는 스트라이프와 연관된 임의의 시스템 도메인에 기초한다. 분산형 스토리지 시스템은 시스템 도메인들을 포함하는 시스템 계층을 가지고, 각각의 시스템 도메인은 활성 상태 또는 비활성 상태를 가진다. 활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스가능하고, 비활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스불가능하다.
본 개시내용의 이 양태의 구현은 다음과 같은 선택사항적 피쳐들 중 하나 이상을 포함할 수 있다. 스트라이프의 청크들이 액세스불가능하게 되면, 컴퓨터 프로세서는, 임계 유효 중복성 값보다 낮은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들의 재구성을 실질적으로 즉각적으로 야기한다. 게다가, 스트라이프의 청크들이 액세스불가능하게 되면, 컴퓨터 프로세서는, 임계 기간 이후에: 1) 액세스불가능한, 저가용도 청크들; 및 2) 임계 유효 중복성 값보다 크거나 같은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들의 재구성을 야기한다.
컴퓨터 프로세서는, 임계 유효 중복성 값보다 낮은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들의 재구성을 야기하고, 액세스불가능한 청크들의 액세스불가능 시점에 후속되는 임계 기간 이후에, 데이터 처리 디바이스를 이용하여, 나머지 액세스불가능한 청크들의 재구성을 야기한다. 나머지 액세스불가능한 청크들은 고가용도 및/또는 저가용도 청크들일 수 있다.
일부 구현에서, 컴퓨터 프로세서는, 시스템 도메인이 비활성 상태일 때 시스템 도메인과 연관된 파일의 각각의 스트라이프에 대한 유효 중복성 값을 업데이트한다. 임계 기간은 약 15분 내지 약 30분일 수 있다.
일부 예에서, 시스템 계층은 제1 내지 제4 시스템 레벨을 포함한다. 제1 시스템 레벨은, 데이터 처리 디바이스, 비일시적 메모리 디바이스, 또는 네트워크 인터페이스 제어기의 호스트 머신에 대응한다. 각각의 호스트 머신은 시스템 도메인을 가진다. 제2 시스템 레벨은, 호스트 머신을 하우징하는 랙(rack)의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응한다. 랙의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가진다. 제3 시스템 레벨은, 연관된 랙을 갖는 셀의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응한다. 셀의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가진다. 제4 시스템 레벨은 셀들의 분배 센터 모듈에 대응하고, 각각의 분배 센터 모듈은 시스템 도메인을 가진다. 컴퓨터 프로세서는, 각각의 스트라이프에 대해, 각각의 시스템 레벨에 대한 유효 중복성 값을 결정한다.
컴퓨터 프로세서는, 복제 청크를 갖는 복제된 스트라이프에 대한 유효 중복성 값을, 대응하는 시스템 레벨에서 적어도 하나의 가용 복제 청크를 갖는 고유한 시스템 도메인의 수를 식별함으로써 결정할 수 있다. 일부 예에서, 컴퓨터 프로세서는, 제2 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을, 데이터 액세스가능성을 유지하면서 비활성일 수 있는 제2 시스템 레벨 내의 고유한 시스템 도메인의 수를 식별함으로써 결정한다. 컴퓨터 프로세서는, 제3 또는 제4 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을, 데이터 액세스가능성을 유지하면서 비활성일 수 있고 나머지 시스템 도메인들에 비해 최대수의 청크를 가질 수 있는 제3 또는 제4 레벨 내의 시스템 도메인을 식별함으로써 결정할 수 있다. 하나보다 많은 시스템 도메인이 최대수의 청크를 가질 때, 컴퓨터 프로세서는 시스템 도메인들 중 하나를 무작위로 선택한다.
일부 구현에서, 컴퓨터 프로세서는, 데이터 청크, 코드-체크 청크, 및 워드-체크 청크를 갖는 네스팅형 코드 스트라이프에 대한 유효 중복성 값을, 컬럼-유효 중복성 또는 스트라이프-유효 중복성 중 하나를 결정함으로써 결정한다. 컴퓨터 프로세서는, 컬럼 내의 다른 청크들로부터 재구성될 수 있는 컬럼 내의 고유한 청크들의 개수를 식별함으로써 컬럼-유효 중복성을 결정하고; 스트라이프 내의 다른 청크들로부터 재구성될 수 있는 스트라이프 내의 고유한 청크들의 개수를 식별함으로써 스트라이프-유효 중복성을 결정한다.
본 개시내용의 하나 이상의 구현의 상세사항은 첨부된 도면과 이하의 상세한 설명에 개시되어 있다. 다른 양태들, 피쳐들, 및 이점들은, 상세한 설명, 도면, 및 청구항들로부터 명백할 것이다.
도 1a는 예시적 분산형 스토리지 시스템의 개략도이다.
도 1b는 큐레이터(curator)에 의해 관리되는 메모리 자원들의 셀을 갖는 예시적인 분산형 스토리지 시스템의 개략도이다.
도 2는 분산형 스토리지 시스템에 대한 예시적인 큐레이터의 개략도이다.
도 3a는 복제된 스트라이프(stripe)들로의 예시적 파일 분할의 개략도이다.
도 3b는 데이터 청크들과 비-데이터 청크들로의 예시적 파일 분할의 개략도이다.
도 3c는 예시적 Reed-Solomon 코딩 기술의 개략도이다.
도 3d 내지 도 3g는 예시적 네스팅형 코딩 기술의 개략도이다.
도 3h는 네스팅형 코딩 기술을 이용하여 데이터를 저장하기 위한 동작들의 예시적 배열이다.
도 4a 내지 도 4e는 예시적 시스템 계층들의 개략도이다.
도 5 내지 도 7은 분산형 스토리지 시스템에서 복구를 위한 데이터를 우선순위화하기 위한 동작들의 예시적 배열의 개략도이다.
다양한 도면에서 유사한 참조 부호는 유사한 요소를 나타낸다.
도 1a 및 도 1b를 참조하여, 일부 구현에서, 분산형 스토리지 시스템(100)은 소결합된(loosely coupled) 자원 호스트들(110, 110a-n)(예를 들어, 컴퓨터 또는 서버)을 포함하고, 각각은 데이터를 캐싱하는데 이용될 수 있는 스토리지 자원(114)(예를 들어, 메모리, 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM), 상변화 메모리(PCM), 및/또는 디스크)과 통신하는 컴퓨팅 자원(112)(예를 들어, 하나 이상의 프로세서 또는 중앙 처리 유닛(CPU))을 가진다. 스토리지 자원(114) 상에 오버레이된 스토리지 추상화(예를 들어, 키/값 저장소 또는 파일 시스템)는 하나 이상의 클라이언트(120, 120a-n)에 의한 스토리지 자원(114)의 스케일가능한 이용을 허용한다. 클라이언트(120)는 네트워크(130)를 통해(예를 들어, RPC를 통해) 자원 호스트(110)와 통신할 수 있다.
분산형 스토리지 시스템(100)은, 데이터(312)가 복제 및/또는 인코딩되고 복수의 데이터 센터들에 저장되는 복수의 중복성 계층들(multiple layers of redundancy)을 포함할 수 있다. 데이터 센터는, 통신 및 스토리지 시스템(100) 등의 컴퓨터 시스템과 그 연관된 컴포넌트들을 하우징한다. 데이터 센터는, 대개, 백업 전원, 중복 통신 접속, (일정한 온도를 유지하기 위한) 환경 제어, 및 보안 디바이스들을 포함한다. 데이터 센터는, (예를 들어, 작은 도시 정도로) 많은 양의 전기를 이용하는 큰 산업적 규모의 동작일 수 있다. 데이터 센터는 상이한 지리적 위치들(예를 들어, 상이한 도시들, 상이한 국가들, 및 상이한 대륙들)에 놓일 수 있다. 일부 예에서, 데이터 센터, 또는 그 일부는, (예를 들어, 정전, 또는 부품 교체를 위한 스토리지 시스템(100)의 일부의 접속해제, 시스템 고장, 또는 이들의 조합으로 인해) 유지보수를 요구한다. 이들 데이터 센터, 및 특히 분산형 스토리지 시스템(100)에 저장된 데이터(312)는 유지보수 기간 동안에 사용자/클라이언트(120)에게 이용불가능하여 사용자의 동작의 손상 또는 중단을 초래할 수 있다. 분산형 스토리지 시스템(100)의 유지보수(또는 계획되지 않은 고장) 동안에, 일부 데이터(312)는 다른 데이터(312)보다 완전하게 이용불가능하게 될 위험이 더 높다. 데이터 집단을 고가용도 데이터(312)와 저가용도 데이터(312)로 세그먼트화하고 어느 데이터(312)가 유지보수에 기인하여 손실의 위험이 더 많은지를 결정한 다음, 비효율성을 초래하는 나머지 데이터(312)의 전부 또는 대부분을 복구하지 않고 그 데이터(312)를 복구/복제하는 것이 바람직하다.
일부 구현에서, 분산형 스토리지 시스템(100)은 "단면형(single-sided)"이어서, 클라이언트(120)로부터의 원격 프로시져 호출(RPC; remote procedure call)에 응답하기 위한 임의의 서버 작업(server job)이 그 대응하는 자원 호스트(110) 상에 데이터(312)를 저장하거나 회수할 필요성을 제거하고 대신에 원격 요청(122)을 처리하기 위한 전문화된 하드웨어에 의존할 수 있다. "단면형"이란, 자원 호스트(110) 상의 대부분의 요청 처리가 자원 호스트(110)의 CPU(112)에서 실행되는 소프트웨어가 아니라 하드웨어로 이루어질 수 있는 방법을 말한다. 자원 호스트(110)(예를 들어, 서버)의 프로세서(112)가, 클라이언트(120)에서 실행중인 클라이언트 프로세스(128)에 대응하는 스토리지 자원(114)(예를 들어, 비일시적 메모리)의 액세스를 엑스포트하는 서버 프로세스(118)를 실행하게 하는 것이 아니라, 클라이언트(120)가 자원 호스트(110)의 네트워크 인터페이스 제어기(NIC)(116)를 통해 스토리지 자원(114)에 직접 액세스할 수 있다. 즉, 클라이언트(120)에서 실행 중인 클라이언트 프로세스(128)는, 컴퓨팅 자원(112) 상에서 실행중인 임의의 서버 프로세스(118)의 루틴의 실행을 요구하지 않고 하나 이상의 스토리지 자원(114)과 직접 인터페이싱할 수 있다. 이러한 단면형 분산형 스토리지 아키텍쳐는, 클라이언트(120)가 자원 호스트(110)의 컴퓨팅 자원(112)과 인터페이싱하지 않고 스토리지 자원(114)에 액세스할 수 있기 때문에, 비교적 높은 처리량과 낮은 레이턴시를 제공한다. 이것은 전형적인 양면형 분산형 스토리지 시스템(100)에 수반되는 스토리지(114)와 CPU 사이클에 대한 요건들을 디커플링하는 효과를 가진다. 단면형 분산형 스토리지 시스템(100)은, 자원 호스트(110) 상에 여분 CPU 사이클이 있는지에 관계없이 원격 스토리지 자원(114)을 이용할 수 있다; 또한, 단면형 동작들은 서버 CPU(112) 자원에 대해 경합하지 않기 때문에, 자원 호스트(110)가 높은 CPU 이용률에서 동작하고 있을 때에도, 단면형 시스템은 매우 예측가능하고 낮은 레이턴시로 캐시 요청(122)을 서빙할 수 있다. 따라서, 단면형 분산형 스토리지 시스템(100)은, 전통적인 양면형 시스템보다 클러스터 스토리지(114)와 CPU(112) 자원 양쪽 모두의 더 높은 이용률을 허용하면서 예측가능하고 낮은 레이턴시를 제공한다.
일부 구현에서, 분산형 스토리지 시스템(100)은, 스토리지 로직부(102), 데이터 제어부(104), 및 데이터 스토리지부(106)를 포함한다. 스토리지 로직부(102)는, 예를 들어, RPC 또는 단면형 동작을 통해, 기저 데이터에 액세스하는 것을 책임지는 트랜잭션 애플리케이션 프로그래밍 인터페이스(API)(350)(예를 들어, 단면형 트랜잭션 시스템 클라이언트 라이브러리)를 포함할 수 있다. 데이터 제어부(104)는, 스토리지 자원(114) 할당, 대응하는 네트워크 인터페이스 제어기(116)로의 스토리지 자원(114) 등록, 클라이언트(들)(120)과 자원 호스트(110) 사이의 접속 셋업, 머신 고장의 경우 에러 처리 등의 태스크에서, 스토리지 자원(114)으로의 할당과 액세스를 관리할 수 있다. 데이터 스토리지부(106)는 소결합된 자원 호스트들(110, 110a-n)을 포함할 수 있다.
분산형 스토리지 시스템(100)은 동적 랜덤 액세스 메모리(DRAM)(114)에 데이터(312)를 저장하고 원격 직접 메모리 액세스(RDMA)-가능형 네트워크 인터페이스 제어기(116)를 통해 원격 호스트(110)로부터 데이터(312)를 서빙할 수 있다. (네트워크 인터페이스 카드, 네트워크 어댑터, 또는 LAN 어댑터라고도 알려진) 네트워크 인터페이스 제어기(116)는 컴퓨팅 자원(112)을 네트워크(130)에 접속하는 컴퓨터 하드웨어 컴포넌트일 수 있다. 자원 호스트들(110a-n)과 클라이언트(120) 양쪽 모두는 각각이 네트워크 통신을 위한 네트워크 인터페이스 제어기(116)를 가질 수 있다. 자원 호스트(110)의 컴퓨팅 프로세서(112) 상에서 실행중인 호스트 프로세스(118)는 메모리(114)의 한 세트의 원격 직접 메모리 액세스가능한 영역(115a-n)을 네트워크 인터페이스 제어기(116)에 등록한다. 호스트 프로세스(118)는 메모리(114)의 원격 직접 메모리 액세스가능한 영역(115a-n)을 판독전용 또는 판독/기록의 허용과 함께 등록한다. 자원 호스트(110)의 네트워크 인터페이스 제어기(116)는 각각의 등록된 메모리 영역(115a-n)에 대한 클라이언트 키(302)를 생성한다.
네트워크 인터페이스 제어기(116)에 의해 수행되는 단면형 동작들은, 간단한 판독, 기입, 및 비교-및-스왑(compare-and-swap) 동작으로 제한될 수 있고, 이들 동작들 중 어느 것도 캐시 요청을 실행하고 캐시 정책을 관리하기 위한 전통적인 캐시 서버 작업에 의해 구현된 소프트웨어 로직에 대한 드롭-인 대체(drop-in replacement)로서 역할하기에 충분히 정교하지 않을 수 있다. 트랜잭션 API(350)는, 데이터 조회 또는 삽입 커맨드 등의 커맨드를 프리미티브 네트워크 인터페이스 제어기 동작들의 시퀀스로 변환한다. 트랜잭션 API(350)는 분산형 스토리지 시스템(100)의 데이터 제어부 및 데이터 스토리지부(104, 106)와 인터페이싱한다.
분산형 스토리지 시스템(100)은 네트워크 인터페이스 제어기(116)와의 원격 액세스 및 클라이언트 프로세스(128)와의 접속 셋업을 위한 메모리(114)를 등록하는 공동-위치한 소프트웨어 프로세스를 포함할 수 있다. 일단 접속이 셋업되고 나면, 클라이언트 프로세스(128)는, 대응하는 자원 호스트(110)의 로컬 CPU(112) 상의 소프트웨어로부터의 임의의 관여없이 네트워크 인터페이스 제어기(116)의 하드웨어 내의 엔진을 통해 등록된 메모리(114)에 액세스할 수 있다.
도 1b를 참조하여, 일부 구현에서, 분산형 스토리지 시스템(100)은 복수의 셀(200)을 포함하고, 각각의 셀(200)은 자원 호스트(110) 및 자원 호스트(110)와 통신하는 큐레이터(210)를 포함한다. 큐레이터(210)(예를 들어, 프로세스)는 네트워크(130)에 접속된 컴퓨팅 프로세서(202)(예를 들어, 비일시적 메모리(204)를 갖는 서버) 상에서 실행되어 데이터 스토리지를 관리(예를 들어, 자원 호스트(110)에 저장된 파일 시스템을 관리)하고, 데이터 배치를 제어하며, 및/또는 데이터 복구를 개시할 수 있다. 게다가, 큐레이터(210)는 자원 호스트(110) 상의 데이터(312)의 존재 및 스토리지 위치를 추적할 수 있다. 중복 큐레이터(210)들이 가능하다. 일부 구현에서, 큐레이터(들)(210)은, 복수의 자원 호스트(110)에 걸친 데이터(312)의 스트라이핑(striping)과, 중복성 및/또는 성능을 위한 주어진 스트라이프의 복수의 사본의 존재 및/또는 위치를 추적할 수 있다. 컴퓨터 데이터 스토리지에서, 데이터 스트라이핑은, 파일(310)(도 2) 등의, 논리적으로 순차적 데이터(312)를 세그먼트화하되, 상이한 물리적 스토리지 디바이스들(114)(예를 들어, 셀(200) 및/또는 자원 호스트(110))에 대해 순차적 세그먼트들의 액세스가 이루어지는 방식으로 세그먼트화하는 기술이다. 스트라이핑은, 처리 디바이스가, 스토리지 디바이스(114)가 액세스를 제공할 수 있는 것보다 더 신속하게 데이터(312)로의 액세스를 요청할 때 유용하다. 복수의 디바이스들 상에서의 세그먼트 액세스들을 수행함으로써, 복수의 세그먼트들이 동시에 액세스될 수 있다. 이것은 더 많은 데이터 액세스 처리량을 제공하여, 프로세서가 데이터 액세스를 위해 유휴상태로 대기하게 하는 것을 피할 수 있다.
일부 구현에서, 트랜잭션 API(350)는 (예를 들어, 클라이언트 프로세스(128)를 갖는) 클라이언트(120)와 큐레이터(210) 사이에서 인터페이싱한다. 일부 예에서, 클라이언트(120)는 하나 이상의 원격 프로시져 호출(RPC)을 통해 큐레이터(210)와 통신한다. 클라이언트 요청(122)에 응답하여, 트랜잭션 API(350)는 자원 호스트(들)(110) 상의 소정 데이터(312)의 스토리지 위치를 발견하고, 데이터(312)로의 액세스를 허용하는 키(302)를 획득할 수 있다. 트랜잭션 API(350)는 (네트워크 인터페이스 제어기(116)를 통해) 적절한 자원 호스트(110)와 직접 통신하여 (예를 들어, 원격 직접 메모리 액세스를 이용하여) 데이터(312)를 판독 또는 기입한다. 자원 호스트(110)가 비동작이거나, 데이터(312)가 상이한 자원 호스트(110)로 이동된 경우에, 클라이언트 요청(122)은 실패하고, 큐레이터(210)에게 재-질의하도록 클라이언트(120)를 프롬프트한다.
도 2를 참조하여, 일부 구현에서, 큐레이터(210)는 파일 시스템 메타데이터(212)를 저장하고 관리한다. 메타데이터(212)는, 파일들(3101-n)을 파일 기술자(file descriptor, 3001-n)에 맵핑하는 파일 맵(214)을 포함할 수 있다. 큐레이터(210)는 그 영구 메타데이터(212)의 표현을 검사 및 수정할 수 있다. 큐레이터(210)는 메타데이터(212)에 대해 3개의 상이한 액세스 패턴을 이용할 수 있다: 판독-전용; 파일 트랜잭션; 및 스트라이프 트랜잭션. 도 2 및 도 3a 내지 도 3c를 참조하여, 일부 구현에서, 큐레이터(210)에 의해 저장된 파일 기술자들(3001-n)은, 스트라이프(320a-n)를, 메모리 호스트(110)에 저장된 데이터 청크(330nD) 및 코드 청크(330nC)에 맵핑하는 파일 맵(214) 등의 메타데이터(212)를 포함한다. 파일(310)을 개방하기 위해, 클라이언트(120)는 요청(122)을 큐레이터(210)에게 전송하고, 큐레이터는 파일 기술자(300)를 반환한다. 클라이언트(120)는 파일 기술자(300)를 이용하여 파일 청크 오프셋들을 원격 메모리 위치들(115a-n)에 변환한다. 파일 기술자(300)는, 메모리 호스트(110) 상의 청크(330)에 고유하고 그 청크(330)를 RDMA-판독하는데 이용되는 클라이언트 키(302)(예를 들어, 32-비트 키)를 포함할 수 있다. 클라이언트(120)가 파일 기술자(300)를 로딩한 후에, 클라이언트(120)는 파일(310)의 데이터(312)를 RDMA 또는 다른 데이터 회수법을 이용하여 액세스할 수 있다.
큐레이터(210)는 셀(200)의 일부인 모든 메모리 호스트(110)에 대한 상태 정보를 유지할 수 있다. 상태 정보는, 용량, 미사용 공간, 메모리 호스트(110) 상의 부하, 클라이언트 관점에서의 메모리 호스트(110)의 레이턴시, 및 현재 상태를 포함할 수 있다. 큐레이터(210)는, 셀(200) 내의 메모리 호스트(110)에게 직접 질의함으로써 및/또는 클라이언트(120)에게 질의하여 클라이언트 관점에서의 레이턴시 통계를 수집함으로써 이 정보를 획득할 수 있다. 일부 예에서, 큐레이터(210)는 메모리 호스트 상태 정보를 이용하여 재밸런싱, 드레이닝(draining), 복구 결정, 및 할당 결정을 내린다.
큐레이터(들)(210)은, 파일(310) 내의 더 많은 저장 공간에 대한 및 재밸런싱과 복구에 대한 클라이언트 요청(122)을 처리하기 위하여 청크(330)를 할당할 수 있다. 일부 예에서, 프로세서(202)는, 스토리지 디바이스(114)들 사이에서 데이터 청크(330nD)와 코드 청크(330nC)를 분산시키는 것과는 상이하게, 스토리지 디바이스(114)들 사이에서 청크(330)를 복제한다. 큐레이터(210)는 메모리 호스트 부하와 활성도(liveliness)의 부하 맵(216)을 유지할 수 있다. 일부 구현에서, 큐레이터(210)는 후보 메모리 호스트(110)들의 목록을 생성함으로써 청크(330)를 할당하고 청크 할당 요청을 후보 메모리 호스트(110)들 각각에 전송한다. 메모리 호스트(110)가 과부하되거나 가용 공간을 갖지 않는다면, 메모리 호스트(110)는 요청(122)을 거절할 수 있다. 많은 경우에, 큐레이터(210)는 상이한 메모리 호스트(110)를 선택한다. 각각의 큐레이터(210)는 파일 명칭공간의 지정된 부분을 지속적으로 스캔하여, 매 분마다 등등에서 모든 메타데이터(212)를 검사할 수 있다. 큐레이터(210)는 파일 스캔을 이용하여 메타데이터(212)의 무결성을 체크하고, 수행될 및/또는 통계를 생성할 것을 필요로 하는 작업을 결정할 수 있다. 파일 스캔은 큐레이터(210)의 다른 동작들과 동시에 동작할 수 있다. 스캔 그 자체는 메타데이터(212)를 수정하지 않을 수 있지만, 시스템의 다른 컴포넌트들에 의해 이루어질 작업을 스케쥴링하고 통계를 계산한다.
도 3a 내지 도 3h를 참조하여, 데이터(312)는 하나 이상의 파일(310)일 수 있고, 여기서, 각각의 파일(310)은 명시된 복제 레벨(311) 및/또는 에러-정정 코드(313)를 가진다. 큐레이터(210)는 각각의 파일(310)을 스트라이프들(320)의 집합으로 분할할 수 있고, 각각의 스트라이프(320)는 나머지 스트라이프들(320)과는 독립적으로 인코딩된다. 복제된 파일(310)(도 3a)의 경우, 각각의 스트라이프(320)는, 큐레이터(210)가 스트라이프 복제물(330n)로서 복제하고 복수의 스토리지 자원(114) 상에 저장하는 단일의 논리적 청크(logical chunk)이다. 이 시나리오에서, 스트라이프 복제물(330n)은 청크(330)라고도 한다. 소거 인코딩된 파일(310)(도 3b)의 경우, 각각의 스트라이프(320)는, 큐레이터(210)가 복수의 스토리지 자원(114)에 배치하는 복수의 데이터 청크(330nD)와 비-데이터 청크(330nC)(예를 들어, 코드 청크)로 구성되며, 여기서, 데이터 청크(330nD)와 비-데이터 청크(330nC)의 집합은 단일 코드 워드(code word)를 형성한다. 일반적으로, 큐레이터(210)는, 파일(310) 내의 다른 스트라이프들(320)이 스토리지 자원(114) 상에 어떻게 배치되어 있는지와는 독립적으로, 각각의 스트라이프(320)를 스토리지 자원(114) 상에 배치할 수 있다. 에러-정정 코드(313)는 중복 데이터, 또는 패리티 데이터를 파일(310)에 부가하여, (이용중인 코드의 능력까지의) 다수의 에러가 유입되었더라도 파일(310)이 나중에 수신자에 의해 복구될 수 있게 한다. 에러-정정 코드(313)는 스토리지 디바이스에서 데이터(312) 무결성을 유지하거나, 성능(레이턴시)을 위해 데이터(312)를 재구성하거나, 머신을 더욱 신속하게 드레인(drain)하는데 이용된다.
도 3b에 도시된 바와 같이, 각각의 스트라이프(320)는, 인코딩 레벨에 기초하여, 예를 들어, Reed-Solomon Code(도 3c), 네스팅형 코드(도 3d 내지 도 3h), 또는 기타의 소거 코딩에 기초하여, 데이터 청크(330nD)와 비-데이터 청크(330nC)로 분할된다. 비-데이터 청크(330nC)는 (예를 들어, Reed Solomon 코드의 경우) 코드 청크(330nC)일 수 있다. 다른 예에서, 비-데이터 청크(330nC)는, (네스팅형 코딩의 경우) 코드-체크 청크(330nCC), 워드-체크 청크(330nWC), 및 코드-체크-워드-체크 청크(330nCCWC)일 수 있다.
데이터 청크(330nD)는 명시된 양의 데이터(312)이다. 일부 구현에서, 데이터 청크(330nD)는 파일(310)로부터의 데이터(312)의 연속 부분이다. 다른 구현에서, 데이터 청크(330nD)는 파일(310)로부터의 데이터(312)의 하나 이상의 불연속 부분이다. 예를 들어, 데이터 청크(330nD)는 256 바이트 또는 다른 단위의 데이터(312)일 수 있다.
손상된 청크(330)(예를 들어, 데이터 청크(330nD) 또는 비-데이터 청크(330nC))는 하나 이상의 에러를 포함하는 청크(330)이다. 통상적으로, 손상된 청크(330)는 에러 정정 코드(313)를 이용하여 식별된다. 예를 들어, 손상된 청크(330)는 완전히 소거되거나(예를 들어, 청크(330)가 허리케인으로 파괴된 하드 드라이브에 저장된 경우), 손상된 청크(330)는 반전된(flipped) 단일 비트를 가질 수 있다. 건강한 청크(330)는 손상되지 않은 청크(330)이다. 손상된 청크(330)는, 예를 들어, 특정한 자원 호스트(110)가 유지보수를 위해 셧다운된 경우, 의도적으로 손상될 수 있다. 손상된 청크는 분실된 또는 이용불가능한 청크일 수 있다. 이 경우, 손상된 청크(330)는 셧다운중인 자원 호스트(110)에 저장된 청크(330)를 식별함으로써 식별될 수 있다. 일부 구현에서, 손상된 청크(330)는 건강한 청크(330)를 이용하여 복구될 수 있다. 손상된 청크(예를 들어, 데이터 청크(330nD) 또는 비-데이터 청크(330nC))는 다양한 이유로 인해 손상될 수 있다. 스트라이프(320) 내의 손상된 청크(330)는 건강한 청크(330)로부터 복구될 수 있다. 파일(310)의 비-데이터 청크(330nC)는 에러 정정 코드 청크(313)를 포함한다. 에러 정정 코드 청크(313)는 하나 이상의 데이터 청크(330nD)에 기초하여 데이터(312)의 청크(330)를 포함한다. 일부 구현에서, 각각의 코드 청크(330nC)는 데이터 청크(330nD)와 동일한 명시된 크기(예를 들어, 256 바이트)이다. 코드 청크(330nC)는 에러 정정 코드(313), 예를 들어, MDS(Maximal Distance Separable) 코드를 이용하여 생성된다. MDS 코드의 예로서는 Reed-Solomon 코드가 포함된다. 코드 청크(330nC)를 생성하기 위해 다양한 기술들이 이용될 수 있다. 일반적으로, 임의 세트의 d개의 고유하고 건강한 (데이터 청크(330nD)이든 코드 청크(330nC)이든) 청크(330)로부터 d개의 데이터 청크(330nD)를 재구성할 수 있는 에러 정정 코드(313)가 이용될 수 있다.
코드워드는 한 세트의 데이터 청크(330nD) 및 이들 데이터 청크(330nD)에 기초한 코드 청크(330nC)이다. d개의 데이터 청크(330nD)와 c개의 코드 청크(330nC)를 포함하는 코드워드를 생성하기 위해 MDS 코드가 이용된다면, 코드워드로부터 임의의 건강한 청크(330)(데이터 또는 코드)가 이용가능한 한, 청크(330)(데이터 또는 코드)들 모두가 재구성될 수 있다.
도 3c는 에러 정정 코드 청크(313)로서의 Reed-Solomon 인코딩(313a)을 도시한다. 각각의 스트라이프(320)는 복수의 스토리지 자원(114) 상에 저장된 청크(330)들로 분할된다. 청크(330)는, 함께 단일의 코드 워드를 형성하는, 데이터 청크(330nD) 또는 코드 청크(330nC)일 수 있다. 데이터 청크(330nD)는 실제의 데이터(312)를 포함하는 반면, 코드 청크(330nC)는 파일(310)이 온전한(intact)지를 결정하기 위한 패리티(parity)를 위한 것이다. Reed-Solomon 인코딩(313a)은 코드 청크(330nC)의 총 개수까지의 손실을 허용하며, 여기서, 스트라이프(310)는 여전히 데이터 청크(330nD)로부터 재구성될 수 있다. 따라서, 파일(310)의 각각의 스트라이프(320)는, 큐레이터(210)가 복수의 스토리지 자원(114)에 배치하는 복수의 데이터 청크(330nD)와 코드 청크(330nC)로 구성되며, 여기서, 데이터 청크(330nD)와 코드 청크(330nC)의 집합은 단일 코드 워드를 형성한다. 일반적으로, 큐레이터(210)는, 파일(310) 내의 다른 스트라이프들(320)이 스토리지 자원(114) 상에 어떻게 배치되어 있는지와는 독립적으로, 각각의 스트라이프(320)를 스토리지 자원(114) 상에 배치할 수 있다. Reed-Solomon 인코딩(313a)은, 중복 데이터(312), 또는 패리티 데이터(312)를 파일(310)에 부가하여, (이용중인 코드의 능력까지의) 다수의 에러가 유입되었더라도 파일(310)이 나중에 수신자에 의해 복구될 수 있게 한다. Reed-Solomon 인코딩(313a)은 자원 호스트(110)에서 데이터 무결성을 유지하거나, 성능(레이턴시)을 위해 데이터(312)를 재구성하거나, 머신을 더욱 신속하게 드레인(drain)하는데 이용된다.
도 3d 내지 도 3h를 참조하면, 네스팅형 코딩(313b) 기술에서, 인코딩된 데이터 블록(316)은, 2차원 R x C 배열을 형성하는 것으로 간주될 수 있는 형태로 저장되어 있는 데이터 청크(330nD) 및 에러 정정 코드 청크(즉, 비-데이터 청크(330nC))를 갖는 데이터 블록(316)을 포함한다. 각각의 컬럼 C에 대해, 컬럼마다 X개 또는 더 적은 수의 손상된 청크(330)를 재구성하는데 이용될 수 있는 ("코드-체크 청크 330nCC"라 부르는) X개의 코드 청크(330nC)가 있다. 전체의 2D 배열에 대해 ("워드-체크 청크(330nWC)"라 부르는) Y개의 코드 청크(330nC)가 있다. 하나 이상의 컬럼 C에서 X개보다 많은 손상된 청크(330)가 있다면, 손상된 청크(330)를 재구성하기 위해 다른 건강한 청크(330) 외에도 워드-체크 청크(330nWC)가 이용된다. 본 명세서에서 설명되는 일부 예는 인코딩된 데이터 블록(314)(즉, 데이터 블록(316) 및 코드 청크 330nC(즉, 비-데이터 청크 330nC))이 2차원 배열을 형성하는 것으로 나타내고 있지만, 코딩 기술들이 상이하게 구성된 인코딩된 데이터 블록(314)을 생성하는 것이 가능하다. 예를 들어, 상이한 컬럼들은 상이한 개수의 코드-체크 청크(330nCC)(즉, 코드-체크 청크(330nCC))를 가질 수 있고, 워드-체크 청크(330nWC)를 포함하는 컬럼 C는 데이터 청크(330nD)와 코드-체크 청크(330nC)를 포함하는 컬럼들과는 상이한 개수의 로우(row)를 가질 수 있다.
코드(330nC)는, 데이터 청크(330nD)의 각각의 컬럼 C를 데이터 센터에 할당함으로써 자원 호스트(110)들에 걸쳐 데이터(312)를 저장하는데 이용될 수 있다. 컬럼 C 내의 각각의 청크(330)는 데이터 센터 내의 자원 호스트(110)에 할당될 수 있다. 그 다음, 데이터 센터에서 X개 또는 그 보다 적은 청크(330)가 손실된다면, 데이터 센터내 통신(intra-data center communication)만을 이용하여 청크(330)가 재구성될 수 있다(따라서, 재구성을 수행하는데 있어서 다른 어떤 데이터 센터도 데이터(312)를 제공할 필요가 없다). 하나 이상의 데이터 센터에서 X개보다 많은 청크(330)가 손실된다면, 재구성을 시도하기 위해 Y개의 워드-체크 청크(330nWC)가 이용된다. 따라서, 단일의 데이터 센터 내에서 X개보다 많은 청크(330)가 손상될 때에만, (데이터 센터내 통신보다 더 비쌀 수 있고, 예를 들어, 더 느릴 수 있는) 데이터 센터간 통신(inter-data center communication)이 필요하다.
코드들은 또한 단일의 데이터 센터 내에서 이용될 수 있다. 상이한 컬럼들 C를 상이한 데이터 센터들에 할당하는 것 대신에, 인코딩 시스템(102)은 모든 컬럼들을 단일의 데이터 센터에 저장한다. 데이터 청크(330nD)와 코드 청크(330nC)는 그 데이터 센터 내의 별개의 자원 호스트(110)들에 저장될 수 있다. 이것은, 예를 들어, 재구성 동안에 자원 호스트(110)로부터 데이터(312)를 판독하는 것이 값비싸서(예를 들어, 시간 소모적이어서), 인코딩 시스템(102)이 종래의 코딩 기술을 이용할 때 필요한 것보다 더 적은 수의 청크(330)를 재구성 동안에 판독할 수 있는 경우에 유용하다. 작은 수의 손상된 청크(330)는, 작은 수의 다른 청크(330)(컬럼 C 내의 코드-체크 청크(330nCC) 및 기타의 데이터 청크(330nD))를 판독함으로써 재구성될 수 있고, 많은 수의 손상된 청크(330)는 필요할 때 워드-체크 청크(330nWC)를 이용하여 재구성될 수 있다.
도 3d 내지 도 3h를 참조하면, 일부 구현에서, 네스팅형 코딩(313b) 기술은 코드워드를 형성하는 데이터 청크(330nD)와 코드 청크(330nC)를 보여주고 있다. 도시된 바와 같이, 네스팅형 코딩(313b) 기술은 2차원(2D) 네스팅형 코딩(313b) 기술이지만, 3차원(3D) 네스팅형 코딩(313b) 기술도 역시 적용될 수 있다. 2D 네스팅형 코드(313b)는 체계적 형태의 임의의 선형 MDS 코드로부터 생성된다. 데이터 블록(316)에 기초하는 워드-체크 청크(330nWC)는 2개의 그룹, 즉, X개의 코드 청크(330nC)를 포함하는 제1 그룹과 N개의 코드 청크(330nC)를 포함하는 제2 그룹으로 파티션화된다. 데이터(312)의 블록은 컬럼 C의 배열을 형성하는 것으로서 간주되고, 제1 그룹 내의 X개의 코드 청크(330nC)들은, 이들을 컬럼당 별개의 컴포넌트들로 "분할함"으로써("분할" 코드-체크 청크(330nCC)) 컬럼당 X개의 컬럼 청크(330)를 생성하는데 이용된다. 제2 그룹 내의 N개의 코드 청크(330nC)는 워드-체크 청크(330nWC)를 형성한다.
예를 들어, 도 3e는 데이터 블록(D0-D41)(316)을 도시하고 있고, 여기서, D0-D41은, 데이터 청크(330nD), 및 데이터 블록(D0-D41)(316)에 기초하는 코드 청크(C0-C7)(330nC)이다. 데이터 청크(D0-D41)(330nD)와 코드 청크(C0-C7)(330nC)는 코드워드를 형성한다. 코드 청크(330nC)들은 C0-C1을 포함하는 제1 그룹과 C2-C7을 포함하는 제2 그룹으로 파티션화된다. C0-C1은 분할되어 분할 코드-체크 청크(330nCC)를 형성한다. C2-C7은 워드-체크 청크(330nWC)로서 이용된다.
도 3f를 참조하면, 데이터 블록(D0-D41)(316)과 추가 코드 청크(330nC)(분할 코드-체크 청크(330nCC) 및 워드-체크 청크(330nWC))를 포함하는 결과적인 인코딩된 데이터 블록(314)이 도시되어 있다. (C0,j로 표기된) 컬럼 j에 대한 C0에 대응하는 분할 코드-체크 청크(330nCC)를 생성하기 위해, 컬럼 j에 있지 않은 모든 데이터 청크(330nD)가 제로값을 갖는 것처럼 C0이 생성된다. 즉, C0,j는 데이터 청크(330nD)의 전체 데이터 블록(316)을 이용하지만 대신에 다른 컬럼들 모두는 제로화 제거되고 컬럼 j만을 이용하여 C0을 생성하는 동작을 수행하는 것으로부터 생기는 값을 가진다. 예를 들어, 전체 데이터 블록(316)에 대한 C0을 생성하기 위해 생성기 행렬(generator matrix)이 이용된다면, 생성기 행렬은 C0,j를 생성하도록 수정되어, 원래의 생성기 행렬을 이용해 그 원래의 생성기 행렬을 컬럼 j 이외의 컬럼들 내의 데이터 청크(330nD)들이 제로화 제거된 데이터 블록(316)에 적용하는 것으로부터 생기는 값을 갖게 할 수 있다.
각각의 컬럼 C에 대한 C1,j에 대한 분할 코드-체크 청크(330nCC)들이 유사하게 생성되지만, C0 대신에 C1을 이용하여 생성된다. 그 결과, C0은 C0,0-C0,6의 선형 조합이고 C1은 C1,0-C1,6의 선형 조합이다. 즉,
Figure 112016083330244-pct00001
(1)
Figure 112016083330244-pct00002
(2)
도 3f에서 "?"로 표기된 청크(330)는, 예를 들어, 도 3g를 참조하여 이하에서 더 설명되는 바와 같이, 다양한 방식으로 생성될 수 있다.
도 3e 및 도 3f의 예에서, 결과적 인코딩된 데이터 블록(316)은 42개의 데이터 청크(330nD)와 8개의 코드 청크(330nC)를 포함한다. 인코딩된 블록(314)을 생성하는데 이용된 원래의 코드를 참조하면, 코드 청크(330nC)는, 전술된 바와 같이, 2개의 그룹 중 하나에 속하고, X=2는 제1 그룹에 속하며 N=6은 제2 그룹에 속한다. 처음 7개 컬럼들 중 하나 내에 2개 또는 그 보다 적은 수의 (X개 또는 그보다 적은 수의) 손상된 청크(330)가 있을 때마다, 손상된 청크(330)는 컬럼 C의 건강한 청크(330)와 컬럼 C에 대한 분할 코드-체크 청크(330nCC)를 이용하여 정정될 수 있다. 이를 알아보기 위해, j가 2개 또는 그보다 적은 수의 손상된 청크(330)를 포함하는 컬럼 C를 나타낸다고 하고 j 이외의 컬럼들 C로부터의 모든 데이터 청크(330nD)를 제로화 제거함으로써 획득된 코드워드를 고려해보자. 그 코드워드에서, C0 = C0,j이고 C1 = C1,j이다. 그 결과, 다른 컬럼들 내의 2개 또는 그보다 적은 수의 손상된 청크(330)는 모두-제로 데이터 청크(330nD)를 포함하고, 워드-체크 청크(330nWC)를 봄으로써 손상된 것으로 볼 수 있다.
도 3f에 도시된 예에서, 워드-체크 청크(330nWC)는 전체의 컬럼 C(컬럼의 우측까지)를 완전히 채운다. 2D 네스팅형 코드(313b)는 워드-체크 청크(330nWC)의 임의 개수의 컬럼 C로 생성될 수 있다. 워드-체크 청크(330nWC)의 컬럼들 C는 데이터 청크(330nD)의 컬럼들과 동일한 개수의 로우 R 또는 상이한 개수의 로우 R을 가질 수 있고, 워드-체크 청크(330nWC)의 컬럼들 C는 서로 상이한 개수의 로우 R을 가질 수 있다. 워드-체크 청크(330nWC)의 컬럼들 C는, 코드-체크 청크(330nCC), 즉, 코드-체크-워드-체크 청크(330nCCWC)를 가질 수 있지만, 반드시 그럴 필요는 없다. 워드-체크 청크(330nWC)의 개수를 증가시키면, 저장된 데이터(312)의 신뢰성이 향상되지만 자원 호스트(110)에서 더 많은 스토리지를 이용한다. 일반적으로, 네스팅형 코드(313b)의 경우, 컬럼들 C는 데이터 청크(330nD) 또는 워드-체크 청크(330nWC)를 포함하지만 양쪽 모두를 포함하지는 않는다.
일반적으로, 컬럼 C당 X개의 분할 코드-체크 청크(330nCC)와 N개의 워드-체크 청크(330nWC)를 갖는 2D 네스팅형 코드(313b)는, (전형적으로, 예를 들어, 데이터 센터내 통신인) 컬럼내 통신만을 수행하면서 (데이터 청크(330nD)를 포함하는 컬럼들에서) 컬럼 C당 X개의 손상된 청크(330)를 재구성하는데 이용될 수 있다. 블록 내의 복수의 손상된 청크(330)를 재구성하는데 있어서, 컬럼내 통신이 컬럼간 통신보다 덜 비싸기 때문에 이들 손상된 청크(330)가 통상적으로 먼저 재구성되지만, 다른 손상된 청크(330)들은 남아 있을 수 있다. 컬럼들 내의 손상된 청크(330)를 재구성한 후에, (컬럼내 통신을 이용하여 재구성될 수 없어서) (N+X)개 또는 그보다 적은 수의 다른 청크(330)가 여전히 손상되어 있다면, 이들 다른 손상된 청크(330)는 워드-체크 청크(330nWC)와 분할 코드-체크 청크(330nCC)를 이용하여 재구성될 수 있다. 제1 그룹(C0과 C1) 내의 워드-체크 청크(330nWC)는, 이들 워드-체크 청크(330nWC)들이 명시적으로 저장되어 있지 않더라도, 예를 들어, 공식
Figure 112016083330244-pct00003
를 이용하여, 분할 코드-체크 청크(330nCC)로부터 결정될 수 있다.
이를 알아보기 위해, Z는 손상된 워드-체크 청크(330nWC)의 수를 나타내고 Y는 손상중인 분할 코드-체크 청크(330nCC)에 대한 공식
Figure 112016083330244-pct00004
에 따라 대응하는 분할 코드-체크 청크(330nCC)로부터 재구성될 수 없는 제1 그룹 내의 워드-체크 청크(330nWC)의 수를 나타낸다고 하자. 이 공식을 이용하여, 제1 그룹으로부터의 X-Y개의 워드-체크 청크(330nWC)가 결정되어, 제1 그룹에서 Y개의 손상된 워드-체크 청크(330nWC)와 제2 그룹에서 Z개의 손상된 워드-체크 청크(330nWC)를 갖는 코드워드(예를 들어, 도 3e에 도시된 것)를 야기할 수 있다. 최대 N+X개의 총 손상된 청크(330)가 있기 때문에, 최대 N+X-Y-Z개의 손상된 데이터 청크(330nD)가 있다. 따라서, 최대 N+X-Y-Z+Y+Z =N+X개의 손상된 청크(330)를 포함하기 때문에, 손상된 청크(330) 모두를 재구성하기 위해 결과적 코드워드를 이용하는 것이 가능하다.
도 3g를 참조하면, 일부 구현에서, 결과적 인코딩된 블록(314)은 워드-체크 청크(330nWC)에 대해 코드-체크 청크(330nCC)(즉, 코드-체크-워드-체크 청크(330nCCWC))를 포함한다. 도 3f의 인코딩된 블록(314)에 비해, 도 3g의 블록은, 도 3f에서 "?"로 마킹된 위치 대신에 코드-체크 청크들(C0,7 및 C1,7)(330nCC)를 포함한다. 이것은 컬럼간 통신에 의존하지 않고 손상된 워드-체크 청크(330nWC)를 재구성하는 것을 제공하는 한 방식이다. 코드-체크 청크들(C0,7 및 C1,7)(330nCC)은 다양한 방식으로 생성될 수 있다. 예를 들어, 이들 코드-체크 청크(330nCC)는, C0,0 및 C1,0이 D0-D5에 기초하여 생성되는 것과 동일한 방식으로 C2-C7에 기초하여 생성될 수 있다. (예시적인 네스팅형 코드(313b)를 이용한) 도 3g의 결과적 인코딩된 블록은, 컬럼내 재구성을 수행한 후에 8개까지의 손상된 청크(330)를 재구성하는데 이용될 수 있다. 코드-체크 청크(330nC)는 워드-체크 청크(330nWC)를 포함하는 임의 개수의 컬럼에 대해 추가될 수 있다.
도 3h를 참조하면, 일부 구현에서, 큐레이터(210)는 네스팅형 코드(313b)를 이용하여 데이터(312)를 분배한다. 시스템(100)은 데이터 블록(316)을 수신한다(단계 372). 데이터 블록(316)은, md*nd개의 데이터 청크(330nC)를 포함할 수 있고, 여기서, md는 데이터 로우의 개수이고 nd는 데이터 컬럼의 개수이며, md와 nd는 1보다 크거나 같다. 인코딩된 블록(314)은 md*nd를 포함하는 m*n개의 청크(330)를 포함하고, 여기서, m은 데이터 청크(330nD)와 비-데이터 청크(330nC)의 로우 R의 총 개수이고, n은 데이터 청크(330nD)와 비-데이터 청크(330nC)의 컬럼 C의 개수이다; m과 n은 1보다 크거나 같다. 시스템(100)은 체계적 형태의 제1 선형 에러 정정 코드(313)와 데이터 청크(330nD)를 이용하여 워드-체크 청크(330nWC)의 하나 이상의 컬럼 C를 생성한다(단계 374). 동일한 로우 R의 워드-체크 청크(330nWC)와 데이터 청크(330nD)는 코드워드를 형성한다. md 로우의 데이터 청크(330nC)들 각각에 대해, 시스템(100)은 컬럼 C에 대한 하나 이상의 분할 코드-체크 청크(330nCC)를 생성한다(단계 376). 분할 코드-체크 청크(330nCC)가 생성되어, 상이한 컬럼들 C로부터의 n개의 분할 코드-체크 청크(330nCC)들의 선형 조합이 데이터 청크(330nD)와 m개의 워드-체크 청크(330nWC)를 포함하는 제1 코드워드의 제1 워드-체크 청크(330nWC)를 형성하게 한다. 제1 워드-체크 청크(330nWC)(및 상이한 컬럼들 C로부터의 분할 코드-체크 청크(330nCC)의 선형 조합으로부터 생기는 기타 임의의 워드-체크 청크(330nWC))는 단계(374)에서 생성된 데이터 청크(330nD)와 워드-체크 청크(330nWC)로 코드워드를 형성한다. 예를 들어, 각각의 컬럼 C에 대한 분할 코드-체크 청크(330nCC)는 분할 에러 정정 코드(313)과 md개의 데이터 청크(330nD) 또는 워드-체크 청크(330nWC)를 이용하여 생성될 수 있고, 여기서, 분할 에러 정정 코드(313)는, 데이터 청크(330nD)들이 컬럼 C 이외의 컬럼들 C에 대해 제로화 제거되는 데이터 청크(330nD)에 적용된 제1 선형 에러-정정 코드(313)에 대한 생성기 행렬과 동일하게 코딩하는 분할 생성기 행렬을 포함한다.
시스템(100)은, 데이터 청크(330nD) 및 분할 코드-체크 청크(330nCC) 및 워드-체크 청크(330nWC)의 컬럼 C를 저장한다(단계 378). 일부 구현에서, 시스템(100)은 단일 그룹의 자원 호스트(110)에 모든 청크(330)를 저장한다. 일부 다른 구현에서, 시스템(100)은 각각의 컬럼 C를 별개 그룹의 자원 호스트(110)에 할당한다. 시스템(100)이 하나 이상의 손상된 청크(330)를 식별하면, 시스템(100)은 분할 코드-체크 청크(330nCC) 및 워드-체크 청크(330nWC)를 이용하여 손상된 청크(330)를 재구성할 수 있다. 통상적으로, 시스템(100)은 분할 코드-체크 청크(330nCC) 및 동일한 컬럼 C 내의 기타의 데이터 청크를 이용하여 손상된 청크(330)의 재구성을 시도한다. 분할 코드-체크 청크(330nCC)만을 이용하여 손상된 청크(330)를 재구성한 후에, 일부 손상된 청크(330)가 남아 있다면, 시스템(100)은, 분할 코드-체크 청크(330nCC)의 선형 조합을 결정함으로써 결정될 수 있는 워드-체크 청크(330nWC)를 포함한 워드-체크 청크(330nWC)를 재구성을 위해 이용한다. 일부 예에서, 복수의 손실이 있을 때, 시스템(100)은 데이터 청크(330nD)를 포함한 청크(330)들 중 임의의 것을 이용한다.
스토리지 시스템(100) 또는 그 일부는 소정 기간 동안에 시스템 고장을 겪을 수 있다. 스토리지 시스템(100)의 자원 호스트(110) 상에 분포된 데이터(312)는 사용자들에게 이용가능하지 않을 수 있다. 예를 들어, 다시 도 1b를 참조하면, 자원 호스트(110a)는 유지보수를 겪거나 시스템 고장을 가질 수 있다; 따라서, 자원 호스트(110a) 상에 저장된 데이터(312)(예를 들어, 스트라이프 복제물(330n), 데이터 청크(330nD) 및 비-데이터 청크(330nC))는 회수가능하지 않을 수도 있다(즉, 데이터(312)는 액세스불가능하다). 또한, 자원 호스트(110a)는 기능하기 위해 또는 유지보수가 완료되기 위해 연장된 기간(예를 들어, 1주일)을 가질 수도 있다. 자원 호스트(110a)가 이용가능하지 않은 기간 내에서, 스토리지 시스템(100)은 손실된 데이터(312)를 복구하여 파일 요청(122)을 행하는 경우 데이터(312)가 이용가능하게 한다.
일부 구현에서, 시스템(100)은 데이터(312)를 고가용도 데이터(312)와 저가용도 데이터(312)로 세그먼트화하고 어느 데이터(312)가 유지보수로 인해 손실의 위험이 더 큰지를 결정한다. 시스템(100)은 나머지 데이터(312)의 전부 또는 대부분을 복구하지 않고 고가용도 데이터(312)를 복구 또는 복제할 수 있다. 데이터(312)의 일부는 유지보수 또는 고장 후에 짧게 이용가능할 수 있기 때문에, 시스템(100)은 그 데이터(312)의 복수를 지연시키고 대신 고가용도 데이터(312)를 교체한다.
도 4a 내지 도 4c를 참조하면, 큐레이터(210)는, 저장된 데이터(312)로의 사용자 액세스에 영향을 미치지 않고 유지보수가 발생할 수 있는 레벨(예를 들어, 레벨 1-4)을 식별하기 위해 분산형 스토리지 시스템(100)의 시스템 계층(400)을 결정하거나 수신할 수 있다. 유지보수 또는 고장(엄격 계층(400a)(도 4a), 비-엄격 계층(400b)(도 4b))은, 전력 유지보수/고장, 쿨링 시스템 유지보수/고장(도 4c), 네트워킹 유지보수/고장, 부품 업데이트 또는 교체, 또는 분산형 스토리지 시스템(100)에 영향을 주는 기타의 유지보수 또는 정전을 포함할 수 있다. 유지보수는 스케쥴링될 수 있고, 일부 예에서는, 미스케쥴링된 시스템 고장이 발생할 수 있다.
시스템 계층(400)은 시스템 레벨들(예를 들어, 레벨 1-4)을 포함하고, 유지보수 유닛/시스템 도메인(402)이 하나 이상의 시스템 레벨(1-5)까지 이른다. 각각의 시스템 도메인(402)은 활성 상태 또는 비활성 상태를 가진다. 분배 센터 모듈(410)은 하나 이상의 셀(420, 420a-n)을 포함하고, 각각의 셀(420)은 자원 호스트(110)의 하나 이상의 랙(430)을 포함한다. 각각의 셀(420)은 또한, 셀 쿨링(422), 셀 전력(424)(예를 들어, 버스 덕트(bus duct)), 및 셀 레벨 네트워킹(426)(예를 들어, 네트워크 스위치(들))을 포함한다. 유사하게, 각각의 랙(430)은, 랙 쿨링(432), 랙 전력(434)(예를 들어, 버스 덕트), 및 랙 레벨 네트워킹(436)(예를 들어, 네트워크 스위치(들))을 포함한다.
시스템 레벨들은, 제1, 제2, 제3, 및 제4 시스템 레벨들 1-4를 포함할 수 있다. 제1 시스템 레벨 1은, 데이터 처리 디바이스(112), 비일시적 메모리 디바이스(114), 또는 네트워크 디바이스(116)(예를 들어, NIC)의 자원 호스트 또는 호스트 머신(110, 110a-n))에 대응한다. 각각의 호스트 머신/자원 호스트(110)는 시스템 도메인(402)을 가진다. 제2 시스템 레벨 2는, 랙 레벨에 있는 호스트 머신(110)의 랙(430, 430a-n) 및 쿨링 전달기(432), 전력 전달기(434)(예를 들어, 버스 덕트), 또는 통신 전달기(436)(예를 들어, 네트워크 스위치 및 케이블)에 대응한다. 각각의 랙(430) 또는 랙 레벨 -쿨링 전달기(432), -전력 전달기(434), 또는 -통신 전달기(436)는 시스템 도메인(402)을 가진다. 제3 시스템 레벨 3은, 분배 센터 모듈(410)과 셀 쿨링(422), 셀 전력(424), 또는 연관된 랙(430)에 공급되는 셀 레벨 네트워킹(426)의 임의의 셀(420, 420a-n))에 대응한다. 각각의 셀(420) 또는 셀 쿨링(422), 셀 전력(424), 또는 셀 레벨 네트워킹(426)은 시스템 도메인(402)을 가진다. 제4 시스템 레벨 4는 분배 센터 모듈(410)에 대응한다. 각각의 분배 센터(410) 모듈은 시스템 도메인(402)을 가진다.
도 4a는, 시스템 계층(400)의 각각의 계층 컴포넌트(예를 들어, 자원 호스트(110), 랙(430), 셀(420), 또는 분배 센터 모듈(410))가 서로 다른 계층 컴포넌트(110, 410, 420, 430)에 의존하는 엄격 시스템 계층(400a)을 도시한다. 반면 도 4b는 비-엄격 시스템 계층(400b)을 도시하고, 여기서, 하나의 계층 컴포넌트(110, 410, 420, 430)는 하나보다 많은 입력 피드(input feed)를 가진다. 일부 예에서, 큐레이터(210)는 그 프로세서(202)의 비일시적 메모리(204) 상에 시스템 계층(400)을 저장한다. 예를 들어, 큐레이터(210)는 제1 자원 호스트(110)(및 그 대응하는 프로세서 자원(112a) 및 스토리지 자원(114a))를 제1 랙(430a)에 맵핑하고, 제1 랙(430a)을 제1 버스 덕트(420a)에 맵핑하고, 제1 버스 덕트(420a)를 제1 분배 센터 모듈(410a)에 맵핑한다.
큐레이터(210)는, 계층 컴포넌트들(110, 410, 420, 430)의 맵핑에 기초하여, 계층 컴포넌트들(110, 410, 420, 430)이 유지보수를 겪고 있을 때 어느 자원 호스트(110)가 비활성인지를 결정한다. 일단 큐레이터(210)가 시스템 도메인(402)을 자원 호스트(110)들에(및 그에 따라 그들의 대응하는 프로세서 자원(112a) 및 스토리지 자원(114a)에) 맵핑하고 나면, 큐레이터(210)는 프로세서 또는 데이터 가용성을 유지하면서 유지보수가 수행될 수 있는 가장 높은 레벨(예를 들어, 레벨 1-4)을 결정한다.
시스템 도메인(402)은 유지보수를 겪고 있는 계층 컴포넌트(110, 410, 420, 430)와 이에 의존하는 임의의 계층 컴포넌트(110, 410, 420, 430)를 포함한다. 따라서, 하나의 계층 컴포넌트(110, 410, 420, 430)가 유지보수를 겪고 있을 때, 그 계층 컴포넌트(110, 410, 420, 430)는 비활성이고, 계층 컴포넌트(110, 410, 420, 430)의 시스템 도메인(402) 내의 다른 임의의 계층 컴포넌트(110, 410, 420, 430)도 역시 비활성이다. 예를 들어, 자원 호스트(110)가 유지보수를 겪고 있을 때, 스토리지 디바이스(114), 데이터 프로세서(112), 및 NIC(116)를 포함하는 레벨 1 시스템 도메인(402a)은 비활성 상태에 있다. 랙(430)이 유지보수를 겪을 때, 랙(430) 및 랙(430)에 의존하는 임의의 자원 호스트(110)를 포함하는 레벨 2 시스템 도메인(402b)은 비활성 상태에 있다. 셀(420)(예를 들어, 셀 쿨링 컴포넌트(422), 버스 덕트(424), 및/또는 셀(420a)의 네트워크 스위치(426) 중 임의의 하나)가 유지보수를 겪고 있을 때, 셀(420)과 셀(420)에 의존하는 레벨 3 및 레벨 4의 임의의 계층 컴포넌트(110, 410, 420, 430)를 포함하는 레벨 3 시스템 도메인(402c)은 비활성 상태에 있다. 마지막으로, 분배 센터 모듈(410)이 유지보수를 겪고 있을 때, 분배 센터 모듈(410a), 및 분배 센터 모듈(410)에 의존하는 레벨 2 내지 레벨 4의 임의의 계층 컴포넌트(110, 410, 420, 430)를 포함하는 레벨 4 시스템 도메인(402, 402d)은 비활성 상태에 있다.
일부 예에서, 도 4b에 도시된 바와 같이, 비-엄격 계층 컴포넌트(410, 420, 430, 114)는 이중 피드를 가질 수 있다, 즉, 계층 컴포넌트(110, 410, 420, 430)는 2개 이상의 다른 계층 컴포넌트(110, 410, 420, 430)에 의존한다. 예를 들어, 셀(420)은 2개의 분배 센터 모듈(410)로부터의 피드를 가질 수 있고; 및/또는 랙(430)은 2개의 셀(420)로부터의 이중 피드를 가질 수 있다. 도시된 바와 같이, 레벨 2 시스템 도메인(402b)은 2개의 랙(430a, 430n)을 포함할 수 있고, 제2 랙(430n)은 2개의 셀(420a, 420n)로부터의 2개의 피드를 포함한다. 따라서, 제2 랙(430n)은 2개의 시스템 도메인(402ca 및 402cb)의 일부이다. 따라서, 시스템 계층(400)의 하위 레벨들은 시스템 계층(400)의 상위 레벨들의 손실을 야기하지 않고 유지된다. 이것은 데이터 액세스가능성을 허용하는 시스템(100) 내의 중복성을 야기한다. 특히, 분배 센터 모듈(410)은 자신에게 의존하는 임의의 셀(420)을 잃지 않고 유지될 수 있다. 일부 예에서, 랙(430)은, 버스 덕트(424)에 의존하는 이중-전원형 랙(430)으로의 전력을 잃지 않고 버스 덕트(424)의 유지보수를 허용하는 이중-전원형 랙을 포함한다. 일부 예에서, 정전을 야기하지 않고 유지될 수 있는 시스템 도메인(402)은 유지보수를 허용하기 위해 청크(330)를 분배할 때 무시된다; 그러나, 계획되지 않은 정전은 여전히 청크(330)의 손실을 야기할 수 있기 때문에, 무시된 시스템 도메인(402)은 청크(330)를 분배할 때 포함될 수 있다.
일부 예에서, 셀 쿨링(422) 및 랙 쿨링(432) 등의 쿨링 디바이스는, 각각 셀(420)과 랙(430)을 쿨링하는데 이용된다. 셀 쿨링 컴포넌트(422)는 하나 또는 복수의 셀(420)을 쿨링할 수 있다. 유사하게, 랙 쿨링 컴포넌트(432)는 하나 이상의 랙(430)을 쿨링할 수 있다. 큐레이터(210)는 쿨링 디바이스들(즉, 셀 쿨링(422) 및 랙 쿨링(432))과의 자원 호스트(110)의 연관을 저장한다. 일부 구현에서, 큐레이터(210)는, 스토리지 시스템(100) 내에서 발생할 수 있는 유지보수의 모든 가능한 조합을 고려하여 시스템 계층(400) 또는 유지보수 계층(400)들 조합을 결정한다. 예를 들어, 하나 이상의 쿨링 디바이스(422, 432)가 고장난 시스템 계층(400), 또는 네트워크 디바이스들(116, 426, 436)이 고장된 시스템 계층(400), 또는 전력 분배(424, 434)가 고장난 시스템 계층(400).
따라서, 스토리지 시스템(100) 내의 계층 컴포넌트(110, 410, 420, 430)가 유지보수를 겪을 때, 그 계층 컴포넌트(110, 410, 420, 430) 및 그 계층 컴포넌트(110, 410, 420, 430)에 맵핑되거나 의존하는 임의의 계층 컴포넌트(110, 410, 420, 430)는 비활성 상태에 있다. 비활성 상태의 계층 컴포넌트(110, 410, 420, 430)는 사용자(120)에 의해 액세스불가능한 반면, 활성 상태의 계층 컴포넌트(110, 410, 420, 430)는 사용자(120)에 의해 액세스가능하여, 사용자(120)가 그 계층 컴포넌트(110, 410, 420, 430)에 의해 저장된/지원되는/유지되는 데이터(312)를 처리/액세스하는 것을 허용한다. 앞서 언급된 바와 같이, 비활성 상태 동안에, 사용자(120)는 유지보수를 겪고 있는 시스템 도메인(402)과 연관된 자원 호스트(110)에 액세스할 수 없다; 따라서, 클라이언트(120)는 파일(310)(즉, 스트라이프 복제물(330n), 데이터 청크(330nD) 및 비-데이터 청크(330nC)를 포함하는 청크(330))에 액세스할 수 없다.
일부 구현에서, 큐레이터(210)는, 예를 들어, 계층 컴포넌트(110, 410, 420, 430)의 맵핑에 기초하여, 임의의 하나의 시스템 도메인(402)의 스토리지 디바이스(114)에 분배되는 청크(330)의 개수를 제약한다. 따라서, 레벨 1 시스템 도메인(402)이 비활성이라면, 큐레이터(210)는, 일부 청크(330)가 액세스불가능하더라도, 파일(310)(또는 스트라이프(320))으로의 액세스가능성을 유지한다. 일부 예에서, 각각의 파일(310)(또는 스트라이프(320))에 대해, 큐레이터(210)는 단일 시스템 도메인(402) 내의 임의의 스토리지 디바이스(114) 내에 위치할 수 있는 최대수의 청크(330)를 결정하여, 파일(310)에 대한 청크(330)를 저장하고 있는 스토리지 디바이스(114)와 연관된 시스템 도메인(402)이 유지보수를 겪고 있더라도, 큐레이터(210)가 여전히 파일(310)을 회수할 수 있게 한다. 최대 개수의 청크(330)는, 일부의 청크(330)가 이용가능하지 않더라도, 큐레이터(210)가 파일(310)을 재구성할 수 있도록 보장한다. 일부 예에서, 최대 개수의 청크(330)는, 청크(330)로부터 파일(310)을 여전히 재구성할 수 있으면서, 임의의 시스템 고장을 수용하도록, 더 낮은 임계치로 설정된다. 큐레이터(210)가 청크(330)를 스토리지 디바이스(114)에 둘 때, 큐레이터(210)는, 스트라이프(320) 내에서, 단일 시스템 도메인(402)이 유지보수를 겪을 때 최대 개수보다 많지 않은 청크(330)가 비활성인 것을 보장한다. 게다가, 큐레이터(210)는 또한, 예를 들어, 계층 컴포넌트(110, 410, 420, 430)의 맵핑에 기초하여, 시스템 도메인(402) 내의 자원 호스트(110)의 데이터 프로세서(112) 상의 처리 작업의 수를 제약할 수 있다. 따라서, 레벨 1 시스템 도메인(402)이 비활성이라면, 큐레이터(210)는, 자원 호스트(110)의 프로세서(112)들 중 일부가 비활성이더라도 작업에 대한 액세스가능성을 유지한다.
일부 구현에서, 및 앞서 논의된 바와 같이, 시스템(100)은 유지보수 또는 계획되지 않은 고장을 겪을 수 있다. 스토리지 디바이스(114) 상에 저장된 일부 데이터(312)는, 그 데이터가 저장되어 있는 스토리지 디바이스(114)가 비활성 상태일 때 완전하게 이용불가능하게 될 위험이 더 높을 수 있다. 큐레이터(210)는 데이터(312)를 세그먼트화하여, 큐레이터(210)가 (손실의 위험이 더 크지 않은) 데이터(312)의 나머지를 복제 또는 복구해야 할 필요없이 유지보수 이벤트로 인해 손실의 위험이 더 높은 데이터(312)가 복구 또는 복제될 수 있게 할 수 있다.
일부 구현에서, 큐레이터(210)는 청크(330)를 고가용도 청크(330a) 또는 저가용도 청크(330b)로서 식별한다. 고가용도 청크(330a)는 저가용도 청크(330b)보다 더 높은 우선순위를 갖고 선행권을 가진다. 일부 예에서, 큐레이터(210)는 데이터(312)에 기초하여 또는 데이터(312)의 소유자나 사용자에 기초하여 청크(330)의 가용성을 결정한다.
큐레이터(210)는, 파일(310)의 각각의 스트라이프(320)에 대한 유효 중복성 값을 결정하여, 시스템(100)이 복구를 위해 스트라이프(320)를 우선순위화해야 하는지를 결정할 수 있다(즉, 복제물(330n)을 추가하거나 파일(310)의 재구성된 청크/부분들을 저장하여 파일(310)의 내구성 및 가용성을 향상시키는 것). 유효 중복성 값은 청크(330)들 및 대응하는 스트라이프(320)와 연관된 임의의 시스템 도메인(402)에 기초한다. 일부 구현에서, 유효 중복성은, 손실되어 스트라이프(320) 내의 데이터(312)가 이용불가능 또는 액세스불가능하게(예를 들어, 재구성불가능) 될 수 있는 시스템 도메인(402)의 개수에 기초한다. 대안으로서, 유효 중복성은, 손실되어 스트라이프(320) 내의 데이터(312)가 이용불가능 또는 액세스불가능하게(예를 들어, 재구성불가능) 될 필요가 있는 스트라이프(320) 내의 청크(330)들의 개수에 기초한다. 이것은, 스트라이프(320)의 청크(330)들 모두가 상이한 메모리 디바이스(114)들 상에 있고 큐레이터(210)가 디스크 레벨, 시스템 레벨 1에서 유효 중복성 값을 결정할 때 적용될 수 있다. 손실된 시스템 도메인(402)(또는 대안으로서, 손실된 청크(330))의 개수가 유효 중복성보다 크거나 같다면, 시스템(100)은 스트라이프(320)를 재구성하지 못할 것이다(즉, 시스템(100)은 스트라이프(312)의 데이터를 판독할 수 없다). 예를 들어, 1과 동일한 유효 중복성은, 이용불가능하게 된다면, 시스템(100)이 스트라이프(320)의 데이터(312)를 판독하지 못할 적어도 하나의 청크(330)가 스트라이프(320) 내에 있다는 것을 나타낸다. 2와 동일한 유효 중복성은, 시스템(100)이 스트라이프(320)의 데이터를 판독할 수 없게 이용불가능하게 되기 위해서는 최소 개수 2개의 청크(330)가 필요하다는 것을 나타낸다.
일부 구현에서, 큐레이터(210)는, 다양한 시스템 계층 레벨들(예를 들어, 레벨들 1-4)에서 유효 중복성 값을 결정한다. 큐레이터(210)는 특정한 스트라이프(320)와 유효 중복성 값을 결정할 수 있는 레벨을 고려한다. 큐레이터(210)는 유효 중복성 값을 결정하기 위해 스트라이프(320)로부터 청크(330)들을 제거하는 것을 시뮬레이션한다. 큐레이터(210)는, 최대 개수의 청크(330)가 시스템 계층(400)의 선택된 레벨 내의 단일 노드에 의존하는 청크(330)들을 제거함으로써, 스트라이프(320)로부터 청크(330)들을 가상적으로 제거한다. 큐레이터(210)는, 나머지 청크(330)들의 개수가 특정한 스트라이프(320) 내의 데이터(312)를 재구성할 수 없을 때까지 계속 가상적으로 청크(330)를 제거한다. 제거의 횟수(number of rounds of removal)가 유효 중복성이다.
(도 3a에서 논의된) 복제된 인코딩의 경우, 유효 중복성 값은, 시스템(100)이 시스템 도메인(402)에서 하나의 청크(330)(예를 들어, 복제된 청크(330n))를 보유하고 있는 한, 데이터(312)는 중복성이기 때문에, 적어도 하나의 건강한(예를 들어, 액세스가능한) 청크(300)를 포함하는 시스템 계층(400)의 선택된 레벨에 있는 고유한 시스템 도메인(402)의 개수이다. 예를 들어, 스트라이프(320)가 단일의 시스템 도메인(402)에서 하나 이상의 복제 청크(330n)를 가진다면, 유효 중복성은 1과 같다. 스트라이프(320)가 하나의 시스템 도메인(402)에서 적어도 하나의 가용/액세스가능한 청크(330)를 갖고 또 다른 시스템 도메인(402)에서 또 다른 가용/액세스가능한 청크(330)를 가진다면, 유효 중복성은 2와 같다. 도 4c에 도시된 예를 참조하여, 제1 스토리지 디바이스(114a), 제2 스토리지 디바이스(114b), 및 제3 스토리지 디바이스(114c) 상에 저장된 3개의 복제 청크(330n)를 갖는 스트라이프(320)를 고려해 보자. 각각의 스토리지 디바이스(114a-c)는 상이한 랙(430) 상에 위치한다. 제1 스토리지 디바이스(114a)는 제1 랙(430a) 상에 위치하고, 제2 스토리지 디바이스(114b)는 제2 랙(430b) 상에 위치하고, 제3 스토리지 디바이스(114c)는 제3 랙(430c) 상에 위치한다. 도시된 바와 같이, 제1 및 제2 랙(430a, 430b)은 동일한 제1 셀(420a)(예를 들어, 버스 덕트(424))을 공유하고, 제3 랙(430c)은 제2 셀(420b)에 의존한다. 따라서, 복제 청크(330n)는 2개의 레벨 3 시스템 도메인(402ca, 402cb)에 위치한다. 복제 청크(330n)는 또한 3개의 레벨 2 시스템 도메인(402ba, 402bb, 402bc)과 3개의 레벨 4 시스템 도메인(402aa, 402ab, 402ac)에 위치한다. 또한, 제1 셀(420a)과 제2 셀(420b) 양쪽 모두는 하나의 분배 센터 모듈(410, 410a)에 의존한다. (레벨 1의) 스토리지 디바이스(114)의 레벨에 있는 스트라이프(320)의 유효 중복성은, 복제 청크(330n)가 3개의 상이한 스토리지 디바이스(114) 상에 위치해 있기 때문에, 3과 같다. (레벨 2의) 랙(430)의 레벨에 있는 스트라이프(320)의 유효 중복성은, 복제 청크(330n)가 3개의 상이한 랙(430a-c)에 의존하는 스토리지 디바이스(114) 상에 위치해 있기 때문에, 역시 3과 같다. (레벨 3의) 셀(420)의 레벨에 있는 스트라이프(320)의 유효 중복성은, 데이터(312)가 제1 및 제2 셀(420a, 420b)에 피딩하는 2개의 버스 덕트(424)에 의존하는 스토리지 디바이스(114) 상에 위치해 있기 때문에, 2이다. (레벨 4의) 분배 센터 모듈(410)의 레벨에 있는 스트라이프(320)의 유효 중복성은 1이다. 따라서, 유효 중복성 값은, (시스템(100)이 하나의 청크(330)를 보유하고 있는 한, 데이터(312)는 복제를 위한 중복성이기 때문에) 적어도 하나의 건강한(예를 들어, 액세스가능한) 청크(300)를 포함하는 시스템 계층(400)의 선택된 레벨에 있는 고유한 시스템 도메인(402)의 개수로서 간주될 수 있다.
도 4d 및 도 4e를 참조하여, 시스템(100)은 청크(330)를 단순히 감소시키고 스트라이프(320) 내의 고유한 시스템 도메인의 개수를 카운팅할 수 없기 때문에, 소거-인코딩된 파일에 대한 유효 중복성은 더욱 복잡하다.
도 4d는 Reed-Solomon 소거 인코딩된 파일(310)에 대한 예시적 시스템 계층(400d)을 나타낸다. 2개의 코드 청크(330nC)와 4개의 데이터 청크(330nD), 즉, 총 6개의 청크(330)를 갖는 스트라이프(320)를 고려해 보자. Reed-Solomon 인코딩(313a)은, 코드 청크(330nC), 또는 코드 청크(330nC)나 데이터 청크(330nD)의 임의의 조합의 총 개수까지의 손실을 허용하고, 여기서, 파일(310)은 나머지 데이터 청크(들)(330nD) 및/또는 코드 청크(들)(330nC)로부터 여전히 재구성될 수 있다. 이 경우에, 시스템(100)은 2개까지의 청크(330)를 잃을 수 있고 여전히 완전히 재구성가능하다. 청크(330)는 6개의 랙들(R1-R6, 430a-430f)(레벨 2) 사이에서 분배되고, 결국 4개의 셀들(420a-d)(예를 들어, 레벨 3) 사이에서 분배된다. 도시된 바와 같이, 제1 랙(430a)과 제2 랙(430b)은 제1 셀(420a)에 의존한다. 제3 랙(430c)은 제2 셀(420b)에 의존하고, 제4 랙(430d)과 제5 랙(430e)은 제3 셀(420c)에 의존한다. 마지막으로, 제6 랙(430f)은 제4 셀(420d)에 의존한다. 또한, 예는 3개의 분배 센터 모듈(410a-c)을 포함한다. 제1 셀(420a)과 제2 셀(420b)은 제1 분배 센터 모듈(410a)에 의존한다. 제3 셀(420c)은 제2 분배 센터 모듈(P2, 410b)에 의존하고, 제4 셀(420d)은 제3 분배 센터 모듈(410c)에 의존한다. 따라서, 큐레이터(210)가 레벨 2(즉, 랙 레벨)에서의 유효 중복성을 결정할 때, 큐레이터(210)는 얼마나 많은 시스템 도메인(402)이 제거될 수 있고 시스템(100)이 여전히 스트라이프(320)로부터 데이터(312)를 판독할 것임을 고려한다. 이 예에서, 시스템(100)은 임의의 2개의 랙(430a-f)을 제거할 수 있고 데이터(312)를 여전히 판독할 수 있다. 그러나, 시스템(100)이 제3 랙(430a-f)을 제거한다면, 시스템(100)은 데이터(312)를 판독하여 스트라이프(320)를 재구성할 수 없다. 따라서, 유효 중복성은 랙 레벨(레벨 2)에서 3과 같다; 시스템(100)이 3개의 랙(430a-f)을 잃는다면 스트라이프(320)는 판독불가능하다. 앞서 언급된 바와 같이, 시스템(100)은 2개까지의 청크(330)를 잃을 수 있고 여전히 스트라이프(320)를 재구성할 수 있다.
큐레이터(210)는, 스트라이프(320)의 나머지 청크(330)들을 갖는 다른 셀(들)(420)에 비해 (최악의 경우를 가정해) 스트라이프(320)의 최대수의 청크(330)를 포함하는 셀(420)을 가상적으로 제거함으로써, 셀 레벨(즉, 버스 덕트 레벨 또는 레벨 3)에서의 유효 중복성을 결정할 수 있다. 도 4d에 도시된 예를 참조하여, 큐레이터(210)는 다른 셀(420)들에 비해 최대수의 청크(330)를 포함하는 셀(420)을 가상적으로 제거한다. 이 경우에, 제1 셀(420a)(시스템 도메인(402ca) 및 제3 셀(420c)(시스템 도메인(402cc))은 최대수의 청크(330)를 가지므로, 큐레이터(210)는 그 레벨에서 유효 중복성을 결정하기 위해 제거할 셀(420)을 선택한다(예를 들어, 무작위로 또는 결정론적으로). 일단 큐레이터(210)가 셀(420) 또는 레벨 3 시스템 도메인(402c)들 중 하나를 제거하고 나면, 시스템(100)은 제1 셀(420a) 또는 제3 셀(420c) 중 어느 하나와 함께 남겨지고, 여전히 스트라이프(320)를 재구성할 수 있다. 그 다음, 시스템(100)은, 2개의 셀(420) 또는 2개의 시스템 도메인(402, 402c)을 잃은 후에 스트라이프(320)가 판독불가능하다는 것을 의미하는 4개의 이용불가능한 청크(330)(즉, 4 > 3, 3은 시스템(100)이 스트라이프(320)를 판독불가능하게 하는 이용불가능한 청크(330)의 개수임)를 초래하는 제1 셀(420a) 또는 제3 셀(420c) 중 다른 하나를 제거할 것을 고려한다. 따라서, 2개의 셀(420) 또는 레벨 3 시스템 도메인(402c)이 비활성 상태에 있을 때 시스템(100)은 스트라이프(320)를 재구성할 수 없기 때문에, 셀 레벨(레벨 3)에서의 유효 중복성은 2와 같다.
그 다음, 큐레이터(210)는 (레벨 4의) 분배 센터 모듈에서의 유효 중복성을 고려한다. 레벨 3에 적용되는 동일한 고려사항이 역시 레벨 4에 적용된다. 따라서, 시스템(100)은, 스트라이프(310)의 나머지 청크(330)들을 갖는 다른 분배 센터 모듈(410)에 비해 최대수의 청크(330)를 포함하는 분배 센터 모듈(410)을 제거한다. 다시 도 4d를 참조하여, 시스템(100)이 제1 분배 센터 모듈(410a)을 제거한다면, 스트라이프(320)의 3개의 청크(330)는, 스트라이프(320)의 재구성에 대해 더 이상 이용가능하지 않아, 시스템(100)이 스트라이프(320)를 판독할 수 없게 한다. 따라서, 분배 센터 모듈 레벨에서의 유효 중복성은, 하나의 분배 센터 모듈(410)을 잃은 후에 스트라이프(320)가 판독불가능하므로, 1과 같다.
도 4e는 네스팅형 인코딩된 파일(310)에 대한 예시적 시스템 계층(400e)을 나타낸다. 도 3e 및 도 3f를 참조하여 앞서 설명된 바와 같이, 네스팅형 인코딩된 파일(310)은, 데이터 청크(330nD), 코드-체크 청크(330nCC), 워드-체크 청크(330nWCC), 및 코드-체크-워드-체크 청크(330nCCWC)를 포함한다. 일부 예에서, 스트라이프(320)는, 2개의 청크(330)의 2개의 컬럼들로 배열된 4개의 데이터 청크(330nD)를 포함하고, 여기서, 각각의 컬럼은 (총 2개의 코드 체크에 대해) 하나의 코드-체크 청크(330nCC)에 의해 보호되고 데이터 청크(330nD)는 3개의 워드-체크 청크(330nWC)에 의해 보호된다. 역시 도 4e의 예를 참조하여, 제1 내지 제4 랙(430a-d)은 데이터 청크(330nD)를 포함하고, 제5 및 제6 랙(430e, 430f)은 코드-체크 청크(330nCC)를 포함하며, 제7 내지 제9 랙(430g-430i)은 워드-체크 청크(330nWCC)를 포함한다(큐레이터(210)는, 네스팅형 인코딩된 파일(310)의 유효 중복성을 결정하기 위해 코드-체크-워드-체크 청크(330nCCWC)를 고려하지 않는다).
각각의 시스템 레벨에서, 네스팅형 인코딩된 파일(310)에 대해, 큐레이터(210)는, 컬럼-기반의 재구성 또는 스트라이프-기반의 재구성 또는 양쪽 모두에 대한 유효 중복성을 결정할 수 있다. 컬럼-기반의 재구성에 대해, 큐레이터(210)는 데이터 청크(330nD)와 코드-체크 청크(330nCC)만을 고려한다. 일부 예에서, 큐레이터(210)는, 전체 스트라이프(320)의 유효 중복성을 결정할 때 코드-체크 청크(330nCC)를 무시할 수 있다. 일부 구현에서, 큐레이터(210)는, 전체 스트라이프(320)의 유효 중복성을 결정할 때, 어느 코드-체크 청크(330nCC)가 어느 컬럼 C와 함께 하는지를 고려한다. 예를 들어, 시스템(100)이 제1 컬럼 C1 내의 데이터 청크(330nD)와 제2 컬럼 C2 내의 코드-체크 청크(330nCC)를 잃는다면, 스트라이프(320)는 양호하고 재구성될 수 있다. 따라서, 큐레이터(210)는, 유효 중복성 값 ER을 결정할 때 네스팅형 스트라이프(320) 내의 청크(330)의 "지오메트리"를 고려할 수 있다.
레벨 2, 즉, 랙 레벨에서, 큐레이터(210)는, 제1 내지 제4 랙(430a-d)과 연관된 스토리지 디바이스(114) 상에 저장된 데이터 청크(330nD)와, 제5 및 제6 랙(430e, 430f)과 연관된 스토리지 디바이스(114) 상에 저장된 코드-체크 청크(330nCC)를 고려함으로써 컬럼 C의 유효 중복성을 결정한다. 예에서 언급된 바와 같이, 각각의 컬럼 C는 2개의 데이터 청크(330nD)와 하나의 코드-체크 청크(330nCC), 즉, 총 3개의 청크(330)를 포함한다. 따라서, 컬럼 C를 재구성하기 위해, 시스템(100)은 2개의 가용 청크(330)(즉, 활성 상태의 디바이스들에 저장된 청크(330))를 필요로 한다. 시스템(100)은 2개 또는 그 이상의 청크(330)가 이용가능하지 않다면 컬럼 C를 재구성할 수 없다. 따라서, 큐레이터(210)는, 2개의 랙이 비활성이라면 시스템(100)이 컬럼을 재구성할 수 없기 때문에, 레벨 2 시스템 도메인(402)에서의 컬럼-기반의 재구성에 대한 유효 중복성은 2와 같다고 결정한다. 유사하게, 큐레이터(210)는 레벨 3 및 레벨 4 시스템 도메인(402)에서의 컬럼-기반의 재구성을 결정하기 위해 동일한 사항을 고려한다. 각각의 컬럼 C로부터의 데이터 청크(330)는 상이한 셀(420)에 저장된다고 가정하면, 레벨 3 시스템 도메인(402)에서의 컬럼-기반의 재구성에 대한 유효 중복성은 2와 같고, 레벨 4 시스템 도메인(402)에서의 컬럼-기반의 재구성에 대한 유효 중복성은 1과 같다.
게다가, 큐레이터(210)는, 제1 내지 제4 랙(430a-d)과 연관된 스토리지 디바이스(114) 상에 저장된 데이터 청크(330nD)와, 제7 내지 제9 랙(430g-i)과 연관된 스토리지 디바이스(114) 상에 저장된 워드-체크 청크(330nWCC)를 고려함으로써 스트라이프(320)의 유효 중복성을 결정한다. 일부 예에서, 큐레이터(210)는 일반적으로 유효 중복성 값 ER을 결정할 때 코드-체크 청크(330nC)를 무시한다; 반면 다른 예에서는, 큐레이터(210)는 컬럼-기반의 유효 중복성 값 ER을 결정할 때 코드-체크 청크(330nC)를 고려한다. 따라서, 스트라이프(320)를 재구성하기 위해, 시스템(100)은 적어도 4개의 가용 청크(330)(즉, 활성 상태의 디바이스들에 저장된 청크(330))를 필요로 한다. 시스템(100)은 4개 또는 그 이상의 청크(330)가 이용가능하지 않다면 스트라이프(320)를 재구성할 수 없다. 따라서, 시스템(100)은, 4개의 랙(430a-d)이 비활성이라면 시스템(100)이 스트라이프(320)를 재구성할 수 없기 때문에, 레벨 2 시스템 도메인(402)에서의 스트라이프-기반의 재구성에 대한 유효 중복성은 4와 같다고 결정한다. 큐레이터(210)는 스트라이프(320)의 유효 중복성을 결정할 때 코드 청크(330nC)도 역시 고려할 수 있다. 게다가, 제1 컬럼 C1 내의 데이터 청크(330nD)와 제2 컬럼 C2 내의 코드-체크 청크(330nCC)의 손실은, 다른 손실이 없다고 가정하면, 여전히 컬럼 C 단독에 기초한 스트라이프(320)의 재구성을 허용하는 반면, 동일한 컬럼 C 내의 데이터 청크(330nD)와 코드-체크 청크(330nCC)를 잃는 것은, 스트라이프(320)의 재구성을 방지할 수 있기 때문에, 큐레이터(210)는 유효 중복성 값 ER을 결정할 때 청크(330)의 지오메트리(예를 들어, 청크(330)가 어느 컬럼 C에 존재하는지)를 고려할 수 있다. 손실의 일부 지오메트리(즉, 다양한 컬럼 C 내의 청크(330)의 손실)는, 다른 유형의 재구성보다 빠른, 컬럼 기반의 재구성을 허용하지 않을 수 있다.
유사하게, 큐레이터(210)는 레벨 3 및 레벨 4 시스템 도메인(402)에서의 스트라이프-기반의 재구성을 결정하기 위해 동일한 사항을 고려한다. 도시된 예에서, 레벨 3 시스템 도메인(402)에서의 스트라이프-기반의 재구성에 대한 유효 중복성은 2와 같고, 레벨 4 시스템 도메인(402)에서의 스트라이프-기반의 재구성에 대한 유효 중복성은 1과 같다.
도 5를 참조하면, 일부 구현에서, 시스템(100)(예를 들어, 큐레이터(210))은 복구를 위한 데이터(312)를 우선순위화한다. 스토리지 디바이스(114) 상에 저장된 데이터(312)는, 3개의 상태, 즉, 가용 상태, 비가용 상태, 및 분실 상태 중 하나를 가질 수 있다. 데이터(312)가 초기에 스토리지 디바이스(114) 상에 저장될 때, 이것은 블록(502)에 도시된 바와 같이 가용 상태에 있다. 데이터(312)가 가용 상태에 있을 때, 사용자/클라이언트(120)는 데이터(312)에 액세스할 수 있다. 그러나, 데이터(312)가 비가용 상태 또는 분실 상태에 있을 때, 사용자/클라이언트(120)는 데이터(312)에 액세스하지 못할 수 있고, 시스템(100)은 데이터(312)를 재구성하여 사용자/클라이언트(120)에 이용가능하게 할 수 있다. 데이터(312)의 비가용 및 분실 상태는 시스템 도메인(402)의 비활성 상태에 기인한 것일 수 있다. 따라서, 데이터(312)가 비활성 상태에 있는 시스템 도메인(402)과 연관된다면, 데이터(312)는 비가용 상태 또는 분실 상태에 있을 수 있다. 데이터(312)는 역시 다른 이유로 인해 이용불가능하거나 분실될 수도 있다. 결정 블록(504)을 참조하면, 큐레이터(210)는 데이터(312)가 이용불가능하게 되는지를 결정한다. 이용불가능한 데이터(312)는 제로보다 큰 기간 동안 이용가능하지 않은 임의의 데이터(312)이다. 블록(506)에서의 비가용 상태는 가용 상태(블록 502)와 분실 상태(블록 512) 사이의 천이 상태이다. 임계 기간 Tm 동안 이용불가능한 데이터(312)는 비가용 데이터(312)이다(예를 들어, 0 < t < Tm, 여기서 t는 데이터(312)가 이용불가능한 시간이고, Tm은 임계 시간이다). 일부 예에서, Tm은 15 내지 30분과 같다. 결정 블록(508)에서, t ≥ Tm일 때, 데이터(312)는 분실된 것으로 간주되고 분실 상태(블록 512)로 천이한다. 비가용 데이터(312)는, 빠른 시스템 고장이나 유지보수로 인해 임계 기간(0 < t < Tm) 내에서 이용가능할 수도 있기 때문에 이용불가능하다고 간주되는 데이터(312)이다. 그러나, 시스템 고장이나 유지보수가 임계 기간 Tm 보다 오래 지속된다면, 데이터(312)는 분실된 것으로 간주되고 블록(514)에서 시스템(100)은 분실 데이터(312)를 재구성(및 다시 한번 이용가능하게)할 수 있다. 큐레이터(210)는, 스트라이프(320)의 현재의 유효 중복성 ERC를 포함한 데이터(312)의 상태를 주기적으로 업데이트할 수 있다.
일부 구현에서, 큐레이터(210)는 데이터(312)를 고가용도 데이터(312a) 또는 저가용도 데이터(312b)로서 식별하고, 데이터(312)가 분실된 것으로 간주되기 이전의 임계 시간 Tm을 고려하지 않고, 임계 유효 중복성 값 ERT(즉, 유효 중복성 값)보다 작은 현재의 유효 중복성 값 ERC를 갖는 고가용도 데이터(312a)를 재구성한다. 사실상, 이것은 잃게 될 위험이 있는 소정의 고가용도 데이터(312a)의 재구성을 가속한다. 따라서, 블록(508)을 고려하면, t ≥ Tm이 거짓이면, 즉, 데이터(312)가 여전히 비가용 상태에 있다면, 블록(510)에서, 큐레이터(210)는 데이터(312)가 고가용도 데이터(312a)인지 및 데이터(312)의(즉, 스트라이프(320)의) 유효 중복성 ER이 임계 유효 중복성 값 ER보다 작은지(ERC ≤ ERT ?)를 결정한다. 데이터(312)가 고가용도 데이터(312a)이고 ERC ≤ ERT 이면, 큐레이터(210)는 데이터(312a)의 재구성을 개시하고, 블록(508)에서의 조건(t ≥ Tm)을 바이패스한다. 일부 예에서, 큐레이터(210)는 데이터(312)를 재구성하기 이전에 데이터(312)의 상태를 업데이트하지 않는 반면, 다른 예에서는, 큐레이터(210)는, 데이터(312)를, 비가용 상태로부터, 재구성을 위해 데이터(312)를 플래깅할 수 있는 블록(512)의 분실 상태로 천이할 수 있다. 그러나, 데이터(312)가 고가용도 데이터(312a)가 아니고 데이터(312)의 현재의 유효 중복성 값 ERC가 임계 유효 중복성 값 ERT보다 작거나 같지 않다면, 데이터(312)는 블록(506)의 비가용 상태에 머문다. 블록(508)의 조건(t ≥ Tm)을 바이패스하는 것은, 시스템(100)이, 저가용도 데이터(312b) 이전에 및 고가용도 데이터(312a)가 재구성되지 않고 손실되기 이전에 임계 유효 중복성 값 ERT에 도달한 고가용도 데이터(312a)를 재구성하는 것을 허용함으로써 큐레이터(210)가 고가용도인 데이터(312)를 우선순위화하는 것을 허용한다. 임계 유효 중복성 값(ERT)은 시스템(100)의 구성 옵션일 수 있다. 일반적으로, 유효 중복성 값 ER은, 시스템 레벨, 그 상태, 스트라이프(320)의 인코딩 유형, 및 스트라이프(320) 내의 청크(330)의 상태(예를 들어, 가용, 비가용, 또는 분실)에 기초할 수 있다. 유효 중복성 값 ER은, 스트라이프(320)의 (재구성을 허용하는) 중복성을 여전히 유지하면서, 스트라이프(320)의 얼마나 많은 청크(330)가 손실될 수 있는지를 나타내는 것이 아니라, 얼마나 많은 시스템 도메인(402)이 손실될 수 있는지를 나타낼 수 있다. 단일의 추가 청크(330)를 손실하는 것은 현재의 유효 중복성 값 ERC에 영향을 미치지 않을 수 있다.
일부 구현에서, 고가용도로서 분류될 때 스트라이프(320)에 대한 유효 중복성 값 ER은, 저가용도로서 분류될 때 그 스트라이프(320)에 대한 유효 중복성 값 ER보다 항상 작거나 같다. 예로서, 상이한 시스템 도메인(402) 내의 스트라이프(320)의 3개의 복제된 청크(330)를 고려해보자. 제1 청크(330)는 t ≥ Tm 동안 이용불가능하다. 제2 청크(330)는 t < Tm 동안 이용불가능하고; 제3 청크(330)는 이용가능하다. 청크(330)가 고가용도 청크(330a)이면, 현재의 유효 중복성 값 ERC는 1인 반면, 청크(330)가 저가용도 청크(330b)이면, 제2 분실 청크(330)는 t ≥ Tm동안 이용불가능하지 않기 때문에 현재의 유효 중복성 값 ERC는 2이다. 스트라이프(320)(및 그 청크(330))가 고가용도로서 분류될 때, 그 유효 중복성 값 ER은, t < Tm 동안 청크(330)를 분실된 것으로 간주함으로써 더욱 적극적으로 결정되어, 스트라이프(320)가 손실될 위험에 처할 때 더 빠른 재구성을 야기한다.
도 6을 참조하여, 일부 구현에서, 분산형 스토리지 시스템(100)에서 복구를 위한 데이터(312)를 우선순위화하는 방법(600)은, 청크(330)들을 갖는 복수의 스트라이프(320)를 포함하는 파일(310)의 각각의 스트라이프(320)에 대해, 데이터 처리 디바이스를 이용하여, 스트라이프(320)가 고가용도 청크(330a) 또는 저가용도 청크(330b)를 포함하는지를 결정하는 단계(602)를 포함한다. 파일(310)은 고가용도 또는 저가용도로서 분류될 수 있다. 파일의 스트라이프(320) 및 스트라이프(320)의 대응하는 청크(330)는 그에 따라 고가용도 또는 저가용도로서 분류될 수 있다. 방법(600)은 또한, 데이터 처리 디바이스를 이용하여, 파일(310)의 각각의 스트라이프(320)에 대한 유효 중복성 값 ER을 결정하는 단계(604)를 포함한다. 유효 중복성 값 ER은 청크(330)들 및 대응하는 스트라이프(320)와 연관된 임의의 시스템 도메인(402)에 기초한다. 분산형 스토리지 시스템(100)은 시스템 도메인(402)들을 포함한 시스템 계층(400)을 가진다. 게다가, 각각의 시스템 도메인(402)은 활성 상태 또는 비활성 상태를 가진다. 활성 상태의 시스템 도메인(402)과 연관된 스트라이프(320)의 청크(330)들은 액세스가능한 반면, 비활성 상태의 시스템 도메인(402)과 연관된 스트라이프(320)의 청크(330)들은 액세스불가능하다. 청크(330)들은 역시 다른 이유로 액세스불가능하게 될 수 있고, 액세스불가능은 시스템 도메인(402)의 활성/비활성 상태와 직접 상관되지 않을 수도 있다.
스트라이프(320)의 청크(330)들이 액세스불가능하게 되면, 이 방법(600)은, 데이터 처리 디바이스를 이용하여, 실질적으로 즉각적으로, 임계 유효 중복성 값 ERT보다 낮은 유효 중복성 값 ER을 갖는 액세스불가능한 고가용도 청크(330a)들을 재구성하는 단계(606)를 포함한다. 게다가, 스트라이프(320)의 청크(330)들이 액세스불가능하게 되면, 이 방법은 또한 임계 기간 이후에: 1) 액세스불가능한, 저가용도 청크(330b)들; 및 2) 임계 유효 중복성 ERT보다 크거나 같은 유효 중복성 값 ER을 갖는 액세스불가능한 고가용도 청크(330a)들을 재구성하는 단계(608)를 포함한다. 따라서, (유효 중복성 값 ER에 기초하여) 손실될 위험이 높은 소정의 고가용도 청크(330a)는, 손실될 위험이 높지 않은 저가용도 청크(330b) 또는 기타의 고가용도 청크(330a)보다 비교적 더 빠른 재구성을 수신한다. 액세스불가능한 청크(330)의 재구성을 트리거하기 위해, 임계 기간에 추가하여 또는 그 대안으로서, 다른 파라미터들이 이용될 수도 있다. 예를 들어, 클라이언트(120)는 호스트 머신(110)의 메모리 디바이스(114)에게 데이터(312)(예를 들어, 청크(330))를 요청하고 데이터(312)를 발견하지 못할 수도 있다. 데이터(312)를 발견하지 못하는 것에 응답하여, 클라이언트(120)는 큐레이터(210)에게 액세스불가능한 데이터(312)를 통보할 수 있다. 큐레이터(210)가, 데이터(312)가 액세스불가능(예를 들어, t < Tm 동안 이용불가능 또는 분실중(t ≥ Tm동안 이용불가능))하다고 확인한다면, 큐레이터(210)는 지연없이(예를 들어, 15분 또는 30분 등의, 임계 기간을 기다리지 않고) 데이터(312)의 재구성을 개시할 수 있다.
일부 구현에서, 이 방법(600)은, 시스템 도메인(402)이 비활성 상태일 때 시스템 도메인(402)과 연관된 파일(310)의 각각의 스트라이프(320)에 대한 유효 중복성 값 ER을 업데이트하는 단계를 더 포함한다. 임계 기간은 약 15분 내지 약 30분일 수 있다.
시스템 계층(400)은 시스템 레벨들을 포함할 수 있다. 시스템 레벨들은, 제1, 제2, 제3, 및 제4 시스템 레벨들을 포함한다. 제1 시스템 레벨(레벨 1)은, 데이터 처리 디바이스(112), 비일시적 메모리 디바이스(114), 또는 네트워크 인터페이스 제어기(116)의 호스트 머신(110)에 대응한다. 각각의 호스트 머신(110)은 시스템 도메인(402)을 가진다. 제2 시스템 레벨(레벨 2)은, 호스트 머신(110)을 하우징하는 랙(430)의 전력 전달기(434), 통신 전달기(436), 또는 쿨링 전달기(432)에 대응한다. 랙(430)의 각각의 전력 전달기(434), 통신 전달기(436), 또는 쿨링 전달기(432)는 시스템 도메인(402)을 가진다. 제3 시스템 레벨(레벨 3)은, 연관된 랙(430)을 갖는 셀(420)의 전력 전달기(424), 통신 전달기(426), 또는 쿨링 전달기(422)에 대응한다. 셀(420)의 각각의 전력 전달기(424), 통신 전달기(426), 또는 쿨링 전달기(422)는 시스템 도메인(402)을 가진다. 제4 시스템 레벨(레벨 4)은 셀(420)의 분배 센터 모듈(410)에 대응하고, 각각의 분배 센터 모듈(410)은 시스템 도메인(402)을 가진다.
일부 예에서, 각각의 스트라이프(320)에 대해, 이 방법(600)은 각각의 시스템 레벨에 대한 유효 중복성 값 ER을 결정하는 단계를 포함한다. 복제 청크(330)를 갖는 복제된 스트라이프(330n)에 대한 유효 중복성 값을 결정하는 단계는, 대응하는 시스템 레벨에서 적어도 하나의 가용 복제 청크(330)를 갖는 고유한 시스템 도메인(402)의 수를 식별하는 단계를 포함한다. 제2 시스템 레벨에서 데이터 청크(330nD)와 코드 청크(330nC)를 갖는 인코딩된 스트라이프(320)에 대한 유효 중복성 값을 결정하는 단계는, 데이터 액세스가능성을 유지하면서 비활성일 수 있는 제2 시스템 레벨 내의 고유한 시스템 도메인(402)의 수를 식별하는 단계를 포함한다. 또한, 제3 또는 제4 시스템 레벨에서 데이터 청크(330nC)와 코드 청크(330nC)를 갖는 인코딩된 스트라이프(320)에 대한 유효 중복성 값을 결정하는 단계는, 데이터 액세스가능성을 유지하면서 비활성일 수 있고 나머지 시스템 도메인(402)들에 비해 최대수의 청크(330)를 가질 수 있는 제3 또는 제4 레벨 내의 시스템 도메인(402)을 식별하는 단계를 포함한다. 추가로, 하나보다 많은 시스템 도메인(402)이 최대수의 청크(330)를 가질 때, 이 방법(600)은 시스템 도메인(402)들 중 하나를 무작위로 선택하는 단계를 포함한다.
일부 구현에서, 데이터 청크(330nD), 코드-체크 청크(330nCC), 및 워드-체크 청크(330nWCC)를 갖는 네스팅형 코드 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 컬럼-유효 중복성 또는 스트라이프-유효 중복성 중 하나를 결정하는 단계를 더 포함한다. 컬럼-유효 중복성을 결정하는 단계는, 컬럼 C 내의 다른 청크(330)들로부터 재구성될 수 있는 컬럼 C 내의 고유한 청크(330)들의 개수를 식별하는 단계; 및 스트라이프(320) 내의 다른 청크(330)들로부터 재구성될 수 있는 스트라이프(320) 내의 고유한 청크(330)들의 개수를 식별하는 것을 포함한 스트라이프-유효 중복성을 결정하는 단계를 포함한다.
도 7을 참조하여, 일부 구현에서, 분산형 스토리지 시스템(100)에서 복구를 위한 데이터(312)를 우선순위화하는 방법(700)은, 컴퓨팅 프로세서를 이용하여, 파일(310) ―파일(310)은 청크(330)들을 갖는 스트라이프(320)들로 분할됨― 의 각각의 스트라이프(320)에 대한 유효 중복성 값을 결정하는 단계(702)를 포함한다. 유효 중복성 값은 청크(330)들 및 대응하는 스트라이프(320)와 연관된 임의의 시스템 도메인(402)에 기초한다. 시스템 도메인(402)이 비활성 상태에 있을 때, 이 방법(700)은 그 시스템 도메인(402)과 연관된 파일(310)의 각각의 스트라이프(320)에 대한 유효 중복성 값을 업데이트하는 단계(704)를 포함한다. 또한, 이 방법(700)은, 그 유효 중복성 값이 임계 유효 중복성 값 ERT보다 작을 때 스트라이프(320)의 재구성을 야기하는 단계(706)를 포함한다. 일부 예에서, 이 방법(700)은, 각각의 스트라이프(320)에 대해, 각각의 시스템 레벨에 대한 유효 중복성 값을 결정하는 단계를 더 포함한다.
일부 구현에서, 이 방법(700)은, 스트라이프(320)가 고가용도 청크(330) 또는 저가용도 청크(330)를 포함하는지를 결정하는 단계, 및 저가용도 청크(330)의 재구성을 지연시키는 단계(예를 들어, 저가용도 청크(330)의 재구성을 약 15분 내지 약 30분의 기간 동안 지연시키는 단계)를 더 포함한다.
여기서 설명된 시스템 및 기술들의 다양한 구현들은, 디지털 전자 회로, 집적 회로, 특별 설계된 ASIC(application specific integrated circuit, 주문형 집적 회로), 컴퓨터 하드웨어, 펌웨어, 소프트웨어, 및/또는 이들의 조합으로 실현될 수 있다. 이들 다양한 구현들은, 스토리지 시스템, 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스와 데이터 및 명령어를 주고 받도록 결합된, 특별 목적 또는 범용일 수 있는, 적어도 하나의 프로그램가능한 프로세서를 포함하는 프로그램가능한 시스템 상에서 실행가능한 및/또는 인터프리트가능한 하나 이상의 컴퓨터 프로그램에서의 구현을 포함할 수 있다.
(프로그램, 소프트웨어, 소프트웨어 애플리케이션 또는 코드라고도 알려져 있는) 이들 컴퓨터 프로그램은, 프로그램가능한 프로세서를 위한 머신 명령어를 포함하고, 고수준 절차형 및/또는 객체-지향형 프로그래밍 언어, 및/또는 어셈블리/머신 언어로 구현될 수 있다. 여기서 사용될 때, 용어 "머신-판독가능한 매체" 및 "컴퓨터 판독가능한 매체"란, 머신-판독가능한 신호로서 머신 명령어를 수신하는 머신-판독가능한 매체를 포함한, 머신 명령어 및/또는 데이터를 프로그램가능한 프로세서에 제공하는데 이용되는 임의의 컴퓨터 프로그램 제품, 장치 및/또는 디바이스(예를 들어, 자기 디스크, 광 디스크, 메모리, 프로그램가능한 로직 디바이스(PLD))를 말한다. 용어 "머신-판독가능한 신호"란, 머신 명령어 및/또는 데이터를 프로그램가능한 프로세서에 제공하는데 이용되는 임의의 신호를 말한다.
본 명세서에서 설명된 주제와 기능적 동작들의 구현은, 본 명세서에서 개시된 구조들 및 그들의 구조적 균등물들을 포함한 디지털 전자 회로로, 컴퓨터 소프트웨어, 펌웨어, 또는 하드웨어로, 또는 이들 중 하나 이상의 조합으로 구현될 수 있다. 게다가, 본 명세서에서 설명된 주제는, 하나 이상의 컴퓨터 프로그램 제품, 즉, 데이터 처리 장치에 의해 실행되거나 데이터 처리 장치의 동작을 제어하기 위한 컴퓨터 판독가능한 매체에 인코딩된 컴퓨터 프로그램 명령어들의 하나 이상의 모듈로서 구현될 수 있다. 컴퓨터 판독가능한 매체는, 머신 판독가능한 스토리지 디바이스, 머신 판독가능한 스토리지 기판, 메모리 디바이스, 머신 판독가능한 전파된 신호에 영향을 미치는 물질의 조성, 또는 이들 중 하나 이상의 조합일 수 있다. 용어 "데이터 처리 장치", "컴퓨팅 디바이스" 및 "컴퓨팅 프로세서"는, 예로서 프로그램가능한 프로세서, 컴퓨터, 또는 복수의 프로세서나 컴퓨터를 포함한, 데이터를 처리하기 위한 모든 장치, 디바이스, 및 머신을 포괄한다. 장치는, 하드웨어 외에도, 해당 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예를 들어, 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 이들 중 하나 이상의 조합으로 구성된 코드를 포함할 수 있다. 전파된 신호는, 인공적으로 생성된 신호, 예를 들어, 적절한 수신 장치로의 전송을 위해 정보를 인코딩하도록 생성된 머신-생성된 전기적, 광학적, 또는 전자기 신호이다.
(애플리케이션, 프로그램, 소프트웨어, 소프트웨어 애플리케이션, 스크립트, 또는 코드라고도 알려진) 컴퓨터 프로그램은, 컴파일형 또는 인터프리터형 언어를 포함한 임의의 형태의 프로그래밍 언어로 작성될 수 있고, 단독형 프로그램이나, 모듈, 컴포넌트, 서브루틴, 또는 컴퓨팅 환경에서 이용하기에 적합한 기타의 유닛을 포함한, 임의 형태로 배치될 수 있다. 컴퓨터 프로그램은 반드시 파일 시스템 내의 파일에 대응할 필요는 없다. 프로그램은 다른 프로그램이나 데이터(예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트)를 보유하고 있는 파일의 일부로서, 해당 프로그램에 전용된 단일 파일에, 또는 복수의 조율된 파일들(예를 들어, 하나 이상의 모듈, 서브 프로그램, 또는 코드의 부분들을 저장하고 있는 파일들)에 저장될 수 있다. 컴퓨터 프로그램은, 하나의 컴퓨터 또는 적어도 하나의 사이트에 또는 복수의 사이트에 걸쳐 분산되고 통신 네트워크를 통해 상호접속된 복수의 컴퓨터에서 실행되도록 배치될 수 있다.
본 명세서에서 설명된 프로세스들 및 로직 흐름들은, 입력 데이터에 관해 동작하고 출력을 생성함으로써 하나 이상의 컴퓨터 프로그램을 실행하여 기능을 수행하는 하나 이상의 프로그램가능한 프로세서에 의해 수행될 수 있다. 프로세스들과 로직 흐름들은 또한, 특별 목적 로직 회로, 예를 들어, FPGA(필드 프로그래머블 게이트 어레이) 또는 ASIC(application specific integrated circuit; 주문형 집적 회로)에 의해 수행될 수 있고, 또한 장치가 이들로서 구현될 수 있다.
컴퓨터 프로그램을 실행하기에 적합한 프로세서로는, 예로서, 범용 마이크로프로세서 및 특별 목적 마이크로프로세서 양쪽 모두, 및 임의의 종류의 디지털 컴퓨터의 임의의 하나 이상의 프로세서가 포함된다. 일반적으로, 프로세서는 판독 전용 메모리나 랜덤 액세스 메모리 또는 양쪽 모두로부터 명령어와 데이터를 수신할 것이다. 컴퓨터의 본질적 요소들은, 명령어를 실행하기 위한 프로세서와, 명령어 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 또한, 데이터를 저장하기 위한 하나 이상의 대용량 스토리지 디바이스, 예를 들어, 자기, 광자기 디스크, 또는 광 디스크를 포함하거나, 이들로부터 데이터를 수신, 이들에게 데이터를 전송, 또는 양쪽 모두를 위해 동작적으로 결합될 수 있다. 그러나, 컴퓨터는 이러한 디바이스를 가질 필요는 없다. 게다가, 컴퓨터는, 또 다른 디바이스에, 예를 들어, 몇 가지 예를 들자면, 모바일 전화, 개인용 디지털 보조도구(PDA), 모바일 오디오 재생기, GPS(Global Positioning System) 수신기에 임베딩될 수 있다. 컴퓨터 프로그램 명령어 및 데이터를 저장하기에 적합한 컴퓨터 판독가능한 매체는, 예로서, 반도체 메모리 디바이스, 예를 들어, EPROM, EEPROM, 및 플래시 메모리 디바이스; 자기 디스크, 예를 들어, 내부 하드 디스크 또는 착탈식 디스크; 광자기 디스크; 및 CD ROM과 DVD-ROM 디스크를 포함한, 모든 형태의 비휘발성 메모리, 매체 및 메모리 디바이스를 포함한다. 프로세서와 메모리는 특별 목적 로직 회로에 의해 보충되거나, 이에 병합될 수 있다.
사용자와의 상호작용을 제공하기 위해, 본 개시내용의 하나 이상의 양태들은, 디스플레이 디바이스, 예를 들어, CRT(cathode ray tube), LCD(liquid crystal display) 모니터, 또는 사용자에게 정보를 디스플레이하기 위한 터치스크린과, 선택사항으로서, 키보드 및 포인팅 디바이스, 예를 들어, 사용자가 컴퓨터에 입력을 제공할 수 있는 마우스 또는 트랙볼을 갖는 컴퓨터 상에서 구현될 수 있다. 사용자와의 상호작용을 제공하기 위해 다른 종류의 디바이스들이 역시 이용될 수 있다; 예를 들어, 사용자에게 제공된 피드백은 임의의 형태의 센서 피드백, 예를 들어, 시각적 피드백, 청각적 피드백, 또는 촉각적 피드백일 수 있고; 사용자로부터의 입력은, 음향, 음성, 또는 촉각적 입력을 포함한, 임의의 형태로 수신될 수 있다. 또한, 컴퓨터는, 사용자에 의해 이용되는 디바이스에 문서를 전송하거나 디바이스로부터 문서를 수신함으로써; 예를 들어, 웹 브라우저로부터 수신된 요청에 응답하여, 사용자의 클라이언트 디바이스 상의 웹 브라우저에 웹 페이지를 전송함으로써 사용자와 상호작용할 수 있다.
본 개시내용의 하나 이상의 양태는, 백엔드 컴포넌트(backend component), 예를 들어, 데이터 서버를 포함하거나, 미들웨어 컴포넌트(middleware component), 예를 들어, 애플리케이션 서버를 포함하거나, 프론트엔드 컴포넌트(frontend component), 예를 들어, 사용자가 본 명세서에서 설명된 주제의 구현과 상호작용할 수 있는 그래픽 사용자 인터페이스나 웹 브라우저를 갖는 클라이언트 컴퓨터를 포함하는 컴퓨팅 시스템, 또는 이러한 하나 이상의 백엔드, 미들웨어, 또는 프론트엔드 컴포넌트들의 임의의 조합으로 구현될 수 있다. 시스템의 컴포넌트들은, 임의의 형태나 매체의 디지털 데이터 통신, 예를 들어, 통신 네트워크에 의해 상호접속될 수 있다. 통신 네트워크의 예로서는, 근거리 통신망("LAN"), 광역 네트워크("WAN"), 인터-네트워크(예를 들어, 인터넷), 및 피어-투-피어 네트워크(예를 들어, 애드 혹(ad hoc) 피어-투-피어 네트워크)가 포함된다.
컴퓨팅 시스템은 클라이언트와 서버를 포함할 수 있다. 클라이언트와 서버는 일반적으로는 서로 멀리 떨어져 있고 통상적으로 통신 네트워크를 통해 상호작용한다. 클라이언트와 서버의 관계는, 각각의 컴퓨터 상에서 실행중이며 서로에 관해 클라이언트-서버 관계를 갖는 컴퓨터 프로그램들 때문에 발생하는 것이다. 일부 구현에서, 서버는 데이터(예를 들어, HTML 페이지)를 (예를 들어, 클라이언트 디바이스와 상호작용하는 사용자로부터의 사용자 입력을 수신하고 데이터를 디스플레이하기 위한 목적으로) 클라이언트 디바이스에 전송한다. (예를 들어, 사용자 상호작용의 결과로서) 클라이언트 디바이스에서 생성된 데이터는 클라이언트 디바이스로부터 서버에서 수신될 수 있다.
본 명세서가 많은 특정한 사항들을 포함하지만, 이들은 본 개시내용의 범위의 또는 청구 범위의 제한으로서 해석되어서는 안 되고, 본 개시내용의 특정한 구현에 고유한 피쳐들의 설명으로서 해석되어야 한다. 별개의 구현들의 정황에서 본 명세서에서 설명된 소정 피쳐들은 또한, 조합하여 단일의 구현에서 조합하여 구현될 수 있다. 역으로, 단일 구현의 정황에서 설명된 다양한 피쳐들은 또한, 복수의 구현들에서 별개로 구현되거나 임의의 적절한 서브조합(subcombination)으로 구현될 수 있다. 게다가, 피쳐들이 상기에서 소정 조합으로 작용하는 것으로 설명되거나 심지어 이러한 것으로서 처음 청구되더라도, 청구된 조합으로부터의 하나 이상의 특징들은 일부 경우에는 그 조합으로부터 삭제될 수 있고, 청구된 조합은 서브조합이나 서브조합의 변형에 관한 것일 수도 있다.
마찬가지로, 동작들이 도면에서 특정 순서로 도시되더라도, 이것은, 바람직한 결과를 달성하기 위해 이러한 동작들이 도시된 특정 순서로 또는 순차적 순서로 수행될 것을 요구하거나, 도시된 모든 동작들이 수행될 것을 요구하는 것으로 이해되어서는 안 된다. 소정 상황에서는, 멀티태스킹 및 병렬 처리가 유익할 수도 있다. 게다가, 전술된 실시예에서의 다양한 시스템 컴포넌트들의 분리는, 모든 실시예에서 이러한 분리를 요구하는 것으로 이해되어서는 안 되며, 설명된 프로그램 컴포넌트들 및 시스템들은 전체적으로 하나의 소프트웨어 제품으로 함께 통합되거나 복수의 소프트웨어 제품 내에 팩키징될 수 있는 것으로 이해하여야 한다.
다수의 구현이 설명되었다. 그럼에도 불구하고, 본 개시내용의 사상과 범위로부터 벗어나지 않고 다양한 수정이 이루어질 수 있다는 것을 이해할 것이다. 따라서, 다른 구현들도 이하의 청구항들의 범위 내에 있다. 예를 들어, 청구항에서 인용되는 동작(action)들은 상이한 순서로 수행되어 여전히 바람직한 결과를 달성할 수 있다.

Claims (30)

  1. 분산형 스토리지 시스템에서 복구를 위한 데이터를 우선순위화하는 방법으로서,
    청크들을 갖는 복수의 스트라이프를 포함하는 파일의 각각의 스트라이프에 대해, 데이터 처리 디바이스를 이용하여, 스트라이프가 고가용도 청크 또는 저가용도 청크를 포함하는지를 결정하는 단계;
    상기 데이터 처리 디바이스를 이용하여, 상기 파일의 각각의 스트라이프에 대한 유효 중복성 값을 결정 ― 상기 유효 중복성 값은 청크들 및 대응하는 스트라이프와 연관된 임의의 시스템 도메인에 기초하고, 상기 분산형 스토리지 시스템은 시스템 도메인들을 포함하는 시스템 계층을 가지며, 각각의 시스템 도메인은 활성 상태 또는 비활성 상태를 가지며, 활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스가능하고, 비활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스불가능함― 하는 단계; 및
    상기 데이터 처리 디바이스를 이용하여, 스트라이프의 청크들이 액세스불가능하게 된 것을 결정하는 단계 - 상기 스트라이프의 청크들이 액세스불가능하게 되었다는 결정에 응답하여:
    상기 데이터 처리 디바이스를 이용하여, 즉각적으로, 임계 유효 중복성 값보다 작은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들을 재구성하는 단계; 및
    임계 기간 이후에, 상기 데이터 처리 디바이스를 이용하여:
    액세스불가능한 저가용도 청크들; 및
    임계 유효 중복성 값보다 크거나 같은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들을 재구성하는 단계
    를 포함하는, 방법.
  2. 제1항에 있어서, 상기 시스템 도메인이 비활성 상태일 때 상기 시스템 도메인과 연관된 상기 파일의 각각의 스트라이프에 대한 유효 중복성 값을 업데이트하는 단계를 더 포함하는 방법.
  3. 제1항에 있어서, 상기 임계 기간은 15분 내지 30분을 포함하는, 방법.
  4. 제1항에 있어서, 상기 시스템 계층은 시스템 레벨들을 포함하고, 상기 시스템 레벨들은,
    데이터 처리 디바이스, 비일시적 메모리 디바이스, 또는 네트워크 인터페이스 제어기의 호스트 머신들 ― 각각의 호스트 머신은 시스템 도메인을 가짐― 에 대응하는 제1 시스템 레벨;
    상기 호스트 머신을 하우징하는 랙의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응하는 제2 시스템 레벨 ― 상기 랙의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가짐― ;
    연관된 랙을 갖는 셀의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응하는 제3 시스템 레벨 ― 상기 셀의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가짐―; 및
    상기 셀의 분배 센터 모듈 ― 각각의 분배 센터 모듈은 시스템 도메인을 가짐 ― 에 대응하는 제4 시스템 레벨
    을 포함하는, 방법.
  5. 제4항에 있어서, 각각의 스트라이프에 대해, 각각의 시스템 레벨에 대한 유효 중복성 값을 결정하는 단계를 더 포함하는 방법.
  6. 제5항에 있어서, 복제 청크들을 갖는 복제된 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 대응하는 시스템 레벨에서 적어도 하나의 가용 복제 청크를 갖는 고유한 시스템 도메인의 수를 식별하는 단계를 포함하는, 방법.
  7. 제5항에 있어서, 상기 제2 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 데이터 액세스가능성을 유지하면서 비활성일 수 있는 상기 제2 시스템 레벨 내의 고유한 시스템 도메인의 수를 식별하는 단계를 포함하는, 방법.
  8. 제5항에 있어서, 상기 제3 또는 제4 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을 결정하는 단계는, 데이터 액세스가능성을 유지하면서 비활성일 수 있고 나머지 시스템 도메인들에 비해 최대수의 청크를 가질 수 있는 상기 제3 또는 제4 레벨 내의 시스템 도메인을 식별하는 단계를 포함하는, 방법.
  9. 제8항에 있어서, 하나보다 많은 시스템 도메인이 최대수의 청크를 가질 때, 상기 시스템 도메인들 중 하나를 무작위로 선택하는 단계를 더 포함하는, 방법.
  10. 제1항에 있어서, 데이터 청크, 코드-체크 청크, 및 워드-체크 청크를 갖는 네스팅형 코드 스트라이프에 대한 유효 중복성 값을 결정하는 단계는,
    컬럼-유효 중복성 또는 스트라이프-유효 중복성 중 하나를 결정하는 단계를 포함하고,
    상기 컬럼-유효 중복성을 결정하는 단계는, 상기 컬럼 내의 다른 청크들로부터 재구성될 수 있는 컬럼 내의 고유한 청크들의 개수를 식별하는 단계를 포함하고;
    상기 스트라이프-유효 중복성을 결정하는 단계는, 상기 스트라이프 내의 다른 청크들로부터 재구성될 수 있는 스트라이프 내의 고유한 청크들의 개수를 식별하는 단계를 포함하는, 방법.
  11. 제1항에 있어서, 상기 파일은 데이터를 포함하고, 각각의 청크의 가용도는 상기 데이터에 기초하거나 상기 데이터의 소유자 또는 사용자에 기초하고, 상기 가용도는 고가용도 또는 저가용도를 포함하는, 방법.
  12. 분산형 스토리지 시스템에서 복구를 위한 데이터를 우선순위화하기 위한 시스템으로서,
    각각이 비일시적 메모리를 갖는 메모리 호스트들; 및
    상기 메모리 호스트들과 통신하고 명령어들을 실행하는 컴퓨터 프로세서
    를 포함하고, 상기 명령어들은,
    상기 메모리 호스트들에 걸친 파일 ―각각의 파일은 청크들을 갖는 스트라이프들을 포함함― 의 스트라이핑(striping)을 관리하고;
    청크들을 갖는 복수의 스트라이프를 포함하는 파일의 각각의 스트라이프에 대해, 데이터 처리 디바이스를 이용하여, 상기 스트라이프가 고가용도 청크 또는 저가용도 청크를 포함하는지를 결정하며;
    상기 파일의 각각의 스트라이프에 대한 유효 중복성 값을 결정 ―상기 유효 중복성 값은 청크들 및 대응하는 스트라이프와 연관된 임의의 시스템 도메인에 기초하고, 상기 분산형 스토리지 시스템은 시스템 도메인들을 포함하는 시스템 계층을 가지며, 각각의 시스템 도메인은 활성 상태 또는 비활성 상태를 가지며, 활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스가능하고, 비활성 상태의 시스템 도메인과 연관된 스트라이프의 청크들은 액세스불가능함― 하고;
    스트라이프의 청크들이 액세스불가능하게 된 것을 결정하고 - 상기 스트라이프의 청크들이 액세스불가능하게 되었다는 결정에 응답하여:
    즉각적으로, 임계 유효 중복성 값보다 작은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들을 재구성하고;
    임계 기간 이후에:
    액세스불가능한 저가용도 청크들; 및
    임계 유효 중복성 보다 크거나 같은 유효 중복성 값을 갖는 액세스불가능한 고가용도 청크들을 재구성하는, 시스템.
  13. 제12항에 있어서, 상기 컴퓨터 프로세서는, 상기 시스템 도메인이 비활성 상태일 때 상기 시스템 도메인과 연관된 상기 파일의 각각의 스트라이프에 대한 유효 중복성 값을 업데이트하는, 시스템.
  14. 제12항에 있어서, 상기 임계 기간은 15분 내지 30분을 포함하는, 시스템.
  15. 제12항에 있어서, 상기 시스템 계층은 시스템 레벨들을 포함하고, 상기 시스템 레벨들은,
    데이터 처리 디바이스, 비일시적 메모리 디바이스, 또는 네트워크 인터페이스 제어기의 호스트 머신들 ―각각의 호스트 머신은 시스템 도메인을 가짐― 에 대응하는 제1 시스템 레벨;
    상기 호스트 머신을 하우징하는 랙의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응하는 제2 시스템 레벨 ―상기 랙의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가짐― ;
    연관된 랙을 갖는 셀의 전력 전달기, 통신 전달기, 또는 쿨링 전달기에 대응하는 제3 시스템 레벨 ―상기 셀의 각각의 전력 전달기, 통신 전달기, 또는 쿨링 전달기는 시스템 도메인을 가짐―; 및
    상기 셀의 분배 센터 모듈 ―각각의 분배 센터 모듈은 시스템 도메인을 가짐― 에 대응하는 제4 시스템 레벨
    을 포함하는, 시스템.
  16. 제15항에 있어서, 상기 컴퓨터 프로세서는, 각각의 스트라이프에 대해, 각각의 시스템 레벨에 대한 유효 중복성 값을 결정하는, 시스템.
  17. 제15항에 있어서, 상기 컴퓨터 프로세서는, 복제 청크들을 갖는 복제된 스트라이프에 대한 유효 중복성 값을, 대응하는 시스템 레벨에서 적어도 하나의 가용 복제 청크를 갖는 고유한 시스템 도메인의 수를 식별함으로써 결정하는, 시스템.
  18. 제15항에 있어서, 상기 컴퓨터 프로세서는, 상기 제2 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을, 데이터 액세스가능성을 유지하면서 비활성일 수 있는 상기 제2 시스템 레벨 내의 고유한 시스템 도메인의 수를 식별함으로써 결정하는, 시스템.
  19. 제15항에 있어서, 상기 컴퓨터 프로세서는, 상기 제3 또는 제4 시스템 레벨에서 데이터 청크와 코드 청크를 갖는 인코딩된 스트라이프에 대한 유효 중복성 값을, 데이터 액세스가능성을 유지하면서 비활성일 수 있고 나머지 시스템 도메인들에 비해 최대수의 청크를 가질 수 있는 상기 제3 또는 제4 레벨 내의 시스템 도메인을 식별함으로써 결정하는, 시스템.
  20. 제19항에 있어서, 하나보다 많은 시스템 도메인이 최대수의 청크를 가질 때, 상기 컴퓨터 프로세서는, 상기 시스템 도메인들 중 하나를 무작위로 선택하는, 시스템.
  21. 제12항에 있어서, 상기 컴퓨터 프로세서는, 데이터 청크, 코드-체크 청크, 및 워드-체크 청크를 갖는 네스팅형 코드 스트라이프에 대한 유효 중복성 값을, 컬럼-유효 중복성 또는 스트라이프-유효 중복성 중 하나를 결정함으로써 결정하고,
    상기 컬럼-유효 중복성을 결정하는 것은, 상기 컬럼 내의 다른 청크들로부터 재구성될 수 있는 컬럼 내의 고유한 청크들의 개수를 식별하는 것을 포함하고;
    상기 스트라이프-유효 중복성을 결정하는 것은, 상기 스트라이프 내의 다른 청크들로부터 재구성될 수 있는 스트라이프 내의 고유한 청크들의 개수를 식별하는 것을 포함하는, 시스템.
  22. 제12항에 있어서, 상기 파일은 데이터를 포함하고, 각각의 청크의 가용도는 상기 데이터에 기초하거나 상기 데이터의 소유자 또는 사용자에 기초하고, 상기 가용도는 고가용도 또는 저가용도를 포함하는, 시스템.
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
KR1020167023620A 2014-01-31 2015-01-23 분산형 스토리지 시스템에서 데이터 재구성의 우선순위화 KR101677418B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/169,274 US9292389B2 (en) 2014-01-31 2014-01-31 Prioritizing data reconstruction in distributed storage systems
US14/169,274 2014-01-31
PCT/US2015/012572 WO2015116483A1 (en) 2014-01-31 2015-01-23 Prioritizing data reconstruction in distributed storage systems

Publications (2)

Publication Number Publication Date
KR20160106187A KR20160106187A (ko) 2016-09-09
KR101677418B1 true KR101677418B1 (ko) 2016-11-17

Family

ID=53754913

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167023620A KR101677418B1 (ko) 2014-01-31 2015-01-23 분산형 스토리지 시스템에서 데이터 재구성의 우선순위화

Country Status (8)

Country Link
US (3) US9292389B2 (ko)
EP (2) EP3100184B1 (ko)
KR (1) KR101677418B1 (ko)
CN (1) CN105960639B (ko)
AU (2) AU2015211305B2 (ko)
DE (1) DE202015009267U1 (ko)
GB (1) GB2538654B (ko)
WO (1) WO2015116483A1 (ko)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6273970B2 (ja) * 2014-03-28 2018-02-07 富士通株式会社 ストレージ制御装置、ストレージ制御プログラム、及びストレージ制御方法
US10298555B2 (en) * 2014-04-04 2019-05-21 Zettaset, Inc. Securing files under the semi-trusted user threat model using per-file key encryption
US20150331752A1 (en) * 2014-05-16 2015-11-19 Syed Ali Haider Method of data storage on cloud data center for reducing processing and storage requirements by engaging user equipment
US9734007B2 (en) 2014-07-09 2017-08-15 Qualcomm Incorporated Systems and methods for reliably storing data using liquid distributed storage
US9582355B2 (en) * 2014-07-09 2017-02-28 Qualcomm Incorporated Systems and methods for reliably storing data using liquid distributed storage
US9594632B2 (en) 2014-07-09 2017-03-14 Qualcomm Incorporated Systems and methods for reliably storing data using liquid distributed storage
US9823969B2 (en) 2014-09-02 2017-11-21 Netapp, Inc. Hierarchical wide spreading of distributed storage
US9767104B2 (en) 2014-09-02 2017-09-19 Netapp, Inc. File system for efficient object fragment access
US20160062832A1 (en) 2014-09-02 2016-03-03 Netapp. Inc. Wide spreading data storage architecture
US9817715B2 (en) 2015-04-24 2017-11-14 Netapp, Inc. Resiliency fragment tiering
US9431061B1 (en) 2015-04-24 2016-08-30 Netapp, Inc. Data write deferral during hostile events
US9965369B2 (en) 2015-04-28 2018-05-08 Viasat, Inc. Self-organized storage nodes for distributed delivery network
US10360119B2 (en) * 2015-10-06 2019-07-23 Netapp, Inc. Data recovery in a distributed storage system
US9755979B2 (en) 2015-11-19 2017-09-05 Viasat, Inc. Enhancing capacity of a direct communication link
US10379742B2 (en) 2015-12-28 2019-08-13 Netapp, Inc. Storage zone set membership
WO2017113276A1 (zh) * 2015-12-31 2017-07-06 华为技术有限公司 分布式存储系统中的数据重建的方法、装置和系统
US10514984B2 (en) 2016-02-26 2019-12-24 Netapp, Inc. Risk based rebuild of data objects in an erasure coded storage system
US10055317B2 (en) 2016-03-22 2018-08-21 Netapp, Inc. Deferred, bulk maintenance in a distributed storage system
US10157021B2 (en) * 2016-06-29 2018-12-18 International Business Machines Corporation Processing incomplete data access transactions
US10409682B1 (en) * 2017-02-24 2019-09-10 Seagate Technology Llc Distributed RAID system
JP6798007B2 (ja) * 2017-03-28 2020-12-09 株式会社日立製作所 ストレージシステム、コンピュータ読み取り可能な記録媒体、システムの制御方法
US10474528B2 (en) * 2017-10-02 2019-11-12 Western Digital Technologies, Inc. Redundancy coding stripe based on coordinated internal address scheme across multiple devices
US11385980B2 (en) 2017-11-13 2022-07-12 Weka.IO Ltd. Methods and systems for rapid failure recovery for a distributed storage system
US11561860B2 (en) 2017-11-13 2023-01-24 Weka.IO Ltd. Methods and systems for power failure resistance for a distributed storage system
US10691543B2 (en) * 2017-11-14 2020-06-23 International Business Machines Corporation Machine learning to enhance redundant array of independent disks rebuilds
CN108304214B (zh) * 2017-12-13 2022-05-13 超聚变数字技术有限公司 一种立即数的完整性的校验方法及装置
CN108170555B (zh) * 2017-12-21 2021-07-20 浙江大华技术股份有限公司 一种数据恢复方法及设备
CN110515761B (zh) * 2018-05-22 2022-06-03 杭州海康威视数字技术股份有限公司 一种数据获取方法及装置
CN108762983B (zh) * 2018-05-23 2020-09-01 Oppo广东移动通信有限公司 多媒体数据恢复方法及装置
US10719397B2 (en) 2018-06-08 2020-07-21 Samsung Electronics Co., Ltd. System, device and method for storage device assisted low-bandwidth data repair
US10929311B2 (en) 2019-06-26 2021-02-23 EMC IP Holding Company LLC Stream level uninterrupted backup operation using data probe
US11068359B2 (en) * 2019-06-26 2021-07-20 EMC IP Holding Company LLC Stream level uninterrupted restore operation using data probe
CN110442535B (zh) * 2019-07-19 2021-06-11 华中科技大学 提高分布式固态盘键值缓存系统可靠性的方法及系统
JP2021099624A (ja) * 2019-12-20 2021-07-01 株式会社日立製作所 ストレージシステム及びストレージシステムのリビルド処理方法
KR20220060155A (ko) 2020-11-04 2022-05-11 삼성전자주식회사 스토리지 서버, 상기 스토리지의 서버 구동 방법 및 상기 스토리지 서버를 포함하는 데이터 센터
US20230237020A1 (en) * 2022-01-24 2023-07-27 Cohesity, Inc. Container-based erasure coding

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6516425B1 (en) 1999-10-29 2003-02-04 Hewlett-Packard Co. Raid rebuild using most vulnerable data redundancy scheme first
US7065618B1 (en) 2003-02-14 2006-06-20 Google Inc. Leasing scheme for data-modifying operations
US7107419B1 (en) 2003-02-14 2006-09-12 Google Inc. Systems and methods for performing record append operations

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7865536B1 (en) 2003-02-14 2011-01-04 Google Inc. Garbage collecting systems and methods
US7222119B1 (en) * 2003-02-14 2007-05-22 Google Inc. Namespace locking scheme
US7237141B2 (en) * 2003-06-19 2007-06-26 Lsi Corporation Method for recovering data from a redundant storage object
US8064351B2 (en) 2005-10-20 2011-11-22 Schrader Electronics, Ltd. Method for detecting and correcting data errors in an RF data link
US7653668B1 (en) * 2005-11-23 2010-01-26 Symantec Operating Corporation Fault tolerant multi-stage data replication with relaxed coherency guarantees
US7885928B2 (en) * 2007-03-08 2011-02-08 Xerox Corporation Decentralized adaptive management of distributed resource replicas in a peer-to-peer network based on QoS
JP4757825B2 (ja) 2007-03-23 2011-08-24 中部日本電気ソフトウェア株式会社 ファイル管理装置、プログラム、コンピュータ読み取り可能な記録媒体
US8225006B1 (en) * 2007-08-30 2012-07-17 Virident Systems, Inc. Methods for data redundancy across three or more storage devices
CN101334797B (zh) * 2008-08-04 2010-06-02 中兴通讯股份有限公司 一种分布式文件系统及其数据块一致性管理的方法
US8225061B2 (en) * 2009-07-02 2012-07-17 Apple Inc. Method and apparatus for protected content data processing
US8285952B2 (en) 2009-09-17 2012-10-09 Hitachi, Ltd. Method and apparatus to utilize large capacity disk drives
US8589535B2 (en) * 2009-10-26 2013-11-19 Microsoft Corporation Maintaining service performance during a cloud upgrade
US8341457B2 (en) 2010-03-11 2012-12-25 Lsi Corporation System and method for optimizing redundancy restoration in distributed data layout environments
US8484536B1 (en) * 2010-03-26 2013-07-09 Google Inc. Techniques for data storage, access, and maintenance
US10394757B2 (en) 2010-11-18 2019-08-27 Microsoft Technology Licensing, Llc Scalable chunk store for data deduplication
WO2012147087A1 (en) 2011-04-29 2012-11-01 Tata Consultancy Services Limited Archival storage and retrieval system
US9122535B2 (en) 2011-11-22 2015-09-01 Netapp, Inc. Optimizing distributed data analytics for shared storage

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6516425B1 (en) 1999-10-29 2003-02-04 Hewlett-Packard Co. Raid rebuild using most vulnerable data redundancy scheme first
US7065618B1 (en) 2003-02-14 2006-06-20 Google Inc. Leasing scheme for data-modifying operations
US7107419B1 (en) 2003-02-14 2006-09-12 Google Inc. Systems and methods for performing record append operations

Also Published As

Publication number Publication date
US9823980B2 (en) 2017-11-21
US9292389B2 (en) 2016-03-22
WO2015116483A1 (en) 2015-08-06
AU2015211305A1 (en) 2016-06-09
CN105960639A (zh) 2016-09-21
EP3916559A1 (en) 2021-12-01
EP3100184A4 (en) 2017-11-29
AU2017201918B2 (en) 2018-06-28
US20160179621A1 (en) 2016-06-23
KR20160106187A (ko) 2016-09-09
DE202015009267U1 (de) 2017-01-27
GB201614047D0 (en) 2016-09-28
AU2015211305B2 (en) 2016-12-22
GB2538654A (en) 2016-11-23
US9535790B2 (en) 2017-01-03
US20150220398A1 (en) 2015-08-06
EP3100184A1 (en) 2016-12-07
US20170075741A1 (en) 2017-03-16
GB2538654B (en) 2017-06-14
EP3100184B1 (en) 2021-09-01
AU2017201918A1 (en) 2017-04-13
CN105960639B (zh) 2019-05-28

Similar Documents

Publication Publication Date Title
KR101677418B1 (ko) 분산형 스토리지 시스템에서 데이터 재구성의 우선순위화
KR101813431B1 (ko) 분산형 스토리지 시스템에서 데이터를 분배하는 방법 및 시스템
US11947423B2 (en) Data reconstruction in distributed storage systems
US11182258B2 (en) Data rebuild using dynamic peer work allocation
US10649843B2 (en) Storage systems with peer data scrub
US9311194B1 (en) Efficient resource utilization in data centers
KR101719116B1 (ko) 데이터 센터들에서의 효율적인 자원 이용
US9898360B1 (en) Preventing unnecessary data recovery
Gong et al. Optimal Rack-Coordinated Updates in Erasure-Coded Data Centers: Design and Analysis

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20191030

Year of fee payment: 4