KR20220139784A - 객체 저장 방법 및 이를 이용하는 분산 객체 스토리지와 시스템 - Google Patents

객체 저장 방법 및 이를 이용하는 분산 객체 스토리지와 시스템 Download PDF

Info

Publication number
KR20220139784A
KR20220139784A KR1020217040112A KR20217040112A KR20220139784A KR 20220139784 A KR20220139784 A KR 20220139784A KR 1020217040112 A KR1020217040112 A KR 1020217040112A KR 20217040112 A KR20217040112 A KR 20217040112A KR 20220139784 A KR20220139784 A KR 20220139784A
Authority
KR
South Korea
Prior art keywords
data
storage
metadata
extent
processing
Prior art date
Application number
KR1020217040112A
Other languages
English (en)
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 KR20220139784A publication Critical patent/KR20220139784A/ko

Links

Images

Classifications

    • 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/11File system administration, e.g. details of archiving or snapshots
    • G06F16/128Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
    • 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
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • 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/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/1456Hardware arrangements for backup
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/289Object oriented databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/0604Improving or facilitating administration, e.g. storage management
    • 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/0608Saving storage space on storage 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/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • 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/0629Configuration or reconfiguration of storage systems
    • G06F3/0635Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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
    • 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/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • 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/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Communication Control (AREA)
  • Hardware Redundancy (AREA)
  • Software Systems (AREA)

Abstract

저장 시스템은, 복수의 객체 스토리지들, 상기 객체 스토리지들에 연결되고, 복수의 처리 회로들를 포함하는 복수의 데이터 관리자들, 상기 복수의 처리 회로들 중 입출력 작업을 처리하도록 구성되는 제1 처리 회로, 및 상기 복수의 처리 회로들 중 입출력 완료를 처리하도록 구성되는 제2 처리 회로를 포함한다.

Description

객체 저장 방법 및 이를 이용하는 분산 객체 스토리지와 시스템
본 개시에 따른 실시예의 일 양태는 저장 시스템에 관한 것으로, 보다 상세하게는 저장 시스템에서 입출력 지연을 개선하고 입출력 지연의 일관성을 개선하기 위한 시스템 및 방법에 관한 것이다.
본 개시에 따른 실시예의 다른 양태는 데이터 저장에 관한 것이고, 보다 상세하게는 분산 객체 저장소를 위한 메타데이터 캐시 및 시스템 전체 상태를 사용하여 분산 객체 스토리지에서 노드-로컬 메타데이터 읽기 캐시를 스케일링하기 위한 시스템 및 방법에 관한 것이다.
본 개시에 따른 실시예의 또 다른 양태는 데이터 저장에 관한 것이고, 보다 상세하게는 분리된 가변 데이터를 갖는 분산 객체 스토리지에 관한 것이다.
본 개시에 따른 실시예의 또 다른 양태는 객체 저장 시스템에 관한 것으로, 특히 객체 저장 시스템에 객체를 탄력적으로 저장하기 위한 방법 및 시스템에 관한 것이다.
분산 객체 스토리지를 기반으로 하는 저장 시스템은 대용량으로의 확장성 및 저장 용량을 포함하는 다양한 이점을 가질 수 있다. 그러나 이러한 시스템은 부분적으로 입출력 작업을 처리하고 입출력 완료를 처리하는 다중 스레드에 의한 컴퓨팅 리소스에 대한 경합으로 인해 높은 입출력 지연 또는 가변 입출력 지연을 겪을 수 있다.
분산 객체 스토리지에서 메타데이터 액세스는 특히 분산 객체 스토리지가 더 큰 크기로 확장될 때 상대적으로 부담이 될 수 있다.
스토리지는 다른 저장 시스템 아키텍처에 비해 성능 및 신뢰성 면에서 다양한 이점을 가질 수 있다. 그러나 경우에 따라 객체 스토리지에서 데이터를 수정하면 상당한 오버헤드가 발생할 수 있다.
일부 저장 시스템은 블록 저장이라고 하는 데이터 지속성의 형태를 사용한다. 이 전통적인 디자인은 특정 디스크 및 플래시 미디어 장치에 쉽게 매핑된다. 이러한 시스템에서 저장 장치의 단위는 속성이 그것의 주소(즉, 디스크 또는 플래시 장치에서의 위치)인 고정 길이의 바이트 시퀀스인 블록이다. 파일 시스템은 사용자가 관심 있는 데이터를 포함하는 다른 블록의 사용 및 위치에 대한 메타데이터로 알려진 정보를 포함하는 특수 블록을 생성하여 블록 스토리지를 사용하여 구성할 수 있다. 메타데이터에는 사용자가 데이터에 부여한 이름과 데이터를 찾을 수 있는 블록 주소 목록과 같은 항목이 포함된다.
단일 네임스페이스에서 작동하는 다중 노드를 가지고, 많은 양의 비정형 데이터를 처리하는 분산 응용 프로그램(application)과 같은 일부 응용 프로그램이 있다. 이러한 경우에는 객체 식별자를 사용하여 응용 프로그램에서 액세스하는 객체 스토리지를 사용하는 것이 더 바람직할 수 있다. 블록 또는 파일 저장 시스템과 달리 객체 스토리지에 액세스하는 응용 프로그램은 논리적 데이터를 고정 크기 블록 세트 또는 디렉토리 또는 파일과 같은 구조화된 조직으로 구성할 책임이 없어 객체 식별자가 주어진 데이터에 대한 플랫 액세스를 제공한다.
본 개시의 실시예들에 따른 일 과제는 저장 시스템에서 입출력 지연을 개선하고 입출력 지연의 일관성을 향상시키기 위한 시스템 및 방법을 제공하고자 하는 것이다.
본 개시의 실시예들에 따른 다른 과제는 분산 객체 스토리지에서 메타데이터를 관리하기 위한 개선된 시스템 및 방법을 제공하고자 하는 것이다.
본 개시의 실시예들에 따른 또 다른 과제는 객체 저장소를 운영하기 위한 개선된 시스템 및 방법을 제공하고자 하는 것이다.
본 과제의 해결을 위한 일 실시예에 따른 저장 시스템은, 복수의 객체 스토리지들, 상기 객체 스토리지들에 연결되고, 복수의 처리 회로들를 포함하는 복수의 데이터 관리자들, 상기 복수의 처리 회로들 중 입출력 작업을 처리하도록 구성되는 제1 처리 회로, 및 상기 복수의 처리 회로들 중 입출력 완료를 처리하도록 구성되는 제2 처리 회로를 포함한다.
상기 제2 처리 회로는 단일 소프트웨어 스레드를 실행하도록 구성될 수 있다.
상기 입출력 작업의 처리는 데이터 복원력을 위해 데이터를 기록하는 것을 포함할 수 있다.
상기 데이터 복원력을 위한 데이터를 기록하는 것은, 상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계, 및 상기 제1 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 포함할 수 있다.
상기 데이터 복원력을 위한 데이터를 기록하는 것은, 상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계, 및 상기 제1 데이터에 대응하는 패리티(parity) 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 포함할 수 있다.
상기 제1 처리 회로는 상기 입출력 완료보다 10배 이상 많은 상기 입출력 작업을 처리하도록 구성될 수 있다.
상기 제2 처리 회로는 상기 입출력 작업보다 10배 이상 많은 상기 입출력 완료를 처리하도록 구성될 수 있다.
상기 제1 처리 회로는 오직 상기 입출력 작업만을 처리하도록 구성될 수 있다.
상기 제2 처리 회로는 오직 상기 입출력 완료만을 처리하도록 구성될 수 있다.
상기 제1 처리 회로는 오직 상기 입출력 작업만을 처리하도록 구성될 수 있다.
상기 제1 처리 회로는 제1 데이터 관리자의 제1 코어이고, 상기 제2 처리 회로는 상기 제1 데이터 관리자의 제2 코어일 수 있다.
상기 복수의 데이터 관리자들 중 제1 데이터 관리자는 복수의 코어들을 포함하고, 상기 복수의 코어들의 제1 서브 세트는 입출력 작업을 처리하도록 구성되고, 상기 복수의 코어들의 제2 서브 세트는 입출력 완료를 처리하도록 구성되고, 및 상기 제1 서브 세트는 상기 제2 서브 세트보다 10배 이상 많은 코어를 포함할 수 있다.
상기 제1 서브 세트는 상기 제2 서브 세트보다 최대 100배 많은 코어를 포함할 수 있다.
본 과제의 해결을 위한 일 실시예에 따른 저장 시스템 작동 방법은, 복수의 객체 스토리지들 및 상기 객체 스토리지들에 연결되는 복수의 데이터 관리자들을 포함하는 저장 시스템을 작동하는 방법으로서, 입출력 작업들을 수행하기 위한 복수의 연속적인 요청을 수신하는 단계, 상기 데이터 관리자들의 복수의 처리 회로들에 의해, 상기 입출력 작업들을 처리하는 단계, 및 상기 데이터 관리자들의 복수의 처리 회로에 의해, 상기 입출력 작업들에 대응하는 입출력 완료들을 처리하는 단계를 포함하되, 상기 복수의 처리 회로들 중 제1 처리 회로는 상기 입출력 동작들을 처리하고, 상기 복수의 처리 회로들 중 제2 처리 회로는 상기 입출력 완료들을 처리한다.
상기 제2 처리 회로는 단일 소프트웨어 스레드를 실행하도록 구성될 수 있다.
상기 입출력 동작들의 처리는 데이터 복원력을 위한 데이터를 기록하는 단계를 포함할 수 있다.
상기 데이터 복원력을 위한 데이터를 기록하는 단계는, 상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계, 및 상기 제1 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 포함할 수 있다.
상기 데이터 복원력을 위한 데이터를 기록하는 단계는, 상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계, 및 상기 제1 데이터에 대응하는 패리티(parity) 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 더 포함할 수 있다.
본 과제의 해결을 위한 일 실시예에 따른 저장 시스템은, 객체를 저장하기 위한 수단, 및 복수의 처리 회로들을 포함하고, 객체를 저장하기 위한 상기 수단에 연결된 복수의 데이터 관리자들을 포함하되, 상기 복수의 처리 회로들 중 입출력 작업을 처리하도록 구성되는 제1 처리 회로, 및 상기 복수의 처리 회로들 중 입출력 완료를 처리하도록 구성되는 제2 처리 회로를 포함한다.
상기 제2 처리 회로는 단일 소프트웨어 스레드를 실행하도록 구성될 수 있다.
본 과제의 해결을 위한 일 실시예에 따른 메타데이터 관리 방법은, 복수의 노드들 및 복수의 객체들과 상기 객체들에 대한 메타데이터를 저장하는 영구 스토리지를 포함하는 분산 객체 스토리지에서 메타데이터를 관리하기 위한 방법으로서, 제1 시간 간격 동안, 제1 노드에 의해, 상기 복수의 객체들 중 제1 객체에 대한 제1 메타데이터에 대한 제1 값을 생성하는 단계, 상기 복수의 노드들 중 상기 제1 노드에 의해, 상기 제1 노드의 메타데이터 캐시에 상기 제1 메타데이터에 대한 상기 제1 값을 저장하는 단계, 상기 제1 노드에 의해, 상기 제1 메타데이터에 대응하는 제1 쿠키에 대한 제1 값을 생성하는 단계, 상기 제1 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하는 단계, 및 클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하는 단계를 포함한다.
상기 제1 시간 간격 이후의 제2 시간 간격 동안, 상기 클러스터 전체 저장 위치로부터 상기 제1 쿠키에 대한 제2 값을 읽는 단계, 상기 제1 노드의 로컬 저장 위치로부터 상기 제1 쿠키에 대한 상기 제1 값을 읽는 단계, 및 상기 제1 노드에 의해, 상기 제1 쿠키에 대한 상기 제2 값을 상기 제1 쿠키에 대한 상기 제1 값과 비교하는 단계를 더 포함할 수 있다.
상기 제2 시간 간격 동안, 상기 제2 값이 상기 제1 값과 동일하다고 결정하는 단계, 및 상기 제1 노드의 상기 메타데이터 캐시로부터 상기 제1 메타데이터를 검색하는 단계를 더 포함할 수 있다.
상기 제2 시간 간격 동안, 검색된 상기 제1 메타데이터에 기초하여 상기 제1 객체에 액세스하는 단계를 더 포함할 수 있다.
상기 제1 시간 간격에 뒤따르고 상기 제2 시간 간격에 선행하는 제3 시간 간격 동안, 상기 복수의 노드들 중 제2 노드에 의해, 상기 제1 메타데이터에 대한 제2 값을 생성하는 단계, 상기 제2 노드에 의해, 상기 제2 노드의 메타데이터 캐시에 상기 제1 메타데이터에 대한 상기 제2 값을 저장하는 단계, 상기 제2 노드에 의해, 상기 제1 쿠키에 대한 상기 제1 값과 상이한 상기 제1 쿠키에 대한 제2 값을 생성하는 단계, 상기 제2 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 저장하는 단계, 및 클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 저장하는 단계를 더 포함할 수 있다.
상기 제3 시간 간격 이후의 상기 제2 시간 간격 동안, 상기 클러스터 전체 저장 위치로부터 상기 제1 쿠키에 대한 제2 값을 읽는 단계, 상기 제1 노드에 의해, 상기 제1 노드의 로컬 저장 위치로부터 상기 제1 쿠키에 대한 상기 제1 값을 읽는 단계, 및 상기 제1 노드에 의해, 상기 제1 쿠키에 대한 상기 제2 값을 상기 제1 쿠키에 대한 상기 제1 값과 비교하는 단계를 더 포함할 수 있다.
상기 제2 시간 간격 동안, 상기 제2 값이 상기 제1 값과 동일하지 않다고 결정하는 단계, 및 상기 제1 노드에 의해, 상기 영구 스토리지로부터 상기 제1 메타데이터를 검색하는 단계를 더 포함할 수 있다.
상기 제2 시간 간격 동안, 검색된 상기 제1 메타데이터에 기초하여 상기 제1 객체에 액세스하는 단계를 더 포함할 수 있다.
상기 제1 노드에 의해, 상기 제1 시간 간격 동안, 상기 클러스터 전체 저장 위치를 포함하는 노드에 대한 노드 식별자를 계산하는 단계를 더 포함할 수 있다.
상기 노드 식별자를 계산하는 단계는 상기 메타데이터의 성질에 기초하여 해시를 계산하는 단계를 포함할 수 있다.
상기 제1 쿠키는, 상기 제1 메타데이터를 식별하는 식별자, 및 쓰기 인스턴스를 식별하는 서명을 포함할 수 있다.
상기 서명은 시간을 포함할 수 있다.
본 과제의 해결을 위한 일 실시예에 따른 분산 객체 스토리지는, 복수의 노드들, 및 복수의 객체들과 상기 객체들에 대한 메타데이터를 저장하는 영구 스토리지를 포함하되, 상기 복수의 노드들 중 제1 노드에서 제1 처리 회로를 포함하는 복수의 처리 회로를 포함하는 노드로서, 상기 제1 처리 회로는 제1 시간 간격 동안, 상기 복수의 객체들 중 제1 객체에 대한 제1 메타데이터에 대한 제1 값을 생성하고, 상기 제1 노드의 메타데이터 캐시에 제1 메타데이터에 대한 제1 값을 저장하고, 상기 제1 메타데이터에 대응하는 제1 쿠키에 대한 제1 값을 생성하고, 상기 제1 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하고, 및 클러스터 전체 저장 위치에 상기 제1 쿠키의 상기 제1 값을 저장하도록 구성될 수 있다.
상기 제1 처리 회로는 상기 제1 시간 간격 이후의 제2 시간 간격 동안, 상기 클러스터 전체 저장 위치로부터 상기 제1 쿠키에 대한 제2 값을 읽고, 상기 제1 노드의 로컬 저장 위치로부터 상기 제1 쿠키에 대한 상기 제1 값을 읽고, 및 상기 제1 쿠키에 대한 상기 제2 값을 상기 제1 쿠키에 대한 상기 제1 값과 비교하도록 구성될 수 있다.
상기 제1 처리 회로는, 상기 제2 값이 상기 제1 값과 동일하다고 결정하고, 및 상기 제1 노드의 상기 메타데이터 캐시로부터 상기 제1 메타데이터를 검색하도록 더 구성될 수 있다.
상기 제1 처리 회로는 검색된 상기 제1 메타데이터에 기초하여 상기 제1 객체에 액세스하도록 더 구성될 수 있다.
상기 복수의 노드들 중 제2 노드의 제2 처리 회로는, 상기 제1 시간 간격에 뒤따르고 상기 제2 시간 간격에 선행하는 제3 시간 간격 동안, 상기 제1 메타데이터에 대한 제2 값을 생성하고, 상기 제2 노드의 메타데이터 캐시에 상기 제1 메타데이터에 대한 상기 제2 값을 저장하고, 상기 제1 쿠키에 대한 상기 제1 값과 상이한 상기 제1 쿠키에 대한 제2 값을 생성하고, 상기 제2 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 저장하고, 및 클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 저장하도록 구성될 수 있다.
상기 제1 처리 회로는, 상기 제3 시간 간격 이후의 제2 시간 간격 동안, 상기 클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 읽고, 상기 제1 노드의 상기 로컬 저장 위치로부터 상기 제1 쿠키에 대한 상기 제1 값을 읽고, 및 상기 제1 쿠키에 대한 상기 제2 번째 값을 상기 제1 쿠키에 대한 상기 제1 값과 비교하도록 더 구성될 수 있다.
상기 제1 처리 회로는, 상기 제2 값이 상기 제1 값과 동일하지 않다고 결정하고, 및 상기 영구 스토리지로부터 상기 제1 메타데이터를 검색하도록 더 구성될 수 있다.
본 과제의 해결을 위한 일 실시예에 따른 분산 객체 스토리지는, 복수의 노드들, 및 복수의 객체들 및 상기 객체들에 대한 메타데이터를 저장하는 영구 저장 수단을 포함하되, 상기 복수의 노드들은 상기 복수의 노드들 중 제1 노드의 제1 처리 회로를 포함하는 복수의 처리 회로들을 포함하고, 상기 제1 처리 회로는, 상기 복수의 객체들 중 제1 객체에 대한 제1 메타데이터에 대한 제1 값을 생성하고, 상기 제1 노드의 메타데이터 캐시에 상기 제1 메타데이터에 대한 상기 제1 값을 저장하고, 상기 제1 메타데이터에 대응하는 제1 쿠키에 대한 제1 값을 생성하고, 제1 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하고, 및 클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하도록 구성된다.
본 과제의 해결을 위한 일 실시예에 따른 방법은, 분산 객체 스토리지에서 객체를 수정하는 방법에 있어서, 상기 객체에 대해, 하나 이상의 가변 객체 스토리지 중 일 가변 객체 스토리지의 제1 영역을 할당하는 것, 상기 객체의 제1 부분을 제1 영역에 저장하는 것, 및 상기 객체의 수정된 제1 부분을 형성하기 위해 상기 객체의 상기 제1 부분을 수정하는 것을 포함하되, 상기 분산 객체 스토리지는 하나 이상의 불변 객체 스토리지 및 상기 하나 이상의 가변 객체 스토리지를 포함하고, 상기 불변 객체 스토리지는 원자 객체 크기와 동일한 크기를 갖는 원자 객체를 저장하도록 구성되고, 상기 제1 영역은 상기 원자 객체의 크기보다 큰 크기를 가진다.
상기 제1 영역은 상기 원자 객체 크기의 1.5배 보다 큰 크기를 가질 수 있다.
상기 제1 부분은 원자 객체 크기보다 작은 크기를 가지고, 상기 객체의 상기 제1 부분을 수정하는 것은 상기 객체의 상기 제1 부분에 데이터를 추가하는 것을 포함하고, 상기 방법은, 상기 객체의 수정된 제1 부분의 전체 크기가 상기 원자 객체 크기와 같거나 초과하는지를 결정하는 것, 및 상기 객체의 제2 부분을 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로 이동하는 것을 더 포함하고, 상기 제2 부분은, 상기 객체의 수정된 제1 부분의 일부이고, 및 상기 원자 객체 크기와 동일한 크기를 가질 수 있다.
상기 객체의 상기 제1 부분을 수정하는 것은 상기 객체의 수정을 로그 구조화된 형식으로 상기 제1 영역에 저장하는 것을 포함할 수 있다.
상기 객체의 상기 제1 부분에 대한 가장 최근의 수정 이후 경과된 시간이 임계 시간을 초과했다고 결정하는 것, 및 상기 객체의 상기 제1 부분을 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로 이동하는 것을 더 포함할 수 있다.
상기 객체의 상기 제1 부분을 상기 제1 영역에 저장하는 것은 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로부터 상기 제1 영역으로 상기 원자 객체를 이동시키는 것을 포함하고, 상기 원자 객체는 상기 객체의 상기 제1 부분일 수 있다.
클라이언트 응용 프로그램으로부터 저장 요청의 일부로서 상기 객체의 상기 제1 부분을 수신하는 것을 더 포함할 수 있다.
상기 객체의 수정된 제1 부분을 상기 하나 이상의 불변 객체 스토리지의 일 불변 객체 스토리지로 이동시키는 것을 더 포함하고, 상기 객체의 수정된 제1 부분을 일 불변 객체 스토리지로 이동시키는 것은 상기 객체의 수정된 제1 부분을 변환하는 것을 포함할 수 있다.
상기 객체의 수정된 제1 부분을 변환하는 것은 상기 객체의 수정된 제1 부분을 압축하는 것을 포함할 수 있다.
상기 객체의 수정된 제1 부분을 변환하는 것은 상기 객체의 수정된 제1 부분을 암호화하는 것을 포함할 수 있다.
상기 객체의 수정된 제1 부분을 변환하는 것은 데이터 복원력을 위해 상기 객체의 수정된 제1 부분을 인코딩하는 것을 포함할 수 있다.
본 과제의 해결을 위한 일 실시예에 따른 분산 객체 스토리지는 하나 이상의 불변 객체 스토리지, 및 하나 이상의 가변 객체 스토리지를 포함하되, 상기 불변 객체 스토리지 및 상기 가변 객체 스토리지는 복수의 처리 회로들을 포함하고, 상기 처리 회로들은, 상기 불변 객체 스토리지 각각에 원자 객체 크기와 동일한 크기를 갖는 원자 객체를 저장하고, 객체에 대해, 하나 이상의 가변 객체 스토리지 중 일 가변 객체 스토리지의 제1 영역을 할당하고, 상기 객체의 제1 부분을 상기 제1 영역에 저장하고, 및 상기 객체의 수정된 제1 부분을 형성하기 위해 상기 객체의 제1 부분을 수정하도록 구성되고, 상기 제1 영역은 상기 원자 객체 크기보다 큰 크기를 가진다.
상기 제1 영역은 상기 원자 객체 크기의 1.5배보다 큰 크기를 가질 수 있다.
상기 제1 부분은 상기 원자 객체 크기보다 작은 크기를 가지고, 상기 객체의 제1 부분을 수정하는 것은 상기 객체의 제1 부분에 데이터를 추가하는 것을 포함하고, 및 상기 처리 회로들은, 상기 객체의 수정된 제1 부분의 전체 크기가 원자 객체 크기와 같거나 초과하는지 결정하고, 및 상기 객체의 제2 부분을 하나 이상의 불변 객체 스토리지의 일 불변 객체 스토리지로 이동시키도록 더 구성되고, 상기 제2 부분은, 상기 객체의 수정된 제1 부분의 일부이고, 및 상기 원자 객체 크기와 동일한 크기를 가질 수 있다.
상기 객체의 제1 부분을 수정하는 것은 상기 객체의 수정을 로그 구조화된 형식으로 상기 제1 영역에 저장하는 것을 포함할 수 있다.
상기 처리 회로들은, 상기 객체의 상기 제1 부분에 대한 가장 최근의 수정 이후 경과된 시간이 임계 시간을 초과했다고 결정하는 것, 및 상기 객체의 상기 제1 부분을 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로 이동시키도록 더 구성될 수 있다.
상기 객체의 상기 제1 부분을 상기 제1 영역에 저장하는 것은 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로부터 상기 제1 영역으로 상기 원자 객체를 이동시키는 것을 포함하고, 상기 원자 객체는 상기 객체의 상기 제1 부분일 수 있다.
상기 처리 회로들은 클라이언트 응용 프로그램으로부터의 저장 요청의 일부로서 상기 객체의 제1 부분을 수신하도록 더 구성될 수 있다.
상기 처리 회로들은 상기 객체의 수정된 제1 부분을 상기 하나 이상의 불변 객체 스토리지의 일 불변 객체 스토리지로 이동시키도록 더 구성되고, 상기 객체의 수정된 제1 부분을 일 불변 객체 스토리지로 이동시키는 것은 상기 객체의 수정된 제1 부분을 변환하는 것을 포함할 수 있다.
본 과제의 해결을 위한 일 실시예에 따른 분산 객체 스토리지는 하나 이상의 불변 객체 스토리지, 및 하나 이상의 가변 객체 스토리지를 포함하되, 상기 불변 객체 스토리지 및 상기 가변 객체 스토리지는, 영구 데이터 저장 수단, 및 복수의 처리 회로들을 포함하고, 상기 처리 회로들은, 상기 불변 객체 스토리지 각각에 원자 객체 크기와 동일한 크기를 갖는 원자 객체를 저장하고, 객체에 대해, 상기 하나 이상의 가변 객체 스토리지 중 일 가변 객체 스토리지의 제1 영역을 할당하고, 상기 객체의 제1 부분을 제1 영역에 저장하고, 및 상기 객체의 수정된 제1 부분을 형성하기 위해 상기 객체의 제1 부분을 수정하도록 구성되고, 상기 제1 영역은 원자 객체 크기보다 큰 크기를 가질 수 있다.
본 과제의 해결을 위한 일 실시예에 따른 객체 저장 방법은 객체 저장 시스템 상의 객체 저장 방법으로서, 익스텐트 관리자가 객체 저장 시스템의 메모리 장치를 동일한 크기의 복수의 익스텐트들로 분할하는 것, 상기 익스텐트 관리자에 의해, 제1 객체를 포함하는 객체 저장 시스템의 제1 데이터 스토리지의 제1 특성을 식별하는 단계, 상기 익스텐트 관리자가 상기 복수의 익스텐트들 중 상기 제1 객체의 상기 제1 특성에 대응하는 제1 익스텐트를 상기 제1 데이터 스토리지에 할당하는 것, 상기 익스텐트 관리자가 할당된 상기 제1 익스텐트에 상기 제1 객체를 저장하는 단계, 상기 익스텐트 관리자가 제2 객체를 포함하는 객체 저장 시스템의 제2 데이터 스토리지의 제2 특성을 식별하는 것, 상기 익스텐트 관리자가, 상기 복수의 익스텐트들로부터 상기 제2 객체의 상기 제2 특성에 대응하고 상기 제1 특성과 상이한 제2 익스텐트를 상기 제2 데이터 스토리지에 할당하는 것, 및 상기 익스텐트 관리자가 할당된 상기 제2 익스텐트에 상기 제2 객체를 저장하는 것을 포함할 수 있다.
상기 익스텐트 관리자에 의해, 상기 메모리 장치 상의 수퍼블록으로부터 상기 복수의 익스텐트들 각각의 상태 정보를 검색하는 것를 더 포함할 수 있다.
상기 상태 정보는 각 익스텐트의 상태, 각 익스텐트의 특성, 및 상기 메모리 장치 상의 각 익스텐트의 위치를 포함할 수 있다.
상기 각 익스텐트의 상태는 객체가 없고 할당이 가능한 자유 상태, 현재 할당된 활성 상태, 또는 할당이 불가능한 폐쇄 상태로부터 선택될 수 있다.
상기 익스텐트 관리자가 상기 제1 데이터 스토리지에 상기 제1 익스텐트를 할당하는 것에 응답하여 상기 제1 익스텐트의 상태 정보를 업데이트하는 것, 및 상기 익스텐트 관리자가 상기 제2 데이터 스토리지에 상기 제2 익스텐트를 할당하는 것에 응답하여 상기 제2 익스텐트의 상태 정보를 업데이트하는 것을 더 포함할 수 있다.
상기 제1 익스텐트가 객체들로 용량까지 채워지는 것에 응답하여 상기 제1 익스텐트에 대응하는 상태 정보를 닫힌 상태로 업데이트하는 단계를 더 포함할 수 있다.
상기 슈퍼블록은 상기 메모리 장치의 예약된 부분에 테이블을 포함하고, 및 상기 테이블은 상기 복수의 익스텐트들 각각에 대응할 수 있다.
상기 각 익스텐트의 특성은 불변 데이터 익스텐트, 가변 데이터 익스텐트, 메타데이터 익스텐트, 또는 스테이징 익스텐트로부터 선택될 수 있다.
상기 메모리 장치는 SSD(Solid State Drive)일 수 있다.
상기 객체 저장 시스템은 병렬로 연결된 복수의 SSD를 포함할 수 있다.
본 과제의 해결을 위한 일 실시예에 따른 객체 저장 시스템은 객체를 저장하도록 구성된 객체 저장 시스템으로서, 복수의 데이터 스토리지들, 메모리 장치, 및 익스텐트 관리자를 포함하되, 상기 익스텐트 관리자는, 상기 객체 저장 시스템의 상기 메모리 장치를 동일한 크기의 복수의 익스텐트들로 분할하고, 제1 객체를 포함하는 상기 복수의 데이터 스토리지들 중 제1 데이터 스토리지의 제1 특성을 식별하고, 상기 복수의 익스텐트들 중 상기 제1 객체의 상기 제1 특성에 대응하는 제1 익스텐트를 상기 제1 데이터 스토리지에 할당하고, 할당된 상기 제1 익스텐트에 상기 제1 객체를 저장하고, 제2 객체를 포함하는 상기 복수의 데이터 스토리지들 중 제2 데이터 스토리지의 제2 특성을 식별하고, 상기 복수의 익스텐트들 중 상기 제2 객체의 상기 제2 특성에 대응하는 제2 익스텐트를 상기 제2 데이터 스토리지에 할당하고, 및 할당된 상기 제2 익스텐트에 상기 제2 객체를 저장하도록 구성되고, 상기 제2 특성은 상기 제1 특성과 상이할 수 있다.
상기 익스텐트 관리자는 상기 메모리 장치 상의 수퍼블록으로부터 상기 복수의 익스텐트들 각각의 상태 정보를 검색하도록 더 구성될 수 있다.
상기 상태 정보는 각 익스텐트의 상태, 각 익스텐트의 특성, 및 상기 메모리 장치 상의 각 익스텐트의 위치를 포함할 수 있다.
상기 각 익스텐트의 상태는 객체가 없고 할당이 가능한 자유 상태, 현재 할당된 활성 상태, 또는 할당이 불가능한 폐쇄 상태로부터 선택될 수 있다.
상기 익스텐트 관리자는, 상기 제1 데이터 스토리지에 상기 제1 익스텐트를 할당하는 것에 응답하여 상기 제1 익스텐트의 상태 정보를 업데이트 하고, 및 상기 제2 데이터 스토리지에 상기 제2 익스텐트를 할당하는 것에 응답하여 상기 제2 익스텐트의 상태 정보를 업데이트 하도록 더 구성될 수 있다.
상기 익스텐트 관리자는 상기 제1 익스텐트가 객체들로 용량까지 채워지는 것에 응답하여 상기 제1 익스텐트에 대응하는 상태 정보를 닫힌 상태로 업데이트하도록 더 구성될 수 있다.
상기 슈퍼블록은 상기 메모리 장치의 예약된 부분에 테이블을 포함하고, 및 상기 테이블은 상기 복수의 익스텐트들 각각에 대응할 수 있다.
상기 각 익스텐트의 특성은 불변 데이터 익스텐트, 가변 데이터 익스텐트, 메타데이터 익스텐트, 또는 스테이징 익스텐트로부터 선택될 수 있다.
상기 메모리 장치는 SSD(Solid State Drive)일 수 있다.
상기 객체 저장 시스템은 병렬로 연결된 복수의 SSD를 포함할 수 있다.
본 개시의 실시예들에 따르면, 저장 시스템에서 입출력 지연을 개선하고 입출력 지연의 일관성이 향상될 수 있다.
본 개시의 실시예들에 따르면, 분산 객체 스토리지에서 메타데이터의 관리가 개선될 수 있다.
본 개시의 실시예들에 따르면, 객체 저장소를 효율적으로 운영할 수 있다.
도 1 내지 도 3은 SECTION I에 관한 것이다.
도 4 내지 도 7은 SECTION II에 관한 것이다.
도 8 내지 도 12는 SECTION III에 관한 것이다.
도 13 내지 도 16은 SECTION IV에 관한 것이다.
Figure pct00001
Figure pct00002
Figure pct00003
Figure pct00004
Figure pct00005
Figure pct00006
Figure pct00007
Figure pct00008
Figure pct00009
Figure pct00010
Figure pct00011
Figure pct00012
Figure pct00013
Figure pct00014
Figure pct00015
Figure pct00016
Figure pct00017
Figure pct00018
Figure pct00019
Figure pct00020
Figure pct00021
Figure pct00022
Figure pct00023
Figure pct00024
Figure pct00025
Figure pct00026
Figure pct00027
Figure pct00028
Figure pct00029
Figure pct00030
Figure pct00031
Figure pct00032
Figure pct00033
Figure pct00034
Figure pct00035
Figure pct00036
Figure pct00037
Figure pct00038
Figure pct00039
Figure pct00040
Figure pct00041
Figure pct00042
Figure pct00043
Figure pct00044
Figure pct00045
Figure pct00046
Figure pct00047
Figure pct00048
Figure pct00049
Figure pct00050
Figure pct00051
Figure pct00052
Figure pct00053
Figure pct00054
SECTION I
분산 객체 스토리지에서 확장 가능한 성능을 위한 결정적 스토리지 입출력 레이턴시(DETERMINISTIC STORAGE IO LATENCIES FOR SCALABLE PERFORMANCE IN A DISTRIBUTED OBJECT STORE)
명세서의 현재 SECTION I에서 모든 참조 번호나 특징 및 도면에 대한 참조를 포함하는 내용은 "Section I"이라는 라벨이 있는 도 1 내지 도 3가 참조되고 대응되나, SECTION II 내지 SECTION IV의 내용 및 “Section II", "Section III" 또는 "Section IV"이라는 라벨이 있는 도면의 참조 번호, 특징 및 그림들의 어떤 내용도 참조되거나 대응되지 않는다. 즉, 본 명세서의 SECTION I-IV 각각은 동일한 섹션의 해당 설명과 동일한 섹션으로 표시된 도면의 맥락에서 각각 해석되어야 한다. 그러나, 전술한 내용에도 불구하고, 다양한 섹션의 다양한 양태 및 발명 개념은 다른 섹션의 양태 및 발명 개념에 적용될 수 있다.
첨부된 도면과 관련하여 아래에 설명된 상세한 설명은 입력-출력 레이턴시와 저장 시스템에서 입출력(input-output) 레이턴시의 일관성을 개선하기 위한 시스템 및 방법을 위한 시스템 및 방법의 일부 예시적인 실시예의 설명으로 의도되며, 본 개시 내용에 따라 제공되고, 및 본 개시 내용이 구성되거나 활용될 수 있는 유일한 형태를 나타내도록 의도되지 않았다. 설명은 예시된 실시예와 관련하여 본 개시 내용의 특징을 설명한다. 그러나, 동일하거나 동등한 기능 및 구조가 본 개시내용의 범위 내에 포함되도록 의도된 상이한 실시 양태에 의해 달성될 수 있음을 이해해야 한다. 본 명세서의 다른 곳에서 표시된 바와 같이, 유사한 참조 번호는 유사한 요소 또는 특징을 나타내도록 의도된다.
도 1은 일부 실시예에서 저장 시스템을 도시한다. 복수의 객체 스토리지(105), 또는 "키 값 스토리지" 각각은 객체 스토리지 인터페이스를 통해 영구 스토리지를 제공한다. 복수의 데이터 관리자(110) 각각은 응용 프로그램 및 워크로드와 같은 클라이언트로부터 데이터 저장 및 검색 요청을 수신하고, 이러한 각각의 요청에 대해 하나 이상의 대응하는 입출력 명령을 하나 이상의 객체 스토리지(105)에 전송한다. 그 다음, 객체 스토리지(105)는 입출력 명령에 따라 입출력 작업을 처리할 수 있다. 각각의 객체 스토리지(105)는 입출력 작업 각각이 완료되면 하나 이상의 대응하는 입출력 완료를 데이터 관리자(110)에 전송하여 입출력 작업의 처리가 완료되었음을 확인할 수 있다. 각각의 입출력 명령에 대해, 객체 스토리지(105)는 단일 입력-출력 완료를 전송할 수 있거나, (예를 들어, 아래에서 자세히 추가로 논의되는 바와 같이 데이터 복원력을 보장하기 위해 다수의 데이터 작업이 관련된 경우) 복수의 입력-출력 완료를 전송할 수 있다. 객체 스토리지(105)는 객체 스토리지 인터페이스를 통해 데이터 관리자(110)와 통신할 수 있다. 데이터 관리자(110)는 임의의 적절한 인터페이스를 통해(예를 들어 객체 스토리지 인터페이스를 통해, 서버 메시지 블록(SMB) 인터페이스를 통해, 또는 네트워크 파일 시스템(NFS)(예, NFSv3 또는 NFSv4 인터페이스를 통해) 클라이언트와 통신할 수 있다. 도 1의 저장 시스템은 "분산 객체 스토리지"로 지칭될 수 있다.
도 1에 도시된 것과 같은 확장 가능한 스토리지 솔루션은 성능을 달성하기 위해 데이터 관리자(110)에서 실행되는 많은 수의 병렬 스레드(parallel-threading)를 사용할 수 있다. 병렬 스레딩으로 좋은 성능을 얻으려면 이러한 스레드 간에 경합이 거의 또는 전혀 없이 가능한 한 동시에 실행되는 것이 유리할 수 있다. 또한 우수한 성능을 달성하기 위해서는 일관된 스토리지 IO(입출력) 레이턴시가 중요하다. 그러나 분산 객체 스토리지의 특성으로 인해 동시성 및 일관된 스토리지 IO 레이턴시 요구 사항에 대한 문제가 발생할 수 있다.
객체 스토리지(105)(예를 들어, 데이터 관리자(110)를 포함하는)의 프론트 엔드(front end)에서의 스토리지 IO 흐름은 객체 스토리지(105)에 연결하는 클라이언트(예를 들어, 응용 프로그램 또는 워크플로)의 관점에서 구성된다. 그러나 스토리지 IO 흐름의 백 엔드(back end)는 분산된 객체 스토리지의 내부 구성 요소(예, 객체 스토리지(105))의 관점에서 구성된다. 객체 스토리지(105)는 데이터의 지속성을 관리하고 데이터 복원력을 보장하기 위해 다른 중복 데이터(예를 들어, 패리티(parity) 데이터)의 데이터 복제 또는 저장을 제공하기 위해 저장 시스템에 의해 사용될 수 있다.
본 명세서에 사용된 바와 같이, "데이터 복원력(data resiliency)"은 객체 스토리지(105) 중 하나(또는 일부 경우에는 둘 이상)가 실패하거나 오프라인이 된 경우에도 저장된 데이터를 복구하는 능력을 의미한다. 이를 위해 데이터 복제를 사용할 수 있다. 예를 들어, 많은 양의 데이터가 객체 스토리지(105) 중 첫 번째 객체 스토리지(105)에 기록될 때 동일한 데이터가 하나 이상의 다른 객체 스토리지(105)에 기록될 수 있다. 일부 실시예에서, 데이터 복원력을 위한 데이터 기록은 데이터 양이 객체 스토리지(105) 중 첫 번째 객체 스토리지(105)에 기록될 때 패리티 데이터를 다른 객체 스토리지(105) 중 하나 이상에 기록하는 것을 포함할 수 있다. 여기에서 사용된 "패리티 데이터"는 소거(erasure) 코드의 일부(즉, 지워진 데이터 또는 사용할 수 없게 된 데이터(예를 들어, 객체 스토리지(105)가 실패하거나 오프라인 상태가 된 결과)의 복구를 허용하는 인코딩 시스템의 일부)로 사용되는 중복 데이터이다.
분산 객체 스토리지의 프론트 엔드 및 백 엔드 스토리지 IO 흐름(stream)의 특성에서 이분법은 고성능 객체 스토리지에 대한 동시성 및 일관성의 요구 사항에 대한 문제(challenge)을 제시한다. 이는 다수의 프론트-엔드 스토리지 IO 흐름이 스토리지 IO 요청의 완료를 발행하고 처리하는 데 필요한 데이터 관리자(110) 내에서 리소스에 대해 관련되지 않은 스토리지 IO 흐름과 경쟁하게 할 수 있다. 이 문제는 위에서 언급한 것처럼 복원력을 위한 데이터 복제를 수행하기 위해 분산 객체 스토리지가 필요하기 때문에 더욱 악화될 수 있다.
이러한 조건들은 스레드 간의 동시성과 고성능 객체 스토리지에 대한 일관된 스토리지 IO 레이턴시를 달성하는 능력에 영향을 준다. 이 문제는 데이터 관리자(110)가 성능을 위해 더 많은 스레드를 사용함에 따라 더욱 심각해집니다. 더 많은 수의 스레드를 사용하면 (i) 입출력 작업의 처리를 수행하는 병렬 스레드 및 (ii) 입출력 완료 처리를 수행하는 병렬 스레드 둘 사이에 더 많은 경쟁이 발생할 수 있다.
도 2는 분산 객체 스토리지에 존재할 수 있는 위에서 설명된 조건으로 인한 동시성 및 일관성에 대한 위협을 도시한다. 도 2에서, 데이터 관리자(110)는 예시의 편의를 위해 단일 라인으로 도시되어 있다. 객체 스토리지(105)는 분산 시스템에서 서로 다른 노드에 속할 수 있다. 예를 들어, 객체 스토리지(105)는 각각이 하나 이상의 CPU(중앙 처리 장치) 및 복수의 영구 스토리지(예를 들어, 솔리드 스테이트 드라이브(SSD) 또는 하드 드라이브(HDD))를 포함할 수 있는 복수의 노드에서 구현될 수 있다. 각각의 영구 스토리지는 여러 객체 스토리지(105)에 대한 저장 공간을 제공할 수 있다. 예를 들어 영구 스토리지는 (i) 불변 객체를 저장하기 위한 객체 스토리지(105), (ii) 덮어쓰기 작업이 허용되는 객체를 저장하기 위한 객체 스토리지(105), 및 (iii) 추가 작업이 허용되는 객체를 저장하기 위한 객체 스토리지(105)에 대한 스토리지를 제공할 수 있다. 데이터 관리자(110)에서 실행되는 스레드(예, 두 가지 유형의 스레드, (i) 입출력 작업 처리를 수행하는 스레드 및 (ii) 입출력 완료 처리를 수행하는 스레드)는 (i) 데이터 관리자(110)의 리소스 및 (ii) 일부 작업에 필요할 수 있는 객체 스토리지(105)의 잠금에 대해 경합할 수 있다.
스토리지 IO 경로의 동시성에 대한 이러한 문제는 여러 이유로 분산 객체 스토리지에 특히 존재할 수 있다. 첫째, 스토리지 IO 흐름의 분산 특성은 분산 시스템에서 입출력 작업을 위한 전체 흐름이 여러 데이터 관리자(110)에 걸쳐 있을 수 있음을 의미할 수 있다. 둘째, 분산 시스템에서 데이터 복원력을 구현한다는 것은 분산 시스템이 개별 구성 요소 오류에도 불구하고 데이터를 제공할 수 있도록 구성되어 있음을 의미할 수 있다. 셋째, 분산 시스템은 여러 구성요소에 걸쳐(예를 들어, 여러 객체 스토리지(105)에 걸쳐) 데이터를 복제함으로써 데이터 복원력을 달성할 수 있다. 데이터 복원력 요구 사항은 입출력 완료와 입출력 작업 간의 관계가 다대일 관계일 수 있음을 의미할 수 있다. 예를 들어, 복수의 입출력 완료가 단일 입출력 작업에 해당할 수 있다. 따라서 분산 객체 스토리지에서 일관된 성능에 대한 문제는 프런트 엔드 스토리지 IO 경로의 동시 특성을 활용하는 동시에 대규모로 일관된 스토리지 IO 레이턴시를 제공하는 것일 수 있다.
이와 같이, 스토리지 IO 완료 처리가 분산 객체 저장 시스템으로의 새로운 스토리지 IO 동작의 유입과 관련된 처리와 공통 자원에 대해 경쟁함에 따라 대규모 분산 시스템의 스토리지 IO 레이턴시는 규모에 따라 예측할 수 없게될 수 있다. (i) 새로운 IO 작업이 시스템으로 유입되는 것과 관련된 처리와 (ii) 시스템에 이미 있는 기존 IO 작업의 IO 완료 처리와 관련된 처리 간의 이러한 경쟁은 응용 프로그램 및 워크로드와 같은 클라이언트의 데이터 저장 및 검색 요청에 의해 표시되는 레이턴시가 예측할 수 없을 정도로 생성될 수 있다.
일부 실시예에서, 이러한 문제는 도 3에 도시된 바와 같이 IO 완료를 처리하는 전용 서브시스템을 사용하여 해결된다. 이 구조는 입출력 작업의 규모에서 IO 완료 처리를 분리하고, 입출력 작업 처리와 입출력 완료 처리 간의 경합을 줄입니다.
예를 들어, 하나 이상의 하드웨어 스레드가 IO 완료를 처리하기 위해 전용될 수 있으며, 이에 의해 전용 컴퓨팅 리소스를 제공하여 IO 완료 처리가 IO 작업을 수행하는 스레드의 수에 따라 확장될 수 있다. 본 명세서에 사용된 바와 같이, "하드웨어 스레드(hardware thread)"는 단일 처리 요소(예, 단일 코어 또는 다중 코어 프로세서)로 제한되고 처리 요소를 제한된 수의 다른(소프트웨어) 스레드와 공유하는 스레드이다. 본 명세서에 사용된 바와 같이, "처리 요소(processing elemen)" 또는 "코어(core)"는 명령어를 불러오고 이를 실행하도록 구성된 처리 회로이다.
입출력 완료 처리하는 것에 전용(dedicated)인 처리 요소의 수는 입출력 작업의 처리에 사용되는 처리 요소의 수에 따라 확장될 수 있다. 예를 들어, 데이터 관리자(110) 각각이 72개의 코어(core)를 갖는다면, 데이터 관리자(110) 각각의 코어 중 1, 2 또는 4개(서브 세트)는 입출력 완료 처리하는 것의 전용일 수 있다. 일부 실시예에서 (i) 입출력 작업을 처리하는 데 사용되는 코어의 수 대 (ii) 입출력 완료를 처리하는 데 사용되는 코어의 수의 비율은 10과 100 사이이다. 입출력 완료 처리에 할당된 코어의 비율은 입출력 완료 처리 및 입출력 작업 처리의 상대적 처리 부담에 따라 선택할 수 있다. 입출력 완료 처리를 위해 너무 적은 수의 코어가 할당되면 입출력 완료 레이턴시가 과도하게 가변적일 수 있고, 입출력 완료 처리에 너무 많은 코어가 할당되면 입출력 작업을 처리하는 (더 적은 수의) 코어의 총 성능이 불필요하게 저하될 수 있다.
도 3의 실시예에서, 각 객체 스토리지(105)는 데이터 관리자(110)로부터 수신된 입출력 명령을 위한 제1 큐(305) 및 객체 스토리지(105)에 의해 생성된 입출력 완료를 위한 제2 큐(310)를 포함할 수 있다. 복수의 제1 코어(315)는 입출력 연산을 처리하도록 구성되고, 제2 코어(320)는 입출력 완료 처리 전용이다.
입출력 완료 처리에 대한 하드웨어의 헌신은 입출력 완료 처리 시간이 입출력 작업을 처리하는 스레드의 수와 무관하고 결정론적으로 유지되는 정도를 상당히 개선할 수 있다. 입출력 작업을 처리하는 것과 입출력 완료를 처리하는 것 간의 경합을 더욱 줄이기 위해 전용 하드웨어에 고정된 단일 소프트웨어 스레드(또는 고정된 제한된 수의 소프트웨어 스레드)가 입출력 완료 처리를 수행할 수 있다. 이렇게 하면 컨텍스트(context) 전환을 피할 수 있어 IO 완료 처리 시간이 결정적인 범위를 더욱 개선할 수 있다. 또한 전반적인 스케줄링과 그러한 스케줄링으로 인해 발생할 수 있는 예측 불가능성을 제거하여 일관된 레이턴시를 달성하는 데 도움이 될 수 있다.
일부 실시예에서, 입력-출력 완료를 처리하는 데 사용되는 하드웨어는 그러한 처리에 독점적으로 전용되는 대신, 일부 입력-출력 작업을 처리하지만 입력-출력 작업의 처리보다 입력-출력 완료 처리에 처리 리소스를 더 많이 사용하는 것과 같은 처리(예, 다른 처리 작업도 처리)를 수행하는 데 사용된다. 본 명세서에 사용된 바와 같이, 하드웨어(예: 처리 회로)의 일부가 특정 유형의 작업(예, 입출력 완료 처리)을 수행하거나 "주로(primarily)" 수행하도록 구성되는 것으로 설명되는 경우, 이는 하드웨어가 다른 유형의 작업보다 이러한 유형의 작업에 더 많은 시간(즉, 더 많은 처리 주기)을 할애한다는 것을 의미한다. 일부 실시예에서, 제1 코어는 주로 입출력 작업을 처리하는 데 사용되며 입출력 완료보다 10배 이상 많은 입출력 작업을 처리하고, 제2 코어는 주로 입출력 완료 처리에 사용되며 입출력 작업보다 10배 이상 많은 입출력 완료를 처리한다. 일부 실시예에서, 처리는 입출력 작업을 수행하기 위한 복수의 연속적인 요청을 수신하는 것을 포함하고, 이러한 요청을 처리하는 동안, 제1 코어는 주로 입출력 작업을 처리하고 제2 코어는 주로 입출력 완료를 처리한다. 여기에서 사용된 "연속 IO 요청(contiguous IO requests)" 세트는 일정 시간 간격 동안 수신된 IO 요청의 완전한 세트입니다. 즉, 연속적으로 또는 동시에 수신되는 IO 요청 세트이다. 일부 실시예에서, 제1 코어는 오직 입출력 작업만을 처리하는 데 사용되며, 및 제2 코어는 오직 입출력 완료만을 처리하는 데 사용된다.
본 명세서에 사용된 바와 같이, 무언가의 "일부"는 그것의 "적어도 일부"를 의미하고, 그 자체로 그것의 전부 또는 전부 미만을 의미할 수 있다. 이와 같이, "일부"는 특별한 경우로서 전체를 포함할 수 있다. 즉, 그것의 전체는 그것의 일부의 예이다. 본 명세서에서 사용된 바와 같이, 제2 수량이 제1 수량의 "Y% 이내"인 경우, 이는 제2 수량이 제1 수량의 최소 (1-Y/100)배이고 제2 수량이 제1 수량의 최대 (1+Y/100)배임을 의미한다. 본 명세서에 사용된 바와 같이, 용어 "또는"은 "및/또는"으로 해석되어야 하며, 예를 들어 "A 또는 B"는 "A" 또는 "B" 또는 "A 및 B" 중 어느 하나를 의미한다.
"처리 회로(processing circuit)"라는 용어는 데이터 또는 디지털 신호를 처리하는 데 사용되는 하드웨어, 펌웨어 및 소프트웨어의 임의의 조합을 의미하는 것으로 여기에서 사용된다. 처리 회로 하드웨어는 예를 들어 주문형 집적 회로(ASICs), 범용 또는 특수 목적 중앙 처리 장치(CPU), 디지털 신호 프로세서(DSP), 그래픽 처리 장치(GPU) 및 필드 프로그래머블 게이트 어레이(FPGA)와 같은 프로그램 가능 논리 장치를 포함할 수 있다. 여기에서 사용되는 처리 회로에서 각 기능은 구성된 하드웨어에 의해 수행된다. 즉, 해당 기능을 수행하기 위해 유선으로 연결되거나 비일시적 저장 매체에 저장된 명령을 실행하도록 구성된 CPU와 같은 보다 범용 하드웨어에 의해 수행된다. 처리 회로는 단일 인쇄 회로 기판(PCB)에서 제조되거나 상호 연결된 여러 PCB에 분산될 수 있다. 처리 회로는 다른 처리 회로를 포함할 수 있습니다. 예를 들어, 처리 회로는 PCB에서 상호 연결된 두 개의 처리 회로, 즉 FPGA와 CPU를 포함할 수 있다.
본 명세서에서 사용되는 바와 같이, 용어 "배열(array)"은 어떻게 저장되는지(예를 들어, 연속적인 메모리 위치에 저장되는지 또는 연결 리스트에 저장되는지 여부)에 관계없이 정렬된 숫자 세트를 지칭한다. 본 명세서에 사용된 바와 같이, 방법(예를 들어, 조정) 또는 제1 수량(예를 들어, 제1 변수)이 제2 수량(예를 들어, 제2 변수)을 "기반으로"하는 것으로 언급되는 경우, 그것은 제2 수량이 방법에 대한 입력이거나 제1 수량에 영향을 미친다는 것을 의미합니다. 예를 들어, 제2 수량은 제1 수량을 계산하는 함수에 대한 입력(예, 유일한 입력 또는 여러 입력 중 하나)일 수 있거나, 제1 수량은 제2 수량과 동일(equal)하거나, 또는 제1 수량은 제2 수량과 같을(same) 수 있다(예를 들어, 메모리 내의 동일한 위치 또는 위치들에 저장됨).
용어 "제1", "제2", "제3" 등은 다양한 요소, 구성요소, 영역, 레이어 및/또는 섹션을 설명하기 위해 본 명세서에서 사용될 수 있지만, 이러한 요소, 구성 요소, 영역, 레이어 및/또는 섹션은 이러한 용어에 의해 제한되어서는 아니된다. 이러한 용어는 하나의 요소, 구성 요소, 영역, 레이어 또는 섹션을 다른 요소, 구성 요소, 영역, 레이어 또는 섹션과 구별하는 데만 사용된다. 따라서, 본 명세서에서 논의되는 제1 요소, 구성요소, 영역, 레이어 또는 섹션은 본 발명의 사상 및 범위를 벗어나지 않으면서 제2 요소, 구성요소, 영역, 레이어 또는 섹션으로 명명될 수 있다.
본 명세서에서 사용된 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 본 명세서에 사용된 용어 "실질적으로", "약" 및 그와 유사한 용어는 정도의 용어가 아닌 근사치의 용어로 사용되고, 당업자가 인식할 수 있는 측정 또는 계산된 값의 고유한 편차를 설명하기 위한 것으로 의도된다.
본 명세서에 사용된 바와 같이, 단수 형태는 문맥이 명백하게 달리 나타내지 않는 한, 복수 형태도 포함하는 것으로 의도된다. 본 명세서에서 사용될 때 "포함하는"이라는 용어는 언급된 특징, 정수, 단계, 연산, 요소 및/또는 구성요소의 존재를 지정하는 것으로 추가로 이해될 것이나, 하나 이상의 다른 특징, 정수, 단계, 연산, 요소, 구성요소 및/또는 이들의 그룹의 존재 또는 추가를 배제하지 않는다. 본 명세서에 사용된 바와 같이, "및/또는"이라는 용어는 관련된 나열된 항목 중 하나 이상의 모든 조합을 포함한다. "적어도 다음 중 하나"와 같은 표현은 요소 목록 앞에 올 때 요소의 전체 목록을 수정하고 목록의 개별 요소를 수정하지 않는다. 또한, 본 발명의 실시 예를 설명할 때 "할 수 있다"의 사용은 "본 발명의 하나 이상의 실시 예"를 의미한다. 또한, "예시적인"이라는 용어는 예시 또는 묘사를 지칭하기 위한 것이다. 본 명세서에 사용된 바와 같이, 용어 "사용하다"는 각각 용어 "활용하다", "이용하다" 및 "이용하다"와 동의어로 간주될 수 있다.
요소 또는 층이 다른 요소 또는 층에 "위에", "상에" 또는 "연결되는", "결합되는" 또는 "인접하는" 것으로 언급될 때, 그것은 다른 요소 또는 층에 직접 연결되거나, 결합되거나, 인접할 수 있거나, 하나 이상의 중간 요소 또는 층이 존재할 수 있는 것으로 이해될 수 있다. 대조적으로, 요소 또는 층이 다른 요소 또는 층에 "직접 상에", "직접 연결", "직접 결합" 또는 "바로 인접"하는 것으로 언급될 때, 중간 요소 또는 층이 존재하지 않는다.
여기에 인용된 임의의 수치 범위는 인용된 범위 내에 포함된 동일한 수치 정밀도의 모든 하위 범위를 포함하도록 의도된다. 예를 들어, "1.0에서 10.0" 또는 "1.0에서 10.0 사이"의 범위는 인용된 최소값 1.0과 인용된 최대값 10.0 사이의 모든 하위 범위를 포함하도록 즉, 1.0 이상의 최소값 및 10.0 이하의 최대값, 예를 들어 2.4 내지 7.6을 가지도록 의도된다. 여기에 인용된 임의의 최대 수치 제한은 그 안에 포함된 모든 더 낮은 수치 제한을 포함하도록 의도되고, 본 명세서에 인용된 임의의 최소 수치 제한은 그 안에 포함된 모든 더 높은 수치 제한을 포함하도록 의도된다.
본 개시에 따른 하나 이상의 실시예는 후술하는 주장 중 하나 이상의 특성을 포함할 수 있다(실시예는 이에 제한되지 않음).
- 주장 1:
복수의 객체 스토리지들;
상기 객체 스토리지들에 연결되고, 복수의 처리 회로들를 포함하는 복수의 데이터 관리자들;
상기 복수의 처리 회로들 중 입출력 작업을 처리하도록 구성되는 제1 처리 회로; 및
상기 복수의 처리 회로들 중 입출력 완료를 처리하도록 구성되는 제2 처리 회로를 포함하는, 저장 시스템.
- 주장 2:
제1 항에 있어서,
상기 제2 처리 회로는 단일 소프트웨어 스레드를 실행하도록 구성되는, 저장 시스템.
- 주장 3:
제1 항에 있어서,
상기 입출력 작업의 처리는 데이터 복원력을 위해 데이터를 기록하는 것을 포함하는, 저장 시스템.
- 주장 4:
제3 항에 있어서,
상기 데이터 복원력을 위한 데이터를 기록하는 것은:
상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계; 및
상기 제1 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 포함하는, 저장 시스템.
- 주장 5:
제3 항에 있어서,
상기 데이터 복원력을 위한 데이터를 기록하는 것은:
상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계; 및
상기 제1 데이터에 대응하는 패리티(parity) 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 포함하는, 저장 시스템.
- 주장 6:
제1 항에 있어서,
상기 제1 처리 회로는 상기 입출력 완료보다 10배 이상 많은 상기 입출력 작업을 처리하도록 구성되는, 저장 시스템.
- 주장 7:
제1 항에 있어서,
상기 제2 처리 회로는 상기 입출력 작업보다 10배 이상 많은 상기 입출력 완료를 처리하도록 구성되는, 저장 시스템.
- 주장 8:
제1 항에 있어서,
상기 제1 처리 회로는 오직 상기 입출력 작업만을 처리하도록 구성되는, 저장 시스템.
- 주장 9:
제1 항에 있어서,
상기 제2 처리 회로는 오직 상기 입출력 완료만을 처리하도록 구성되는, 저장 시스템.
- 주장 10:
제9 항에 있어서,
상기 제1 처리 회로는 오직 상기 입출력 작업만을 처리하도록 구성되는, 저장 시스템.
- 주장 11:
제1 항에 있어서,
상기 제1 처리 회로는 제1 데이터 관리자의 제1 코어이고,
상기 제2 처리 회로는 상기 제1 데이터 관리자의 제2 코어인, 저장 시스템.
- 주장 12:
제1 항에 있어서,
상기 복수의 데이터 관리자들 중 제1 데이터 관리자는 복수의 코어들을 포함하고,
상기 복수의 코어들의 제1 서브 세트는 입출력 작업을 처리하도록 구성되고, 상기 복수의 코어들의 제2 서브 세트는 입출력 완료를 처리하도록 구성되고, 및
상기 제1 서브 세트는 상기 제2 서브 세트보다 10배 이상 많은 코어를 포함하는, 저장 시스템.
- 주장 13:
제12 항에 있어서,
상기 제1 서브 세트는 상기 제2 서브 세트보다 최대 100배 많은 코어를 포함하는 저장 시스템.
- 주장 14:
복수의 객체 스토리지들 및 상기 객체 스토리지들에 연결되는 복수의 데이터 관리자들을 포함하는 저장 시스템을 작동하는 방법으로서,
입출력 작업들을 수행하기 위한 복수의 연속적인 요청을 수신하는 단계;
상기 데이터 관리자들의 복수의 처리 회로들에 의해, 상기 입출력 작업들을 처리하는 단계; 및
상기 데이터 관리자들의 복수의 처리 회로에 의해, 상기 입출력 작업들에 대응하는 입출력 완료들을 처리하는 단계를 포함하되,
상기 복수의 처리 회로들 중 제1 처리 회로는 상기 입출력 동작들을 처리하고,
상기 복수의 처리 회로들 중 제2 처리 회로는 상기 입출력 완료들을 처리하는, 저장 시스템 작동 방법.
- 주장 15:
제14 항에 있어서,
상기 제2 처리 회로는 단일 소프트웨어 스레드를 실행하도록 구성되는, 저장 시스템 작동 방법.
- 주장 16:
제14 항에 있어서,
상기 입출력 동작들의 처리는 데이터 복원력을 위한 데이터를 기록하는 단계를 포함하는, 저장 시스템 작동 방법.
- 주장 17:
제16 항에 있어서,
상기 데이터 복원력을 위한 데이터를 기록하는 단계는:
상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계; 및
상기 제1 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 포함하는, 저장 시스템 작동 방법.
- 주장 18:
제16 항에 있어서,
상기 데이터 복원력을 위한 데이터를 기록하는 단계는:
상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계; 및
상기 제1 데이터에 대응하는 패리티(parity) 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 더 포함하는, 저장 시스템 작동 방법.
- 주장 19:
객체를 저장하기 위한 수단; 및
복수의 처리 회로들을 포함하고, 객체를 저장하기 위한 상기 수단에 연결된 복수의 데이터 관리자들을 포함하되,
상기 복수의 처리 회로들 중 입출력 작업을 처리하도록 구성되는 제1 처리 회로; 및
상기 복수의 처리 회로들 중 입출력 완료를 처리하도록 구성되는 제2 처리 회로를 포함하는, 저장 시스템.
- 주장 20:
제19 항에 있어서,
상기 제2 처리 회로는 단일 소프트웨어 스레드를 실행하도록 구성되는, 저장 시스템.
저장 시스템에서 입력-출력 레이턴시를 개선하고 입력-출력 레이턴시의 일관성을 개선하기 위한 시스템 및 방법의 일부 실시예의 측면이 여기에서 구체적으로 설명되고 예시되었지만, 많은 수정 및 변형이 있을 것은 당업자에게 명백하다. 따라서, 본 개시의 원리에 따라 구성된 저장 시스템에서 입출력 지연을 개선하고 입출력 지연의 일관성을 개선하기 위한 시스템 및 방법은 여기에 구체적으로 설명된 것과는 다르게 구현될 수 있다는 것을 이해해야 한다. 본 발명은 또한 후술하는 청구범위 및 그 등가물에 정의되어 있다.
SECTION II
시스템 전체 상태를 통해 분산 객체 스토리지의 읽기 캐시 확장(SCALING READ CACHE IN A DISTRIBUTED OBJECT STORE THROUGH SYSTEM WIDE STATE)
명세서의 현재 SECTION II에서 모든 참조 번호나 특징 및 도면에 대한 참조를 포함하는 내용은 "Section II"이라는 라벨이 있는 도 4 내지 도 7이 참조되고 대응되나, SECTION I, SECTION III 또는 SECTION IV의 내용 및 “Section II", "Section III" 또는 "Section IV"이라는 라벨이 있는 도면의 참조 번호, 특징 및 그림들의 어떤 내용도 참조되거나 대응되지 않는다. 즉, 본 명세서의 SECTION I-IV 각각은 동일한 섹션의 해당 설명과 동일한 섹션으로 표시된 도면의 맥락에서 각각 해석되어야 한다. 그러나, 전술한 내용에도 불구하고, 다양한 섹션의 다양한 양태 및 발명 개념은 다른 섹션의 양태 및 발명 개념에 적용될 수 있다.
첨부된 도면과 관련하여 아래에 설명된 상세한 설명은 본 개시내용에 따라 제공되는 분산 객체 스토리지를 위한 메타데이터 캐시의 예시적인 실시예의 설명으로서 의도되고, 본 개시내용이 구성되거나 활용될 수 있는 유일한 형태를 나타내도록 의도된 것은 아니다. 설명은 예시된 실시예와 관련하여 본 개시내용의 특징을 설명한다. 설명은 예시된 실시예와 관련하여 본 개시 내용의 특징을 설명한다. 그러나, 동일하거나 동등한 기능 및 구조가 본 개시내용의 범위 내에 포함되도록 의도된 상이한 실시 양태에 의해 달성될 수 있음을 이해해야 한다. 본 명세서의 다른 곳에서 표시된 바와 같이, 유사한 참조 번호는 유사한 요소 또는 특징을 나타내도록 의도된다.
도 4는 일부 실시예에서 저장 시스템 또는 "클러스터(cluster)"를 도시한다. 복수의 객체 스토리지, 또는 "키 값 스토리지"(105) 각각은 객체 스토리지 인터페이스를 통해 영구 스토리지를 제공한다. 복수의 데이터 관리자(110)(또는 "노드") 각각은 클라이언트 응용 프로그램 및 워크로드와 같은 클라이언트로부터 스토리지 요청(예, 데이터 쓰기(기록), 수정 또는 읽기(판독) 요청)을 수신하고, 이러한 각각의 요청에 대해 하나 이상의 대응하는 입출력 명령(또는 "I/O", 또는 "IO")을 하나 이상의 객체 스토리지(105)에 전송한다. 객체 스토리지(105)는 객체 스토리지 인터페이스를 통해 데이터 관리자(110)와 통신할 수 있다. 데이터 관리자(110)는 임의의 적절한 인터페이스를 통해, 예를 들어 객체 스토리지 인터페이스를 통해, 서버 메시지 블록(SMB) 인터페이스를 통해, 또는 NFS(네트워크 파일 시스템)(예를 들어, NFSv3 또는 NFSv4) 인터페이스를 통해 클라이언트와 통신할 수 있다. 도 4의 저장 시스템은 "분산 객체 스토리지(distributed object store)"로 지칭될 수 있다. 데이터 관리자(110) 각각은 하나 이상의 처리 회로를 포함하는 노드일 수 있다. 각각의 객체 스토리지(105)는 또한 예를 들어, 솔리드 스테이트 드라이브와 같은 하나 이상의 영구 스토리지와 같은 하나 이상의 처리 회로를 포함하고 영구 데이터 저장 수단을 더 포함하는 노드일 수 있다. 데이터 관리자(110) 및 객체 스토리지(105)는 각각의 노드가 다른 노드 중 임의의 것과 통신할 수 있도록 하는 방식으로 함께 연결될 수 있으며, 여기에 개시된 방법은 하나 이상의 처리 회로에 의해(예를 들어, 서로 통신하는 여러 처리 회로에 의해) 수행될 수 있다. 다음 내용에서 문맥이 달리 나타내지 않는 한 "노드(node)"는 데이터 관리자(110)이다.
도 1과 같은 분산 객체 스토리지는 객체의 증가 또는 축소, 데이터 관리 정책, 객체 스토리지(105) 중 일부의 불변 속성에 의해 필요한 객체 버전 관리, 또는 객체 식별자가 주어진 데이터 스토리지에서 객체 데이터의 위치를 얻는 것과 같은 각 객체의 서로 다른 측면을 관리하기 위해 정교한 메타데이터를 요구할 수 있다. 노드(110)는 분산된 객체 스토리지의 객체에 액세스할 때 메타데이터에 의존할 수 있다. 예를 들어, 노드(110)는 객체에 액세스하기 전에 객체에 대한 메타데이터를 먼저 검색할 수 있다.
객체의 이러한 양태는 적절한 객체 데이터가 불러와지기(fetched) 전에 입출력(IO) 경로에서 다중 메타데이터 액세스를 포함할 수 있다. 따라서 객체 데이터를 가져오기 전에 메타데이터를 처리하기 위해 객체 스토리지가 영구 스토리지에 여러번 액세스해야 할 수 있다. 따라서 확장 가능한 분산 객체 스토리지의 성능은 필요한 메타데이터에 액세스하는 성능에 따라 달라질 수 있으며, 분산 객체 스토리지가 메타데이터 액세스에 대한 짧은 레이턴시를 유지할 수 있는 경우 분산 객체 스토리지의 성능이 향상될 수 있다. 일부 실시예에서, 낮은 레이턴시 액세스는 모든 메타데이터 액세스에 대해 기본 영구 스토리지에 액세스해야 하는 것을 피하기 위해 메타데이터를 캐싱(caching)함으로써 달성된다.
캐싱은 성능을 향상시킬 수 있지만 대가(cost)가 요구될 수도 있다. 예를 들어, 분산 객체 스토리지 전체에서 캐시 일관성을 유지하기 위해 메타데이터 캐시는 캐시된 모든 데이터 항목(entry)에 대한 시스템 전체 잠금을 유지할 수 있다. 이 잠금은 캐시에 있는 각 항목에 대한 시스템 전체 상태의 일부일 수 있다. 이러한 실시예에서, 캐시의 각 항목의 시스템 전체 상태는 클라이언트 응용 프로그램이 분산 객체 스토리지에 걸쳐 일관된 캐시로부터 데이터를 항상 가져오는 것을 보장한다.
클라이언트 응용 프로그램에 의한 분산 객체 스토리지의 클라이언트 응용 프로그램 사용이 계속됨에 따라, 메타데이터 캐시에 캐시되는 데이터의 양이 증가할 수 있다. 캐시의 데이터가 증가하면 분산 객체 스토리지의 입출력(IO) 경로가 캐시에서 필요한 메타데이터를 찾을 수 있으므로 영구 스토리지에 대한 상대적으로 느린 액세스를 방지할 수 있으므로 성능이 향상될 수 있다. 그러나 분산 객체 스토리지에서 이 데이터의 캐시 일관성을 유지하는 비용은 캐시가 캐시된 데이터에 대해 유지해야 하는 증가된 공유 시스템 상태(또는 "공유 상태")일 수 있다.
그러나, 각 노드의 캐시에 의해 유지되는 공유 상태의 양은 분산 객체 스토리지에서 오류 시나리오를 처리하기 위해 수행될 수 있는 복구 및 오류 처리 처리에 부정적인 영향을 미칠 수 있다. 예를 들어, 분산 객체 스토리지는 오류 복구를 수행할 때 오프라인 상태가 된 노드가 소유한 공유 상태를 적절하게 처리할 수 있다. 분산 객체 스토리지의 구성 요소는 소프트웨어, 하드웨어 또는 네트워크 오류와 관련된 여러 가지 이유로 오프라인 상태가 될 수 있다. 따라서 이러한 시나리오에 대한 오류 처리 프로세스의 효율성은 분산 시스템이 클라이언트 응용 프로그램에 제공할 수 있는 일관된 성능에 영향을 줄 수 있다. 분산 객체 스토리지의 노드가 보유하는 공유 상태의 양이 증가하면 노드 장애로부터 복구하는 데 필요할 수 있는 오류 처리를 수행하는 데 필요한 시간이 늘어날 수 있다.
분산 객체 스토리지가 더 큰 크기로 확장됨에 따라(예를 들어, 더 많은 노드를 포함하도록), 개별 노드가 장애 또는 계획된 유지 관리 작업으로 인해 오프라인 상태가 되는 경우가 더 자주 있을 수 있고, 오류 복구는 예외가 아니라 표준이 될 수 있다. 따라서 최적의 오류 복구 접근 방식은 분산 객체 스토리지에서 확장을 활성화하는 데 중요할 수 있다. 이러한 접근 방식을 구현할 때 문제는 오류 복구 프로세스에 분산 객체 스토리지가 더 큰 크기로 확장됨에 따라 빈도가 증가하여 수행되는 부정적인 영향을 미치지 않으면서 I/O 성능을 개선하기 위해 메타데이터 캐시에 많은 양의 데이터를 더 오랜 시간 동안 캐시하는 것일 수 있다.
일부 실시예에서, 분산 객체 스토리지에서 확장성과 성능 모두를 달성하는 문제에 대한 솔루션은 세 부분을 포함합니다. 첫째, 메타데이터 캐시는 캐시의 항목을 두 가지 범주 중 하나로 지능적으로 분류한다: (i) 캐시가 항목의 데이터에 대한 시스템 전체 공유 상태를 유지해야 하는 캐시 항목 및 (ii) 캐시가 항목의 데이터에 대한 시스템 전체 공유 상태를 유지하지 않는 캐시 항목 기입. 둘째, 메타데이터 캐시는 캐시 항목의 두 범주 모두에 대한 데이터를 계속 캐시한다. 그러나 메타데이터 캐시는 두 번째 범주의 축출 캐시 항목을 표시할 수 있다. 셋째, 메타데이터 캐시의 모든 항목에 대해 캐시는 다음 정보를 포함하는(예: 구성되는) 쿠키를 유지 관리한다: (i) 캐시에 있는 데이터의 식별자(ID) 및 (ii) 캐시에 의해 생성된 고유 서명. 본 명세서에 사용된 바와 같이, "공유 상태 유지"는 메타데이터 캐시에 저장된 데이터(공유 상태에 해당)에 대한 시스템 전체 잠금을 유지하는 것을 의미한다. 시스템 전체 잠금은 노드가 읽기 전용 모드에서 데이터에 액세스하는 경우 공유 잠금일 수 있고, 노드가 데이터를 쓰고 있는 경우 배타적 잠금일 수 있다. "드롭핑(Dropping)" 또는 "릴리징(Releasing)" 공유 상태는 시스템 전체 잠금을 해제하는 것을 의미한다.
도 5a는 일부 실시예에서 이러한 목적을 위해 캐시에 의해 사용되는 쿠키의 데이터 레이아웃을 도시한다. 메타데이터 캐시에서 생성된 쿠키는 노드에서 항목에 액세스할 때 캐시 항목의 캐시된 데이터가 유효한지 여부를 결정하는 데 사용된다. 여기에서 사용된 "쿠키"는 데이터 구조이다. 쿠키(cookie)라는 단어를 사용하는 이유는 데이터 구조가 비교적 작은 것이 유리할 수 있으며, 예를 들어, 100kB 미만의 크기를 가지지만, 본 명세서에서 사용되는 "쿠키"라는 용어는 이러한 작은 데이터 구조에 제한되지 않고 임의의 크기의 데이터 구조를 나타낼 수 있다. 쿠키는 상태 비저장(영구 스토리지에 저장되지 않음)일 수 있으므로 오류 복구 또는 구성 변경 목적으로 복구할 필요가 없다. 결과적으로 오류 복구 처리는 쿠키의 규모에 영향을 받을 필요가 없으며 쿠키가 없다고 해서 클라이언트 응용 프로그램에서 활발하게 사용 중인 캐시 항목의 유효성에 영향을 줄 필요는 없다.
이와 같이 쿠키는 분산 객체 스토리지의 오류 복구 프로세스에 영향을 미치지 않을 수 있다. 데이터가 캐시되면 메타데이터 캐시가 캐시 항목의 데이터와 함께 쿠키를 캐시할 수 있다. 도 5b는 데이터를 캐싱하는 캐시 항목을 도시한다.
항목이 분산 객체 스토리지에 걸쳐 공유 상태를 유지하기 위해 캐시를 필요로 하는지 여부를 결정하기 위해 메타데이터 캐시에 의해 사용되는 방법은 다음 두 가지 양태를 포함할 수 있다. 제1 양태에서, 캐시는 캐시 항목을 능동적으로 참조하고 있는 IO를 추적할 수 있다. 항목이 하나 이상의 활성 IO에 의해 참조되는 한 메타데이터 캐시는 분산 객체 스토리지에서 데이터 일관성을 유지하기 위해 해당 항목에 대한 공유 상태(예, 시스템 전체 잠금 유지)를 유지할 수 있다.
제2 양태에서, 캐시 항목에 대한 활성 참조의 수가 0이 되면, 항목은 비활성으로 간주될 수 있다. 그러나 메타데이터 캐시는 항목 데이터의 내부 평가를 기반으로 데이터를 계속 캐시할 수 있다. 이를 통해 영구 스토리지에서 데이터를 검색하는 것과 비교하여 상당히 감소된 레이턴시로 이 데이터에 대한 후속 액세스를 수행할 수 있다. 평가는 메타데이터 캐시에서 가까운 장래에 활성 IO가 해당 항목을 참조할 가능성을 결정하는 데 사용할 수 있다. 평가는 최근 시간 간격 동안의 액세스 빈도에 기초한 수치일 수 있거나, 아래에서 더 자세히 논의되는 바와 같이 액세스 열의 척도에 비례할 수 있다. 이러한 비활성 기간 동안 캐시 항목은 IO에서 적극적으로 참조하지 않지만 캐시는 데이터를 계속 보유한다.
공유 상태를 유지하지 않고 데이터를 캐시하는 방법은 다음과 같이 실행될 수 있다. 캐시 항목이 비활성화된 것으로 간주되면 메타데이터 캐시가 해당 항목과 관련된 공유 상태를 해제할 수 있다. 그러나 캐시는 쿠키와 함께 캐시의 데이터를 계속 유지할 수 있다. 캐시 항목의 쿠키는 캐시 항목이 후속 IO의 참조로 인해 다시 활성화되는 경우 캐시의 데이터가 여전히 유효한지 여부를 결정하는 데 사용할 수 있다. 이를 통해 메타데이터 캐시는 활성 사용 중인 캐시 항목의 하위 세트로만 유지해야 하는 공유 상태의 양을 제한할 수 있다.
따라서, 일부 실시예에서, 메타데이터 캐시는 분산 객체 스토리지의 노드가 보유하는 공유 상태의 양을 선형적으로 증가시키지 않고 저장하는 증가하는 데이터 양을 캐싱할 수 있다. 도 6은 캐시 항목의 수명 주기와 데이터를 캐시된 상태로 유지하면서 공유 상태를 해제할 수 있는 기간을 보여준다. 메타데이터 캐시 항목의 "액세스 열(access heat)"은 메타데이터 캐시 항목에 액세스할 때마다 액세스 열 값을 증가(예, 액세스 열 값을 1씩 증가)하여 계산할 수 있고, (액세스가 없을 때 액세스 열 값이 기하급수적으로 감소하도록) 액세스 열 값을 액세스 열 값과 1보다 작은 숫자의 곱으로 주기적으로 교체한다.
축출 로직은 열 지도(heat map)를 기반으로(즉, 메타데이터 캐시에 있는 항목의 상대적 액세스 열을 기반으로) 메타데이터 캐시에서 축출할 항목에 관한 결정을 내릴 수 있다. 액세스 열 외에도 평가 기능은 메타데이터 유형을 고려할 수 있다. 예를 들어, 메타데이터 캐시에 다른 유형의 캐시 항목이 있을 수 있으며 시스템은 캐시에 보관하기 위해 어떤 유형이 선호되는지, 다른 유형보다 우선하는지 지정할 수 있다. 평가 기능은 이러한 선호도, 즉 다른 유형에 대한 한 유형의 데이터 우선 순위를 구현하는 데 사용될 수 있다. 예를 들어, 파일 헤더 항목은 데이터 범위 헤더보다 우선 순위가 더 높은 유형일 수 있다.
일부 실시예에서, 공유 상태를 유지하지 않고 메타데이터 캐시 항목에서 데이터의 유효성을 결정하는 방법은 다음과 같다. 분산 객체 스토리지에서 메타데이터에 처음 액세스할 때 해당 메타데이터를 캐시하는 단계는 다음과 같다. 첫째, 메타데이터 캐시는 메타데이터 캐시 항목에 대한 쿠키를 생성하고 쓰기 인스턴스(예, 메타데이터가 작성될 때마다 다른 값을 취할 수 있음)를 식별할 수 있는 고유 식별자(예, 서명)로 초기화할 수 있다. 고유 식별자는 예를 들어 노드 식별자와 (i) 시간 또는 (ii) 단조롭게 변경되는 일부 유사한 카운터의 조합일 수 있다. 이 쿠키의 "클러스터 전체(cluster-wide)" 값은 분산 객체 스토리지에 있는 노드 중 하나의 메모리에 저장됩니다. 이 항목에 대한 쿠키를 저장하는 임무를 맡은 노드는 예를 들어 적절한 해시 함수를 사용하여 객체 식별자를 기반으로 알고리즘적으로 결정될 수 있다. 쿠키의 "로컬(local)" 또는 "노드-로컬(node-local)" 값은 도 5b에 도시된 바와 같이 데이터와 함께 캐시 항목 자체에 캐시된다.
동일한 메타데이터가 분산 객체 스토리지의 다른 노드에서 처음으로 액세스되는 경우 해당 노드의 메타데이터 캐시는 다음을 수행할 수 있다. 항목에 대한 쿠키의 클러스터 전체 값이 저장되거나 저장될 노드를 먼저 계산할 수 있다. 쿠키가 존재하지 않으면 분산 객체 스토리지의 첫 번째 액세스이다(위에서 설명한 케이스). 그렇지 않으면 쿠키가 도 5b에 도시된 바와 같이 데이터와 함께 판독되고 캐싱된다. 도 7a는 순서대로 수행될 수 있는 번호가 매겨진 단계 1 내지 7을 포함하는 전술한 시나리오에 대한 캐시 항목 쿠키 초기화를 도시한다.
캐시된 항목에 대한 활성 참조 수가 0으로 떨어지면 메타데이터 캐시가 공유 상태를 해제할 수 있다. 도 7b는 공유 상태가 해제된 상태에서 데이터를 여전히 캐싱하는 메타데이터 캐시를 보여준다.
항목이 배타적 모드에서 다른 노드(예를 들어, 제2 노드)에 의해 액세스되는 경우, 메타데이터 캐시는 다음을 수행할 수 있다. 첫째, 이 항목에 대한 쿠키의 클러스터 전체 값이 저장된 노드의 노드 식별자를 계산할 수 있다. 둘째, 항목에 대한 새로운 고유 식별자를 생성하고 쿠키의 클러스터 전체 값(즉, 노드 식별자가 계산된 노드)과 쿠키의 로컬 값 모두에 저장할 수 있다. 그런 다음 메타데이터 캐시는 해당 항목에 대한 쿠키의 변경된 값을 사용하여 해당 노드의 해당 항목에 캐시된 데이터가 유효한지 오래되었는지 여부를 결정할 수 있다. 도 7c는 노드 중 하나에 의한 배타적 액세스 후 캐시의 상태를 나타낸다.
비활성 항목이 다시 활성화되면 메타데이터 캐시는 다음을 수행할 수 있다. 먼저, 항목에서 공유 상태를 획득할 수 있다. 다음으로, 이 항목에 대한 쿠키의 클러스터 전체 값을 읽을 수 있다. 그런 다음 쿠키의 로컬 값이 클러스터 전체 값과 일치하는지 확인할 수 있다. 불일치가 있는 경우 메타데이터 캐시는 로컬 캐시의 현재 데이터가 부실하다고 결론을 내리고, 로컬 캐시의 데이터를 새로 고치기 위해 기본 영구 스토리지에서 데이터를 읽는다. 그렇지 않으면(즉, 쿠키의 로컬 값이 클러스터 전체 값과 일치하는 경우) 캐시된 데이터는 여전히 유효하므로 기본 영구 스토리지에서 읽을 필요 없이 로컬 캐시의 데이터를 재사용할 수 있다. 도 7d는 메타데이터 캐시에서 작동하는 메커니즘을 보여준다.
예를 들어, 제1 시간 간격 동안, 제1 노드는 분산 객체 스토리지에 저장된 복수의 객체 중 제1 객체에 대한 제1 메타데이터에 대한 제1 값을 생성할 수 있다.
본 명세서에서 사용된 바와 같이, 제1 메타데이터에 대한 값을 "생성(generate)"하는 용어는 (i) 제1 메타데이터의 이전 값에 기초하여 제1 메타데이터에 대한 새로운 값을 생성하는 것과 (ii) 다른 입력에 기초하여(예를 들어, 객체의 크기, 객체가 수정된 시간 또는 객체의 저장 위치를 기초하여) 값을 생성하는 것을 아우른다. 그 다음, 제1 노드는 (예를 들어, 도 7a의 단계 2에서 도시된 바와 같이) 제1 노드의 메타데이터 캐시 및 기본 영구 스토리지에 제1 메타데이터에 대한 제1 값을 저장할 수 있다. 제1 노드는 또한 제1 쿠키에 대한 제1 값을 생성할 수 있고, 제1 쿠키는 (예를 들어, 도 7a의 단계 3에 도시된 바와 같이) 제1 메타데이터에 대응한다. 그 다음, 제1 노드는 클러스터 전체 저장 위치(예를 들어, 도 7a의 단계 4에 도시된 바와 같이)를 포함하는 노드에 대한 노드 식별자를 계산할 수 있고, 제1 쿠키에 대한 제1 값을 (i) 제1 노드의 로컬 저장 위치 및 (ii) 클러스터 전체 저장 위치 모두에 저장할 수 있다. 제1 시간 간격 동안, 제1 노드는 제1 메타데이터에 대한 공유 상태(예를 들어, 시스템 전체 잠금을 보유할 수 있음)를 유지할 수 있다. 제1 시간 간격의 끝에서, 제1 노드는 시스템 전체 잠금(예를 들어, 도 7b에 도시된 바와 같이)을 해제할 수 있다.
제2 시간 간격 동안, 제1 노드는 클러스터 전체 저장 위치로부터 제1 쿠키에 대한 값(예를 들어, 제1 쿠키에 대한 제2 값)을 읽을 수 있고, 제1 노드의 로컬 저장 위치에서 제1 쿠키에 대한 제1 값을 읽을 수 있고, 및 제1 노드의 메타데이터 캐시에서 제1 쿠키에 해당하는 메타데이터가 부실한지 여부를 평가하기 위해, 제1 쿠키의 제2 값을 제1 쿠키의 제1 값과 비교할 수 있다. (예, 도 7d의 단계 2에서) 불일치가 있는 경우, 즉, 제1 노드가 제1 쿠키에 대한 제2 값이 제1 쿠키에 대한 제1 값과 같지 않다고 결정하는 경우(결과적으로, 예를 들어, 아래에서 논의되는 바와 같이 중간 제3 시간 간격 동안 제2 노드에 의한 활동), 제1 노드는 제1 노드의 메타데이터 캐시에 있는 제1 쿠키에 대응하는 메타데이터가 부실하다고 결론지을 수 있고, 따라서 (예를 들어, 도 7d의 단계 3에 도시된 바와 같이) 영구 스토리지로부터 제1 메타데이터를 검색(여기에서 사용된 바와 같이, "제1 메타데이터 검색(retrieving the first metadata)"은 제1 메타데이터에 대한 값 검색을 의미함)할 수 있다. 그렇지 않으면(예를 들어, 제1 노드가 제2 값이 제1 값과 같다고 판단하는 경우), 제1 노드는 제1 노드의 메타데이터 캐시에서 제1 쿠키에 대응하는 메타데이터가 부실하지 않다고 결론을 내릴 수 있고, 제1 노드는 제1 노드의 메타데이터 캐시로부터 제1 메타데이터를 검색할 수 있다(따라서, 영구 스토리지의 액세스를 회피함). 제2 시간 간격 동안, 제1 노드는 또한 제1 메타데이터에 대한 시스템 전체 잠금을 보유할 수 있다.
위에서 언급한 바와 같이, 제2 시간 간격 동안 제1 노드의 동작은 제1 시간 간격과 제2 시간 간격 사이의 중간 시간 간격(예를 들어, 제3 시간 간격) 동안의 다른 노드(예를 들어, 제2 노드)의 동작에 의존할 수 있다. 예를 들어, 제3 시간 간격 동안, 제2 노드는 제1 메타데이터에 대한 제2 값을 생성하고, 제1 메타데이터에 대한 제2 값을 제2 노드의 메타데이터 캐시 및 기본 영구 스토리지에 저장하고, 제1 쿠키에 대한 제1 값과 다른 제1 쿠키에 대한 제2 값을 생성항고, 제2 노드의 로컬 저장 위치에 제1 쿠키에 대한 제2 값을 저장하고, 클러스터 전체 저장 위치에 제1 쿠키에 대한 제2 값을 저장할 수 있다(예를 들어, 도 7c에 도시된 바와 같이). 이러한 경우 클러스터 차원의 저장 위치에 있는 제1 쿠키의 변경된 값은 제2 시간 간격 동안, 제1 메타데이터의 값이 변경된 것으로(따라서, 제1 노드의 메타데이터 캐시에서 부실이 됨) 제1 노드에 경고하고, 및, 따라서 제1 노드는 제1 노드의 메타데이터 캐시에 있는 값에 의존하는 대신 캐시로부터 제1 메타데이터를 불러올 수 있다.
본 명세서에 사용된 바와 같이, 무언가의 "일부"는 그것의 "적어도 일부"를 의미하고, 그 자체로 그것의 전부 또는 전부 미만을 의미할 수 있다. 이와 같이, "일부"는 특별한 경우로서 전체를 포함할 수 있다. 즉, 그것의 전체는 그것의 일부의 예이다. 본 명세서에서 사용된 바와 같이, 제2 수량이 제1 수량의 "Y% 이내"인 경우, 이는 제2 수량이 제1 수량의 최소 (1-Y/100)배이고 제2 수량이 제1 수량의 최대 (1+Y/100)배임을 의미한다. 본 명세서에 사용된 바와 같이, 용어 "또는"은 "및/또는"으로 해석되어야 하며, 예를 들어 "A 또는 B"는 "A" 또는 "B" 또는 "A 및 B" 중 어느 하나를 의미한다.
"처리 회로(processing circuit)"라는 용어는 데이터 또는 디지털 신호를 처리하는 데 사용되는 하드웨어, 펌웨어 및 소프트웨어의 임의의 조합을 의미하는 것으로 여기에서 사용된다. 처리 회로 하드웨어는 예를 들어 주문형 집적 회로(ASICs), 범용 또는 특수 목적 중앙 처리 장치(CPU), 디지털 신호 프로세서(DSP), 그래픽 처리 장치(GPU) 및 필드 프로그래머블 게이트 어레이(FPGA)와 같은 프로그램 가능 논리 장치를 포함할 수 있다. 여기에서 사용되는 처리 회로에서 각 기능은 구성된 하드웨어에 의해 수행된다. 즉, 해당 기능을 수행하기 위해 유선으로 연결되거나 비일시적 저장 매체에 저장된 명령을 실행하도록 구성된 CPU와 같은 보다 범용 하드웨어에 의해 수행된다. 처리 회로는 단일 인쇄 회로 기판(PCB)에서 제조되거나 상호 연결된 여러 PCB에 분산될 수 있다. 처리 회로는 다른 처리 회로를 포함할 수 있습니다. 예를 들어, 처리 회로는 PCB에서 상호 연결된 두 개의 처리 회로, 즉 FPGA와 CPU를 포함할 수 있다.
본 명세서에서 사용되는 바와 같이, 용어 "배열(array)"은 어떻게 저장되는지(예를 들어, 연속적인 메모리 위치에 저장되는지 또는 연결 리스트에 저장되는지 여부)에 관계없이 정렬된 숫자 세트를 지칭한다. 본 명세서에 사용된 바와 같이, 방법(예를 들어, 조정) 또는 제1 수량(예를 들어, 제1 변수)이 제2 수량(예를 들어, 제2 변수)을 "기반으로"하는 것으로 언급되는 경우, 그것은 제2 수량이 방법에 대한 입력이거나 제1 수량에 영향을 미친다는 것을 의미합니다. 예를 들어, 제2 수량은 제1 수량을 계산하는 함수에 대한 입력(예, 유일한 입력 또는 여러 입력 중 하나)일 수 있거나, 제1 수량은 제2 수량과 동일(equal)하거나, 또는 제1 수량은 제2 수량과 같을(same) 수 있다(예를 들어, 메모리 내의 동일한 위치 또는 위치들에 저장됨).
용어 "제1", "제2", "제3" 등은 다양한 요소, 구성요소, 영역, 레이어 및/또는 섹션을 설명하기 위해 본 명세서에서 사용될 수 있지만, 이러한 요소, 구성 요소, 영역, 레이어 및/또는 섹션은 이러한 용어에 의해 제한되어서는 아니된다. 이러한 용어는 하나의 요소, 구성 요소, 영역, 레이어 또는 섹션을 다른 요소, 구성 요소, 영역, 레이어 또는 섹션과 구별하는 데만 사용된다. 따라서, 본 명세서에서 논의되는 제1 요소, 구성요소, 영역, 레이어 또는 섹션은 본 발명의 사상 및 범위를 벗어나지 않으면서 제2 요소, 구성요소, 영역, 레이어 또는 섹션으로 명명될 수 있다.
본 명세서에서 사용된 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 본 명세서에 사용된 용어 "실질적으로", "약" 및 그와 유사한 용어는 정도의 용어가 아닌 근사치의 용어로 사용되고, 당업자가 인식할 수 있는 측정 또는 계산된 값의 고유한 편차를 설명하기 위한 것으로 의도된다.
본 명세서에 사용된 바와 같이, 단수 형태는 문맥이 명백하게 달리 나타내지 않는 한, 복수 형태도 포함하는 것으로 의도된다. 본 명세서에서 사용될 때 "포함하는"이라는 용어는 언급된 특징, 정수, 단계, 연산, 요소 및/또는 구성요소의 존재를 지정하는 것으로 추가로 이해될 것이나, 하나 이상의 다른 특징, 정수, 단계, 연산, 요소, 구성요소 및/또는 이들의 그룹의 존재 또는 추가를 배제하지 않는다. 본 명세서에 사용된 바와 같이, "및/또는"이라는 용어는 관련된 나열된 항목 중 하나 이상의 모든 조합을 포함한다. "적어도 다음 중 하나"와 같은 표현은 요소 목록 앞에 올 때 요소의 전체 목록을 수정하고 목록의 개별 요소를 수정하지 않는다. 또한, 본 발명의 실시 예를 설명할 때 "할 수 있다"의 사용은 "본 발명의 하나 이상의 실시 예"를 의미한다. 또한, "예시적인"이라는 용어는 예시 또는 묘사를 지칭하기 위한 것이다. 본 명세서에 사용된 바와 같이, 용어 "사용하다"는 각각 용어 "활용하다", "이용하다" 및 "이용하다"와 동의어로 간주될 수 있다.
요소 또는 층이 다른 요소 또는 층에 "위에", "상에" 또는 "연결되는", "결합되는" 또는 "인접하는" 것으로 언급될 때, 그것은 다른 요소 또는 층에 직접 연결되거나, 결합되거나, 인접할 수 있거나, 하나 이상의 중간 요소 또는 층이 존재할 수 있는 것으로 이해될 수 있다. 대조적으로, 요소 또는 층이 다른 요소 또는 층에 "직접 상에", "직접 연결", "직접 결합" 또는 "바로 인접"하는 것으로 언급될 때, 중간 요소 또는 층이 존재하지 않는다.
여기에 인용된 임의의 수치 범위는 인용된 범위 내에 포함된 동일한 수치 정밀도의 모든 하위 범위를 포함하도록 의도된다. 예를 들어, "1.0에서 10.0" 또는 "1.0에서 10.0 사이"의 범위는 인용된 최소값 1.0과 인용된 최대값 10.0 사이의 모든 하위 범위를 포함하도록 즉, 1.0 이상의 최소값 및 10.0 이하의 최대값, 예를 들어 2.4 내지 7.6을 가지도록 의도된다. 여기에 인용된 임의의 최대 수치 제한은 그 안에 포함된 모든 더 낮은 수치 제한을 포함하도록 의도되고, 본 명세서에 인용된 임의의 최소 수치 제한은 그 안에 포함된 모든 더 높은 수치 제한을 포함하도록 의도된다.
본 개시에 따른 하나 이상의 실시예는 후술하는 주장 중 하나 이상의 특성을 포함할 수 있다(실시예는 이에 제한되지 않음).
- 주장 21:
복수의 노드들 및 복수의 객체들과 상기 객체들에 대한 메타데이터를 저장하는 영구 스토리지를 포함하는 분산 객체 스토리지에서 메타데이터를 관리하기 위한 방법으로서, 제1 시간 간격 동안:
제1 노드에 의해, 상기 복수의 객체들 중 제1 객체에 대한 제1 메타데이터에 대한 제1 값을 생성하는 단계;
상기 복수의 노드들 중 상기 제1 노드에 의해, 상기 제1 노드의 메타데이터 캐시에 상기 제1 메타데이터에 대한 상기 제1 값을 저장하는 단계;
상기 제1 노드에 의해, 상기 제1 메타데이터에 대응하는 제1 쿠키에 대한 제1 값을 생성하는 단계;
상기 제1 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하는 단계; 및
클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하는 단계를 포함하는, 메타데이터 관리 방법.
- 주장 22:
제21 항에 있어서,
상기 제1 시간 간격 이후의 제2 시간 간격 동안:
상기 클러스터 전체 저장 위치로부터 상기 제1 쿠키에 대한 제2 값을 읽는 단계;
상기 제1 노드의 로컬 저장 위치로부터 상기 제1 쿠키에 대한 상기 제1 값을 읽는 단계; 및
상기 제1 노드에 의해, 상기 제1 쿠키에 대한 상기 제2 값을 상기 제1 쿠키에 대한 상기 제1 값과 비교하는 단계를 더 포함하는, 메타데이터 관리 방법.
- 주장 23:
제22 항에 있어서,
상기 제2 시간 간격 동안:
상기 제2 값이 상기 제1 값과 동일하다고 결정하는 단계; 및
상기 제1 노드의 상기 메타데이터 캐시로부터 상기 제1 메타데이터를 검색하는 단계를 더 포함하는, 메타데이터 관리 방법.
- 주장 24:
제23 항에 있어서,
상기 제2 시간 간격 동안, 검색된 상기 제1 메타데이터에 기초하여 상기 제1 객체에 액세스하는 단계를 더 포함하는, 메타데이터 관리 방법.
- 주장 25:
제22 항에 있어서,
상기 제1 시간 간격에 뒤따르고 상기 제2 시간 간격에 선행하는 제3 시간 간격 동안:
상기 복수의 노드들 중 제2 노드에 의해, 상기 제1 메타데이터에 대한 제2 값을 생성하는 단계;
상기 제2 노드에 의해, 상기 제2 노드의 메타데이터 캐시에 상기 제1 메타데이터에 대한 상기 제2 값을 저장하는 단계;
상기 제2 노드에 의해, 상기 제1 쿠키에 대한 상기 제1 값과 상이한 상기 제1 쿠키에 대한 제2 값을 생성하는 단계;
상기 제2 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 저장하는 단계; 및
클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 저장하는 단계를 더 포함하는, 메타데이터 관리 방법.
- 주장 26:
제25 항에 있어서,
상기 제3 시간 간격 이후의 상기 제2 시간 간격 동안:
상기 클러스터 전체 저장 위치로부터 상기 제1 쿠키에 대한 제2 값을 읽는 단계;
상기 제1 노드에 의해, 상기 제1 노드의 로컬 저장 위치로부터 상기 제1 쿠키에 대한 상기 제1 값을 읽는 단계; 및
상기 제1 노드에 의해, 상기 제1 쿠키에 대한 상기 제2 값을 상기 제1 쿠키에 대한 상기 제1 값과 비교하는 단계를 더 포함하는, 메타데이터 관리 방법.
- 주장 27:
제26 항에 있어서,
상기 제2 시간 간격 동안:
상기 제2 값이 상기 제1 값과 동일하지 않다고 결정하는 단계; 및
상기 제1 노드에 의해, 상기 영구 스토리지로부터 상기 제1 메타데이터를 검색하는 단계를 더 포함하는, 메타데이터 관리 방법.
- 주장 28:
제27 항에 있어서,
상기 제2 시간 간격 동안, 검색된 상기 제1 메타데이터에 기초하여 상기 제1 객체에 액세스하는 단계를 더 포함하는, 메타데이터 관리 방법.
- 주장 29:
제21 항에 있어서,
상기 제1 노드에 의해, 상기 제1 시간 간격 동안, 상기 클러스터 전체 저장 위치를 포함하는 노드에 대한 노드 식별자를 계산하는 단계를 더 포함하는, 메타데이터 관리 방법.
- 주장 30:
제29 항에 있어서,
상기 노드 식별자를 계산하는 단계는 상기 메타데이터의 성질에 기초하여 해시를 계산하는 단계를 포함하는, 메타데이터 관리 방법.
- 주장 31:
제21 항에 있어서,
상기 제1 쿠키는:
상기 제1 메타데이터를 식별하는 식별자, 및
쓰기 인스턴스를 식별하는 서명을 포함하는, 메타데이터 관리 방법.
- 주장 32:
제31 항에 있어서,
상기 서명은 시간을 포함하는, 메타데이터 관리 방법.
- 주장 33:
복수의 노드들; 및
복수의 객체들과 상기 객체들에 대한 메타데이터를 저장하는 영구 스토리지를 포함하되,
상기 복수의 노드들 중 제1 노드에서 제1 처리 회로를 포함하는 복수의 처리 회로를 포함하는 노드로서, 상기 제1 처리 회로는 제1 시간 간격 동안:
상기 복수의 객체들 중 제1 객체에 대한 제1 메타데이터에 대한 제1 값을 생성하고;
상기 제1 노드의 메타데이터 캐시에 제1 메타데이터에 대한 제1 값을 저장하고;
상기 제1 메타데이터에 대응하는 제1 쿠키에 대한 제1 값을 생성하고,
상기 제1 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하고; 및
클러스터 전체 저장 위치에 상기 제1 쿠키의 상기 제1 값을 저장하도록 구성되는, 분산 객체 스토리지.
- 주장 34:
제33 항에 있어서,
상기 제1 처리 회로는 상기 제1 시간 간격 이후의 제2 시간 간격 동안,
상기 클러스터 전체 저장 위치로부터 상기 제1 쿠키에 대한 제2 값을 읽고,
상기 제1 노드의 로컬 저장 위치로부터 상기 제1 쿠키에 대한 상기 제1 값을 읽고, 및
상기 제1 쿠키에 대한 상기 제2 값을 상기 제1 쿠키에 대한 상기 제1 값과 비교하도록 구성되는, 분산 객체 스토리지.
- 주장 35:
제34 항에 있어서,
상기 제1 처리 회로는,
상기 제2 값이 상기 제1 값과 동일하다고 결정하고, 및
상기 제1 노드의 상기 메타데이터 캐시로부터 상기 제1 메타데이터를 검색하도록 더 구성되는, 분산 객체 스토리지.
- 주장 36:
제35 항에 있어서,
상기 제1 처리 회로는
검색된 상기 제1 메타데이터에 기초하여 상기 제1 객체에 액세스하도록 더 구성되는, 분산 객체 스토리지.
- 주장 37:
제34 항에 있어서,
상기 복수의 노드들 중 제2 노드의 제2 처리 회로는, 상기 제1 시간 간격에 뒤따르고 상기 제2 시간 간격에 선행하는 제3 시간 간격 동안,
상기 제1 메타데이터에 대한 제2 값을 생성하고,
상기 제2 노드의 메타데이터 캐시에 상기 제1 메타데이터에 대한 상기 제2 값을 저장하고,
상기 제1 쿠키에 대한 상기 제1 값과 상이한 상기 제1 쿠키에 대한 제2 값을 생성하고,
상기 제2 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 저장하고, 및
클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 저장하도록 구성되는, 분산 객체 스토리지.
- 주장 38:
제37 항에 있어서,
상기 제1 처리 회로는,
상기 제3 시간 간격 이후의 제2 시간 간격 동안,
상기 클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제2 값을 읽고,
상기 제1 노드의 상기 로컬 저장 위치로부터 상기 제1 쿠키에 대한 상기 제1 값을 읽고, 및
상기 제1 쿠키에 대한 상기 제2 번째 값을 상기 제1 쿠키에 대한 상기 제1 값과 비교하도록 더 구성되는, 분산 객체 스토리지.
- 주장 39:
제38 항에 있어서,
상기 제1 처리 회로는,
상기 제2 값이 상기 제1 값과 동일하지 않다고 결정하고, 및
상기 영구 스토리지로부터 상기 제1 메타데이터를 검색하도록 더 구성되는, 분산 객체 스토리지.
- 주장 40:
복수의 노드들; 및
복수의 객체들 및 상기 객체들에 대한 메타데이터를 저장하는 영구 저장 수단을 포함하되,
상기 복수의 노드들은 상기 복수의 노드들 중 제1 노드의 제1 처리 회로를 포함하는 복수의 처리 회로들을 포함하고,
상기 제1 처리 회로는,
상기 복수의 객체들 중 제1 객체에 대한 제1 메타데이터에 대한 제1 값을 생성하고;
상기 제1 노드의 메타데이터 캐시에 상기 제1 메타데이터에 대한 상기 제1 값을 저장하고;
상기 제1 메타데이터에 대응하는 제1 쿠키에 대한 제1 값을 생성하고,
제1 노드의 로컬 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하고; 및
클러스터 전체 저장 위치에 상기 제1 쿠키에 대한 상기 제1 값을 저장하도록 구성되는, 분산 객체 스토리지.
분산 객체 스토리지에 대한 메타데이터 캐시의 일부 예시적인 실시예의 양태가 여기에서 구체적으로 설명되고 예시되었지만, 많은 수정 및 변형이 당업자에게 명백할 것이다. 따라서, 본 개시의 원리에 따라 구성된 분산 객체 스토리지에 대한 메타데이터 캐시는 여기에 구체적으로 설명된 것과는 다르게 구현될 수 있다는 것을 이해해야 한다. 본 발명은 또한 후술하는 청구범위 및 그 등가물에 정의되어 있다.
SECTION III
분산된 객체 스토리지의 가변 데이터에 최적화된 객체 스토리지 디자인(OBJECT STORE DESIGN OPTIMIZED FOR MUTABLE DATA IN A DISTRIBUTED OBJECT STORE)
명세서의 현재 SECTION III에서 모든 참조 번호나 특징 및 도면에 대한 참조를 포함하는 내용은 "Section III"이라는 라벨이 있는 도 8 내지 도 12가 참조되고 대응되나, SECTION I, SECTION II 또는 SECTION IV의 내용 및 “Section I", "Section II" 또는 "Section IV"이라는 라벨이 있는 도면의 참조 번호, 특징 및 그림들의 어떤 내용도 참조되거나 대응되지 않는다. 즉, 본 명세서의 SECTION I-IV 각각은 동일한 섹션의 해당 설명과 동일한 섹션으로 표시된 도면의 맥락에서 각각 해석되어야 한다. 그러나, 전술한 내용에도 불구하고, 다양한 섹션의 다양한 양태 및 발명 개념은 다른 섹션의 양태 및 발명 개념에 적용될 수 있다.
첨부된 도면과 관련하여 아래에 설명된 상세한 설명은 본 개시내용에 따라 제공되는 분산 객체 스토리지를 위한 메타데이터 캐시의 예시적인 실시예의 설명으로서 의도되고, 본 개시내용이 구성되거나 활용될 수 있는 유일한 형태를 나타내도록 의도된 것은 아니다. 설명은 예시된 실시예와 관련하여 본 개시내용의 특징을 설명한다. 설명은 예시된 실시예와 관련하여 본 개시 내용의 특징을 설명한다. 그러나, 동일하거나 동등한 기능 및 구조가 본 개시내용의 범위 내에 포함되도록 의도된 상이한 실시 양태에 의해 달성될 수 있음을 이해해야 한다. 본 명세서의 다른 곳에서 표시된 바와 같이, 유사한 참조 번호는 유사한 요소 또는 특징을 나타내도록 의도된다.
도 8은 일부 실시예에서 저장 시스템을 도시한다. 복수의 객체 스토리지, 또는 "키 값 스토리지"(105) 각각은 객체 스토리지 인터페이스를 통해 영구 스토리지를 제공한다. 복수의 데이터 관리자(110) 각각은 클라이언트 응용 프로그램 및 워크로드와 같은 클라이언트로부터 스토리지 요청(예, 데이터 쓰기, 수정 또는 읽기 요청)을 수신하고, 및 이러한 각각의 요청에 대해 하나 이상의 대응하는 입출력 명령을 하나 이상의 객체 스토리지(105)에 전송한다. 객체 스토리지(105)는 객체 스토리지 인터페이스를 통해 데이터 관리자(110)와 통신할 수 있다. 데이터 관리자(110)는 임의의 적절한 인터페이스를 통해, 예를 들어 객체 스토리지 인터페이스를 통해, 서버 메시지 블록(SMB) 인터페이스를 통해, 또는 NFS(네트워크 파일 시스템)(예를 들어, NFSv3 또는 NFSv4) 인터페이스를 통해 클라이언트와 통신할 수 있다. 도 8의 저장 시스템은 "분산 객체 스토리지(distributed object store)"로 지칭될 수 있다. 데이터 관리자(110) 각각은 하나 이상의 처리 회로를 포함하는 노드일 수 있다. 각각의 객체 스토리지(105)는 또한 하나 이상의 처리 회로를 포함하고 영구 데이터 저장 수단, 예를 들어 솔리드 스테이트 드라이브와 같은 하나 이상의 영구 스토리지를 더 포함하는 노드일 수 있다. 데이터 관리자(110) 및 객체 스토리지(105)는 각각의 노드가 다른 노드 중 임의의 것과 통신할 수 있도록 하는 방식으로 함께 연결될 수 있으며, 여기에 개시된 방법은 하나 이상의 처리 회로에 의해(예를 들어, 서로 통신하는 여러 처리 회로에 의해) 수행될 수 있다. 다음 내용에서 문맥이 달리 나타내지 않는 한 "노드(node)"는 데이터 관리자(110)이다.
각각의 객체 스토리지(105)는 객체 식별자를 제공함으로써 데이터 관리자(110)에 의해 액세스되는 객체로서 데이터를 저장할 수 있다. 이 액세스 프로세스는 블록 또는 파일 스토리지의 액세스 프로세스와 다를 수 있고, 여기서 응용 프로그램(application)은 논리적 데이터를 고정 크기 블록 세트로 또는 디렉토리나 파일과 같은 구조화된 조직으로 구성하는 역할을 담당한다. 블록 또는 파일 스토리지에서 응용 프로그램은 블록 저장 장치의 일련의 블록으로, 또는 또는 파일 시스템에 대한 디렉토리와 하위 디렉토리 계층 구조로 데이터를 배치할 수 있다.
그러나, 각각의 객체 스토리지(105)는 대신 객체 식별자가 주어진 데이터에 대한 평면화된 액세스를 제공할 수 있다. 이 데이터는 식별자와 함께 객체라고 할 수 있다. 이 접근 방식은 매핑 및 데이터 레이아웃을 응용 프로그램에서 객체 스토리지로 오프로드(offload)한다. 이러한 오프로딩은 많은 양의 비정형(unstructured) 데이터를 처리해야 하는 응용 프로그램에 유리할 수 있다. 이러한 응용 프로그램은 객체 스토리지를 사용할 때 구조화되지 않은 데이터를 객체 스토리지에 객체로 저장할 수 있다.
객체 스토리지에 의해 제공되는 이러한 자연스러운 이점은 분산 객체 스토리지에서 더욱 향상될 수 있다. 분산 객체 스토리지는 클라이언트 응용 프로그램의 요구 사항에 따라 확장할 수 있는 확장 가능한 스토리지를 제공할 수 있다. 이러한 응용 프로그램의 성능은 분산 객체 스토리지가 객체 식별자가 지정된 해당 데이터를 얼마나 빨리 제공할 수 있는지에 따라 달라질 수 있다. 분산 객체 스토리지의 성능은 주로 두 가지 요소에 의해 결정될 수 있다. 상기 두 가지 요소는 (i) 객체 식별자가 주어진 객체 데이터에 대한 액세스를 제공하는 객체 스토리지의 능력, 및 (ii) 효율적인 데이터 레이아웃을 위한 기본 영구 스토리지의 관리이다. 따라서 분산 객체 스토리지의 효율성과 성능은 이러한 두 메커니즘의 효율성에 따라 달라진다. 그러나 이 두 메커니즘의 효율성은 객체의 가변성 측면에 의해 제한될 수 있다.
객체 스토리지의 객체는 그들이 나타내는 데이터 세트가 가변 수명 동안 하나 이상의 단계를 가질 수 있다. 즉, 객체는 수명 동안 여러 시나리오 중 하나 동안 변경될 수 있다. 첫째, 객체가 처음 생성될 때 응용 프로그램은 일련의 추가 유사 작업을 통해 단일 수량의 데이터 또는 일련의 개별적으로 전달된 데이터 부분을 통해 객체에 대한 데이터를 제공할 수 있다. 그런 다음 객체 데이터는 여러 부분에서 조합될 수 있다. 둘째, 응용 프로그램의 활성 작업 세트의 일부일 수 있는 객체에 대해 응용 프로그램 특정 작업을 수행할 때 객체가 변경될 수 있다. 이러한 작업은 예를 들어 객체의 특정 부분에 대한 부분 업데이트 또는 응용 프로그램에 따라 다를 수 있는 객체에 대한 다른 형태의 향상일 수 있다. 셋째, 분산 객체 스토리지가 인코딩 또는 삭제 코딩, 압축, 암호화 또는 보안, 효율성, 탄력성 및 성능을 향상시키기 위한 기타 특정 기능과 같은 데이터 변환(또는 "변환 기능(transformation function)")을 적용함에 따라 객체가 유사하게 변경될 수 있다. 도 9는 객체에 대한 가변성 그래프의 예를 도시한다. 객체가 생성될 때 첫 번째 가변 단계(205)가 발생한다. 그 다음 객체는 불변이 되고, 나중에 제2 가변 단계(210) 동안, 응용 프로그램이 객체의 그러한 부분을 업데이트함에 따라 객체의 하나 이상의 부분이 다시 변경 가능하게 된다.
(i) 객체가 응용 프로그램 활성 작업 세트의 일부인 객체 또는 (ii) 데이터 변환 기능을 수행하는 객체 스토리지로부터 기인하는 객체의 가변 단계는 객체 스토리지에 여러 종류의 오버헤드를 도입할 수 있다. 첫째, 객체 식별자가 주어진 객체와 관련된 데이터를 검색하는 기능은 잠재적으로 해당 객체에 대해 수행된 여러 다른 개별 업데이트에서 여러 데이터 부분을 함께 연결해야 할 수 있다. 이 오버헤드는 객체 스토리지의 성능에 잠재적으로 영향을 줄 수 있다. 둘째, 객체의 수명 동안 객체의 다른 섹션이 변경(즉, 수정)될 수 있다. 이를 위해서는 객체 가변성으로 인해 데이터 레이아웃이 변경될 때 기본 영구 스토리지가 효율적으로 활용되도록 보장하는 기능이 필요하다. 셋째, 특히 하나 이상의 솔리드 스테이트 드라이브에 기반한 객체 스토리지에서 모든 수정 작업을 읽기 수정 업데이트 작업으로 구현하는 것이 유리할 수 있다. 이러한 읽기 수정 업데이트 작업은 객체 스토리지와 기본 영구 저장 매체 모두의 성능에 영향을 미칠 수 있다.
임의의 시점에서 객체의 작은 세트가 가변 단계에 있는 경우일 수 있다. 이 세트의 가변 객체가 전체 객체 스토리지에 분산되어 있으면 이 상황으로 인해 분산 객체 스토리지의 전체 성능이 저하될 수 있다. 객체 스토리지의 성능에 대한 이러한 영향은 분산 객체 스토리지를 사용하는 클라이언트 응용 프로그램의 성능에 영향을 줄 수 있다. 따라서 가변 데이터(Mutable data; 돌연변이 데이터) 세트가 전체 분산 객체 스토리지에 미치는 성능 영향을 최소화하는 것이 유리할 수 있다. 분산 객체 스토리지의 성능을 저하시키지 않으면서 활성 작업 세트에서 압축, 암호화 및 인코딩과 같은 데이터 전처리 기능을 수행하여 저장 효율성, 데이터 복원력, 보안 및 신뢰성을 향상시키는 것이 더 유리할 수 있다.
일부 실시예에서, 이러한 유리한 특성은 아래에서 더 상세히 논의되는 바와 같이 분리된 가변 데이터를 갖는 분산 객체 스토리지를 사용하여 달성된다. 이러한 시스템은 객체 스토리지의 전체 성능에 대한 가변 데이터 세트의 영향을 최소화할 수 있으며, 및 객체 스토리지가 SCM(스토리지 클래스 메모리)과 같은 고성능 영구 클래스 메모리에 응용 프로그램 작업 세트를 준비(즉, 활성 작업 세트, 응용 프로그램이 작동하는 데이터 세트를 준비함)할 수 있도록 할 수 있다.
일부 실시예에서, 분리된 가변 데이터를 갖는 분산 객체 스토리지는 가변 데이터를 처리하기 위해 최적화된 분산 객체 스토리지 내의 별도의 스토리지를 포함한다. 분산 객체 스토리지의 이 특별하고 독립적인 영역은 "가변 스토리지", "가변 객체 스토리지" 또는 "스테이징 스토리지"라고 할 수 있습니다. 스테이징 스토리지는 (i) 데이터 변환 기능을 수행하는 능력, (ii) 객체 데이터에 대한 업데이트를 집계하여 가변 데이터에 대한 변경 사항을 처리하는 능력, 및 (iii) 효율적인 데이터 레이아웃을 통해 여러 가변 작업에 대해 일관된 성능을 유지하는 능력에서 고성능을 갖도록 최적화될 수 있고, 이러한 작업을 처리하도록 조정된다. 이와 같이 스테이징 스토리지는 불변 데이터 세트(Immutable data set)를 불변 데이터 세트에서 분리하고 분산 객체 스토리지에서 가변 작업 처리를 지역화하여 분산 객체 스토리지의 전체 성능을 돕는다.
도 10은 분산 객체 스토리지에서 스테이징 스토리지를 통해 달성되는 지역화 및 분리를 도시합니다. 응용 프로그램(305)이 객체를 생성 또는 수정하기 위한 저장 요청을 보낼 때, 객체는 스테이징 스토리지(310)에서 생성되거나 객체의 일부가 스테이징 스토리지(310)로 이동되어 수정된다. 불변 객체는 불변 객체 스토리지(315)에 저장된다. 객체는 불변 객체 스토리지(315)에서 데이터 레이아웃을 용이하게 하기 위해 "원자 객체(atomic objects)"로 지칭되는 부분으로 불변 객체 스토리지(315)에 저장될 수 있다. 원자 객체의 크기("단위 크기" 또는 "원자 객체 크기"로 지칭될 수 있음)는 (i) 다수의 원자 객체로부터 객체를 조립하는 오버헤드가 (ii) 부분적인 원자 객체를 저장한 결과(예, 객체의 크기가 단위 크기의 정수 배수가 아닌 경우)로 인해 사용되지 않은 저장 공간이 허용될 만큼 충분히 작다. 일부 실시예에서, 원자 객체는 100kB보다 크고 10MB보다 작으며, 예를 들어 크기가 1MB이다. 일부 실시예에서, 클라이언트 응용 프로그램은 사용될 단위 크기를 지정할 수 있다. 스테이징 스토리지(310)는 원자 객체를 저장 주소에 매핑하기 위한 객체 지도를 포함한다(예를 들어, 솔리드 스테이트 드라이브에 기반한 분산 객체 스토리지에서, 객체 지도는 원자 객체를 솔리드 스테이트 드라이브의 논리 블록 주소에 매핑할 수 있음). 스테이징 스토리지(310)는 불변 객체 스토리지(315)보다 훨씬 작을 수 있습니다. 예를 들어, 불변 객체 스토리지(315)는 스테이징 스토리지(310)의 10배와 100배 사이일 수 있다. 일부 실시예에서, 불변 객체 스토리지에 의해 수행되는 유일한 데이터 연산은 전체 원자 객체(각각의 이러한 원자 객체는 단위 크기보다 작거나 같은 크기를 가짐)의 읽기, 쓰기 및 삭제이다.
작동 시, 아래에서 각각 더 자세히 논의되는 세 가지 주요 단계 또는 특징이 가변 데이터의 분리를 구현하기 위해 사용될 수 있다: (i) 가변 데이터 세트 식별, (ii) 스테이징 스토리지의 가변 데이터가 스테이징 스토리지 외부로 전환될 준비가 된 시점을 결정, 및 (iii) 가변 데이터 세트에 대한 지속적인 업데이트에 대해 일관된 성능을 유지하도록 최적화된 효율적인 데이터 레이아웃.
가변 데이터 세트의 식별은 다음과 같이 진행될 수 있다. 분산 객체 스토리지는 특정 데이터 세트 크기를 "단위 크기" 또는 "원자 객체 크기"로 정의할 수 있다. 단위 크기는 구성될 수 있으며 요구 사항을 충족하도록 클라이언트 응용 프로그램에서 프로그래밍할 수 있다. 이 단위 크기의 프로그래밍은 구성 메커니즘을 통해 명시적이거나 응용 프로그램이 발행하는 워크로드 패턴에 따라 조정될 수 있다. 단위 크기보다 큰 응용 프로그램 데이터 객체는 단위 크기와 동일한 크기를 갖는 부분 또는 "원자 객체"로 분할될 수 있으며, 원자 객체는 여러 단위로 개별적으로 저장될 수 있다. 분산 객체 스토리지는 읽기 작업 중에 요청 시 모든 관련 원자 객체를 검색하고 응용 프로그램이 예상하는 단일 객체로 데이터를 반환하여 응용 프로그램에 데이터를 제공할 수 있다.
쓰기 작업 동안, 분산 객체 스토리지는 단위 크기보다 작은 데이터를 가변 데이터 세트로 분류할 수 있다. 분산 객체 스토리지는 응용 프로그램이 후속 쓰기를 통해 해당 객체와 관련된 추가 데이터를 제공할 것으로 예상할 수 있다. 일부 실시예에서, 가변 데이터를 스테이징 스토리지로 리디렉션(redirection)하는 것은 응용 프로그램에 명백(transparent)하다. 클라이언트 응용 프로그램은 객체에 대한 데이터에 액세스할 수 있으며 해당 객체에 대한 가변 데이터 세트가 스테이징 스토리지에 의해 내부적으로 관리되고 있다는 사실은 클라이언트 응용 프로그램에 명백할 수 있다.
스테이징 스토리지의 가변 데이터가 스테이징 스토리지 외부로 전환될 준비가 되었는지 결정하는 것은 다음과 같이 진행될 수 있다. 이 결정의 기준은 외부 및 내부 매개변수(parameter)를 기반으로 할 수 있다. 하나의 외부 매개변수는 단위 크기일 수 있다. 단위 크기는 응용 프로그램별로 조정할 수 있으므로 분산 객체 스토리지가 응용 프로그램의 특성을 활용할 수 있다. 단위 크기 매개변수는 들어오는 데이터 세트를 가변 데이터 세트로 태그 지정하기 위해 객체 스토리지에서 사용할 수 있다. 내부 매개변수를 사용하면 스테이징 스토리지를 효율적으로 사용할 수 있다. 예를 들어, 내부 매개변수는 스테이징 스토리지(310)의 객체에 대한 가변 데이터 세트의 현재 크기일 수 있다. 응용 프로그램이 계속해서 객체에 데이터를 기록함에 따라 가변 데이터 세트의 크기가 커집니다.
클라이언트 응용 프로그램으로부터 수신된 저장 요청은 새로운 객체를 저장하기 위한 요청, 및 기존 객체의 일부에 추가하거나 덮어쓰기 위한 요청을 포함할 수 있다. 스테이징 스토리지는 (그러한 요청을 받는 즉시 객체를 업데이트하는 대신) 이러한 요청을 로그 구조화된 형식, 즉 쓰기 또는 수정 명령의 시퀀스로 저장할 수 있다. 예를 들어 클라이언트 응용 프로그램이 (i) 새 객체를 저장하도록 요청하고 객체의 처음 100kB를 분산 객체 스토리지에 보낸 다음 (ii) 객체 중간에 있는 10kB 블록을 새 데이터로 교체하도록 요청하면(예, 클라이언트 응용 프로그램에서 보낸 새 10kB 블록으로), 분산 객체 스토리지는 객체 중간에 있는 10kB 블록을 새 데이터로 즉시 덮어쓰는 대신 두 번째 요청을 저장하고 초기에 저장된 100kB 블록을 그대로 둔다. 객체가 불변 객체 스토리지(315)로 전환될 준비가 되면, 분산 객체 스토리지는 클라이언트 응용 프로그램으로부터 수신된 모든 저장 요청을 통합하는 객체를 불변 객체 스토리지(315)에 생성할 수 있다.
객체에 대한 가변 데이터 세트의 크기가 구성된 단위 크기에 도달하면, 스테이징 스토리지는 가변 데이터 세트가 데이터 변환을 위해 준비되었다고 결정할 수 있다. 예를 들어, 단위 크기가 1MB(1 megabyte)이고 총 크기가 10MB인 객체를 작성하려는 경우, 응용 프로그램이 처음에 객체에 대한 데이터의 3.5MB 부분을 보낸다면, 분산 객체 스토리지는 (i) 3개의 1MB 원자 객체를 불변 객체 스토리지(315)에 저장하고 나머지 0.5MB 데이터를 스테이징 스토리지(310)에 저장할 수 있으며, 이는 응용 프로그램이 객체에 대한 추가 데이터를 보낼 것이라고 예상한다. 스테이징 스토리지(310)에 있는 부분의 크기가 단위 크기와 같으면, 응용 프로그램은 그 부분을 추가 원자 객체로서 불변 객체 스토리지(315)로 이동할 수 있고, 스테이징 스토리지(310)에서 다음 원자 객체를 생성하기 시작할 수 있다.
사용될 수 있는 또 다른 내부 매개 변수인 임계 시간, 이것은 가장 최근에 스테이징 스토리지에 있는 객체의 가변 데이터 세트가 수정된 이후로 가장 긴 시간 동안 작동할 수 있고, 이것은 스테이징 스토리지에 있는 객체의 가변 데이터 세트에 의해 소비될 수 있다. 이 임계 시간 매개변수는 응용 프로그램에 따라 구성될 수 있다. 이 매개변수는 응용 프로그램이 후속 IO를 수행하는 시간을 지정한다. 이 메커니즘을 사용하면 스테이징 스토리지에서 크기가 구성된 단위 크기보다 작은 일부 객체를 변경할 수 없는 것으로 분류할 수 있다. 이 매개변수는 단위 크기 매개변수와 결합될 수 있으므로, 일단 스테이징 스토리지(310)에 있는 객체의 크기가 단위 크기에 도달하면, 시간이 마지막 수정이 임계 시간보다 짧기 때문이다. 이 프로세스는 그러한 객체에 대한 가변 데이터 세트가 구성된 단위 크기를 초과하지 않는 효과를 가질 수 있다.
클라이언트 응용 프로그램에 의해 수정되지 않고 가변 데이터 세트에 의해 스테이징 스토리지에서 소비된 시간이 임계 시간을 초과할 때, 스테이징 스토리지는 데이터가 데이터 변환을 위해 준비된 것으로 결정한다. 스테이징 스토리지는 압축, 암호화 또는 인코딩(예, 데이터 복원력을 위한 인코딩, 예를 들어 삭제 코드 또는 데이터 복제 사용), 및 데이터 세트를 스테이징 스토리지 밖으로 전환할 수 있다.
가변 데이터 세트에 대한 지속적인 업데이트에 대해 일관된 성능을 유지하도록 최적화된 효율적인 데이터 레이아웃은 다음과 같이 구현될 수 있다. 위에서 논의된 바와 같이, 스테이징 스토리지는 각 데이터 세트가 데이터 변환을 위해 준비된 것으로 표시되면 스테이징 스토리지(310) 외부로 데이터 세트를 전환할 수 있다. 스테이징 스토리지에 있는 데이터 세트의 이러한 능동적 관리를 통해 스테이징 스토리지는 쓰레기(garbage) 수집 및 스토리지에 데이터 다시 배치의 백그라운드 스토리지 관리 기능의 오버헤드를 제거할 수 있는 효율적인 데이터 레이아웃을 가질 수 있다. 스테이징 스토리지에 의한 스토리지 관리는 증가, 축소 또는 업데이트될 것으로 예상되는 가변 데이터 세트에 대해 조정될 수 있다. 일부 실시예에서, 스테이징 스토리지(310)는 기본 스토리지를 단위 크기보다 크고(예: 크기의 두 배) 객체 스토리지에 구성된 단위 크기를 수용할 수 있는 영역("사전 할당된 영역(pre-allocated region)" 또는 "청크(chunk)"로 지칭될 수 있음)(예를 들어, 각각이 2MB의 크기를 갖는 영역)으로 분할한다. 스테이징 스토리지로 리디렉션되는 모든 새로운 가변 데이터 세트는 해당 데이터 세트의 현재 크기에 관계없이 해당 스토리지에 대한 전체 영역을 할당 받을 수 있다. 예를 들어, 가변 집합은 현재 논리 블록 주소(LBA) 공간에서 0.5MB의 연속 스토리지만 차지하더라도 1MB 또는 2MB를 할당할 수 있다. 크기가 증가하는 가변 데이터 세트의 스테이징 스토리지(310)의 크기가 단위 크기를 초과하는 경우, 스테이징 스토리지(310)는 위에서 언급한 바와 같이, 불변 객체 스토리지(315)에 설정된 가변 데이터의 일 부분으로 전환할 수 있고, 상기 일 부분은 단위 크기와 동일한 크기를 가진다. 이 전환 과정에서 가변 데이터 세트가 계속해서 증가할 수 있다. 단위 크기보다 큰 크기를 갖는 영역의 할당은 그러한 상황에서 그 크기가 단위 크기를 초과한 후에도 가변 데이터 세트가 계속 증가하는 것을 가능하게 할 수 있다. 이와 같이, 일부 실시예에서, 가변 데이터 세트는 능동적인 저장 관리를 필요로 하지 않고 변경됨에 따라 증가 및 축소될 수 있다.
이와 같이, 일부 실시예에서 사전 할당된 영역은 수정될 객체에 대해 할당될 수 있으며, 객체는 분산 객체 스토리지에서, (i) 객체가 처음 생성될 때(이 경우 객체의 첫 번째 부분이 클라이언트 응용 프로그램으로부터 저장 요청의 일부로 수신되어 스테이징 스토리지(310)의 미리 할당된 영역(405)에 저장될 수 있음) 또는 (ii) 불변 객체 스토리지(315)에 저장된 후, 클라이언트 응용 프로그램으로부터의 객체 수정 요청에 응답하여(이 경우 객체의 첫 번째 부분이 미리 할당된 영역(405)으로 이동될 수 있음) 스테이징 스토리지(310)에서) 수정될 수 있다. 객체의 수정은 객체의 수정된 부분의 전체 크기가 원자 객체 크기와 같거나 초과하는지를 결정하는 단계; 및 상기 객체의 제2 부분을 불변 객체 스토리지로 이동시키는 단계를 포함하며, 상기 제2 부분은 상기 객체의 수정된 제1 부분의 일부이고, 상기 제2 부분은 원자 객체 크기와 동일한 크기를 갖는다.
도 11은 스테이징 스토리지가 데이터 변경 가능성을 효율적으로 처리할 수 있게 하는 데이터 레이아웃 형식을 보여준다. 각각의 미리 할당된 영역(405)은 도시된 바와 같이 그것이 저장하는 가변 데이터 세트보다 더 크므로, 가변 데이터 세트가 단편화되지 않고 성장할 수 있다. 도 12는 도 11의 데이터 레이아웃 방식으로 가능한 단순성을 보여주며, 데이터 세트가 성장 또는 축소를 야기할 수 있는 여러 변화(돌연변이)를 겪은 후에도 그 식별자를 기반으로 변경 가능한 데이터 세트에 액세스할 수 있는 능력을 보여준다. 위에서 언급한 바와 같이, 이 스토리지 레이아웃은 스테이징 스토리지(310)에 대한 기본 영구 스토리지로서 영구 클래스 메모리 기술을 포함하고 활용할 수 있다. 이러한 영구 클래스 메모리 기술은 (i) 활성 작업 집합을 처리하기 위해 클라이언트 응용 프로그램에 대해 훨씬 더 높은 성능을 가능하게 하고 (ii) 객체 스토리지의 기본 스토리지에 대한 전반적인 마모를 줄이는 성능 및 바이트 주소 지정 가능성을 제공할 수 있다.
본 명세서에 사용된 바와 같이, 무언가의 "일부"는 그것의 "적어도 일부"를 의미하고, 그 자체로 그것의 전부 또는 전부 미만을 의미할 수 있다. 이와 같이, "일부"는 특별한 경우로서 전체를 포함할 수 있다. 즉, 그것의 전체는 그것의 일부의 예이다. 본 명세서에서 사용된 바와 같이, 제2 수량이 제1 수량의 "Y% 이내"인 경우, 이는 제2 수량이 제1 수량의 최소 (1-Y/100)배이고 제2 수량이 제1 수량의 최대 (1+Y/100)배임을 의미한다. 본 명세서에 사용된 바와 같이, 용어 "또는"은 "및/또는"으로 해석되어야 하며, 예를 들어 "A 또는 B"는 "A" 또는 "B" 또는 "A 및 B" 중 어느 하나를 의미한다.
"처리 회로(processing circuit)"라는 용어는 데이터 또는 디지털 신호를 처리하는 데 사용되는 하드웨어, 펌웨어 및 소프트웨어의 임의의 조합을 의미하는 것으로 여기에서 사용된다. 처리 회로 하드웨어는 예를 들어 주문형 집적 회로(ASICs), 범용 또는 특수 목적 중앙 처리 장치(CPU), 디지털 신호 프로세서(DSP), 그래픽 처리 장치(GPU) 및 필드 프로그래머블 게이트 어레이(FPGA)와 같은 프로그램 가능 논리 장치를 포함할 수 있다. 여기에서 사용되는 처리 회로에서 각 기능은 구성된 하드웨어에 의해 수행된다. 즉, 해당 기능을 수행하기 위해 유선으로 연결되거나 비일시적 저장 매체에 저장된 명령을 실행하도록 구성된 CPU와 같은 보다 범용 하드웨어에 의해 수행된다. 처리 회로는 단일 인쇄 회로 기판(PCB)에서 제조되거나 상호 연결된 여러 PCB에 분산될 수 있다. 처리 회로는 다른 처리 회로를 포함할 수 있습니다. 예를 들어, 처리 회로는 PCB에서 상호 연결된 두 개의 처리 회로, 즉 FPGA와 CPU를 포함할 수 있다.
본 명세서에 사용된 바와 같이, 방법(예를 들어, 조정) 또는 제1 수량(예를 들어, 제1 변수)이 제2 수량(예를 들어, 제2 변수)을 "기반으로"하는 것으로 언급되는 경우, 그것은 제2 수량이 방법에 대한 입력이거나 제1 수량에 영향을 미친다는 것을 의미합니다. 예를 들어, 제2 수량은 제1 수량을 계산하는 함수에 대한 입력(예, 유일한 입력 또는 여러 입력 중 하나)일 수 있거나, 제1 수량은 제2 수량과 동일(equal)하거나, 또는 제1 수량은 제2 수량과 같을(same) 수 있다(예를 들어, 메모리 내의 동일한 위치 또는 위치들에 저장됨).
용어 "제1", "제2", "제3" 등은 다양한 요소, 구성요소, 영역, 레이어 및/또는 섹션을 설명하기 위해 본 명세서에서 사용될 수 있지만, 이러한 요소, 구성 요소, 영역, 레이어 및/또는 섹션은 이러한 용어에 의해 제한되어서는 아니된다. 이러한 용어는 하나의 요소, 구성 요소, 영역, 레이어 또는 섹션을 다른 요소, 구성 요소, 영역, 레이어 또는 섹션과 구별하는 데만 사용된다. 따라서, 본 명세서에서 논의되는 제1 요소, 구성요소, 영역, 레이어 또는 섹션은 본 발명의 사상 및 범위를 벗어나지 않으면서 제2 요소, 구성요소, 영역, 레이어 또는 섹션으로 명명될 수 있다.
본 명세서에서 사용된 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 본 명세서에 사용된 용어 "실질적으로", "약" 및 그와 유사한 용어는 정도의 용어가 아닌 근사치의 용어로 사용되고, 당업자가 인식할 수 있는 측정 또는 계산된 값의 고유한 편차를 설명하기 위한 것으로 의도된다.
본 명세서에 사용된 바와 같이, 단수 형태는 문맥이 명백하게 달리 나타내지 않는 한, 복수 형태도 포함하는 것으로 의도된다. 본 명세서에서 사용될 때 "포함하는"이라는 용어는 언급된 특징, 정수, 단계, 연산, 요소 및/또는 구성요소의 존재를 지정하는 것으로 추가로 이해될 것이나, 하나 이상의 다른 특징, 정수, 단계, 연산, 요소, 구성요소 및/또는 이들의 그룹의 존재 또는 추가를 배제하지 않는다. 본 명세서에 사용된 바와 같이, "및/또는"이라는 용어는 관련된 나열된 항목 중 하나 이상의 모든 조합을 포함한다. "적어도 다음 중 하나"와 같은 표현은 요소 목록 앞에 올 때 요소의 전체 목록을 수정하고 목록의 개별 요소를 수정하지 않는다. 또한, 본 발명의 실시 예를 설명할 때 "할 수 있다"의 사용은 "본 발명의 하나 이상의 실시 예"를 의미한다. 또한, "예시적인"이라는 용어는 예시 또는 묘사를 지칭하기 위한 것이다. 본 명세서에 사용된 바와 같이, 용어 "사용하다"는 각각 용어 "활용하다", "이용하다" 및 "이용하다"와 동의어로 간주될 수 있다.
요소 또는 층이 다른 요소 또는 층에 "위에", "상에" 또는 "연결되는", "결합되는" 또는 "인접하는" 것으로 언급될 때, 그것은 다른 요소 또는 층에 직접 연결되거나, 결합되거나, 인접할 수 있거나, 하나 이상의 중간 요소 또는 층이 존재할 수 있는 것으로 이해될 수 있다. 대조적으로, 요소 또는 층이 다른 요소 또는 층에 "직접 상에", "직접 연결", "직접 결합" 또는 "바로 인접"하는 것으로 언급될 때, 중간 요소 또는 층이 존재하지 않는다.
여기에 인용된 임의의 수치 범위는 인용된 범위 내에 포함된 동일한 수치 정밀도의 모든 하위 범위를 포함하도록 의도된다. 예를 들어, "1.0에서 10.0" 또는 "1.0에서 10.0 사이"의 범위는 인용된 최소값 1.0과 인용된 최대값 10.0 사이의 모든 하위 범위를 포함하도록 즉, 1.0 이상의 최소값 및 10.0 이하의 최대값, 예를 들어 2.4 내지 7.6을 가지도록 의도된다. 여기에 인용된 임의의 최대 수치 제한은 그 안에 포함된 모든 더 낮은 수치 제한을 포함하도록 의도되고, 본 명세서에 인용된 임의의 최소 수치 제한은 그 안에 포함된 모든 더 높은 수치 제한을 포함하도록 의도된다.
본 개시에 따른 하나 이상의 실시예는 후술하는 주장 중 하나 이상의 특성을 포함할 수 있다(실시예는 이에 제한되지 않음).
- 주장 41:
분산 객체 스토리지에서 객체를 수정하는 방법에 있어서,
상기 객체에 대해, 하나 이상의 가변 객체 스토리지 중 일 가변 객체 스토리지의 제1 영역을 할당하는 것;
상기 객체의 제1 부분을 제1 영역에 저장하는 것; 및
상기 객체의 수정된 제1 부분을 형성하기 위해 상기 객체의 상기 제1 부분을 수정하는 것을 포함하되,
상기 분산 객체 스토리지는 하나 이상의 불변 객체 스토리지 및 상기 하나 이상의 가변 객체 스토리지를 포함하고,
상기 불변 객체 스토리지는 원자 객체 크기와 동일한 크기를 갖는 원자 객체를 저장하도록 구성되고,
상기 제1 영역은 상기 원자 객체의 크기보다 큰 크기를 가지는, 방법.
- 주장 42:
제41 항에 있어서,
상기 제1 영역은 상기 원자 객체 크기의 1.5배 보다 큰 크기를 가지는, 방법.
- 주장 43:
제41 항에 있어서,
상기 제1 부분은 원자 객체 크기보다 작은 크기를 가지고,
상기 객체의 상기 제1 부분을 수정하는 것은 상기 객체의 상기 제1 부분에 데이터를 추가하는 것을 포함하고,
상기 방법은,
상기 객체의 수정된 제1 부분의 전체 크기가 상기 원자 객체 크기와 같거나 초과하는지를 결정하는 것; 및
상기 객체의 제2 부분을 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로 이동하는 것을 더 포함하고,
상기 제2 부분은,
상기 객체의 수정된 제1 부분의 일부이고, 및
상기 원자 객체 크기와 동일한 크기를 가지는, 방법.
- 주장 44:
제41 항에 있어서,
상기 객체의 상기 제1 부분을 수정하는 것은 상기 객체의 수정을 로그 구조화된 형식으로 상기 제1 영역에 저장하는 것을 포함하는, 방법.
- 주장 45:
제41 항에 있어서,
상기 객체의 상기 제1 부분에 대한 가장 최근의 수정 이후 경과된 시간이 임계 시간을 초과했다고 결정하는 것; 및
상기 객체의 상기 제1 부분을 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로 이동하는 것을 더 포함하는, 방법.
- 주장 46:
제41 항에 있어서,
상기 객체의 상기 제1 부분을 상기 제1 영역에 저장하는 것은 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로부터 상기 제1 영역으로 상기 원자 객체를 이동시키는 것을 포함하고,
상기 원자 객체는 상기 객체의 상기 제1 부분인, 방법.
- 주장 47:
제41 항에 있어서,
클라이언트 응용 프로그램으로부터 저장 요청의 일부로서 상기 객체의 상기 제1 부분을 수신하는 것을 더 포함하는, 방법.
- 주장 48:
제41 항에 있어서,
상기 객체의 수정된 제1 부분을 상기 하나 이상의 불변 객체 스토리지의 일 불변 객체 스토리지로 이동시키는 것을 더 포함하고,
상기 객체의 수정된 제1 부분을 일 불변 객체 스토리지로 이동시키는 것은 상기 객체의 수정된 제1 부분을 변환하는 것을 포함하는, 방법.
- 주장 49:
제48 항에 있어서,
상기 객체의 수정된 제1 부분을 변환하는 것은 상기 객체의 수정된 제1 부분을 압축하는 것을 포함하는, 방법.
- 주장 50:
제48 항에 있어서,
상기 객체의 수정된 제1 부분을 변환하는 것은 상기 객체의 수정된 제1 부분을 암호화하는 것을 포함하는, 방법.
- 주장 51:
제48 항에 있어서,
상기 객체의 수정된 제1 부분을 변환하는 것은 데이터 복원력을 위해 상기 객체의 수정된 제1 부분을 인코딩하는 것을 포함하는, 방법.
- 주장 52:
하나 이상의 불변 객체 스토리지; 및
하나 이상의 가변 객체 스토리지를 포함하되,
상기 불변 객체 스토리지 및 상기 가변 객체 스토리지는 복수의 처리 회로들을 포함하고,
상기 처리 회로들은,
상기 불변 객체 스토리지 각각에 원자 객체 크기와 동일한 크기를 갖는 원자 객체를 저장하고,
객체에 대해, 하나 이상의 가변 객체 스토리지 중 일 가변 객체 스토리지의 제1 영역을 할당하고,
상기 객체의 제1 부분을 상기 제1 영역에 저장하고, 및
상기 객체의 수정된 제1 부분을 형성하기 위해 상기 객체의 제1 부분을 수정하도록 구성되고,
상기 제1 영역은 상기 원자 객체 크기보다 큰 크기를 가지는, 분산 객체 스토리지.
- 주장 53:
제52 항에 있어서,
상기 제1 영역은 상기 원자 객체 크기의 1.5배보다 큰 크기를 가지는, 분산 객체 스토리지.
- 주장 54:
제52 항에 있어서,
상기 제1 부분은 상기 원자 객체 크기보다 작은 크기를 가지고,
상기 객체의 제1 부분을 수정하는 것은 상기 객체의 제1 부분에 데이터를 추가하는 것을 포함하고, 및
상기 처리 회로들은,
상기 객체의 수정된 제1 부분의 전체 크기가 원자 객체 크기와 같거나 초과하는지 결정하고, 및
상기 객체의 제2 부분을 하나 이상의 불변 객체 스토리지의 일 불변 객체 스토리지로 이동시키도록 더 구성되고,
상기 제2 부분은,
상기 객체의 수정된 제1 부분의 일부이고, 및
상기 원자 객체 크기와 동일한 크기를 가지는, 분산 객체 스토리지.
- 주장 55:
제52 항에 있어서,
상기 객체의 제1 부분을 수정하는 것은 상기 객체의 수정을 로그 구조화된 형식으로 상기 제1 영역에 저장하는 것을 포함하는, 분산 객체 스토리지.
- 주장 56:
제52 항에 있어서,
상기 처리 회로들은,
상기 객체의 상기 제1 부분에 대한 가장 최근의 수정 이후 경과된 시간이 임계 시간을 초과했다고 결정하는 것, 및
상기 객체의 상기 제1 부분을 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로 이동시키도록 더 구성되는, 분산 객체 스토리지.
- 주장 57:
제52 항에 있어서,
상기 객체의 상기 제1 부분을 상기 제1 영역에 저장하는 것은 상기 하나 이상의 불변 객체 스토리지 중 일 불변 객체 스토리지로부터 상기 제1 영역으로 상기 원자 객체를 이동시키는 것을 포함하고,
상기 원자 객체는 상기 객체의 상기 제1 부분인, 분산 객체 스토리지.
- 주장 58:
제52 항에 있어서,
상기 처리 회로들은 클라이언트 응용 프로그램으로부터의 저장 요청의 일부로서 상기 객체의 제1 부분을 수신하도록 더 구성되는, 분산 객체 스토리지.
- 주장 59:
제52 항에 있어서,
상기 처리 회로들은 상기 객체의 수정된 제1 부분을 상기 하나 이상의 불변 객체 스토리지의 일 불변 객체 스토리지로 이동시키도록 더 구성되고,
상기 객체의 수정된 제1 부분을 일 불변 객체 스토리지로 이동시키는 것은 상기 객체의 수정된 제1 부분을 변환하는 것을 포함하는, 분산 객체 스토리지.
- 주장 60:
하나 이상의 불변 객체 스토리지; 및
하나 이상의 가변 객체 스토리지를 포함하되,
상기 불변 객체 스토리지 및 상기 가변 객체 스토리지는,
영구 데이터 저장 수단; 및
복수의 처리 회로들을 포함하고,
상기 처리 회로들은,
상기 불변 객체 스토리지 각각에 원자 객체 크기와 동일한 크기를 갖는 원자 객체를 저장하고,
객체에 대해, 상기 하나 이상의 가변 객체 스토리지 중 일 가변 객체 스토리지의 제1 영역을 할당하고,
상기 객체의 제1 부분을 제1 영역에 저장하고, 및
상기 객체의 수정된 제1 부분을 형성하기 위해 상기 객체의 제1 부분을 수정하도록 구성되고,
상기 제1 영역은 원자 객체 크기보다 큰 크기를 가지는, 분산 객체 스토리지.
분리된 가변 데이터를 갖는 분산 객체 스토리지의 일부 실시예의 양태가 여기에서 구체적으로 설명되고 예시되었지만, 많은 수정 및 변형이 당업자에게 명백할 것이다. 따라서, 본 개시의 원리에 따라 구성된 분리된 가변 데이터를 갖는 분산 객체 스토리지는 여기에 구체적으로 설명된 것과는 다르게 구현될 수 있음을 이해해야 한다. 본 발명은 또한 후술하는 청구범위 및 그 등가물에 정의되어 있다.
SECTION IV
객체 저장 시스템에 객체를 탄력적으로 저장하기 위한 방법 및 시스템(METHODS AND SYSTEMS FOR ELASTICALLY STORING OBJECTS IN AN OBJECT STORAGE SYSTEM)
명세서의 현재 SECTION IV"에서 모든 참조 번호나 특징 및 도면에 대한 참조를 포함하는 내용은 "Section IV"이라는 라벨이 있는 도 13 내지 도 16이 참조되고 대응되나, SECTION I, SECTION II 또는 SECTION III의 내용 및 “Section I", "Section II" 또는 "Section III"이라는 라벨이 있는 도면의 참조 번호, 특징 및 그림들의 어떤 내용도 참조되거나 대응되지 않는다. 즉, 본 명세서의 SECTION I-IV 각각은 동일한 섹션의 해당 설명과 동일한 섹션으로 표시된 도면의 맥락에서 각각 해석되어야 한다. 그러나, 전술한 내용에도 불구하고, 다양한 섹션의 다양한 양태 및 발명 개념은 다른 섹션의 양태 및 발명 개념에 적용될 수 있다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예를 보다 상세하게 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에만 한정되는 것은 아니다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에만 한정되는 것은 아니다. 오히려, 이러한 실시예는 본 개시가 철저하고 완전할 수 있고, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 본 발명의 양태 및 특징이 충분히 전달될 수 있도록 하기 위해 예로서 제공된다. 따라서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 본 발명의 양태 및 특징을 완전히 이해하기 위해 필요하지 않은 프로세스, 요소 및 기술에 대해서는 설명하지 않을 수 있다.
데이터를 저장하는 전통적인 기술은 데이터를 사용하는 응용 프로그램이 저장된 데이터를 쉽게 찾고 검색할 수 있도록 일부 구조화된 조직에 의존하는 블록 또는 파일 저장 시스템을 사용하는 것을 포함한다. 이러한 구조화된 조직에는 데이터가 디렉토리 또는 파일에 저장되는 고정 크기 블록이 포함될 수 있다. 객체 스토리지는 블록 또는 파일 저장 시스템과 같이 구조화된 조직에 의존하지 않는 데이터를 저장하는 또 다른 기술이다. 대신에, 객체 스토리지("키 값 스토리지(KVS)" 또는 "데이터 스토리지"라고도 하고 여기에서 상호 교환 가능하게 사용됨)에 저장되는 객체는 소위 "키(key)" 및 "값(value)"을 활용합니다. 즉, 데이터는 객체(또는 "값(value)")로 저장되고 객체에는 스토리지에서 객체의 특정 위치를 지정하는 관련 식별자(또는 "키(key)")가 있다. 따라서 데이터가 저장될 때 객체에 키가 주어지고 객체는 구조화되지 않은 방식으로 스토리지에 덤프(dump)됩니다. 데이터를 검색하려는 경우 키는 객체의 특정 위치를 제공하므로 객체를 스토리지에서 검색할 수 있다. 분산 시스템에서 많은 양의 비정형 데이터를 사용하는 응용 프로그램은 객체 저장 시스템을 사용하는 시스템에서 이점을 얻을 수 있다.
도 13은 일 실시예에 따른 예시적인 객체 저장 시스템의 블록도이다. 객체 저장 시스템(100)은 적어도 데이터 관리자 노드 및 키 값 저장(KVS) 노드를 포함하는 병렬 컴퓨터일 수 있다. KVS 노드는 데이터를 객체로 저장하는 데 사용되는 하나 이상의 SSD(Solid State Drive)가 연결될 수 있다. 보다 구체적으로, 이 예는 4개의 데이터 관리자 노드와 4개의 KVS 노드를 보여준다. 데이터 관리자 노드(102-105) 각각은 예시된 바와 같이 KVS 노드(106-109) 각각에 연결되고, 따라서 임의의 데이터 관리자 노드(102-105)는 임의의 KVS 노드(106-109)의 SSD에 객체를 저장할 수 있고, 임의의 데이터 관리자 노드(102-105)는 임의의 KVS 노드(106-109)의 SSD로부터 객체를 검색할 수 있다. 따라서 데이터 플랫폼은 KVS 노드의 모든 SSD에서 사용 가능한 모든 스토리지를 모든 데이터 관리자 노드에서 사용할 수 있는 공유 스토리지 개념을 사용한다. 더 많은 스토리지가 필요하거나 원하는 경우 SSD가 있는 추가 KVS 노드를 추가할 수 있으며, 유사하게 더 많은 컴퓨팅이 필요하거나 원하는 경우 추가 데이터 관리자 노드를 추가할 수 있다. 따라서, 본 발명의 실시예에 따른 객체 저장 시스템(100)에서 KVS 노드 및 데이터 관리자 노드는 독립적으로 확장 가능하다.
일부 실시예에서, 응용 프로그램(101)은 SSD에 정보를 기록 및 판독하기 위해 데이터 관리자 노드(102-105)와 통신할 수 있다. 제한되지 않는 예로서, 응용 프로그램은 예를 들어 NFS v3, NFS v4, SMB 또는 S3 객체와 같은 임의의 NFS(Network File System) 기반 응용 프로그램일 수 있다. 응용 프로그램(101)은 데이터 관리자 노드(102-105)와 통신할 수 있고, 데이터 관리자 노드(102-105)는 응용 프로그램(101)의 객체를 워크로드, 특성 및 기타 속성과 같은 데이터 스토리지의 다양한 매개변수를 기반으로 하는 특정 KVS 노드로 보낼 수 있다. KVS 노드가 선택되면 선택된 KVS 노드의 SSD에 객체가 저장될 수 있다.
일부 실시예에서, 분산 응용 프로그램의 성능은 객체 식별자가 주어진 데이터를 제공하는 분산 객체 스토리지의 효율성에 의존한다. 일관된 레이턴시와 성능을 제공하기 위해, 기본이 되는 KVS 노드가 데이터 스토리지를 호스팅하고 공유 스토리지로 데이터 관리자 노드(102-105)에 객체를 내보내는 동안, 객체 저장 시스템은 복수의 데이터 관리자 노드(102-105)가 애플리케이션 객체를 제공하는 책임이 있는 공유 스토리지 개념을 사용한다. 일부 실시예에서, 기본 데이터 플랫폼에 객체의 상이한 클래스를 효율적으로 저장하는 것은 KVS 노드의 책임이다. 이렇게 하면 클라이언트 응용 프로그램이 객체를 KVS 노드에 쓸 때 각 객체에는 해당 객체와 연결된 해당 외부 메타데이터가 포함된다. 유사하게, 데이터 관리자 노드(102-105)는 KVS 노드에 저장된 객체를 추적하기 위해 내부 메타데이터를 생성한다. 일부 실시예에서, 내부 메타데이터는 예를 들어 객체가 기록된 위치, 객체의 크기, 객체의 슬라이스 수 등을 포함할 수 있다.
일부 실시예에서, 메타데이터의 특성은 불변 데이터 또는 스테이징 데이터와 상이하다. 예를 들어 메타데이터는 본질적으로 순차적일 수 있지만 불변 데이터는 본질적으로 더 무작위적일 수 있다. 따라서 일부 시스템에서 메타데이터는 예를 들어 메타데이터 서버에 변경 불가능한 데이터와 별도로 저장되어 시스템의 비용과 공간을 추가할 수 있다. 그러나, 별도의 메타데이터 서버의 사용은 본 개시내용의 다양한 실시예에 따라 동일한 기본 SSD로부터의 데이터 및 메타데이터 둘 다를 공동 배치함으로써 회피될 수 있다. 즉, SSD의 특정 비율의 공간은 메타데이터용으로 예약될 수 있고 SSD의 나머지 부분은 불변 데이터 또는 스테이징 데이터용으로 사용될 수 있다. 또한 SSD의 일부를 조각함으로써 분산 객체 스토리지가 확장됨에 따라 추가 규정(provision) 없이 데이터 크기가 커짐에 따라 메타데이터의 크기가 비례적으로 증가할 수 있다.
일부 실시예에서, 모든 SSD는 복수의 데이터 스토리지를 포함할 수 있다. 예를 들어, SSD에는 가변 데이터 스토리지, 불변 데이터 스토리지 및 메타데이터 스토리지의 세 가지 데이터 스토리지가 있을 수 있다. 그러나 SSD는 반드시 3개 스토리지에만 국한되는 것은 아니다. 다른 실시예에서, SSD는 응용 프로그램의 요구에 기초하여 더 많거나 더 적은 스토리지, 예를 들어, 2개, 4개 또는 5개의 스토리지를 가질 수 있다.
일부 실시예에서, 각 스토리지는 서로 다른 특성을 가질 수 있다. 예를 들어, 한 스토리지는 스테이징 스토리지의 특성을 가질 수 있는 반면, 다른 스토리지는 불변 데이터 스토리지의 특성을 가질 수 있는 반면, 또 다른 스토리지는 메타데이터 스토리지의 특성을 가질 수 있다.
도 14는 동일한 크기의 복수의 익스텐트로 분할된 SSD의 예를 도시한다. SSD를 각각의 다른 객체 스토리지에 대해 미리 정의된 서로 다른 크기로 정적으로 나누는 대신 SSD를 익스텐트(extent)라고 하는 동일한 크기의 청크로 나눌 수 있다. 다양한 실시예에 따르면, 익스텐트는 공간이 관리되는 SSD 내의 특정 객체 스토리지에 대한 SSD의 공간 할당 단위이다. 익스텐트는 가변 데이터 스토리지, 불변 데이터 스토리지 또는 메타데이터 스토리지를 포함하는 다양한 유형의 스토리지에 대해 구성될 수 있습니다.
일부 실시예에서, SSD는 KVS 노드에서 실행되고 SSD를 포맷하는 객체 저장 시스템 소프트웨어에 의해 익스텐트로 분할될 수 있다. 포맷하는 동안 SSD의 일부는 예비로 남겨둘 수 있습니다(예: 64GB). 나머지 SSD는 동일한 크기 익스텐트(예, 1GB 청크)로 세분화될 수 있다. 일부 실시예에서, 모든 익스텐트는 상점에서 사용하기 위한 익스텐트의 가용성에 대응하는 상태로 표현된다. 처음에는 SSD가 포맷되고 익스텐트가 생성될 때 객체 스토리지에서 사용되거나 할당된 익스텐트가 없기 때문에 모든 익스텐트는 여유 상태가 됩니다. 따라서, 자유 상태 익스텐트는 객체 스토리지에서 사용할 수 있으며 객체 스토리지에 할당되고 사용되도록 익스텐트 관리자(나중에 더 자세히 설명됨)에 의해 선택될 수 있다. 익스텐트가 스토리지에 의해 선택되고 객체가 익스텐트에 저장되면 해당 익스텐트의 상태가 활성으로 변경된다. 따라서 활성 상태는 할당된 객체 스토리지와 익스텐트에서만 사용 가능하며 다른 객체 스토리지에는 할당할 수 없다. 일부 실시예에서, 활성 익스텐트가 객체로 채워지고 해당 익스텐트의 용량이 가득 차면 해당 익스텐트의 상태가 닫힌 상태로 변경된다. 그러나 일부 실시예에서, 모든 객체가 익스텐트에 저장되고 익스텐트가 아직 그 용량에 도달하지 않은 경우에도 더 이상의 객체가 저장되지 않을 때 상태가 닫힘으로 변경될 수 있다. 닫힌 상태에 있는 익스텐트는 어떤 객체 스토리지에도 할당할 수 없으며 더 이상 객체를 저장할 수 없다. 따라서 각 스토리지는 고유한 범위를 선택하도록 구성되며 해당 스토리지만 선택한 범위를 사용할 수 있다.
일 실시예에 따르면, 포맷 동안 분할될 때 모든 익스텐트의 크기가 동일하다면 임의의 용량 크기가 복수의 익스텐트 각각에 대해 선택될 수 있다. 그러나 일부 실시예에서, 익스텐트의 크기는 객체의 나머지를 저장하기 위해 다중 익스텐트가 사용되도록 너무 빨리 허용량에 도달하지 않고 객체를 저장하기에 충분히 크도록 선택된다. 다른 한편으로, 일부 실시예에서, 익스텐트의 크기는 충분한 익스텐트가 SSD 상에 생성되어 상이한 객체 스토리지로부터의 객체를 저장하도록 충분히 작게 선택된다. 즉, 한 객체 스토리지에 익스텐트가 요구되거나 할당되면 더 이상 다른 객체 스토리지에 할당할 수 없다. 예를 들어, 익스텐트의 크기가 너무 커서 SSD에 익스텐트가 2개만 포함된 경우(예, 10GB 익스텐트가 2개 있는 20GB SSD), 두 개의 객체 스토리지가 두 개의 익스텐트 각각을 요구할 때 다른 객체 스토리지가 요구할 수 있는 다른 사용 가능한 익스텐트는 없을 것이다. 반면에 각 익스텐트의 크기를 너무 작게 만들 경우(예: 400MB 익스텐트가 50개 있는 20GB SSD), 익스텐트가 빨리 차서 성능(예, 여러 객체를 저장하는 범위)에 영향을 미칠 수 있다. 따라서 최적의 효율을 얻으려면 익스텐트가 너무 작지도 너무 크지도 않은 크기가 되어야 한다. 일 실시예에서, 익스텐트 각각은 크기가 1GB일 수 있지만, 애플리케이션 및 기타 고려 사항에 따라 더 크거나 더 작은 익스텐트가 더 최적일 수 있다.
이러한 방식으로, SSD는 복수의 동일한 크기의 익스텐트로 구성될 수 있고, 각 익스텐트는 특정 익스텐트를 요구한 객체 스토리지의 특성 또는 유형에 기초하여 특성화될 수 있다. 예를 들어, 도 14는 복수의 동일한 크기(예, 1GB) 익스텐트로 분할된 SSD를 도시하고, 여기서 일부 익스텐트는 객체 스토리지에 의해 이미 요구되고 일부 익스텐트는 자유 상태(208)에 있기 때문에, 아직 요구되지 않았으며 객체 스토리지에서 사용되지 않기 때문에, 활성 또는 폐쇄 상태에 있습니다. 예를 들어, 익스텐트(202, 204, 206)는 활성 또는 폐쇄 상태에 있고 이미 객체(예를 들어, 메타데이터, 가변 데이터, 또는 불변 데이터)를 포함한다.
일 실시예에 따르면, 스테이징 스토리지는 원자 객체가 불변 스토리지로 이동되기 전에 원자 객체에 대한 스테이징 영역으로 사용될 수 있다. 따라서 객체는 일반적으로 변경할 수 없는 데이터 스토리지에 비해 크기가 더 작다. 예를 들어, 원자 객체의 크기는 1MB일 수 있습니다. 메타데이터 스토리지는 객체의 메타데이터를 저장하는 데 사용되며 객체에 액세스(예, 저장 또는 검색)할 때마다 메타데이터가 업데이트되거나 변경되기 때문에 이 정보가 자주 업데이트된다. 게다가, 메타데이터는 일반적으로 크기가 작지만(예, 약 64바이트에서 몇 킬로바이트) 더 커질 수 있다. 일부 실시예에서, SSD 용량의 약 5%는 메타데이터 스토리지에 의해 사용되고 다른 약 5%는 스테이징 스토리지에 의해 사용된다. 나머지 약 90%의 SSD 용량은 대부분의 객체가 상주하는 불변 데이터 스토리지에서 사용된다. 게다가, 불변 데이터를 제자리에 추가하거나 덮어쓸 수 없다. 따라서 변경할 수 없는 데이터를 업데이트하려는 경우, 새 객체가 (다른 여유 익스텐트에) 기록되고 이전 객체가 삭제된다. 반면, 메타데이터는 변경 가능하므로 원하는 대로 추가하거나 덮어쓸 수 있다. 따라서, 서로 다른 특성을 갖는 서로 다른 익스텐트가 모두 동일한 SSD에 공존할 수 있으므로 서로 다른 유형의 익스텐트를 서로 다른 SSD에 분리할 필요가 없다. 게다가, SSD에 저장할 수 있는 객체의 용량은 제한되거나 미리 결정되지 않는다. 즉, 특정 유형의 객체(예, 메타데이터, 불변 데이터, 가변 데이터, 스테이징 데이터)를 저장하기 위해 더 많은 저장 공간이 필요할 때, 추가 익스텐트는 해당 유형의 객체(예, 메타데이터, 가변 데이터, 스테이징 데이터)에 대응하도록 특성화되고 스토리지에 할당될 수 있다.
따라서, 본 개시의 다양한 실시예는 객체 저장 시스템을 동작시키기 위한 기술을 설명한다. 도 15는 본 발명의 일 실시예에 따른 객체 저장 시스템의 정보 흐름을 나타내는 블록도이다. 이 예시적인 실시예는 3개의 객체 스토리지, 가변 데이터 스토리지(302A), 불변 데이터 스토리지(302B), 및 메타데이터 스토리지(302C)를 포함하지만, 더 적거나 더 많은 스토리지가 다른 실시예에 포함될 수 있다. 데이터 스토리지(302A-302C)는 저장될 객체에 대해 복수의 동일한 크기의 익스텐트로 분할된 SSD(310)에 연결될 수 있다. 또한, 도 15의 예에서는 단일 SSD(310)가 도시되어 있지만, SSD(310)는 실제로 공유 스토리지 구성에서 함께 연결된 복수의 SSD를 나타낼 수 있다.
일 실시예에 따르면, 데이터 스토리지(302A-302C)는 익스텐트 관리자(304)와 통신하도록 구성되고, 및 익스텐트 관리자(304)는 슈퍼블록 관리자(306) 및/또는 SSD 액세스 관리자(308)와 통신할 수 있다. SSD 액세스 관리자(308)는 SSD에 객체를 저장하기 위해 SSD(310)와 통신할 수 있다.
보다 상세하게는, 익스텐트 관리자(304)는 데이터 스토리지(302A-302C)로부터 SSD(310)로 객체의 흐름을 지시함으로써 SSD(310) 상의 익스텐트를 관리한다. 익스텐트 관리자(304)는 각 익스텐트의 소유권 및 용량 정보를 추적할 수 있다. 예를 들어, 익스텐트 관리자(304)는 메모리 내 데이터 구조를 유지하여 각 익스텐트의 자유, 활성 및 폐쇄 상태를 추적한다. 따라서 데이터 스토리지가 SSD에 객체를 저장할 때, 데이터 스토리지는 익스텐트 관리자(304)와 통신하고, 그 다음 익스텐트 관리자(304)는 슈퍼블록(superblock)(나중에 더 자세히 설명됨)에서 익스텐트의 상태를 조회하고, 마지막으로 익스텐트의 가용성과 객체의 특성(예, 가변 데이터, 불변 데이터 또는 메타데이터)에 따라 익스텐트를 선택한다.
일부 실시예에서, 익스텐트 관리자(304)는 슈퍼블록(superblock)으로 지칭되는 SSD의 영역에서 잘 알려진 논리 블록 주소(LBA)에 정보를 유지할 수 있다. 일 실시예에 따르면, 슈퍼블록은 KVS 노드의 각 SSD에 대한 마스터 부트 레코드(master boot record)와 유사하다. 도 16은 슈퍼블록의 일 예를 나타낸다. 슈퍼블록은 SSD의 상태 정보를 저장하기 위해 할당된 SSD의 일부일 수 있다. 예를 들어, 도 16의 슈퍼블록에는 4KB 부분과 124KB 부분(테이블)으로 더 분할된 128KB의 SSD가 할당된다. 124KB 부분은 SSD의 모든 익스텐트 지도를 나타내며, 슈퍼블록의 각 블록은 익스텐트에 해당합니다. 예를 들어, 일부 블록은 특정 해당 익스텐트가 메타데이터 스토리지, 가변 데이터 스토리지, 또는 불변 데이터 스토리지로 할당하는 것을 가리키고, 따라서 활성 또는 폐쇄 상태에 있다. 다른 블록은 해당 익스텐트가 비어 있고 할당되지 않았거나 스토리지에서 사용 중임을 나타낸다.
다른 실시예에 따르면, 슈퍼블록의 4KB 부분(테이블)은 예약된 부분일 수 있고 익스텐트 메타데이터를 포함할 수 있다. 따라서, 슈퍼블록은 어느 주어진 순간에 슈퍼블록이 요청될 때 슈퍼블록 관리자(306)에 정보를 제공할 수 있도록 범위의 상태 정보로 지속적으로 업데이트될 수 있다. 예를 들어, 컴퓨터 시스템이 처음 부팅될 때, 슈퍼블록 관리자(306)는 슈퍼블록에 대한 정보를 읽어 SSD 상의 익스텐트의 레이아웃 및 상태를 이해할 수 있다. 슈퍼블록을 읽음으로써, 슈퍼블록 관리자(306)는 각 익스텐트의 상태를 결정할 수 있고, 익스텐트가 객체 스토리지에 할당되면 어느 객체 스토리지에 익스텐트가 할당되는지를 결정할 수 있다.
도 17은 객체 저장 시스템에서 객체 저장을 위한 방법의 흐름도이다. 이하의 설명은 도 17의 방법(500)이 참조된다. 앞서 설명한 바와 같이, SSD는 초기에 포맷될 수 있으며, 그 동안 객체 저장 시스템의 SSD는 익스텐트 매니저에 의해 동일한 크기의 익스텐트로 분할될 수 있다(S502 단계가 참조됨). 일부 실시예에서, 응용 프로그램(예를 들어, 소프트웨어 응용 프로그램)은 SSD에 객체로서 데이터를 저장하기를 원할 수 있다. 따라서, 애플리케이션은 제1 객체를 포함하는 객체 저장 시스템의 제1 데이터 스토리지의 제1 특성을 식별하기 위해 익스텐트 관리자와 통신할 수 있다(S504 단계가 참조됨). 제1 데이터 스토리지의 제1 특성은 제1 객체의 특성, 예를 들어 메타데이터, 불변 데이터, 가변 데이터, 또는 스테이징 데이터에 대응할 수 있다. 제1 데이터 스토리지의 제1 특성이 식별되면, 익스텐트 관리자는 복수의 익스텐트 중에서 제1 객체의 특성에 대응하는 제1 익스텐트를 제1 데이터 스토리지에 할당할 수 있다(S506 단계가 참조됨). 따라서, 제1 익스텐트를 제1 데이터 스토리지에 할당함으로써, 제1 익스텐트의 상태가 활성으로 변경될 수 있다. 대응하는 제1 익스텐트가 제1 데이터 스토리지에 할당되면, 익스텐트 관리자는 할당된 제1 익스텐트에 대한 제1 객체의 저장을 조정할 수 있다(S508 단계가 참조됨). 이러한 방식으로, 제1 데이터 스토리지로부터의 제1 특성을 갖는 객체는 SSD의 제1 익스텐트에 저장될 수 있다.
일 실시예에 따르면, 객체가 다른 특성을 갖는 응용 프로그램으로부터 다른 데이터를 객체로 저장하기 위해 유사한 프로세스가 반복될 수 있다. 따라서, 객체 저장 시스템의 제2 데이터 스토리지는 제2 특성을 갖는 제2 객체를 포함할 수 있고, 제2 데이터 스토리지의 특성은 익스텐트 관리자에 의해 식별될 수 있다(S510 단계가 참조됨). 다음으로, 익스텐트 관리자는 복수의 익스텐트 중 제2 객체의 제2 특성에 대응하는 제2 익스텐트를 제2 데이터 스토리지에 할당하고, 제2 특성은 제1 특성과 상이할 수 있다(S512 단계가 참조됨). 예를 들어, 제1 특성이 불변 데이터라면, 제2 특성은 메타데이터일 수 있습니다. 일단 제2 익스텐트가 제2 데이터 스토리지에 할당되면, 제2 객체는 이제 제2 익스텐트에 저장될 수 있다(S514 단계가 참조됨). 따라서, 서로 다른 특성을 갖는 복수의 객체를 SSD의 해당 익스텐트에 저장함으로써 동일한 SSD에 공존 및 저장할 수 있다.
이러한 방식으로, 응용 프로그램은 객체 저장 시스템의 데이터 스토리지와 통신할 수 있고, 익스텐트 관리자는 SSD 상의 다양한 익스텐트에 객체의 저장을 용이하게 할 수 있다. 보다 구체적으로, 데이터 스토리지 특성을 결정하는 것에 기초하여, 익스텐트 관리자는 슈퍼블록 관리자와 통신하고, 및 수퍼블록 관리자는 수퍼블록의 내용을 검색하여 데이터 스토리지의 특성에 해당하는 사용 가능한 범위(예: 자유 상태인 범위)를 찾는다. 예를 들어 데이터 스토리지가 메타데이터 스토리지인 경우 메타데이터 범위가 선택되고, 데이터 스토리지가 변경 불가능한 데이터 스토리지인 경우 변경할 수 없는 데이터 범위가 선택되고, 데이터 스토리지가 변경 가능한 데이터 스토리지인 경우 변경 가능한 데이터 범위가 선택된다.
일 실시예에 따르면, 슈퍼블록 관리자는 SSD 상의 선택된 익스텐트의 특정 위치를 제공하고 이 정보를 익스텐트 관리자에게 제공한다. 그러면 익스텐트 관리자는 선택된 익스텐트의 상태를 활성으로 업데이트하고 데이터 스토리지의 객체는 익스텐트 관리자에서 파생된 정보(예, SSD 위치)를 사용하여 객체를 SSD에 쓰는 SSD 액세스 관리자에 제공된다. 객체가 선택된 익스텐트에 저장되기 때문에 익스텐트가 가득 차면 익스텐트 관리자는 해당 익스텐트의 상태를 닫힘으로 변경하고 사용 가능한 다른 익스텐트를 선택하고, 나머지 객체는 모든 객체가 저장될 때까지 계속 저장된다. 일 실시예에 따르면, 데이터 스토리지가 모든 객체의 저장을 선택된 범위까지 완료하고 이 범위에 여전히 여유 공간이 있을 수 있음에도 불구하고, 이 익스텐트는 이미 할당되어 있고 상태가 활성 또는 닫혀 있기 때문에 다른 데이터 스토리지에 할당되지 않을 수 있다.
일 실시예에 따르면, SSD에 더 많은 객체가 저장될수록 더 많은 메타데이터가 동일한 공동 배치된 SSD에도 저장되고, 이에 의해 메타데이터를 저장하기 위해 별도의 메타데이터 서버에 의존할 필요가 없다. 따라서, 서로 다른 특성을 갖는 서로 다른 유형의 객체(예, 메타데이터, 불변 데이터, 가변 데이터, 스테이징 데이터)에 대해 더 많은 스토리지가 필요하므로 이러한 특성에 해당하는 더 많은 익스텐트를 선택하여 할당할 수 있다. 따라서 객체의 저장 용량은 수요에 따라 탄력적으로 독립적으로 증가할 수 있다. 또한 원하는 대로 또는 더 많은 저장 용량이 필요할 때 SSD를 추가할 수 있다. 이러한 방식으로 데이터 스토리지의 용량은 탄력적이다.
위에서 설명된 바와 같이, 데이터 스토리지에 이미 할당된 익스텐트는 해당 익스텐트에서 여전히 사용 가능한 공간이 있더라도 다른 데이터 스토리지에서 더 이상 사용할 수 없다. 따라서, 일 실시예에 따르면, 여유 공간은 익스텐트를 조각 모음(defragmenting)함으로써 회수될 수 있다. 조각 모음 중에 완전히 채워지지 않은 범위가 고려되고 객체가 다른 자유 범위로 이동된다. 또한 다른 확장 영역의 객체는 이 확장 영역이 용량까지 채워질 때까지 동일한 확장 영역으로 이동된다. 객체가 이 범위로 이동되면 부분적으로 채워진 다른 범위의 객체가 삭제되고 상태가 다시 자유 상태로 변경될 수 있다. 이 조각 모음 프로세스를 수행하면 부분적으로 채워진 확장 영역의 객체를 통합하여 확장 영역을 더 잘 활용하고 다른 데이터 스토리지에서 사용할 사용하지 않는 공간을 확보할 수 있다.
본 개시에 따른 하나 이상의 실시예는 후술하는 청구항 중 하나 이상의 특성을 포함할 수 있다(실시예는 이에 제한되지 않음).
- 주장 61:
객체 저장 시스템 상의 객체 저장 방법으로서,
익스텐트 관리자가 객체 저장 시스템의 메모리 장치를 동일한 크기의 복수의 익스텐트들로 분할하는 것;
상기 익스텐트 관리자에 의해, 제1 객체를 포함하는 객체 저장 시스템의 제1 데이터 스토리지의 제1 특성을 식별하는 단계;
상기 익스텐트 관리자가 상기 복수의 익스텐트들 중 상기 제1 객체의 상기 제1 특성에 대응하는 제1 익스텐트를 상기 제1 데이터 스토리지에 할당하는 것;
상기 익스텐트 관리자가 할당된 상기 제1 익스텐트에 상기 제1 객체를 저장하는 단계;
상기 익스텐트 관리자가 제2 객체를 포함하는 객체 저장 시스템의 제2 데이터 스토리지의 제2 특성을 식별하는 것;
상기 익스텐트 관리자가, 상기 복수의 익스텐트들로부터 상기 제2 객체의 상기 제2 특성에 대응하고 상기 제1 특성과 상이한 제2 익스텐트를 상기 제2 데이터 스토리지에 할당하는 것; 및
상기 익스텐트 관리자가 할당된 상기 제2 익스텐트에 상기 제2 객체를 저장하는 것을 포함하는, 객체 저장 방법.
- 주장 62:
제61 항에 있어서,
상기 익스텐트 관리자에 의해, 상기 메모리 장치 상의 수퍼블록으로부터 상기 복수의 익스텐트들 각각의 상태 정보를 검색하는 것를 더 포함하는, 객체 저장 방법.
- 주장 63:
제62 항에 있어서,
상기 상태 정보는 각 익스텐트의 상태, 각 익스텐트의 특성, 및 상기 메모리 장치 상의 각 익스텐트의 위치를 포함하는, 객체 저장 방법.
- 주장 64:
제63 항에 있어서,
상기 각 익스텐트의 상태는 객체가 없고 할당이 가능한 자유 상태, 현재 할당된 활성 상태, 또는 할당이 불가능한 폐쇄 상태로부터 선택되는, 객체 저장 방법.
- 주장 65:
제64 항에 있어서,
상기 익스텐트 관리자가 상기 제1 데이터 스토리지에 상기 제1 익스텐트를 할당하는 것에 응답하여 상기 제1 익스텐트의 상태 정보를 업데이트하는 것; 및
상기 익스텐트 관리자가 상기 제2 데이터 스토리지에 상기 제2 익스텐트를 할당하는 것에 응답하여 상기 제2 익스텐트의 상태 정보를 업데이트하는 것을 더 포함하는, 객체 저장 방법.
- 주장 66:
제65 항에 있어서,
상기 제1 익스텐트가 객체들로 용량까지 채워지는 것에 응답하여 상기 제1 익스텐트에 대응하는 상태 정보를 닫힌 상태로 업데이트하는 단계를 더 포함하는, 객체 저장 방법.
- 주장 67:
제65 항에 있어서,
상기 슈퍼블록은 상기 메모리 장치의 예약된 부분에 테이블을 포함하고, 및
상기 테이블은 상기 복수의 익스텐트들 각각에 대응하는, 객체 저장 방법.
- 주장 68:
제63 항에 있어서,
상기 각 익스텐트의 특성은 불변 데이터 익스텐트, 가변 데이터 익스텐트, 메타데이터 익스텐트, 또는 스테이징 익스텐트로부터 선택되는, 객체 저장 방법.
- 주장 69:
제61 항에 있어서,
상기 메모리 장치는 SSD(Solid State Drive)인, 객체 저장 방법.
- 주장 70:
제69 항에 있어서,
상기 객체 저장 시스템은 병렬로 연결된 복수의 SSD를 포함하는, 객체 저장 방법.
- 주장 71:
객체를 저장하도록 구성된 객체 저장 시스템으로서,
복수의 데이터 스토리지들;
메모리 장치; 및
익스텐트 관리자를 포함하되,
상기 익스텐트 관리자는:
상기 객체 저장 시스템의 상기 메모리 장치를 동일한 크기의 복수의 익스텐트들로 분할하고;
제1 객체를 포함하는 상기 복수의 데이터 스토리지들 중 제1 데이터 스토리지의 제1 특성을 식별하고;
상기 복수의 익스텐트들 중 상기 제1 객체의 상기 제1 특성에 대응하는 제1 익스텐트를 상기 제1 데이터 스토리지에 할당하고;
할당된 상기 제1 익스텐트에 상기 제1 객체를 저장하고;
제2 객체를 포함하는 상기 복수의 데이터 스토리지들 중 제2 데이터 스토리지의 제2 특성을 식별하고;
상기 복수의 익스텐트들 중 상기 제2 객체의 상기 제2 특성에 대응하는 제2 익스텐트를 상기 제2 데이터 스토리지에 할당하고; 및
할당된 상기 제2 익스텐트에 상기 제2 객체를 저장하도록 구성되고,
상기 제2 특성은 상기 제1 특성과 상이한, 객체 저장 시스템.
- 주장 72:
제71 항에 있어서,
상기 익스텐트 관리자는 상기 메모리 장치 상의 수퍼블록으로부터 상기 복수의 익스텐트들 각각의 상태 정보를 검색하도록 더 구성되는, 객체 저장 시스템.
- 주장 73:
제72 항에 있어서,
상기 상태 정보는 각 익스텐트의 상태, 각 익스텐트의 특성, 및 상기 메모리 장치 상의 각 익스텐트의 위치를 포함하는, 객체 저장 시스템.
- 주장 74:
제73 항에 있어서,
상기 각 익스텐트의 상태는 객체가 없고 할당이 가능한 자유 상태, 현재 할당된 활성 상태, 또는 할당이 불가능한 폐쇄 상태로부터 선택되는, 객체 저장 시스템.
- 주장 75:
제74 항에 있어서,
상기 익스텐트 관리자는:
상기 제1 데이터 스토리지에 상기 제1 익스텐트를 할당하는 것에 응답하여 상기 제1 익스텐트의 상태 정보를 업데이트 하고; 및
상기 제2 데이터 스토리지에 상기 제2 익스텐트를 할당하는 것에 응답하여 상기 제2 익스텐트의 상태 정보를 업데이트 하도록 더 구성되는, 객체 저장 시스템.
- 주장 76:
상기 익스텐트 관리자는 상기 제1 익스텐트가 객체들로 용량까지 채워지는 것에 응답하여 상기 제1 익스텐트에 대응하는 상태 정보를 닫힌 상태로 업데이트하도록 더 구성되는, 객체 저장 시스템.
- 주장 77:
제75 항에 있어서,
상기 슈퍼블록은 상기 메모리 장치의 예약된 부분에 테이블을 포함하고, 및
상기 테이블은 상기 복수의 익스텐트들 각각에 대응하는, 객체 저장 시스템.
- 주장 78:
제73 항에 있어서,
상기 각 익스텐트의 특성은 불변 데이터 익스텐트, 가변 데이터 익스텐트, 메타데이터 익스텐트, 또는 스테이징 익스텐트로부터 선택되는, 객체 저장 시스템.
- 주장 79:
제71 항에 있어서,
상기 메모리 장치는 SSD(Solid State Drive)인, 객체 저장 방법.
- 주장 80:
제79 항에 있어서,
상기 객체 저장 시스템은 병렬로 연결된 복수의 SSD를 포함하는, 객체 저장 방법.
용어 "제1", "제2", "제3" 등은 다양한 요소, 구성요소, 영역, 레이어 및/또는 섹션을 설명하기 위해 본 명세서에서 사용될 수 있지만, 이러한 요소, 구성 요소, 영역, 레이어 및/또는 섹션은 이러한 용어에 의해 제한되어서는 아니된다. 이러한 용어는 하나의 요소, 구성 요소, 영역, 레이어 또는 섹션을 다른 요소, 구성 요소, 영역, 레이어 또는 섹션과 구별하는 데만 사용된다. 따라서, 본 명세서에서 논의되는 제1 요소, 구성요소, 영역, 레이어 또는 섹션은 본 발명의 사상 및 범위를 벗어나지 않으면서 제2 요소, 구성요소, 영역, 레이어 또는 섹션으로 명명될 수 있다.
요소 또는 층이 다른 요소 또는 층에 "위에", "상에" 또는 "연결되는", "결합되는" 또는 "인접하는" 것으로 언급될 때, 그것은 다른 요소 또는 층에 직접 연결되거나, 결합되거나, 인접할 수 있거나, 하나 이상의 중간 요소 또는 층이 존재할 수 있는 것으로 이해될 수 있다. 대조적으로, 요소 또는 층이 다른 요소 또는 층에 "직접 상에", "직접 연결", "직접 결합" 또는 "바로 인접"하는 것으로 언급될 때, 중간 요소 또는 층이 존재하지 않는다.
본 명세서에서 사용한 용어는 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 본 명세서에 사용된 바와 같이, 단수 형태는 문맥이 명백하게 달리 나타내지 않는 한, 복수 형태도 포함하는 것으로 의도된다. 본 명세서에서 사용될 때 "포함하는"이라는 용어는 언급된 특징, 정수, 단계, 연산, 요소 및/또는 구성요소의 존재를 지정하는 것으로 추가로 이해될 것이나, 하나 이상의 다른 특징, 정수, 단계, 연산, 요소, 구성요소 및/또는 이들의 그룹의 존재 또는 추가를 배제하지 않는다. 본 명세서에 사용된 바와 같이, "및/또는"이라는 용어는 관련된 나열된 항목 중 하나 이상의 모든 조합을 포함한다. "적어도 다음 중 하나"와 같은 표현은 요소 목록 앞에 올 때 요소의 전체 목록을 수정하고 목록의 개별 요소를 수정하지 않는다.
본 명세서에 사용된 용어 "실질적으로", "약" 및 그와 유사한 용어는 정도의 용어가 아닌 근사치의 용어로 사용되고, 당업자가 인식할 수 있는 측정 또는 계산된 값의 고유한 편차를 설명하기 위한 것으로 의도된다. 또한, 용어 "사용하다"는 각각 용어 "활용하다", "이용하다" 및 "이용하다"와 동의어로 간주될 수 있다.
본 명세서에 기술된 본 발명의 실시예에 따른 전자 또는 전기 장치 및/또는 임의의 다른 관련 장치 또는 구성요소는 임의의 적절한 하드웨어, 펌웨어(예를 들어, 애플리케이션 특정 집적 회로), 또는 소프트웨어, 펌웨어 및/또는 하드웨어의 조합을 이용하여 구현될 수 있다. 예를 들어, 이러한 장치의 다양한 구성 요소는 하나의 집적 회로(IC) 칩 또는 별도의 IC 칩에 형성될 수 있다. 또한, 이들 소자의 다양한 구성요소는 연성 인쇄 회로 필름, 테이프 캐리어 패키지(TCP), 인쇄 회로 기판(PCB)에 구현되거나 하나의 기판에 형성될 수 있다. 또한, 이들 장치의 다양한 구성요소는 하나 이상의 컴퓨팅 장치에서 하나 이상의 프로세서에서 실행되고, 컴퓨터 프로그램 명령을 실행하고 여기에 설명된 다양한 기능을 수행하기 위해 다른 시스템 구성요소와 상호작용하는 프로세스 또는 스레드일 수 있다. 컴퓨터 프로그램 명령은 예를 들어 랜덤 액세스 메모리(RAM)와 같은 표준 메모리 장치를 사용하여 컴퓨팅 장치에서 구현될 수 있는 메모리에 저장된다. 컴퓨터 프로그램 명령은 또한 예를 들어 CD-ROM, 플래시 드라이브 등과 같은 다른 비일시적 컴퓨터 판독 가능 매체에 저장될 수도 있다. 또한, 당업자는 다양한 컴퓨팅 장치의 기능이 본 발명의 예시적인 실시예의 사상 및 범위를 벗어나지 않으면서 단일 컴퓨팅 장치로 결합 또는 통합될 수 있거나 특정 컴퓨팅 장치의 기능이 하나 이상의 다른 컴퓨팅 장치에 걸쳐 분산될 수 있음을 인식해야 한다.
본 명세서에서 사용되는 모든 용어(기술적, 과학적인 용어 포함)는 달리 정의되지 않는 한, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 일반적으로 이해하는 것과 동일한 의미를 갖는다. 일반적으로 사용되는 사전에 정의된 것과 같은 용어는 관련 기술 및/또는 본 명세서의 맥락에서 그 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 여기에 명시적으로 정의되지 않는 한 이상화되거나 지나치게 형식적인 의미로 해석되어서는 아니된다.
여기에 설명된 실시예는 단지 예일뿐이다. 당업자는 구체적으로 개시된 것들로부터 다양한 대안적인 실시예를 인식할 수 있다. 이러한 대안적인 실시예는 또한 본 개시의 범위 내에 있는 것으로 의도된다. 따라서, 실시예는 다음의 청구범위 및 그 균등물에 의해서만 제한된다.
100: 객체 저장 시스템
101: 응용 프로그램
105: 객체 스토리지
110: 데이터 관리자
202, 204, 206: 익스텐트

Claims (20)

  1. 복수의 객체 스토리지들;
    상기 객체 스토리지들에 연결되고, 복수의 처리 회로들를 포함하는 복수의 데이터 관리자들;
    상기 복수의 처리 회로들 중 입출력 작업을 처리하도록 구성되는 제1 처리 회로; 및
    상기 복수의 처리 회로들 중 입출력 완료를 처리하도록 구성되는 제2 처리 회로를 포함하는, 저장 시스템.
  2. 제1 항에 있어서,
    상기 제2 처리 회로는 단일 소프트웨어 스레드를 실행하도록 구성되는, 저장 시스템.
  3. 제1 항에 있어서,
    상기 입출력 작업의 처리는 데이터 복원력을 위해 데이터를 기록하는 것을 포함하는, 저장 시스템.
  4. 제3 항에 있어서,
    상기 데이터 복원력을 위한 데이터를 기록하는 것은:
    상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계; 및
    상기 제1 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 포함하는, 저장 시스템.
  5. 제3 항에 있어서,
    상기 데이터 복원력을 위한 데이터를 기록하는 것은:
    상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계; 및
    상기 제1 데이터에 대응하는 패리티(parity) 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 포함하는, 저장 시스템.
  6. 제1 항에 있어서,
    상기 제1 처리 회로는 상기 입출력 완료보다 10배 이상 많은 상기 입출력 작업을 처리하도록 구성되는, 저장 시스템.
  7. 제1 항에 있어서,
    상기 제2 처리 회로는 상기 입출력 작업보다 10배 이상 많은 상기 입출력 완료를 처리하도록 구성되는, 저장 시스템.
  8. 제1 항에 있어서,
    상기 제1 처리 회로는 오직 상기 입출력 작업만을 처리하도록 구성되는, 저장 시스템.
  9. 제1 항에 있어서,
    상기 제2 처리 회로는 오직 상기 입출력 완료만을 처리하도록 구성되는, 저장 시스템.
  10. 제9 항에 있어서,
    상기 제1 처리 회로는 오직 상기 입출력 작업만을 처리하도록 구성되는, 저장 시스템.
  11. 제1 항에 있어서,
    상기 제1 처리 회로는 제1 데이터 관리자의 제1 코어이고,
    상기 제2 처리 회로는 상기 제1 데이터 관리자의 제2 코어인, 저장 시스템.
  12. 제1 항에 있어서,
    상기 복수의 데이터 관리자들 중 제1 데이터 관리자는 복수의 코어들을 포함하고,
    상기 복수의 코어들의 제1 서브 세트는 입출력 작업을 처리하도록 구성되고, 상기 복수의 코어들의 제2 서브 세트는 입출력 완료를 처리하도록 구성되고, 및
    상기 제1 서브 세트는 상기 제2 서브 세트보다 10배 이상 많은 코어를 포함하는, 저장 시스템.
  13. 제12 항에 있어서,
    상기 제1 서브 세트는 상기 제2 서브 세트보다 최대 100배 많은 코어를 포함하는 저장 시스템.
  14. 복수의 객체 스토리지들 및 상기 객체 스토리지들에 연결되는 복수의 데이터 관리자들을 포함하는 저장 시스템을 작동하는 방법으로서,
    입출력 작업들을 수행하기 위한 복수의 연속적인 요청을 수신하는 단계;
    상기 데이터 관리자들의 복수의 처리 회로들에 의해, 상기 입출력 작업들을 처리하는 단계; 및
    상기 데이터 관리자들의 복수의 처리 회로에 의해, 상기 입출력 작업들에 대응하는 입출력 완료들을 처리하는 단계를 포함하되,
    상기 복수의 처리 회로들 중 제1 처리 회로는 상기 입출력 동작들을 처리하고,
    상기 복수의 처리 회로들 중 제2 처리 회로는 상기 입출력 완료들을 처리하는, 저장 시스템 작동 방법.
  15. 제14 항에 있어서,
    상기 제2 처리 회로는 단일 소프트웨어 스레드를 실행하도록 구성되는, 저장 시스템 작동 방법.
  16. 제14 항에 있어서,
    상기 입출력 동작들의 처리는 데이터 복원력을 위한 데이터를 기록하는 단계를 포함하는, 저장 시스템 작동 방법.
  17. 제16 항에 있어서,
    상기 데이터 복원력을 위한 데이터를 기록하는 단계는:
    상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계; 및
    상기 제1 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 포함하는, 저장 시스템 작동 방법.
  18. 제16 항에 있어서,
    상기 데이터 복원력을 위한 데이터를 기록하는 단계는:
    상기 복수의 객체 스토리지들 중 제1 객체 스토리지에 제1 데이터를 기록하는 단계; 및
    상기 제1 데이터에 대응하는 패리티(parity) 데이터를 상기 복수의 객체 스토리지들 중 제2 객체 스토리지에 기록하는 단계를 더 포함하는, 저장 시스템 작동 방법.
  19. 객체를 저장하기 위한 수단; 및
    복수의 처리 회로들을 포함하고, 객체를 저장하기 위한 상기 수단에 연결된 복수의 데이터 관리자들을 포함하되,
    상기 복수의 처리 회로들 중 입출력 작업을 처리하도록 구성되는 제1 처리 회로; 및
    상기 복수의 처리 회로들 중 입출력 완료를 처리하도록 구성되는 제2 처리 회로를 포함하는, 저장 시스템.
  20. 제19 항에 있어서,
    상기 제2 처리 회로는 단일 소프트웨어 스레드를 실행하도록 구성되는, 저장 시스템.
KR1020217040112A 2020-02-03 2021-02-02 객체 저장 방법 및 이를 이용하는 분산 객체 스토리지와 시스템 KR20220139784A (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US202062969650P 2020-02-03 2020-02-03
US202062969623P 2020-02-03 2020-02-03
US62/969,623 2020-02-03
US62/969,650 2020-02-03
US202062970158P 2020-02-04 2020-02-04
US62/970,158 2020-02-04
PCT/IB2021/000056 WO2021156676A2 (en) 2020-02-03 2021-02-02 Data management system and method of controlling

Publications (1)

Publication Number Publication Date
KR20220139784A true KR20220139784A (ko) 2022-10-17

Family

ID=77199204

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020227024359A KR20220137632A (ko) 2020-02-03 2021-02-02 데이터 관리 시스템 및 제어 방법
KR1020217040112A KR20220139784A (ko) 2020-02-03 2021-02-02 객체 저장 방법 및 이를 이용하는 분산 객체 스토리지와 시스템

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020227024359A KR20220137632A (ko) 2020-02-03 2021-02-02 데이터 관리 시스템 및 제어 방법

Country Status (5)

Country Link
US (2) US20230046216A1 (ko)
EP (2) EP4100846A4 (ko)
KR (2) KR20220137632A (ko)
CN (2) CN115053214A (ko)
WO (2) WO2021156677A2 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109814805B (zh) * 2018-12-25 2020-08-25 华为技术有限公司 存储系统中分条重组的方法及分条服务器
US20220138169A1 (en) * 2020-11-04 2022-05-05 Netapp Inc. On-demand parallel processing of objects using data connector components
US11625306B2 (en) 2020-11-04 2023-04-11 Netapp, Inc. Data connector component for implementing data requests
US11741073B2 (en) 2021-06-01 2023-08-29 Alibaba Singapore Holding Private Limited Granularly timestamped concurrency control for key-value store
US11755427B2 (en) 2021-06-01 2023-09-12 Alibaba Singapore Holding Private Limited Fast recovery and replication of key-value stores
US11829291B2 (en) * 2021-06-01 2023-11-28 Alibaba Singapore Holding Private Limited Garbage collection of tree structure with page mappings
CN116301669B (zh) * 2023-05-25 2023-08-11 成都凯天电子股份有限公司 一种基于fpga的高速存储系统分区方法及系统
CN117093158B (zh) * 2023-10-17 2024-02-06 苏州元脑智能科技有限公司 分布式存储系统的存储节点、系统、数据处理方法及装置

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5931954A (en) * 1996-01-31 1999-08-03 Kabushiki Kaisha Toshiba I/O control apparatus having check recovery function
US7685126B2 (en) * 2001-08-03 2010-03-23 Isilon Systems, Inc. System and methods for providing a distributed file system utilizing metadata to track information about data stored throughout the system
US9176975B2 (en) * 2006-05-31 2015-11-03 International Business Machines Corporation Method and system for transformation of logical data objects for storage
US8793457B2 (en) * 2007-01-22 2014-07-29 International Business Machines Corporation Method and system for policy-based secure destruction of data
US20130086311A1 (en) * 2007-12-10 2013-04-04 Ming Huang METHOD OF DIRECT CONNECTING AHCI OR NVMe BASED SSD SYSTEM TO COMPUTER SYSTEM MEMORY BUS
US20140331001A1 (en) * 2013-05-02 2014-11-06 Lsi Corporation Command Barrier for a Solid State Drive Controller
WO2015048140A1 (en) 2013-09-24 2015-04-02 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for storage collision management
US10073630B2 (en) 2013-11-08 2018-09-11 Sandisk Technologies Llc Systems and methods for log coordination
US10949507B2 (en) * 2014-10-17 2021-03-16 Vulpecula, Llc. Methods, systems, and computer program products for web browsing
KR101730991B1 (ko) * 2014-10-28 2017-04-28 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
US9753655B2 (en) * 2014-12-30 2017-09-05 Samsung Electronics Co., Ltd. Computing system with write buffer including speculative storage write and method of operation thereof
US9904481B2 (en) * 2015-01-23 2018-02-27 Commvault Systems, Inc. Scalable auxiliary copy processing in a storage management system using media agent resources
KR102403489B1 (ko) * 2015-07-10 2022-05-27 삼성전자주식회사 비휘발성 메모리 익스프레스 컨트롤러에 의한 입출력 큐 관리 방법
US10282103B1 (en) * 2015-11-09 2019-05-07 Seagate Technology Llc Method and apparatus to delete a command queue
US20170168956A1 (en) * 2015-12-15 2017-06-15 Facebook, Inc. Block cache staging in content delivery network caching system
US10108349B2 (en) * 2016-06-06 2018-10-23 Vmware, Inc. Method and system that increase storage-stack throughput
FR3057081B1 (fr) * 2016-10-05 2019-11-08 Airbus Operations Processeur comprenant une pluralite de coeurs de calcul
US10216445B2 (en) * 2017-06-30 2019-02-26 Intel Corporation Key-value deduplication
CN111316251B (zh) * 2017-11-06 2024-04-16 海量数据有限公司 可扩展存储系统
US10949303B2 (en) * 2017-12-11 2021-03-16 Fungible, Inc. Durable block storage in data center access nodes with inline erasure coding
US10592139B2 (en) 2018-05-30 2020-03-17 EMC IP Holding Company LLC Embedded object data storage determined by object size information
US10691373B2 (en) * 2018-07-18 2020-06-23 EMC IP Holding Company LLC Object headers facilitating storage of data in a write buffer of a storage system
US11681625B2 (en) * 2018-12-20 2023-06-20 Intel Corporation Receive buffer management
US11734204B2 (en) * 2019-04-02 2023-08-22 Intel Corporation Adaptive processor resource utilization
US11048430B2 (en) * 2019-04-12 2021-06-29 Netapp, Inc. Object store mirroring where during resync of two storage bucket, objects are transmitted to each of the two storage bucket
US10831684B1 (en) * 2019-07-31 2020-11-10 EMC IP Holding Company, LLC Kernal driver extension system and method
US11556391B2 (en) * 2019-10-21 2023-01-17 EMC IP Holding Company LLC CPU utilization for service level I/O scheduling
US11579799B2 (en) * 2020-03-18 2023-02-14 Micron Technology, Inc. Dynamic selection of cores for processing responses

Also Published As

Publication number Publication date
WO2021156676A2 (en) 2021-08-12
EP4100845A4 (en) 2024-02-21
US20230046216A1 (en) 2023-02-16
US20230053087A1 (en) 2023-02-16
EP4100846A4 (en) 2024-03-20
EP4100846A2 (en) 2022-12-14
WO2021156677A2 (en) 2021-08-12
CN115053214A (zh) 2022-09-13
EP4100845A2 (en) 2022-12-14
KR20220137632A (ko) 2022-10-12
WO2021156676A3 (en) 2021-09-23
CN115427941A (zh) 2022-12-02
WO2021156677A3 (en) 2021-09-30

Similar Documents

Publication Publication Date Title
KR20220139784A (ko) 객체 저장 방법 및 이를 이용하는 분산 객체 스토리지와 시스템
US10365838B2 (en) N-way merge technique for updating volume metadata in a storage I/O stack
US10042853B2 (en) Flash optimized, log-structured layer of a file system
US8880787B1 (en) Extent metadata update logging and checkpointing
US9405473B2 (en) Dense tree volume metadata update logging and checkpointing
US9563654B2 (en) Dense tree volume metadata organization
US9582421B1 (en) Distributed multi-level caching for storage appliances
US10108547B2 (en) High performance and memory efficient metadata caching
US9152684B2 (en) Snapshots and clones of volumes in a storage system
US9529546B2 (en) Global in-line extent-based deduplication
US20170212891A1 (en) Scheduling technique to smooth metadata processing latency
US20160077744A1 (en) Deferred reference count update technique for low overhead volume metadata
US20160070644A1 (en) Offset range operation striping to improve concurrency of execution and reduce contention among resources
US20170032005A1 (en) Snapshot and/or clone copy-on-write
EP2691889B1 (en) Resource efficient scale-out file systems
US9189408B1 (en) System and method of offline annotation of future accesses for improving performance of backup storage system
US20230026819A1 (en) Techniques for metadata updating and retrieval
US12008241B2 (en) Techniques for collecting and utilizing activity metrics
US20230325324A1 (en) Caching techniques