KR101813431B1 - 분산형 스토리지 시스템에서 데이터를 분배하는 방법 및 시스템 - Google Patents

분산형 스토리지 시스템에서 데이터를 분배하는 방법 및 시스템 Download PDF

Info

Publication number
KR101813431B1
KR101813431B1 KR1020167023942A KR20167023942A KR101813431B1 KR 101813431 B1 KR101813431 B1 KR 101813431B1 KR 1020167023942 A KR1020167023942 A KR 1020167023942A KR 20167023942 A KR20167023942 A KR 20167023942A KR 101813431 B1 KR101813431 B1 KR 101813431B1
Authority
KR
South Korea
Prior art keywords
chunks
group
maintenance
data
storage devices
Prior art date
Application number
KR1020167023942A
Other languages
English (en)
Other versions
KR20160114707A (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 KR20160114707A publication Critical patent/KR20160114707A/ko
Application granted granted Critical
Publication of KR101813431B1 publication Critical patent/KR101813431B1/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/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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0727Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a storage system, e.g. in a DASD or network based storage system
    • 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/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F17/30
    • 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/0643Management of files
    • 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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/805Real-time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1028Distributed, i.e. distributed RAID systems with parity

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Hardware Redundancy (AREA)
  • Retry When Errors Occur (AREA)

Abstract

분산형 스토리지 시스템(100)에서 데이터(312)를 분배하는 방법(800)은, 파일(310)을 비일시적 메모리(204) 내에 수신하는 단계 및 수신된 파일을 청크(330)들로 분할하는 단계를 포함한다. 청크들은 데이터-청크(330nD) 및 비-데이터 청크(330nC)이다. 이 방법은 또한, 데이터 청크들 중 하나 이상과 비-데이터 청크들 중 하나 이상을 그룹(G)으로 그룹화하는 단계를 포함한다. 이 그룹의 하나 이상의 청크는 그룹의 다른 청크들로부터 재구성될 수 있다. 이 방법은, 분산형 스토리지 시스템 계층(400)에 기초하여 그룹의 청크들을 분산형 스토리지 시스템의 스토리지 디바이스(114)들에 분배하는 단계를 포함한다. 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인(402)을 포함하고, 각각의 스토리지 디바이스는 유지보수 도메인과 연관되며, 그룹의 청크들은 복수의 유지보수 도메인들에 걸쳐 분배되어 그룹의 청크들을 재구성하는 능력을 유지한다.

Description

분산형 스토리지 시스템에서 데이터를 분배하는 방법 및 시스템{METHOD AND SYSTEM FOR DISTRIBUTING DATA IN A DISTRIBUTED STORAGE SYSTEM}
본 개시내용은 분산형 스토리지 시스템으로부터의 효율적인 데이터 판독에 관한 것이다.
분산형 시스템은 일반적으로 많은 소결합된(loosely coupled) 컴퓨터들을 포함하며, 이들 각각은 통상적으로 컴퓨팅 자원(예를 들어, 하나 이상의 프로세서) 및/또는 스토리지 자원(예를 들어, 메모리, 플래시 메모리, 및/또는 디스크)을 포함한다. 분산형 스토리지 시스템은 분산형 시스템의 스토리지 자원 상에 스토리지 추상화(예를 들어, 키/값 저장소 또는 파일 시스템)를 오버레이한다. 분산형 스토리지 시스템에서, 하나의 컴퓨터에서 실행 중인 서버 프로세스는 그 컴퓨터의 스토리지 자원을 다른 컴퓨터에서 실행 중인 클라이언트 프로세스에 엑스포트(export)할 수 있다. 원격 프로시져 호출(RPC; remote procedure call)은 서버 프로세스로부터 클라이언트 프로세스로 데이터를 전송할 수 있다. 대안으로서, 원격 직접 메모리 액세스(RDMA; Remote Direct Memory Access) 프리미티브들은 서버 하드웨어로부터 클라이언트 프로세스들로 데이터를 전송하는데 이용될 수 있다.
본 개시내용의 한 양태는 분산형 스토리지 시스템에서 데이터를 분배하는 방법을 제공한다. 이 방법은, 비일시적 메모리와 통신하는 컴퓨터 프로세서를 이용하여 파일을 비일시적 메모리 내에 수신하는 단계 및 수신된 파일을 청크(chunk)들로 분할하는 단계를 포함한다. 이 방법은 또한, 데이터 청크들 중 하나 이상과 비-데이터 청크들 중 하나 이상을 그룹으로 그룹화하는 단계를 포함한다. 이 그룹의 하나 이상의 청크는 그룹의 다른 청크들로부터 재구성될 수 있다. 이 방법은, 선택사항으로서, 분산형 스토리지 시스템의 계층(hierarchy)에 기초하여 그룹의 청크들을 분산형 스토리지 시스템의 스토리지 디바이스들에 분배하는 단계를 더 포함한다. 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인들을 포함한다. 게다가, 각각의 스토리지 디바이스는 유지보수 도메인과 연관된다. 그룹의 청크들은 복수의 유지보수 도메인에 걸쳐 분배되어 유지보수 도메인이 비활성 상태일 때 그룹의 청크들을 재구성하는 능력을 유지한다.
본 개시내용의 구현은 다음과 같은 선택사항적 피쳐들 중 하나 이상을 포함할 수 있다. 일부 구현에서, 이 방법은 임의의 한 유지보수 도메인의 스토리지 디바이스들에 분배되는 그룹의 청크들의 개수를 제약하는 단계를 더 포함한다.
일부 구현에서, 이 방법은, 그룹의 청크들의 개수와 정합하는 스토리지 디바이스들의 제1 무작위 선택군(a first random selection of storage devices)들을 결정하고 하나 이상의 유닛이 비활성 상태일 때 스토리지 디바이스들의 이 선택군이 그룹의 액세스가능성(accessibility)을 유지할 수 있는지를 결정함으로써 그룹의 청크들의 스토리지 디바이스들간의 분배를 결정하는 단계를 포함한다. 일부 예에서, 하나 이상의 유지보수 도메인이 비활성 상태일 때 스토리지 디바이스들의 제1 무작위 선택군이 그룹의 액세스가능성을 유지할 수 없으면, 이 방법은, 그룹의 청크들의 개수와 정합하는 스토리지 디바이스들의 제2 무작위 선택군을 결정하는 단계 또는 하나 이상의 무작위 선택된 스토리지 디바이스를 추가하거나 제거함으로써 스토리지 디바이스들의 제1 무작위 선택군을 수정하는 단계를 더 포함한다. 이 방법은, 단순 샘플링, 확률 샘플링, 층별화 샘플링(stratified sampling), 또는 클러스터 샘플링을 이용하여, 스토리지 디바이스들의 제1 무작위 선택군을 결정하는 단계를 더 포함할 수 있다.
일부 구현에서, 이 방법은, 분산형 스토리지의 스토리지 디바이스들의 정렬된 환형 목록(circular list)으로부터 그룹의 청크들의 개수와 동일한 개수의 연속된 스토리지 디바이스들을 선택함으로써 그룹의 청크들의 스토리지 디바이스들간의 분배를 결정하는 단계를 포함한다. 하나 이상의 유지보수 도메인이 비활성 상태일 때 선택된 스토리지 디바이스들이 그룹의 액세스가능성을 집합적으로 유지할 수 없으면, 이 방법은, 그룹의 청크들의 개수와 동일한 개수의 또 다른 연속된 스토리지 디바이스를 정렬된 환형 목록으로부터 선택하는 단계를 더 포함한다. 이 방법은 분산형 스토리지 시스템의 스토리지 디바이스들의 정렬된 환형 목록을 결정하는 단계를 포함할 수 있다. 정렬된 환형 목록 상의 인접한 스토리지 디바이스들은 상이한 유지보수 도메인들과 연관된다. 일부 예에서, 정렬된 환형 목록 상의 임계치 개수의 연속된 스토리지 디바이스들 각각은, 상이한 유지보수 도메인들과 연관되거나, 상이한 지리적 위치들에 있다.
일부 구현에서, 이 방법은, (예를 들어, 컴퓨터 프로세서를 이용하여) 유지보수 도메인들의 유지보수 계층(maintenance hierarchy)을 결정하는 단계를 포함하고, 여기서, 유지보수 계층은 유지보수 레벨(maintenance level)들을 가지며 각각의 유지보수 레벨은 하나 이상의 유지보수 도메인을 포함한다. 이 방법은 또한, 각각의 유지보수 도메인을 적어도 하나의 스토리지 디바이스에 맵핑하는 단계를 포함한다. 일부 예에서, 각각의 유지보수 도메인은 단일의 전력 분배 유닛 또는 단일의 전력 버스 덕트에 의해 전력공급되는 스토리지 디바이스들을 포함한다.
이 방법은 수신된 파일을 스트라이프(stripe)들로 분할하는 단계를 포함할 수 있다. 각각의 파일은 에러 정정 코드를 포함한다. 에러 정정 코드는 네스팅형 코드 또는 층별화형 코드 중 하나이다. 비-데이터 청크는, 코드-체크 청크, 워드-체크 청크, 및 코드-체크-워드-체크 청크를 포함한다.
본 개시내용의 또 다른 양태는 분산형 스토리지 시스템에서 데이터를 분배하기 위한 시스템을 제공한다. 이 시스템은, 비일시적 메모리, 컴퓨터 프로세서, 및 스토리지 디바이스를 포함한다. 비일시적 메모리는 파일을 수신한다. 컴퓨터 프로세서는 비일시적 메모리와 통신하며 수신된 파일을 청크들로 분할한다. 청크들은 데이터-청크 및 비-데이터 청크이다. 컴퓨터 프로세서는 또한, 데이터 청크들 중 하나 이상과 비-데이터 청크들 중 하나 이상을 그룹으로 그룹화한다. 이 그룹의 하나 이상의 청크는 그룹의 다른 청크들로부터 재구성될 수 있다. 스토리지 디바이스는 컴퓨터 프로세서 및 비일시적 메모리와 통신한다. 컴퓨터 프로세서는, 분산형 스토리지 시스템의 유지보수 계층에 기초하여 그룹의 청크들을 스토리지 디바이스들 상에 저장한다. 유지보수 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인을 포함한다. 각각의 스토리지 디바이스는 유지보수 도메인과 연관된다. 컴퓨터 프로세서는 그룹의 청크들을 복수의 유지보수 도메인들에 걸쳐 분배하여 유지보수 도메인이 비활성 상태일 때 그룹의 액세스가능성을 유지한다.
본 양태의 구현은 다음과 같은 선택사항적 피쳐들 중 하나 이상을 포함할 수 있다. 일부 예에서, 컴퓨터 프로세서는 임의의 한 유지보수 도메인의 스토리지 디바이스들에 분배되는 그룹의 청크들의 개수를 제약한다. 컴퓨터 프로세서는, 그룹의 청크들의 개수와 정합하는 스토리지 디바이스들의 제1 무작위 선택군을 결정하고 하나 이상의 유지보수 도메인이 비활성 상태일 때 스토리지 디바이스들의 이 선택군이 그룹의 액세스가능성을 유지할 수 있는지를 결정함으로써 그룹의 청크들의 스토리지 디바이스들간의 분배를 결정할 수 있다. 컴퓨터 프로세서는, 하나 이상의 유지보수 도메인이 비활성 상태일 때 스토리지 디바이스들의 제1 무작위 선택군이 그룹의 액세스가능성을 유지할 수 없으면, 그룹의 청크들의 개수와 정합하는 스토리지 디바이스들의 제2 무작위 선택군을 결정할 수 있다.
일부 구현에서, 컴퓨터 프로세서는, 하나 이상의 유지보수 도메인이 비활성 상태일 때 스토리지 디바이스들의 제1 무작위 선택군이 파일의 액세스가능성을 유지할 수 없으면, 하나 이상의 무작위로 선택된 스토리지 디바이스를 추가 및 제거함으로써 스토리지 디바이스들의 제1 무작위 선택군을 수정한다. 컴퓨터 프로세서는, 단순 샘플링, 확률 샘플링, 층별화 샘플링, 또는 클러스터 샘플링을 이용하여, 스토리지 디바이스들의 제1 무작위 선택군을 결정할 수 있다.
일부 예에서, 컴퓨터 프로세서는, 분산형 스토리지 시스템의 스토리지 디바이스들의 정렬된 환형 목록으로부터 그룹의 청크들의 개수와 동일한 개수의 연속된 스토리지 디바이스들을 선택함으로써 청크들의 스토리지 디바이스들간의 분배를 결정한다. 게다가, 컴퓨터 프로세서는, 하나 이상의 유지보수 도메인이 비활성 상태일 때 선택된 스토리지 디바이스들이 그룹의 액세스가능성을 집합적으로 유지할 수 없으면, 그룹의 청크들의 개수와 동일한 개수의 또 다른 연속된 스토리지 디바이스를 정렬된 환형 목록으로부터 선택할 수 있다.
일부 구현에서, 컴퓨터 프로세서는, 분산형 스토리지 시스템의 스토리지 디바이스들의 정렬된 환형 목록을 결정하고, 여기서, 정렬된 환형 목록 상의 인접한 스토리지 디바이스들은 상이한 유지보수 도메인들과 연관된다. 추가로 또는 대안으로서, 정렬된 환형 목록 상의 임계치 개수의 연속된 스토리지 디바이스들 각각은 상이한 유지보수 도메인들과 연관될 수 있다. 추가로 또는 대안으로서, 정렬된 환형 목록 상의 임계치 개수의 연속된 스토리지 디바이스들 각각은 상이한 지리적 위치들에 있을 수 있다.
일부 예에서, 컴퓨터 프로세서는, 유지보수 도메인들의 유지보수 계층을 결정하고 각각의 유지보수 도메인을 적어도 하나의 스토리지 디바이스에 맵핑한다. 유지보수 계층은 유지보수 레벨들을 가지며, 각각의 유지보수 레벨은 하나 이상의 유지보수 도메인을 포함한다. 각각의 유지보수 도메인은 단일의 전력 분배 유닛 또는 단일의 전력 버스 덕트에 의해 전력공급되는 스토리지 디바이스들을 포함할 수 있다.
일부 구현에서, 컴퓨터 프로세서는 수신된 파일을 스트라이프들로 분할하고, 각각의 파일은 에러 정정 코드를 포함한다. 에러 정정 코드는 네스팅형 코드 또는 층별화형 코드 중 하나이다. 비-데이터 청크는, 코드-체크 청크, 워드-체크 청크, 및 코드-체크-워드-체크 청크를 포함한다.
본 개시내용의 하나 이상의 구현의 상세사항은 첨부된 도면과 이하의 상세한 설명에 개시되어 있다. 다른 양태들, 피쳐들, 및 이점들은, 상세한 설명, 도면, 및 청구항들로부터 명백할 것이다.
도 1a는 예시적 분산형 스토리지 시스템의 개략도이다.
도 1b는 큐레이터(curator)에 의해 관리되는 메모리 호스트들의 셀을 갖는 예시적인 분산형 스토리지 시스템의 개략도이다.
도 2는 분산형 스토리지 시스템에 대한 예시적 큐레이터의 개략도이다.
도 3a는 스트라이프들로의 예시적 파일 분할의 개략도이다.
도 3b는 데이터 청크와 코드 청크들로의 예시적 파일 분할의 개략도이다.
도 3c는 예시적 Reed-Solomon 코딩 기술의 개략도이다.
도 3d 내지 도 3f는 예시적 층별화형 코딩 기술의 개략도이다.
도 3g는 층별화형 코딩 기술을 이용하여 데이터를 저장하기 위한 동작들의 예시적 배열이다.
도 3h 내지 도 3j는 예시적 네스팅형 코딩 기술의 개략도이다.
도 3k는 네스팅형 코딩 기술을 이용하여 데이터를 저장하기 위한 동작들의 예시적 배열이다.
도 4a 내지 도 4c는 예시적 유지보수 계층의 개략도이다.
도 5a는, 한 그룹의 스토리지 자원들을 무작위로 선택하기 위한 동작들의 예시적 배열의 흐름도이다.
도 5b는 스토리지 디바이스들의 예시적 무작위 선택의 개략도이다.
도 6a는, 한 그룹의 스토리지 자원들을 무작위로 선택한 다음, 그룹 내의 스토리지 디바이스들을 무작위로 업데이트하기 위한 동작들의 예시적 배열의 흐름도이다.
도 6b는 스토리지 디바이스들의 예시적 무작위 선택의 개략도이다.
도 7a는, 환형 목록으로부터 한 그룹의 스토리지 자원들을 선택하기 위한 동작들의 예시적 배열의 흐름도이다.
도 7b는 정렬된 목록으로부터의 스토리지 디바이스들의 예시적 선택의 개략도이다.
도 8은 스토리지 시스템에서 데이터를 분배하기 위한 동작들의 예시적 배열의 개략도이다.
다양한 도면에서 유사한 참조 부호는 유사한 요소를 나타낸다.
스토리지 시스템은, 데이터가 복제되고 복수의 데이터 센터에 저장되는 복수의 중복성 계층들(multiple layers of redundancy)을 포함한다. 데이터 센터는, 컴퓨터 시스템들, 및 통신 및 스토리지 시스템(100)(도 1a 및 도 1b) 등의, 그들의 연관된 컴포넌트들을 하우징한다. 데이터 센터는, 대개, 백업 전원, 중복 통신 접속, (일정한 온도를 유지하기 위한) 환경 제어, 및 보안 디바이스들을 포함한다. 데이터 센터는, (예를 들어, 작은 도시 정도로) 많은 양의 전기를 이용하는 큰 산업적 규모의 동작일 수 있다. 데이터 센터는 상이한 지리적 위치들(예를 들어, 상이한 도시들, 상이한 국가들, 및 상이한 대륙들)에 놓일 수 있다. 일부 예에서, 데이터 센터, 또는 그 일부는, (예를 들어, 정전, 또는 부품 교체를 위한 스토리지 시스템의 일부의 접속해제, 시스템 고장, 또는 이들의 조합으로 인해) 유지보수를 요구한다. 이들 데이터 센터에 저장된 데이터는 유지보수 기간 동안에 사용자에게 이용불가능하여 사용자의 동작의 손상 또는 중단을 초래할 수 있다. 따라서, 사용자가, 유지보수 또는 시스템 고장을 겪고 있는 스토리지 시스템(100) 또는 그 일부에도 불구하고, 저장된 데이터를 회수하거나 건강하지 않은 또는 소실된 데이터를 재구성할 수 있는 분산형 스토리지 시스템(100)을 제공하는 것이 바람직하다.
도 1a 및 도 1b를 참조하여, 일부 구현에서, 분산형 스토리지 시스템(100)은 소결합된 메모리 호스트들(110, 110a-n)(예를 들어, 컴퓨터 또는 서버)을 포함하고, 각각은 데이터(312)를 캐싱하는데 이용될 수 있는 스토리지 자원(114)(예를 들어, 메모리, 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM), 상변화 메모리(PCM), 및/또는 디스크)과 통신하는 컴퓨팅 자원(112)(예를 들어, 하나 이상의 프로세서 또는 중앙 처리 유닛(CPU))을 가진다. 스토리지 자원(114) 상에 오버레이된 스토리지 추상화(예를 들어, 키/값 저장소 또는 파일 시스템)는 하나 이상의 클라이언트(120, 120a-n)에 의한 스토리지 자원(114)의 스케일가능한 이용을 허용한다. 클라이언트(120)는 네트워크(130)를 통해(예를 들어, RPC를 통해) 메모리 호스트(110)와 통신할 수 있다.
일부 구현에서, 분산형 스토리지 시스템(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 또는 단면형 동작을 통해, 기저 데이터(312)에 액세스하는 것을 책임지는 트랜잭션 애플리케이션 프로그래밍 인터페이스(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)를 스트라이프들로 세그먼트화하되, 상이한 물리적 메모리 호스트(110)들(예를 들어, 셀(200) 및/또는 메모리 호스트(110))에 대해 순차적 세그먼트들의 액세스가 이루어지는 방식으로 세그먼트화하는 기술이다. 스트라이핑은, 처리 디바이스가, 메모리 호스트(110)가 액세스를 제공할 수 있는 것보다 더 신속하게 데이터(312)로의 액세스를 요청할 때 유용하다. 복수의 디바이스들 상에서의 세그먼트 액세스들을 수행함으로써, 복수의 세그먼트들이 동시에 액세스될 수 있다. 이것은 더 많은 데이터 액세스 처리량을 제공하여, 프로세서가 데이터 액세스를 위해 유휴상태로 대기하게 하는 것을 피할 수 있다. (이하에서 더 상세히 논의되는) 일부 구현에서, 각각의 스트라이프는 그룹들 G(예를 들어, 청크들을 포함)로 더 분할될 수 있고, 여기서 순차적 그룹들 G의 액세스는 상이한 물리적 메모리 호스트(110)들에 대해 이루어진다. 스트라이프 내의 세그먼트들의 그룹화는, 처리 디바이스가, 메모리 호스트(110)가 액세스를 제공할 수 있는 것보다 더 신속하게 데이터(312)로의 액세스를 요청할 때 역시 유용할 수 있다. 복수의 디바이스 상의 그룹 G의 세그먼트 액세스를 제공함으로써, 그룹 G의 복수의 세그먼트는 동시에 액세스될 수 있다. 이것은 더 많은 데이터 액세스 처리량을 제공하여, 프로세서가 데이터 액세스를 위해 유휴상태로 대기하게 하는 것을 피할 수 있으므로, 시스템(100)의 성능을 향상시킨다.
일부 구현에서, 트랜잭션 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개의 상이한 액세스 패턴을 이용할 수 있다: 판독-전용; 파일 트랜잭션; 및 스트라이프 트랜잭션. 예를 들어, 메타데이터(212)는 파일(310)의 어느 부분이 어느 데이터 센터에 저장되어 있는지를 명시할 수 있고, 데이터 센터에는 데이터(312)의 중복 사본들이 저장되어 있고, 그 데이터 청크(330nD) 및 코드 청크(330nC)는 코드워드를 형성하는 등이다.
도 3a 내지 도 3k를 참조하면, 데이터(312)는 하나 이상의 파일(310)일 수 있다. 큐레이터(210)는 각각의 파일(310)을 스트라이프들(320a-n)의 집합으로 분할할 수 있고, 각각의 스트라이프(320a-n)는 나머지 스트라이프들(320a-n)과는 독립적으로 인코딩된다. 각각의 스트라이프(320)는 인코딩되어 상이한 메모리 호스트(110)들 상에 저장된다. 도 3a에 도시된 바와 같이, 각각의 스트라이프(320)는, 인코딩 레벨(313)에 기초하여, 예를 들어, Reed-Solomon Code(도 3b), 층별화형 코드(도 3c 내지 도 3g), 또는 네스팅형 코드(도 3h 내지 도 3k), 또는 기타의 계층적 코드에 기초하여, 데이터 청크(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)를 식별함으로써 식별될 수 있다.
파일(310)의 비-데이터 청크(330nC)는 에러 정정 코드 청크(313)를 포함한다. 에러 정정 코드 청크(313)는 하나 이상의 데이터 청크(330nD)에 기초하여 데이터(312)의 청크(330)를 포함한다. 일부 구현에서, 각각의 코드 청크(330nC)는 데이터 청크(330nD)와 동일한 명시된 크기(예를 들어, 256 바이트)이다. 코드 청크(330nC)는 에러 정정 코드(313), 예를 들어, MDS(Maximal Distance Separable) 코드를 이용하여 생성된다. MDS 코드의 예로서는 Reed-Solomon 코드가 포함된다. 코드 청크(330nC)를 생성하기 위해 다양한 기술들이 이용될 수 있다. 예를 들어, 임의 세트의 고유하고 건강한 (데이터 청크(330nD)이든 코드 청크(330nC)이든) 청크(330)로부터 d개의 데이터 청크(330nD)를 재구성할 수 있는 에러 정정 코드(313)가 이용될 수 있다.
코드워드는 한 세트의 데이터 청크(330nD) 및 이들 데이터 청크(330nD)에 기초한 코드 청크(330nC)이다. d개의 데이터 청크(330nD)와 c개의 코드 청크(330nC)를 포함하는 코드워드를 생성하기 위해 MDS 코드가 이용된다면, 코드워드로부터 임의의 d개의 건강한 청크(330)(데이터 또는 코드)가 이용가능한 한, 청크(330)(데이터 또는 코드)들 모두가 재구성될 수 있다.
도 3b는 에러 정정 코드 청크(313)로서의 Reed-Solomon 인코딩을 도시한다. 각각의 스트라이프(320)는 복수의 스토리지 자원(114) 상에 저장된 청크(330)들로 분할된다. 청크(330)는, 함께 단일의 코드 워드를 형성하는, 데이터 청크(330nDk) 또는 코드 청크(330nCm)일 수 있다. 데이터 청크(330nDk)는 실제의 데이터(312)를 포함하는 반면, 코드 청크(330nCm)는 파일(310)이 온전한(intact)지를 결정하기 위한 패리티(parity)를 위한 것이다. Reed-Solomon 인코딩은 코드 청크(330nCm)의 총 개수까지의 손실을 허용하며, 여기서, 스트라이프(312)는 여전히 데이터 청크(330nDk)로부터 재구성될 수 있다. 따라서, 파일(310)의 각각의 스트라이프(320a-n)는, 큐레이터(210)가 복수의 스토리지 자원(114)에 배치하는 복수의 데이터 청크(330nDk)와 코드 청크(330nCm)로 구성되며, 여기서, 데이터 청크(330nDk)와 코드 청크(330nCm)의 집합은 단일 코드 워드를 형성한다. 일반적으로, 큐레이터(210)는, 파일(310) 내의 다른 스트라이프들(320a-n)이 스토리지 자원(114) 상에 어떻게 배치되어 있는지와는 독립적으로, 각각의 스트라이프(320a-n)를 스토리지 자원(114) 상에 배치할 수 있다. Reed-Solomon 인코딩(313)은, 중복 데이터(312), 또는 패리티 데이터(312)를 파일(310)에 부가하여, (이용중인 코드의 능력까지의) 다수의 에러가 유입되었더라도 파일(310)이 나중에 수신자에 의해 복구될 수 있게 한다. Reed-Solomon 인코딩(313)은 메모리 호스트(110)에서 데이터 무결성을 유지하거나, 성능(레이턴시)을 위해 데이터(312)를 재구성하거나, 머신을 더욱 신속하게 드레인(drain)하는데 이용된다.
도 3c 내지 도 3i를 참조하면, 층별화형 코딩(도 3c 내지 도 3g) 및 네스팅형 코딩(도 3h 내지 도 3k) 기술에서, 인코딩된 데이터 블록(314)은, 2차원 R x C 배열을 형성하는 것으로 간주될 수 있는 형태로 저장되어 있는 (데이터 청크(330nD)를 갖는) 및 에러 정정 코드 청크(313)(즉, 비-데이터 청크(330nC))를 갖는 데이터 블록(316)을 포함한다. 각각의 컬럼 C에 대해, 컬럼 C마다 X개 또는 더 적은 수의 손상된 청크(330)를 재구성하는데 이용될 수 있는 ("코드-체크 청크(330nCC)"라 부르는) X개의 코드 청크(330nC)가 있다. 전체의 2D 배열에 대해 ("워드-체크 청크(330nWC)"라 부르는) Y개의 코드 청크(330nC)가 있다. 하나 이상의 컬럼 C에서 X개보다 많은 손상된 청크(330)가 있다면, 손상된 청크(330)를 재구성하기 위해 다른 건강한 청크(330) 외에도 워드-체크 청크(330nWC)가 이용된다. 본 명세서에서 설명되는 일부 예는 인코딩된 데이터 블록(314)(즉, 데이터 블록(316) 및 코드 청크(330nC)(즉, 비-데이터 청크(330nC)))이 2차원 배열을 형성하는 것으로 나타내고 있지만, 코딩 기술들이 상이하게 구성된 인코딩된 데이터 블록(314)을 생성하는 것이 가능하다. 예를 들어, 상이한 컬럼들은 상이한 개수의 코드-체크 청크(330nCC)를 가질 수 있고, 워드-체크 청크(330nWC)를 포함하는 컬럼은 데이터 청크(330nD)와 코드-체크 청크(330nC)를 포함하는 컬럼 C와는 상이한 개수의 로우(row) R을 가질 수 있다.
코드(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)은 모든 컬럼들 C를 단일의 데이터 센터에 저장한다. 데이터 청크(330nD)와 코드 청크(330nC)는 그 데이터 센터 내의 별개의 메모리 호스트(110)들에 저장될 수 있다. 이것은, 예를 들어, 재구성 동안에 메모리 호스트(110)로부터 데이터(312)를 판독하는 것이 값비싸서(예를 들어, 시간 소모적이어서), 인코딩 시스템(102)이 종래의 코딩 기술을 이용할 때 필요한 것보다 더 적은 수의 청크(330)를 재구성 동안에 판독할 수 있는 경우에 유용하다. 작은 수의 손상된 청크(330)는, 작은 수의 다른 청크(330)(컬럼 C 내의 코드-체크 청크(330nCC) 및 기타의 데이터 청크(330nD))를 판독함으로써 재구성될 수 있고, 많은 수의 손상된 청크(330)는 필요할 때 워드-체크 청크(330nWC)를 이용하여 재구성될 수 있다. 일부 예에서, 큐레이터(210)는 데이터 청크(330nD)와 소정의 비-데이터 청크(330nC)를 그룹 G로 그룹화하되, 시스템(100)이 분실된 청크(330)를 그룹 G의 다른 청크(330)로부터 재구성하는 것을 허용하는 방식으로 그룹화한다. 그룹 G는 하나 이상의 컬럼 C 또는 그 일부를 포함할 수 있다.
도 3c 내지 도 3g를 참조하면, 일부 구현에서, 층별화형 코딩 기술은 코드워드를 형성하는 데이터 청크(330nD)와 코드 청크(330nC)를 보여주고 있다. 에러 정정 코드(313)는, 결과적 코드워드가 2세트의 청크(330), 즉, 데이터 청크(330nD)를 포함하는 한 세트와 코드 청크(330nC)를 포함하는 한 세트로 파티션화될 수 있다면 체계적 형태(systematic form)이다. 체계적 형태의 코드는, N개의 코드 청크(330nC)를 가지고 N개의 손상된 청크(330)를 정정할 수 있다면 MDS(Maximal Distance Separable)이다. 층별화형 코드는, 체계적 형태의 2개의 MDS 코드, 예를 들어, Reed-Solomon 코드 또는 패리티 코드로부터 생성된다. 한 코드는 코드-체크 청크(330nCC)를 생성하는데 이용되고 다른 코드는 워드-체크 청크(330nWC)를 생성하는데 이용된다.
도 3d 내지 도 3f에 도시된 예를 참조하면, 데이터 블록(316)은 층별화형 코드로 인코딩된 D0-D41로 라벨링된 데이터 청크(330nD)를 포함한다. 도 3d에서, 제1 컬럼의 데이터 청크(330nD)가 D0-D5로 도시되어 있다. 2개의 코드-체크 청크(330nCC)가 컬럼들 C0 및 C1에 대해 도시되어 있다. C0 및 C1은 D0-D5에 기초한다. 따라서, D0-D5와 C0-C1은 코드워드를 형성한다. 도 3e에서, 데이터 블록(314)(D0-D41)과 6개의 코드 청크(C0-C5)를 갖는 인코딩된 데이터 블록(314)이 도시되어 있다. C0-C5는 D0-D41에 기초한다. 따라서, D0-D41 및 C0-C5는 코드워드를 형성한다.
도 3f는, 데이터 블록(314)(D0-D41)과 추가 코드 청크(330nC)(코드-체크 청크(330nCC) 및 워드-체크 청크(330nWC))를 포함하는 결과적인 인코딩된 데이터 블록(314)을 나타낸다. 컬럼 j의 i번째 코드-체크 청크는 Ci,j로 표기된다. 따라서, C0,0과 C1,0 양쪽 모두는 D0-D5에 대한 코드-체크 청크(330nCC)이다.
D0-D5와 C0,0 및 C1,0은 함께 코드워드를 형성한다. 워드-체크 청크 C0-C5는 마지막 컬럼에서 우측에 도시되어 있다. D0-D41 및 C0-C5는 함께 코드워드를 형성한다. C0,7 및 C1,7은 C0-C5에 기초해 생성될 수 있어서, C0,7 및 C1,7과 C0-C5는 코드워드를 형성한다.
도 3f에 도시된 예에서, 워드-체크 청크(330nWC)는 전체 컬럼 C를 채운다. 그러나, 층별화형 코드가 워드-체크 청크(330nWC)의 임의 개수의 전체 컬럼 C 플러스 워드-체크 청크(330nWC)의 선택사항적 부분적 컬럼에 의해 생성될 수 있다. 데이터 청크(330nD)와 워드-체크 청크(330nWC)가 정수 개수의 컬럼들 C를 채우지 않는다면, 빈 제로-값의(empty zero-valued) 청크(330)가 2D 배열에 추가될 수 있다. 이들 청크(330)는 실제로 저장될 필요가 없고 결코 에러 상태에 있지 않을 것이다.
일반적으로, 컬럼 C당 X개의 코드-체크 청크(330nCCk)와 N개의 워드-체크 청크(330nWC)를 갖는 층별화형 코드는 컬럼 C내 통신만을 수행하면서 컬럼당 X개까지의 손상된 청크(330)를 재구성할 수 있다. 이들 손상된 청크(330)를 재구성한 후에, N개 또는 그보다 작은 수의 손상된 청크(330)가 2D 배열 내에(2D 배열의 데이터 플러스 워드-체크 청크(330nWC) 부분 내에) 남아 있다면, 손상된 청크(330)는 워드-체크 청크(330nWC)와 코드-체크 청크(330nCC)를 이용하여 재구성될 수 있다. 이것은, 데이터 청크(330nD) 플러스 워드-체크 청크(330nWC) 내의 N개 또는 그보다 작은 수의 손상된 청크(330)는 워드-체크 청크(330nWC)만을 이용하여 재구성될 수 있기 때문에 사실이다. 그 다음, 임의의 코드-체크 청크(330nCCk)가 손상된다면, 이들은 그들 각각의 컬럼 C의 데이터 청크(330nD)로부터 재구성될 수 있다.
도 3g를 참조하면, 일부 구현에서, 큐레이터(210)는 층별화형 코드를 이용하여 데이터(312)를 분배한다. 큐레이터(210)는 데이터 청크(330nD)를 포함하는 데이터 블록(316)을 수신한다(단계 362). 예를 들어, 데이터 블록(316)은 저장 중인 파일(310)로부터 나온 것일 수 있다. 데이터 블록(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보다 크거나 같다. 큐레이터(210)는 체계적 형태의 제1 에러 정정 코드(313)와 데이터 청크(330nD)를 이용하여 워드-체크 청크(330nWC)의 하나 이상의 컬럼 C를 생성한다(단계 364). Ÿd워드-체크 청크(330nWC)의 컬럼 C는 컬럼 C에서 상이한 개수의 워드-체크 청크(330nWC)를 가질 수 있다. 데이터 청크(330nD)와 워드-체크 청크(330nWC)는 함께 코드워드를 형성한다.
데이터 청크(330nD)의 하나 이상의 컬럼 C의 각각의 컬럼 C에 대해, 큐레이터(210)는 체계적 형태의 제2 에러 정정 코드(313)와 컬럼 C의 데이터 청크(330nD)를 이용하여 컬럼 C에 대한 하나 이상의 코드-체크 청크(330nCC)를 생성한다(단계 366). 제1 및 제2 에러 정정 코드(313)는 별개(distinct)일 수 있다. 컬럼 C는 상이한 개수의 코드-체크 청크(330nCC)를 가질 수 있다. 시스템(100)은 또한, 워드-체크 청크(330nWC)의 컬럼 C에 대해 코드-체크 청크(330nCC)를 생성할 수 있다. 시스템(100)은, 데이터 청크(330nD), 코드-체크 청크(330nCC), 및 워드-체크 청크(330nWC)를 저장한다(단계 368). 일부 구현에서, 시스템(100)은, 각각의 컬럼 C 및/또는 컬럼 C 내의 코드-체크 청크(330nCC)를 별개 그룹의 메모리 호스트(110)에 할당한다. 다른 구현에서, 시스템(100)은 데이터 청크(330nD)와 코드 청크(330nC)를 동일한 그룹의 메모리 호스트(110), 예를 들어, 단일 데이터 센터에 저장한다. 시스템(100)은 데이터 청크(330nD) 및 소정의 코드-체크 청크(330nCC)와, 워드-체크 청크(330nWC)를 그룹 G로 그룹화할 수 있고, 여기서 건강하지 않은 청크(330)는 그룹 G의 하나 이상의 다른 청크(330)로부터 복구될 수 있다. 따라서, 시스템(100)은 그룹 G의 청크(330)들을 상이한 메모리 호스트(110)에 저장한다.
시스템이 소정 컬럼 C의 청크(330)들을 한 그룹의 메모리 호스트(110)에 할당할 때, 코드-체크 청크(330nCC)는 상이한 위치들에서 생성될 수 있다. 예를 들어, 코드-체크 청크(330nCC)는 할당을 수행하는 중앙 인코딩 시스템(예를 들어, 도 1b의 서버(202))에 의해 또는 소정 컬럼 C의 데이터 청크(330nD)를 수신한 후에 상기 그룹의 메모리 호스트(110)에 의해 생성될 수 있다. 각각의 그룹의 메모리 호스트(110)에서, 할당된 데이터 청크(330nD), 코드-체크 청크(330nCC), 및 워드-체크 청크(330nWC) 각각은 별개의 메모리 호스트(110)에 저장될 수 있다.
시스템(100)이 제1 그룹의 메모리 호스트(110)에서 손상된 데이터 청크(330nD)를 식별하면, 시스템(100)은, 청크(330)들의 그룹 G의 (코드-체크 청크(330nCC)를 이용한) 메모리 호스트(110)의 다른 그룹들과의 통신없이 손상된 청크(330)의 재구성을 시도한다. 일부 경우에, 시스템(100)은, 청크(330)들의 그룹 G로부터 제1 그룹의 메모리 호스트(110)에 할당된 코드-체크 청크(330nCC)와 임의의 건강한 데이터 청크(330nD)를 이용하여 가능한 만큼의 많은 다른 손상된 데이터 청크(330nD)를 제1 그룹의 메모리 호스트(110)에서의 청크(330)들의 그룹 G로부터 재구성한다. 손상된 청크(330)가 청크(330)들의 다른 그룹 G를 갖는 메모리 호스트(110)들의 다른 그룹들과와 통신없이 재구성될 수 없다고 시스템(100)이 결정한다면, 시스템은, 청크(330)들의 다른 그룹 G를 갖는 메모리 호스트(110)들의 다른 그룹들로부터 건강한 청크(330)를 (예를 들어, 요청 및 수신에 의해) 식별하여, 적어도 m*n개의 건강한 청크(330) ―건강한 청크(330)는 데이터 청크(330nD), 워드-체크 청크(330nWC), 또는 양쪽 모두임― 가 이용가능하고, 건강한 청크(330)를 이용하여 손상된 데이터 청크(330nD)를 재구성할 수 있게 한다.
도 3h 내지 도 3j를 참조하면, 일부 구현에서, 네스팅형 코딩 기술은 코드워드를 형성하는 데이터 청크(330nD)와 코드 청크(330nC)를 보여주고 있다. 도시된 바와 같이, 네스팅형 코딩 기술은 2차원(2D) 네스팅형 코딩 기술이지만, 3차원(3D) 네스팅형 코딩 기술도 역시 적용될 수 있다.
네스팅형 코딩 기술은, 코드-체크 청크(330nCC)와 워드-체크 청크(330nWC) 사이에서 상이한 관계를 생성함으로써 층별화형 코딩 기술과는 상이하다. 2D 네스팅형 코드는 체계적 형태의 임의의 선형 MDS 코드로부터 생성된다. 데이터 블록(316)에 기초하는 워드-체크 청크(330nWC)는 2개의 그룹, 즉, X개의 코드 청크(330nC)를 포함하는 제1 그룹과 N개의 코드 청크(330nC)를 포함하는 제2 그룹으로 파티션화된다. 인코딩된 데이터 블록(316)은 컬럼 C의 배열을 형성하는 것으로서 간주되고, 제1 그룹 내의 X개의 코드 청크(330nC)들은, 이들을 컬럼당 별개의 컴포넌트들로 "분할함"으로써("분할" 코드-체크 청크(330nCC)) 컬럼당 X개의 컬럼 청크(330)를 생성하는데 이용된다. 제2 그룹 내의 N개의 코드 청크(330nC)는 워드-체크 청크(330nWC)를 형성한다.
예를 들어, 도 3h는 데이터 블록(314)(D0-D41)과 데이터 블록(316)(D0-D41)에 기초하는 코드 청크(C0-C7)(330nC)를 도시한다. 데이터 청크(D0-D41)(330nD)와 코드 청크(C0-C7)(330nC)는 코드워드를 형성한다. 코드 청크(330nC)들은 C0-C1을 포함하는 제1 그룹과 C2-C7을 포함하는 제2 그룹으로 파티션화된다. C0-C1은 분할되어 분할 코드-체크 청크(330nCC)를 형성한다. C2-C7은 워드-체크 청크(330nWC)로서 이용된다.
도 3i는, 데이터 블록(316)(D0-D41)과 추가 코드 청크(330nC)(분할 코드-체크 청크(330nCC) 및 워드-체크 청크(330nWC))를 포함하는 결과적인 인코딩된 데이터 블록(314)을 도시한다. (C0,j로 표기된) 컬럼 j에 대한 C0에 대응하는 분할 코드-체크 청크(330nCC)를 생성하기 위해, 컬럼 j에 있지 않은 모든 데이터 청크(330nD)가 제로값을 갖는 것처럼 C0이 생성된다. 즉, C0,j는 전체 데이터 블록(316)을 이용하지만 대신에 다른 컬럼들 모두는 제로화 제거되고 컬럼 j만을 이용하여 C0을 생성하는 동작을 수행하는 것으로부터 생기는 값을 가진다. 예를 들어, 데이터 블록(314)에 대한 C0을 생성하기 위해 생성기 행렬(generator matrix)이 이용된다면, 생성기 행렬은 C0,j를 생성하도록 수정되어, 원래의 생성기 행렬을 이용해 그 원래의 생성기 행렬을 컬럼 j 이외의 컬럼들 C 내의 데이터 청크(330nD)들이 제로화 제거된 데이터 블록(316)에 적용하는 것으로부터 생기는 값을 갖게 할 수 있다.
각각의 컬럼 C에 대한 C1,j에 대한 분할 코드-체크 청크(330nCC)들이 유사하게 생성되지만, C0 대신에 C1을 이용하여 생성된다. 그 결과, C0은 C0,0-C0,6의 선형 조합이고 C1은 C1,0-C1,6의 선형 조합이다. 즉,
Figure 112016084490668-pct00001
(1)
Figure 112016084490668-pct00002
(2)
도 3i에서 "?"로 표기된 청크(330)는, 예를 들어, 도 3j를 참조하여 이하에서 더 설명되는 바와 같이, 다양한 방식으로 생성될 수 있다.
도 3h 및 도 3i의 예에서, 결과적 인코딩된 데이터 블록(314)은 42개의 데이터 청크(330nD)와 8개의 코드 청크(330nC)를 포함한다. 인코딩된 블록을 생성하는데 이용된 원래의 코드를 참조하면, 코드 청크(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)에서 더 많은 스토리지를 이용한다. 일반적으로, 네스팅형 코드의 경우, 컬럼들 C는 데이터 청크(330nD) 또는 워드-체크 청크(330nWC)를 포함하지만 양쪽 모두를 포함하지는 않는다.
일반적으로, 컬럼 C당 X개의 분할 코드-체크 청크(330nCC)와 N개의 워드-체크 청크(330nWC)를 갖는 2D 네스팅형 코드는, (전형적으로, 예를 들어, 데이터 센터내 통신인) 컬럼내 통신만을 수행하면서 (데이터 청크(330nD)를 포함하는 컬럼들에서) 컬럼 C당 X개의 손상된 청크(330)를 재구성하는데 이용될 수 있다. 인코딩된 블록(314) 내의 복수의 손상된 청크(330)를 재구성하는데 있어서, 컬럼내 통신이 컬럼간 통신보다 덜 비싸기 때문에 이들 손상된 청크(330)가 통상적으로 먼저 재구성되지만, 다른 손상된 청크(330)들은 남아 있을 수 있다. 컬럼들 내의 손상된 청크(330)를 재구성한 후에, (컬럼내 통신을 이용하여 재구성될 수 없기 때문에) (N+X)개 또는 그보다 적은 수의 다른 청크(330)가 여전히 손상되어 있다면, 이들 다른 손상된 청크(330)는 워드-체크 청크(330nWC)와 분할 코드-체크 청크(330nCC)를 이용하여 재구성될 수 있다. 제1 그룹(도 4b에서 C0과 C1) 내의 워드-체크 청크(330nWC)는, 이들 워드-체크 청크(330nWC)들이 명시적으로 저장되어 있지 않더라도, 예를 들어, 공식
Figure 112016084490668-pct00003
를 이용하여, 분할 코드-체크 청크(330nCC)로부터 결정될 수 있다.
이를 알아보기 위해, Z는 손상된 워드-체크 청크(330nWC)의 수를 나타내고 Y는 손상중인 분할 코드-체크 청크(330nCC)에 대한 공식
Figure 112016084490668-pct00004
에 따라 대응하는 분할 코드-체크 청크(330nCC)로부터 재구성될 수 없는 제1 그룹 내의 워드-체크 청크(330nWC)의 수를 나타낸다고 하자.
이 공식을 이용하여, 제1 그룹으로부터의 X-Y개의 워드-체크 청크(330nWC)가 결정되어, 제1 그룹에서 Y개의 손상된 워드-체크 청크(330nWC)와 제2 그룹에서 Z개의 손상된 워드-체크 청크(330nWC)를 갖는 코드워드(예를 들어, 도 3h에 도시된 것)를 야기할 수 있다. 최대 N+X개의 총 손상된 청크(330)가 있기 때문에, 최대 N+X-Y-Z개의 손상된 데이터 청크(330nD)가 있다. 따라서, 최대 N+X-Y-Z+Y+Z =N+X개의 손상된 청크(330)를 포함하기 때문에, 손상된 청크(330) 모두를 재구성하기 위해 결과적 코드워드를 이용하는 것이 가능하다.
도 3j를 참조하면, 일부 구현에서, 결과적 인코딩된 블록(314)은 워드-체크 청크(330nWC)에 대해 코드-체크 청크(330nCC)(즉, 코드-체크-워드-체크 청크(330nCCWC))를 포함한다. 도 3i의 인코딩된 블록에 비해, 도 3j의 인코딩된 블록(314)은, 도 3i에서 "?"로 마킹된 위치 대신에 코드-체크 청크들(C0,7 및 C1,7)(330nCC)를 포함한다. 이것은 컬럼간 통신에 의존하지 않고 손상된 워드-체크 청크(330nWC)를 재구성하는 것을 제공하는 한 방식이다. 코드-체크 청크들(C0,7 및 C1,7)(330nCC)은 다양한 방식으로 생성될 수 있다. 예를 들어, 이들 코드-체크 청크(330nCC)는, C0,0 및 C1,0이 D0-D5에 기초하여 생성되는 것과 동일한 방식으로 C2-C7에 기초하여 생성될 수 있다. (예시적 네스팅형 코드를 이용한) 도 3j의 결과적 인코딩된 블록(314)이 컬럼내 재구성을 수행한 후에 8개까지의 손상된 청크(330)를 재구성하는데 이용될 수 있는 반면, (예시적 층별화형 코드를 이용한) 도 3e의 결과적 인코딩된 블록은 컬럼내 재구성을 수행한 후에 6개까지의 손상된 청크(330)를 재구성하는데 이용될 수 있다. 코드-체크 청크(330nC)는 워드-체크 청크(330nWC)를 포함하는 임의 개수의 컬럼에 대해 추가될 수 있다.
도 3k를 참조하면, 일부 구현에서, 큐레이터(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)은 그룹 G 내의 다른 청크(330)들로부터 재구성될 수 있는 청크(330)들을 그룹화하고, 그룹 G의 청크(330)들을 별개 그룹의 메모리 호스트(110)에 할당한다.
시스템(100)이 하나 이상의 손상된 청크(330)를 식별하면, 시스템(100)은 분할 코드-체크 청크(330nCC) 및 워드-체크 청크(330nWC)를 이용하여 손상된 청크(330)를 재구성할 수 있다. 통상적으로, 시스템(100)은 분할 코드-체크 청크(330nCC) 및 동일한 컬럼 C 내의 기타의 데이터 청크(330nd)를 이용하여 손상된 청크(330)의 재구성을 시도한다. 분할 코드-체크 청크(330nCC)만을 이용하여 손상된 청크(330)를 재구성한 후에, 일부 손상된 청크(330)가 남아 있다면, 시스템(100)은, 분할 코드-체크 청크(330nCC)의 선형 조합을 결정함으로써 결정될 수 있는 워드-체크 청크(330nWC)를 포함한 워드-체크 청크(330nWC)를 재구성을 위해 이용한다. 또한, 그룹 G의 청크(330)들의 분할 코드-체크 청크(330nCC)만을 이용하여 손상된 청크(330)를 재구성한 후에, 일부 손상된 청크(330)가 남아 있다면, 시스템(100)은 손상된 청크(330)를 재구성하기 위해 청크(330)들의 다른 그룹 G로부터의 청크(330)들을 이용한다.
다시 도 2를 참조하면, 일부 구현에서, 큐레이터(210)에 의해 저장된 파일 기술자들(3001-n)은, 스트라이프(320a-n)를, 적절하다면, 메모리 호스트(110)에 저장된 데이터 청크(320ndk) 및 비-데이터 청크(320ncm)에 맵핑하는 파일 맵(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)를 할당할 수 있다. 큐레이터(210)는 메모리 호스트 부하와 활성도(liveliness)의 부하 맵(216)을 유지할 수 있다. 일부 구현에서, 큐레이터(210)는 후보 메모리 호스트(110)들의 목록을 생성함으로써 청크(330)를 할당하고 청크 할당 요청(122)을 후보 메모리 호스트(110)들 각각에 전송한다. 메모리 호스트(110)가 과부하되거나 가용 공간을 갖지 않는다면, 메모리 호스트(110)는 요청(122)을 거절할 수 있다. 많은 경우에, 큐레이터(210)는 상이한 메모리 호스트(110)를 선택한다. 각각의 큐레이터(210)는 파일 명칭공간의 지정된 부분을 지속적으로 스캔하여, 매 분마다 등등에서 모든 메타데이터(212)를 검사할 수 있다. 큐레이터(210)는 파일 스캔을 이용하여 메타데이터(212)의 무결성을 체크하고, 수행될 및/또는 통계를 생성할 것을 필요로 하는 작업을 결정할 수 있다. 파일 스캔은 큐레이터(210)의 다른 동작들과 동시에 동작할 수 있다. 스캔 그 자체는 메타데이터(212)를 수정하지 않을 수 있지만, 시스템(100)의 다른 컴포넌트들에 의해 이루어질 작업을 스케쥴링하고 통계를 계산한다.
일부 구현에서, 프로세서(202)는 데이터 청크(330nD)들 중 하나 이상과 비-데이터 청크(330nC)들 중 하나 이상을 그룹 G로 그룹화할 수 있다. 그룹 G의 하나 이상의 청크(330)는 그룹 G의 다른 청크(330)들로부터 재구성될 수 있다. 따라서, 그룹 G의 청크(330)를 재구성할 때, 큐레이터(210)는 그룹 G의 청크(330)를 판독하여 그룹 G 내의 손상된 청크(330)를 재구성한다. 이것은 분실된 청크(330)의 더 효율적인 재구성을 허용하고 판독되는 청크(330)의 수가 감소된다. 구체적으로는, 청크 판독의 수를 감소시키는 것은, 하드웨어 디바이스(예를 들어, 메모리 호스트(114))에 대한 더 적은 수의 판독이 수행되기 때문에 판독의 비용을 감소시킬 수 있고, 느린 디바이스들이 액세스될 가능성이 더 적기 때문에 재구성의 레이턴시를 감소시킬 수 있다.
도 4a 내지 도 4c를 참조하면, 큐레이터(210)는, 저장된 데이터(312)로의 사용자 액세스에 영향을 미치지 않고 유지보수가 발생할 수 있는 레벨(예를 들어, 레벨 1-5)을 식별하기 위해 분산형 스토리지 시스템(100)의 유지보수 계층(400)을 결정할 수 있다. 유지보수는, 전력 유지보수, 쿨링 시스템 유지보수(도 4c), 네트워킹 유지보수, 부품 업데이팅 또는 교체, 또는 분산형 스토리지 시스템(100)에 영향을 미치는 기타의 유지보수 또는 정전을 포함할 수 있다.
유지보수 계층(400)은, 유지보수 도메인(402)의 레벨(예를 들어, 레벨 1-5)을 식별하고, 여기서 각각의 유지보수 도메인(402)은 활성 상태 또는 비활성 상태에 있을 수 있다. 분산형 스토리지 시스템(100)의 각각의 메모리 호스트(110)는 하나 이상의 유지보수 도메인(402)과 연관된다. 게다가, 프로세서(202)는, 유지보수 도메인(402)들 및 그들의 컴포넌트들(410, 420, 430, 440, 114)과의 메모리 호스트(110)의 연관을 맵핑한다. 도 4a는, 각각의 컴포넌트(410, 420, 430, 440, 114)가 하나의 다른 컴포넌트(410, 420, 430, 440, 114)에 의존하는 엄격 계층(400a)을 도시하는 반면, 도 4b는 하나의 컴포넌트(410, 420, 430, 440, 114)가 하나보다 많은 입력 피드를 갖는 비-엄격 계층(400b)을 도시한다. 일부 예에서, 프로세서(202)는 프로세서(202)의 비일시적 메모리(204) 상에 유지보수 계층(400)을 저장한다. 예를 들어, 스토리지 자원(114a)은 랙(440a)에 맵핑되고, 랙은 버스 덕트(430a)에 맵핑되며, 버스 덕트는 차례로 전력 모듈 분배 센터(420a)에 맵핑되고, 전력 모듈 분배 센터는 차례로 발전기(power plant, 410a)에 맵핑된다. 프로세서(202)는, 컴포넌트들(410, 420, 430, 440, 114)의 맵핑에 기초하여, 컴포넌트(410, 420, 430, 440, 114)가 유지보수를 겪고 있을 때 어느 메모리 호스트(110)가 비활성인지를 결정한다. 일단 시스템(100)이 유지보수 도메인(402)을 스토리지 자원(114)에 맵핑하고 나면, 시스템(100)은 데이터 가용성을 유지하면서 유지보수가 수행될 수 있는 최고 레벨(예를 들어, 레벨 1-5)을 결정한다.
유지보수 도메인(402)은 유지보수를 겪고 있는 계층 컴포넌트(410, 420, 430, 440, 114)와 그 컴포넌트(410, 420, 430, 440, 114)에 의존하는 임의의 컴포넌트를 포함한다. 따라서, 하나의 컴포넌트(410, 420, 430, 440, 114)가 유지보수를 겪고 있을 때, 그 컴포넌트(410, 420, 430, 440, 114)는 비활성이고 그 컴포넌트(410, 420, 430, 440, 114)의 유지보수 도메인(402) 내의 임의의 컴포넌트(410, 420, 430, 440, 114)도 역시 비활성이다. 도 4a에 도시된 바와 같이, 레벨 1 컴포넌트는 스토리지 자원(114a-n)을 포함할 수 있다; 레벨 2 컴포넌트는 랙(440a-n)을 포함할 수 있다; 레벨 3 컴포넌트는 버스 덕트(430a-n)를 포함할 수 있다; 레벨 4 컴포넌트는 전력 모듈 분배 센터(420a-420n)를 포함할 수 있다; 레벨 5 컴포넌트는 레벨 1 내지 4 컴포넌트들에 전력을 제공하는 발전기(410)일 수 있다. 다른 컴포넌트 분배도 역시 이용가능할 수 있다. 메모리 호스트(110a)가 유지보수를 겪고 있을 때, 레벨 1 유지보수 도메인(402a)는 메모리 호스트(110)를 포함하고, 그 스토리지 디바이스(114)는 비활성이다. 랙(440a)이 유지보수를 겪고 있을 때, 랙(440a) 및 랙(440a)에 의존하는 메모리 호스트(110)를 포함하는 레벨 2 유지보수 도메인(402b)은 비활성 상태에 있다. 버스 덕트(430a)가 유지보수를 겪고 있을 때, 버스 덕트(430a) 및 버스 덕트(430a)에 의존하는 레벨 1 및 2 내의 임의의 컴포넌트들을 포함하는 레벨 3 유지보수 도메인(402c)은 비활성 상태에 있다. 전력 모듈 분배 센터(420a)가 유지보수를 겪고 있을 때, 전력 모듈 분배 센터(420a) 및 전력 모듈 분배 센터(420a)에 의존하는 레벨 1 내지 3 내의 임의의 컴포넌트들을 포함하는 레벨 4 유지보수 도메인(402d)은 비활성 상태에 있다. 마지막으로, 발전기(410)가 유지보수를 겪고 있을 때, 발전기(410)에 의존하는 임의의 전력 모듈 분배 센터(420), 버스 덕트(430), 랙(440), 및 메모리 호스트(110)를 포함하는 레벨 5 유지보수 도메인(402e)은 비활성이고, 그에 따라, 사용자는 레벨 1 유지보수 도메인(402a) 내에 위치한 데이터(312)에 액세스할 수 없다.
일부 예에서, 도 4b에 도시된 바와 같이, 비-엄격 계층(400b) 컴포넌트(410, 420, 430, 440, 114)는 이중 피드를 가질 수 있다, 즉, 컴포넌트(410, 420, 430, 440, 114)는 2개 이상의 다른 컴포넌트(410, 420, 430, 440, 114)에 의존한다. 예를 들어, 버스 덕트(430n)는 2개의 전력 모듈(420)로부터의 피드를 가질 수 있고; 및/또는 랙(440)은 2개의 버스 덕트(430)로부터의 이중 피드를 가질 수 있다. 도시된 바와 같이, 제1 유지보수 도메인(402c)은 2개의 랙(440a 및 440n)을 포함할 수 있고, 여기서, 제2 랙(440n)은 2개의 버스 덕트(430a, 430n)로부터의 2개의 피드를 포함한다. 따라서, 제2 랙(440n)은 2개의 유지보수 도메인(402ca 및 402cb)의 일부이다. 따라서, 유지보수 계층(400)의 더 높은 레벨들은 유지보수 계층(400)의 더 낮은 레벨들의 손실을 야기하지 않고 유지된다. 이것은 데이터 액세스가능성을 허용하는 시스템(100) 내의 중복성을 야기한다. 특히, 전력 모듈 분배 센터(420)는 자신에게 의존하는 임의의 버스 덕트(430)를 잃지 않고 유지될 수 있다. 일부 예에서, 랙(440)은, 버스 덕트에 의존하는 이중-전원형 랙(440)으로의 전력을 잃지 않고 버스 덕트(430)의 유지보수를 허용하는 이중-전원형 랙(440)을 포함한다. 일부 예에서, 정전을 야기하지 않고 유지될 수 있는 유지보수 도메인(402)은 유지보수를 허용하기 위해 청크(330)를 분배할 때 무시된다; 그러나, 계획되지 않은 정전은 여전히 청크(330)의 손실을 야기할 수 있기 때문에, 무시된 유지보수 도메인(402)은 청크(330)를 분배할 때 포함될 수 있다.
일부 예에서, 도 4c에 도시된 바와 같이, 유지보수 계층(400)은 쿨링 계층(400c)(또는 전력 계층(400a, 400b)의 조합) 및 쿨링 계층(400c)이다. 쿨링 계층(400c)은 쿨링 디바이스(442)를 쿨링할 랙(440)에 맵핑한다. 도시된 바와 같이, 쿨링 디바이스(442)는 하나 이상의 랙(440)을 쿨링할 수 있다. 프로세서(202)는, 쿨링 유지보수 도메인(402f)와의 메모리 호스트(110)의 연관을 저장한다. 일부 구현에서, 프로세서(202)는, 스토리지 시스템(100) 내에서 발생할 수 있는 유지보수의 모든 가능한 조합을 고려하여 계층(400) 또는 계층들(400a, 400b, 400c)의 조합을 결정한다.
따라서, 스토리지 시스템(100) 내의 컴포넌트(410, 420, 430, 440, 114)가 유지보수되고 있을 때, 컴포넌트(410, 420, 430, 440, 114) 및 그 컴포넌트(410, 420, 430, 440, 114)에 맵핑되거나 의존하는 임의의 컴포넌트(410, 420, 430, 440, 114)는 비활성 상태에 있다. 비활성 상태의 컴포넌트(410, 420, 430, 440, 114)는 사용자에 의해 액세스불가능한 반면, 활성 상태의 컴포넌트(410, 420, 430, 440, 114)는 사용자에 의해 액세스가능하여 사용자가 그 컴포넌트(410, 420, 430, 440, 114)에 저장된 또는 그 컴포넌트(410, 420, 430, 440, 114)에 맵핑된 메모리 호스트(110)에 저장된 데이터(312)에 액세스하는 것을 허용한다. 앞서 언급된 바와 같이, 비활성 상태 동안에, 사용자는 유지보수를 겪고 있는 유지보수 도메인(402)과 연관된 메모리 호스트(110)에 액세스할 수 없다; 따라서, 사용자는 파일(310)(즉, 스트라이프 복제물(330nk), 데이터 청크(330nDk) 및 코드 청크(330nCm)를 포함하는 청크(330))에 액세스할 수 없다.
일부 구현에서, 프로세서(202)는, 예를 들어, 컴포넌트(410, 420, 430, 440, 114)의 맵핑에 기초하여, 임의의 하나의 유지보수 도메인(402)의 메모리 호스트(110)에 분배되는 그룹 G 내의 청크(330)의 수를 제약한다. 따라서, 레벨 1 유지보수 도메인(402)이 비활성이라면, 프로세서(202)는, 일부 청크(330)가 액세스불가능하더라도, 그룹 G에 대한 액세스가능성을 유지한다(즉, 건강하지 않은 청크(330)가 재구성될 수 있다). 일부 예에서, 청크(330)들의 각각의 그룹 G에 대해, 프로세서(202)는 단일 유지보수 도메인(402) 내의 임의의 메모리 호스트(110) 내에 위치하는 최대 개수의 청크(330)를 결정하여, 파일(310)에 대한 청크(330)를 저장하고 있는 메모리 호스트(110)와 연관된 유지보수 도메인(402)이 유지보수를 겪고 있더라도, 프로세서(202)가 그룹 G 내의 청크(330)를 여전히 회수할 수 있게 한다. 최대 개수의 청크(330)는, 일부의 청크(330)가 이용가능하지 않더라도, 프로세서(202)가 그룹 G의 청크(330)의 수를 재구성할 수 있도록 보장한다. 일부 예에서, 그룹 G의 최대 개수의 청크(330)는, 청크(330)들의 그룹 G를 여전히 재구성할 수 있으면서, 임의의 시스템 고장을 수용하도록 더 낮은 임계치로 설정된다. 프로세서(202)가 청크(330)를 메모리 호스트(110)에 둘 때, 프로세서(202)는, 스트라이프(320)의 청크(330)들의 그룹 G 내에서, 단일 유지보수 도메인(402)이 유지보수를 겪을 때 최대 개수보다 많지 않은 청크(330)가 비활성인 것을 보장한다.
도 5a 내지 도 7b를 참조하여, 일부 구현에서, 프로세서(202)는 그룹 G의 청크들(330)의 메모리 호스트(110)들간의 분배를 결정한다. 일부 예에서, 프로세서(202)는 그룹 G의 청크(330)들을 저장하기 위해 가용 풀(pool)의 스토리지 디바이스(140)들로부터 메모리 호스트(110)들의 제1 무작위 선택군(150)을 정한다. 프로세서(202)는, 그룹 G 내의 청크(330)들의 수와 동일한 개수의 메모리 호스트(110)(예를 들어, 선택된 메모리 호스트(110S))를 선택한다. 그 다음, 프로세서(202)는, 하나 이상의(또는 임계치 개수의) 유지보수 도메인(402)이 비활성 상태에 있을 때 선택된 메모리 호스트(110S)들의 선택군(150)이 그룹 G의 액세스가능성을 유지할 수 있는지(즉, 그룹 G의 청크(330)들의 이용가능성)를 결정한다. 무작위 선택군(150)은, 유지보수 컴포넌트들(410, 420, 430, 440, 114) 중의 하나에서 유지보수가 발생하는 경우 그룹 G의 재구성을 허용하는 목적을 가진다.
도 5a 및 도 5b를 참조하여, 일부 예에서, 하나 이상의(또는 임계치 개수의) 유지보수 도메인(402)이 비활성 상태에 있을 때 선택된 메모리 호스트(110S)들의 제1 무작위 선택군(150a)이 그룹 G의 액세스가능성을 유지할 수 없다고 프로세서(202)가 결정하면, 프로세서(202)는, 그룹 G의 청크(330)들의 수와 정합하는 선택된 메모리 호스트(110S)들의 제2 무작위 선택군(150b)을 결정한다. 그 다음, 프로세서(202)는, 하나 이상의(또는 임계치 개수의) 유지보수 도메인(402)이 비활성 상태에 있을 때 선택된 메모리 호스트(110S)들의 제2 무작위 선택군(150b)이 그룹 G의 액세스가능성을 유지할 수 있는지를 결정한다. 하나 이상의(또는 임계치 개수의) 유지보수 도메인(402)이 비활성 상태에 있을 때 제2 무작위 선택군(150b)이 그룹 G의 액세스가능성을 유지할 수 없다고 프로세서(202)가 결정한다면, 프로세서(202)는, 프로세서(202)가 그룹 G의 액세스가능성을 유지할 수 있는 선택된 메모리 호스트(110S)들의 무작위 선택군(150n)을 식별할 때까지 선택된 메모리 호스트(110S)들의 무작위 선택군(150n)을 계속 정한다.
도 6a 및 도 6b를 참조하여, 일부 구현에서, 하나 이상의(또는 임계치 개수의) 유지보수 도메인(402)이 비활성 상태에 있을 때 선택된 메모리 호스트(110S)들의 제1 무작위 선택군(150a)이 그룹 G의 액세스가능성을 유지할 수 없다고 프로세서(202)가 결정하면, 프로세서(202)는, 하나 이상의 무작위 선택된 메모리 호스트(110S)를 추가하고 대응하는 개수의 상이한 메모리 호스트(110S)를 제거함으로써 선택된 메모리 호스트(110S)들의 제1 무작위 선택군(150a)을 수정한다. 그 다음, 프로세서(202)는, 하나 이상의(또는 임계치 개수의) 유지보수 도메인(402)이 비활성 상태에 있을 때 업데이트된 제1 무작위 선택군(150a)이 그룹 G의 액세스가능성을 유지할 수 있는지를 결정한다. 하나 이상의(또는 임계치 개수의) 유지보수 도메인(402)이 비활성 상태에 있을 때 업데이트된 제1 무작위 선택군(150a)이 그룹 G의 액세스가능성을 유지할 수 없다고 프로세서(202)가 결정한다면, 프로세서(202)는, 하나 이상의 무작위 선택된 메모리 호스트(110S)를 추가 및 제거함으로써 선택된 메모리 호스트(110S)들의 선택군(150a)을 업데이트한다. 프로세서(202)는, 선택된 메모리 호스트(110S)들이 분산형 스토리지 시스템(100)의 유지보수 동안에 청크(330)들의 그룹 G의 액세스가능성을 유지할 수 있다고 프로세서(202)가 결정할 때까지, 메모리 호스트(110)들의 무작위 선택군(150a)을 계속 업데이트한다. 일단 프로세서(202)가 그 결정을 내리고 나면, 프로세서(202)는 다음 스트라이프(320)(또는 파일(310))로 이동하여 다음 스트라이프(320)의 분배를 결정한다. 일부 구현에서, 프로세서(202)는, 확률 샘플링, 단순 샘플링, 층별화 샘플링, 클러스터 샘플링, 또는 이들의 조합을 이용하여, 선택된 메모리 호스트(110S)들의 무작위 선택군(150)을 결정한다.
도 7a 및 도 7b를 참조하여, 일부 구현에서, 프로세서(202)는 청크(330)들의 그룹 G에서 청크(330)들의 개수를 결정한다. 그 다음, 프로세서(202)는 분산형 스토리지 시스템(100)의 메모리 호스트(110)들의 정렬된 환형 목록(160)으로부터 파일(310)의 청크(330)들의 개수와 동일한 개수의 연속된 메모리 호스트들(110a-n)을 갖는 선택된 목록(162)을 선택하며, 여기서 정렬된 환형 목록(160)은 제1 메모리 호스트(110a)에서 시작한다. 목록(160)은 프로세서(202)의 비일시적 메모리(204)에 저장될 수 있다. 그 다음, 프로세서(202)는, 하나 이상의(또는 임계치 개수의) 유지보수 도메인(402)이 비활성 상태에 있을 때 선택된 목록(162)으로부터의 선택된 메모리 호스트들(110a-n)이 청크(330)들의 그룹 G의 액세스가능성을 집합적으로 유지할 수 있는지를 결정한다. 하나 이상의(또는 임계치 개수의) 유지보수 도메인(402)이 비활성 상태에 있을 때 선택된 메모리 호스트들(110a-n)이 청크(330)들의 그룹 G의 액세스가능성을 집합적으로 유지할 수 없다고 프로세서(202)가 결정한다면, 프로세서(202)는, 스트라이프(320) 또는 파일(310)의 청크(330)들의 개수와 동일한 개수의 연속된 메모리 호스트들(110a-n)을 갖는 또 다른 선택된 목록(162)을 정렬된 환형 목록(160)으로부터 선택한다. 일부 예에서, 선택된 목록(162)의 메모리 호스트들(110a-n)이 청크(330)들의 그룹 G의 액세스가능성을 집합적으로 유지할 수 없다고 프로세서(202)가 결정할 때, 프로세서(202)는 정렬된 환형 목록(160) 내의 제1 메모리 호스트(110n) 이후의 제2 메모리 호스트(110(n+1))로 이동한다. 다른 예에서, 프로세서(202)는 정렬된 환형 목록(160)에서 아래로 미리결정된 개수의 위치만큼 이동한다. 일부 구현에서, 프로세서(202)는 스토리지 시스템(100)의 메모리 호스트(110)들의 정렬된 환형 목록(160)을 결정하고, 여기서, 정렬된 환형 목록(160) 상의 인접한 메모리 호스트(110)들 또는 임계치 개수의 연속된 메모리 호스트(110)들은 상이한 유지보수 도메인(402)들과 연관된다. 추가로 또는 대안으로서, 프로세서(202)는 스토리지 시스템(100)의 메모리 호스트(110)들의 정렬된 환형 목록(160)을 결정하고, 여기서, 정렬된 환형 목록(160) 상의 인접한 메모리 호스트(110)들 또는 임계치 개수의 연속된 메모리 호스트(110)들은 각각 상이한 지리적 위치들에 있다. 일부 예에서, 정렬된 환형 목록(160) 상의 메모리 호스트(110)들은, 상이한 유지보수 도메인(402)들이 정렬된 목록(160)을 따라 순차적으로 데이터(312)의 분산을 야기하도록 배열된다. 예를 들어, 도 4a에 도시된 바와 같이, 목록(160)은 동일한 버스 덕트(430a)에 의존하는 순차적 메모리 호스트(110)들을 포함하지 않을 수도 있다. 대신에, 목록(160) 상의 2개의 순차적 메모리 호스트(110)들은 데이터 액세스가능성이 유지된다는 것을 확실히 하기 위해 상이한 유지보수 도메인(402)들로부터 나온 것이다.
도 8을 참조하면, 일부 구현에서, 분산형 스토리지 시스템(100)에서 데이터(312)를 분배하는 방법(800)은, 비일시적 메모리(204)와 통신하는 컴퓨터 프로세서(202)를 이용하여, 파일(310)을 비일시적 메모리(204) 내에 수신하는 단계(802) 및 수신된 파일(310)을 청크(330)들로 분할하는 단계(804)를 포함한다. 이 방법(800)은 또한, 데이터 청크(330nD)들 중 하나 이상과 비-데이터 청크(330nC)들 중 하나 이상을 그룹 G로 그룹화하는 단계(806)를 포함한다. 그룹 G의 하나 이상의 청크(330)는 그룹 G의 다른 청크(330)들로부터 재구성될 수 있다. 이 방법(800)은, 선택사항으로서, 분산형 스토리지 시스템(100)의 계층에 기초하여, 분산형 스토리지 시스템(100)의 스토리지 디바이스(114)들에 그룹 G의 청크(330)들을 분배하는 단계(808)를 더 포함한다. 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인(402)을 포함한다. 게다가, 각각의 스토리지 디바이스(114)는 유지보수 도메인(402)과 연관된다. 그룹 G의 청크(330)들은 복수의 유지보수 도메인(402)에 걸쳐 분배되어 유지보수 도메인(402)이 비활성 상태일 때 그룹 G의 청크(330)들을 재구성하는 능력을 유지한다.
일부 구현에서, 이 방법(800)은 임의의 한 유지보수 도메인(402)의 스토리지 디바이스(114)들에 분배되는 그룹 G의 청크(330)들의 개수를 제약하는 단계를 더 포함한다. 이 방법(800)은, 그룹 G의 청크(330)들의 개수와 정합하는 스토리지 디바이스들(114)의 제1 무작위 선택군(150a)을 결정하고 하나 이상의 유닛(402)이 비활성 상태일 때 스토리지 디바이스(114)들의 이 선택군이 그룹 G의 액세스가능성을 유지할 수 있는지를 결정함으로써 그룹 G의 청크(330)들의 스토리지 디바이스(114)들간의 분배를 결정하는 단계를 더 포함한다. 일부 예에서, 하나 이상의 유지보수 도메인(402)이 비활성 상태일 때 스토리지 디바이스들(114)의 제1 무작위 선택군(150a)이 그룹 G의 액세스가능성을 유지할 수 없으면, 이 방법(800)은, 그룹 G의 청크(330)들의 개수와 정합하는 스토리지 디바이스(114)들의 제2 무작위 선택군(150b)을 결정하는 단계 또는 하나 이상의 무작위 선택된 스토리지 디바이스(114)를 추가하거나 제거함으로써 스토리지 디바이스(114)들의 제1 무작위 선택군(150a)을 수정하는 단계를 더 포함한다. 이 방법(800)은, 단순 샘플링, 확률 샘플링, 층별화 샘플링, 또는 클러스터 샘플링을 이용하여, 스토리지 디바이스들(114)의 제1 무작위 선택군(150a)을 결정하는 단계를 더 포함할 수 있다.
일부 구현에서, 이 방법(800)은, 분산형 스토리지의 스토리지 디바이스(114)들의 정렬된 환형 목록(160)으로부터 그룹 G의 청크들(330)의 개수와 동일한 개수의 연속된 스토리지 디바이스(114)들을 선택함으로써 그룹 G의 청크(330)들의 스토리지 디바이스(114)들간의 분배를 결정하는 단계를 더 포함한다. 하나 이상의 유지보수 도메인(402)이 비활성 상태일 때 선택된 스토리지 디바이스(114)들이 그룹 G의 액세스가능성을 집합적으로 유지할 수 없으면, 이 방법(800)은, 그룹 G의 청크들(330)의 개수와 동일한 개수의 또 다른 연속된 스토리지 디바이스(114)를 정렬된 환형 목록(160)으로부터 선택하는 단계를 더 포함한다. 추가로 또는 대안으로서, 이 방법(800)은 분산형 스토리지 시스템(100)의 스토리지 디바이스(114)들의 정렬된 환형 목록(160)을 결정하는 단계를 포함한다. 정렬된 환형 목록(160) 상의 인접한 스토리지 디바이스(114)들은 상이한 유지보수 도메인(402)들과 연관된다. 일부 예에서, 정렬된 환형 목록(160) 상의 임계치 개수의 연속된 스토리지 디바이스(114)들 각각은, 상이한 유지보수 도메인(402)들과 연관되거나, 상이한 지리적 위치들에 있다.
일부 구현에서, 이 방법(800)은, (예를 들어, 컴퓨터 프로세서(202)를 이용하여) 유지보수 도메인(402)들의 유지보수 계층(400)을 결정하는 단계를 더 포함하고, 여기서, 유지보수 계층(400)은 유지보수 레벨들을 가지며 각각의 유지보수 레벨은 하나 이상의 유지보수 도메인(402)을 포함한다. 이 방법(800)은 또한, 각각의 유지보수 도메인(402)을 적어도 하나의 스토리지 디바이스(114)에 맵핑하는 단계를 포함한다. 일부 예에서, 각각의 유지보수 도메인(402)은 단일의 전력 분배 유닛(420) 또는 단일의 전력 버스 덕트(430)에 의해 전력공급되는 스토리지 디바이스(114)들을 포함한다.
이 방법(800)은 수신된 파일(310)을 스트라이프(320)들로 분할하는 단계를 더 포함할 수 있다. 각각의 파일(310)은 에러 정정 코드(313)를 포함한다. 에러 정정 코드(313)는, Reed-Solomon 코드, 네스팅형 코드 또는 층별화형 코드 중 하나이다. 비-데이터 청크(330)는, 코드-체크 청크(330nCC), 워드-체크 청크(330nWC), 및 코드-체크-워드-체크 청크(330nCCWC)를 포함한다.
여기서 설명된 시스템 및 기술들의 다양한 구현들은, 디지털 전자 회로, 집적 회로, 특별 설계된 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 (28)

  1. 분산형 스토리지 시스템에서 데이터를 분배하는 방법으로서,
    파일을 비일시적 메모리 내에 수신하는 단계;
    상기 비일시적 메모리와 통신하는 컴퓨터 프로세서를 이용하여 상기 수신된 파일을 청크들로 분할하는 단계 - 상기 청크들은 데이터 청크들과 비-데이터 청크들임― ;
    상기 데이터 청크들 중 하나 이상과 상기 비-데이터 청크들 중 하나 이상을 그룹으로 그룹화하는 단계 - 상기 그룹의 하나 이상의 데이터 청크 또는 하나 이상의 비-데이터 청크는 상기 그룹의 다른 청크들로부터 재구성(reconstruct)될 수 있음 - ;
    상기 분산형 스토리지 시스템의 유지보수 계층(maintenance hierarchy)에 기초하여 상기 분산형 스토리지 시스템의 스토리지 디바이스들 간에 상기 그룹의 청크들의 분배를 결정하는 단계 - 상기 유지보수 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인을 포함하고, 각각의 스토리지 디바이스는 유지보수 도메인과 연관되며, 상기 분배는 하나 이상의 유지보수 도메인이 비활성 상태일 때 상기 그룹의 액세스가능성을 유지할 수 있는 상기 그룹의 청크들의 개수와 정합하는 스토리지 디바이스들의 무작위 선택군을 포함함 - ; 및
    상기 결정된 분배에 기초하여 상기 그룹의 청크들을 상기 스토리지 디바이스들에 분배하는 단계 - 상기 그룹의 청크들은 복수의 유지보수 도메인에 걸쳐 분배되어 유지보수 도메인이 비활성 상태일 때 상기 그룹의 청크들을 재구성하는 능력을 유지함 -
    를 포함하는 방법.
  2. 제1항에 있어서, 임의의 하나의 유지보수 도메인의 스토리지 디바이스들에 분배되는 그룹의 청크들의 개수를 한정하는 단계를 더 포함하는 방법.
  3. 제1항에 있어서, 하나 이상의 유지보수 도메인이 비활성 상태일 때 상기 스토리지 디바이스들의 무작위 선택군이 상기 그룹의 액세스가능성을 유지할 수 없으면, 하나 이상의 무작위 선택된 스토리지 디바이스들을 추가 또는 제거함으로써 상기 스토리지 디바이스들의 무작위 선택군을 수정하는 단계를 더 포함하는 방법.
  4. 제1항에 있어서, 단순 샘플링, 확률 샘플링, 층별화 샘플링(stratified sampling), 또는 클러스터 샘플링을 이용하여 상기 스토리지 디바이스들의 무작위 선택군을 결정하는 단계를 더 포함하는 방법.
  5. 제1항에 있어서,
    상기 컴퓨터 프로세서를 이용하여, 유지보수 도메인들의 유지보수 계층을 결정하는 단계 - 상기 유지보수 계층은 유지보수 레벨들을 가지며, 각각의 유지보수 레벨은 하나 이상의 유지보수 도메인을 포함함 - ; 및
    각각의 유지보수 도메인을 적어도 하나의 스토리지 디바이스에 맵핑하는 단계
    를 더 포함하는 방법.
  6. 제5항에 있어서, 각각의 유지보수 도메인은 단일의 전력 분배 유닛 또는 단일의 전력 버스 덕트에 의해 전력공급되는 스토리지 디바이스들을 포함하는, 방법.
  7. 분산형 스토리지 시스템에서 데이터를 분배하는 방법으로서,
    파일을 비일시적 메모리 내에 수신하는 단계;
    상기 비일시적 메모리와 통신하는 컴퓨터 프로세서를 이용하여 상기 수신된 파일을 청크들로 분할하는 단계 - 상기 청크들은 데이터 청크들과 비-데이터 청크들임― ;
    상기 데이터 청크들 중 하나 이상과 상기 비-데이터 청크들 중 하나 이상을 그룹으로 그룹화하는 단계 - 상기 그룹의 하나 이상의 데이터 청크 또는 하나 이상의 비-데이터 청크는 상기 그룹의 다른 청크들로부터 재구성될 수 있음 - ;
    상기 분산형 스토리지 시스템의 스토리지 디바이스들의 정렬된 환형 목록으로부터 상기 그룹의 청크들의 개수와 동일한 개수의 연속된 스토리지 디바이스들을 선택함으로써 상기 분산형 스토리지 시스템의 유지보수 계층에 기초하여 상기 분산형 스토리지 시스템의 스토리지 디바이스들 간에 상기 그룹의 청크들의 분배를 결정하는 단계 - 상기 유지보수 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인을 포함하고, 각각의 스토리지 디바이스는 유지보수 도메인과 연관되며, 상기 그룹의 청크들은 복수의 유지보수 도메인에 걸쳐 분배되어 유지보수 도메인이 비활성 상태일 때 상기 그룹의 청크들을 재구성하는 능력을 유지하고, 유지보수 도메인이 비활성 상태일 때 상기 선택된 스토리지 디바이스들이 상기 그룹의 청크들을 재구성하는 능력을 집합적으로 유지할 수 없으면, 상기 그룹의 청크들의 개수와 동일한 개수의 또 다른 연속된 스토리지 디바이스를 상기 정렬된 환형 목록으로부터 선택함 - ; 및
    상기 결정된 분배에 기초하여 상기 그룹의 청크들을 상기 분산형 스토리지 시스템의 상기 스토리지 디바이스들에 분배하는 단계
    를 포함하는 방법.
  8. 제7항에 있어서, 상기 분산형 스토리지 시스템의 스토리지 디바이스들의 상기 정렬된 환형 목록을 결정하는 단계를 더 포함하고, 상기 정렬된 환형 목록 상의 인접한 스토리지 디바이스들은 상이한 유지보수 도메인들과 연관되는, 방법.
  9. 제8항에 있어서, 상기 정렬된 환형 목록 상의 임계치 개수의 연속된 스토리지 디바이스들 각각은 상이한 유지보수 도메인들과 연관되는, 방법.
  10. 제8항에 있어서, 상기 정렬된 환형 목록 상의 임계치 개수의 연속된 스토리지 디바이스들 각각은 상이한 지리적 위치들에 있는, 방법.
  11. 분산형 스토리지 시스템에서 데이터를 분배하는 방법으로서,
    파일을 비일시적 메모리 내에 수신하는 단계;
    상기 비일시적 메모리와 통신하는 컴퓨터 프로세서를 이용하여 상기 수신된 파일을 스트라이프들로 분할하고 각각의 스트라이프를 청크들로 분할하는 단계 - 상기 청크들은 데이터 청크들과 비-데이터 청크들이고, 각각의 파일은 에러 정정 코드를 포함하며, 상기 에러 정정 코드는 네스팅형 코드 또는 층별화형 코드 중 하나를 포함하고, 상기 비-데이터 청크들은 코드-체크 청크들, 워드-체크 청크들, 및 코드-체크-워드-체크 청크들을 포함함 - ;
    상기 데이터 청크들 중 하나 이상과 상기 비-데이터 청크들 중 하나 이상을 그룹으로 그룹화하는 단계 - 상기 그룹의 하나 이상의 데이터 청크 또는 하나 이상의 비-데이터 청크는 상기 그룹의 다른 청크들로부터 재구성될 수 있음 - ; 및
    상기 분산형 스토리지 시스템의 유지보수 계층에 기초하여 상기 그룹의 청크들을 상기 분산형 스토리지 시스템의 스토리지 디바이스들에 분배하는 단계 - 상기 유지보수 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인을 포함하고, 각각의 스토리지 디바이스는 유지보수 도메인과 연관되며, 상기 그룹의 청크들은 복수의 유지보수 도메인에 걸쳐 분배되어 유지보수 도메인이 비활성 상태일 때 상기 그룹의 청크들을 재구성하는 능력을 유지함 -
    를 포함하는 방법.
  12. 분산형 스토리지 시스템에서 데이터를 분배하기 위한 시스템으로서,
    파일을 수신하는 비일시적 메모리;
    상기 비일시적 메모리와 통신하는 컴퓨터 프로세서 - 상기 컴퓨터 프로세서는,
    상기 수신된 파일을 청크들 - 상기 청크들은 데이터 청크들과 비-데이터 청크들임 - 로 분할하고,
    상기 데이터 청크들 중 하나 이상과 상기 비-데이터 청크들 중 하나 이상을 그룹 - 상기 그룹의 하나 이상의 데이터 청크 또는 하나 이상의 비-데이터 청크는 상기 그룹의 다른 청크들로부터 재구성될 수 있음 - 으로 그룹화함 - ; 및
    상기 컴퓨터 프로세서 및 상기 비일시적 메모리와 통신하는 스토리지 디바이스들
    을 포함하고,
    상기 컴퓨터 프로세서는,
    상기 분산형 스토리지 시스템의 유지보수 계층에 기초하여 상기 그룹의 청크들의 분배를 상기 스토리지 디바이스들 간에 결정하고 - 상기 유지보수 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인들을 포함하며, 각각의 스토리지 디바이스는 유지보수 도메인과 연관되며, 상기 분배는 하나 이상의 유지보수 도메인이 비활성 상태일 때 상기 그룹의 액세스가능성을 유지할 수 있는 상기 그룹의 청크들의 개수와 정합하는 스토리지 디바이스들의 무작위 선택군을 포함함 -,
    상기 결정된 분배에 기초하여 상기 그룹의 청크들을 상기 스토리지 디바이스들에 분배하는 - 상기 그룹의 청크들은 복수의 유지보수 도메인에 걸쳐 분배되어 유지보수 도메인이 비활성 상태일 때 상기 그룹의 액세스가능성을 유지함 - , 시스템.
  13. 제12항에 있어서, 상기 컴퓨터 프로세서는 임의의 하나의 유지보수 도메인의 스토리지 디바이스들에 분배되는 상기 그룹의 청크들의 개수를 한정하는, 시스템.
  14. 제12항에 있어서, 상기 컴퓨터 프로세서는, 하나 이상의 유지보수 도메인이 비활성 상태일 때 상기 스토리지 디바이스들의 무작위 선택군이 상기 파일의 액세스가능성을 유지할 수 없으면, 하나 이상의 무작위 선택된 스토리지 디바이스들을 추가 및 제거함으로써 상기 스토리지 디바이스들의 상기 무작위 선택군을 수정하는, 시스템.
  15. 제12항에 있어서, 상기 컴퓨터 프로세서는, 상기 스토리지 디바이스들의 상기 무작위 선택군을, 단순 샘플링, 확률 샘플링, 층별화 샘플링, 또는 클러스터 샘플링을 이용하여 결정하는, 시스템.
  16. 제12항에 있어서, 상기 컴퓨터 프로세서는,
    유지보수 도메인들의 유지보수 계층을 결정하고 - 상기 유지보수 계층은 유지보수 레벨들을 가지며, 각각의 유지보수 레벨은 하나 이상의 유지보수 도메인을 포함함 - ;
    각각의 유지보수 도메인을 적어도 하나의 스토리지 디바이스에 맵핑하는, 시스템.
  17. 제16항에 있어서, 각각의 유지보수 도메인은 단일의 전력 분배 유닛 또는 단일의 전력 버스 덕트에 의해 전력공급되는 스토리지 디바이스들을 포함하는, 시스템.
  18. 분산형 스토리지 시스템에서 데이터를 분배하기 위한 시스템으로서,
    파일을 수신하는 비일시적 메모리;
    상기 비일시적 메모리와 통신하는 컴퓨터 프로세서 - 상기 컴퓨터 프로세서는,
    상기 수신된 파일을 청크들 - 상기 청크들은 데이터 청크들과 비-데이터 청크들임 - 로 분할하고,
    상기 데이터 청크들 중 하나 이상과 상기 비-데이터 청크들 중 하나 이상을 그룹 - 상기 그룹의 하나 이상의 데이터 청크 또는 하나 이상의 비-데이터 청크는 상기 그룹의 다른 청크들로부터 재구성될 수 있음 - 으로 그룹화함 - ; 및
    상기 컴퓨터 프로세서 및 상기 비일시적 메모리와 통신하는 스토리지 디바이스들
    을 포함하고,
    상기 컴퓨터 프로세서는,
    상기 분산형 스토리지 시스템의 스토리지 디바이스들의 정렬된 환형 목록으로부터 상기 그룹의 청크들의 개수와 동일한 개수의 연속된 스토리지 디바이스들을 선택함으로써 상기 분산형 스토리지 시스템의 유지보수 계층에 기초하여 상기 스토리지 디바이스들 간에 상기 청크들의 분배를 결정하고 - 상기 유지보수 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인을 포함하고, 각각의 스토리지 디바이스는 유지보수 도메인과 연관되며, 상기 그룹의 청크들은 복수의 유지보수 도메인에 걸쳐 분배되어 유지보수 도메인이 비활성 상태일 때 상기 그룹의 액세스가능성을 유지하고, 하나 이상의 유지보수 도메인이 비활성 상태일 때 상기 선택된 스토리지 디바이스들이 상기 그룹의 액세스가능성을 집합적으로 유지할 수 없으면, 상기 그룹의 청크들의 개수와 동일한 개수의 또 다른 연속된 스토리지 디바이스들을 상기 정렬된 환형 목록으로부터 선택함 - ,
    상기 결정된 분배에 기초하여 상기 그룹의 청크들을 상기 스토리지 디바이스들에 저장하는, 시스템.
  19. 제18항에 있어서, 상기 컴퓨터 프로세서는 상기 분산형 스토리지 시스템의 스토리지 디바이스들의 상기 정렬된 환형 목록을 결정하고, 상기 정렬된 환형 목록 상의 인접한 스토리지 디바이스들은 상이한 유지보수 도메인들과 연관되는, 시스템.
  20. 제19항에 있어서, 상기 정렬된 환형 목록 상의 임계치 개수의 연속된 스토리지 디바이스들 각각은 상이한 유지보수 도메인들과 연관되는, 시스템.
  21. 제19항에 있어서, 상기 정렬된 환형 목록 상의 임계치 개수의 연속된 스토리지 디바이스들 각각은 상이한 지리적 위치들에 있는, 시스템.
  22. 분산형 스토리지 시스템에서 데이터를 분배하기 위한 시스템으로서,
    파일을 수신하는 비일시적 메모리;
    상기 비일시적 메모리와 통신하는 컴퓨터 프로세서 - 상기 컴퓨터 프로세서는,
    상기 수신된 파일을 스트라이프들로 분할하고 각각의 스트라이프를 청크들로 분할하고 - 상기 청크들은 데이터 청크들과 비-데이터 청크들이고, 각각의 파일은 에러 정정 코드를 포함하며, 상기 에러 정정 코드는 네스팅형 코드 또는 층별화형 코드 중 하나를 포함하고, 상기 비-데이터 청크들은 코드-체크 청크들, 워드-체크 청크들, 및 코드-체크-워드-체크 청크들을 포함함 - ,
    상기 데이터 청크들 중 하나 이상과 상기 비-데이터 청크들 중 하나 이상을 그룹 - 상기 그룹의 하나 이상의 데이터 청크 또는 하나 이상의 비-데이터 청크는 상기 그룹의 다른 청크들로부터 재구성될 수 있음 - 으로 그룹화함 - ; 및
    상기 컴퓨터 프로세서 및 상기 비일시적 메모리와 통신하는 스토리지 디바이스들
    을 포함하고,
    상기 컴퓨터 프로세서는 상기 분산형 스토리지 시스템의 유지보수 계층에 기초하여 상기 그룹의 청크들을 상기 스토리지 디바이스들에 저장하고, 상기 유지보수 계층은 활성 및 비활성 상태를 갖는 유지보수 도메인들을 포함하며, 각각의 스토리지 디바이스는 유지보수 도메인과 연관되며, 상기 컴퓨터 프로세서는 상기 그룹의 청크들을 복수의 유지보수 도메인에 걸쳐 분배하여 유지보수 도메인이 비활성 상태일 때 상기 그룹의 액세스가능성을 유지하는, 시스템.
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
KR1020167023942A 2014-01-31 2015-01-23 분산형 스토리지 시스템에서 데이터를 분배하는 방법 및 시스템 KR101813431B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/169,322 2014-01-31
US14/169,322 US9323615B2 (en) 2014-01-31 2014-01-31 Efficient data reads from distributed storage systems
PCT/US2015/012599 WO2015116487A1 (en) 2014-01-31 2015-01-23 Efficient data reads from distributed storage systems

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020177036774A Division KR101874280B1 (ko) 2014-01-31 2015-01-23 분산형 스토리지 시스템으로부터의 효율적인 데이터 판독

Publications (2)

Publication Number Publication Date
KR20160114707A KR20160114707A (ko) 2016-10-05
KR101813431B1 true KR101813431B1 (ko) 2018-01-30

Family

ID=53754927

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020177036774A KR101874280B1 (ko) 2014-01-31 2015-01-23 분산형 스토리지 시스템으로부터의 효율적인 데이터 판독
KR1020167023942A KR101813431B1 (ko) 2014-01-31 2015-01-23 분산형 스토리지 시스템에서 데이터를 분배하는 방법 및 시스템

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020177036774A KR101874280B1 (ko) 2014-01-31 2015-01-23 분산형 스토리지 시스템으로부터의 효율적인 데이터 판독

Country Status (8)

Country Link
US (3) US9323615B2 (ko)
EP (2) EP3100183B1 (ko)
KR (2) KR101874280B1 (ko)
CN (2) CN110737541B (ko)
AU (3) AU2015211309B2 (ko)
DE (1) DE202015009260U1 (ko)
GB (1) GB2538441B (ko)
WO (1) WO2015116487A1 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9223644B1 (en) * 2014-02-25 2015-12-29 Google Inc. Preventing unnecessary data recovery
US10298555B2 (en) * 2014-04-04 2019-05-21 Zettaset, Inc. Securing files under the semi-trusted user threat model using per-file key encryption
US10514982B2 (en) * 2014-08-21 2019-12-24 Datrium, Inc. Alternate storage arrangement in a distributed data storage system with key-based addressing
US9397833B2 (en) * 2014-08-27 2016-07-19 International Business Machines Corporation Receipt, data reduction, and storage of encrypted data
WO2016064397A1 (en) 2014-10-23 2016-04-28 Hewlett Packard Enterprise Development Lp Admissions control of a device
WO2016068942A1 (en) 2014-10-30 2016-05-06 Hewlett Packard Enterprise Development Lp Encryption for transactions in a memory fabric
US10699031B2 (en) 2014-10-30 2020-06-30 Hewlett Packard Enterprise Development Lp Secure transactions in a memory fabric
US9483200B2 (en) * 2014-11-03 2016-11-01 Facebook, Inc. System and method for optical cold storage wherein plurality of first and second chunks are encoded and placed on different optical disks
US9965369B2 (en) 2015-04-28 2018-05-08 Viasat, Inc. Self-organized storage nodes for distributed delivery network
US9755979B2 (en) 2015-11-19 2017-09-05 Viasat, Inc. Enhancing capacity of a direct communication link
CN107145303B (zh) * 2016-03-01 2020-06-19 阿里巴巴集团控股有限公司 一种用于在分布式存储系统中执行文件写入的方法与设备
US10453076B2 (en) 2016-06-02 2019-10-22 Facebook, Inc. Cold storage for legal hold data
WO2019008748A1 (ja) * 2017-07-07 2019-01-10 株式会社Asj データ処理システムおよびこれを用いた分散データシステム
CN109947787A (zh) * 2017-10-30 2019-06-28 阿里巴巴集团控股有限公司 一种数据分层存储、分层查询方法及装置
CN108304214B (zh) * 2017-12-13 2022-05-13 超聚变数字技术有限公司 一种立即数的完整性的校验方法及装置
US10719397B2 (en) 2018-06-08 2020-07-21 Samsung Electronics Co., Ltd. System, device and method for storage device assisted low-bandwidth data repair
CN110109889A (zh) * 2019-05-09 2019-08-09 重庆大学 一种分布式内存文件管理系统
SG11202001978YA (en) * 2019-09-11 2020-04-29 Alibaba Group Holding Ltd Shared blockchain data storage based on error correction coding in trusted execution environments
US11747996B2 (en) 2020-08-05 2023-09-05 Dropbox, Inc. System and methods for implementing a key-value data store

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080222480A1 (en) * 2007-03-09 2008-09-11 Microsoft Corporation Erasure-resilient codes having multiple protection groups
US20110225453A1 (en) * 2010-03-11 2011-09-15 Lsi Corporation System and method for optimizing redundancy restoration in distributed data layout environments
US20120284229A1 (en) * 2011-04-13 2012-11-08 Kim Mi-Jeom Selecting data nodes in distributed storage system
US20120290878A1 (en) * 2011-05-09 2012-11-15 Cleversafe, Inc. Establishing trust in a maintenance free storage container

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7296180B1 (en) * 2004-06-30 2007-11-13 Sun Microsystems, Inc. Method for recovery of data
US7617370B2 (en) * 2005-04-29 2009-11-10 Netapp, Inc. Data allocation within a storage system architecture
US8719501B2 (en) * 2009-09-08 2014-05-06 Fusion-Io Apparatus, system, and method for caching data on a solid-state storage device
US8051362B2 (en) * 2007-06-15 2011-11-01 Microsoft Corporation Distributed data storage using erasure resilient coding
CN101175011A (zh) * 2007-11-02 2008-05-07 南京大学 基于dht的p2p系统中获得高可用数据冗余的方法
CN101247273B (zh) * 2008-02-27 2011-02-02 北京航空航天大学 分布式环境下服务协同节点组织结构的维护方法
CN101369922B (zh) * 2008-09-28 2011-04-06 华为技术有限公司 一种连通性检测方法和维护域终点及系统
CN101599032A (zh) * 2009-05-31 2009-12-09 成都市华为赛门铁克科技有限公司 存储节点管理方法、控制子系统和存储系统
US8554994B2 (en) 2009-09-29 2013-10-08 Cleversafe, Inc. Distributed storage network utilizing memory stripes
US8862617B2 (en) 2010-02-09 2014-10-14 Google Inc. System and method for replicating objects in a distributed storage system
US8386841B1 (en) * 2010-07-21 2013-02-26 Symantec Corporation Systems and methods for improving redundant storage fault tolerance
US20120173812A1 (en) * 2010-12-30 2012-07-05 Lsi Corporation Method and system for data distribution across an array of drives
US8732518B2 (en) * 2011-04-13 2014-05-20 Netapp, Inc. Reliability based data allocation and recovery in a storage system
WO2012147087A1 (en) 2011-04-29 2012-11-01 Tata Consultancy Services Limited Archival storage and retrieval system
US8615698B1 (en) 2011-09-28 2013-12-24 Google Inc. Skewed orthogonal coding techniques
CN102419766B (zh) * 2011-11-01 2013-11-20 西安电子科技大学 基于hdfs分布式文件系统的数据冗余及文件操作方法
US9009567B2 (en) 2011-12-12 2015-04-14 Cleversafe, Inc. Encrypting distributed computing data
EP2660723A1 (en) * 2012-05-03 2013-11-06 Thomson Licensing Method of data storing and maintenance in a distributed data storage system and corresponding device
US9110833B2 (en) * 2012-06-25 2015-08-18 Cleversafe, Inc. Non-temporarily storing temporarily stored data in a dispersed storage network
US9524510B2 (en) * 2013-10-02 2016-12-20 Turn Inc. Adaptive fuzzy fallback stratified sampling for fast reporting and forecasting

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080222480A1 (en) * 2007-03-09 2008-09-11 Microsoft Corporation Erasure-resilient codes having multiple protection groups
US20110225453A1 (en) * 2010-03-11 2011-09-15 Lsi Corporation System and method for optimizing redundancy restoration in distributed data layout environments
US20120284229A1 (en) * 2011-04-13 2012-11-08 Kim Mi-Jeom Selecting data nodes in distributed storage system
US20120290878A1 (en) * 2011-05-09 2012-11-15 Cleversafe, Inc. Establishing trust in a maintenance free storage container

Also Published As

Publication number Publication date
KR20180001574A (ko) 2018-01-04
US9514015B2 (en) 2016-12-06
CN106164899B (zh) 2019-11-19
AU2015211309B2 (en) 2017-02-23
AU2017203459A1 (en) 2017-06-08
US9747155B2 (en) 2017-08-29
AU2018202944B2 (en) 2019-09-12
US9323615B2 (en) 2016-04-26
AU2017203459B2 (en) 2018-04-26
DE202015009260U1 (de) 2017-01-18
CN110737541B (zh) 2023-08-29
KR101874280B1 (ko) 2018-07-03
EP3100183A4 (en) 2017-11-29
GB2538441A (en) 2016-11-16
CN106164899A (zh) 2016-11-23
EP3839767A1 (en) 2021-06-23
GB201614048D0 (en) 2016-09-28
AU2018202944A1 (en) 2018-05-17
CN110737541A (zh) 2020-01-31
EP3100183A1 (en) 2016-12-07
GB2538441B (en) 2021-02-17
US20150220429A1 (en) 2015-08-06
EP3100183B1 (en) 2021-03-24
AU2015211309A1 (en) 2016-06-09
US20170075753A1 (en) 2017-03-16
KR20160114707A (ko) 2016-10-05
US20160203066A1 (en) 2016-07-14
WO2015116487A1 (en) 2015-08-06

Similar Documents

Publication Publication Date Title
KR101813431B1 (ko) 분산형 스토리지 시스템에서 데이터를 분배하는 방법 및 시스템
US11947423B2 (en) Data reconstruction in distributed storage systems
US9823980B2 (en) Prioritizing data reconstruction in distributed storage systems
US9311194B1 (en) Efficient resource utilization in data centers
US9823948B2 (en) Efficient resource utilization in data centers
Duan et al. Scalable data resilience for in-memory data staging
US9898360B1 (en) Preventing unnecessary data recovery

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
A107 Divisional application of patent
GRNT Written decision to grant