소개
수많은 기능이 서버 내에서 호드의 스토리지 시스템을 사용합니다. 여러 측면에서 스토리지 레이어는 변경 불가능한 콘텐츠 어드레서블 스토어로 기능하지만(즉, 항목이 해당 콘텐츠의 해시를 통해 저장되고 얻어짐), 디스크상 표현은 보다 익숙한 위치 기반 스토리지 백엔드에서 고유 식별자와 함께 저장되는, 큰 번들로 패킹된 데이터로 구성됩니다.
이 시스템의 중요한 기능으로 대규모 데이터 구조를 추론하는 기능이 있습니다. 즉, 스토리지 시스템의 개별 노드(데이터의 일부 임의 블록)는 변경 불가능하고 다른 노드에 대한 0 이상의 표면적인 레퍼런스를 보유한다는 것이 특징입니다. 이 트리 모양의 데이터 구조는 개별 노드를 효율적으로 얻고 저장하는 기본 스토리지 시스템을 통해 한 번에 한 노드를 통과할 수 있습니다.
그러한 데이터 구조에 대한 엔트리 포인트는 레퍼런스, 즉 트리의 루트에 대한 레퍼런스를 유지하는 사용자 정의된 이름입니다. 레퍼런스에서 직간접적으로 참조되지 않는 모든 노드는 가비지 컬렉션의 대상이 됩니다.
이러한 설계는 큰 데이터 블록을 작은 청크로 분할하여 광범위한 페이로드 크기를 지원하려는 의도이며, 캐싱과 증분 클라이언트 데이터 패칭에 이점이 있습니다. 따라서 레퍼런스가 128KB 청크로 분할된 수 기가바이트의 페이로드를 가리키게 되므로, 단일 4KB 페이로드를 가리키게 하는 것이 합리적입니다.
네임스페이스 및 백엔드
스토리지는 겹치지 않는 여러 네임스페이스로 분할되며, 각 네임스페이스는 서로 다른 백엔드를 사용하도록 환경설정할 수 있습니다. 스토리지의 콘텐츠에 액세스하는 권한은 일반적으로 네임스페이스 수준에서 제어되지만, 일부 고수준 시스템(예: 로그, 아티팩트)은 지원하는 네임스페이스에 직접 액세스할 필요 없이 자체 권한 모델을 제공하는 기본 스토리지 네임스페이스에 커스텀 엔드포인트를 노출합니다.
네임스페이스 및 백엔드는 globals.json 파일의 Storage 섹션을 통해 환경설정됩니다.
네임스페이스
네임스페이스는 논리적인 스토리지 파티션을 위해 권한과 가비지 컬렉션 정책을 환경설정합니다. 또한 실제 데이터 저장에 사용할 백엔드도 지정합니다.
Prefix 프로퍼티를 설정하여 저장된 파일에 접두사를 덧붙이면 여러 네임스페이스가 동일한 스토리지 백엔드를 사용할 수 있습니다.
네임스페이스 세팅은 globals.json 스키마에 설명되어 있습니다.
백엔드
호드는 다음과 같이 로컬 디스크상 캐시, 메모리 내 캐시뿐만 아니라 몇 가지 스토리지 백엔드를 지원합니다.
- 로컬 디스크
- 네트워크 공유
- AWS S3 Object Store
- Azure Blob Store
백엔드 세팅은 globals.json 스키마에 설명되어 있습니다.
잘 알려진 네임스페이스
호드의 특정 서브시스템은 잘 알려진 네임스페이스 이름을 사용하며, 이는 원하는 대로 환경설정할 수 있습니다. 이러한 네임스페이스는 StorageConfig.cs 에 정의되어 있으며 현재 다음과 같이 구성되어 있습니다.
| 이름 | 설명 |
|---|---|
horde-artifacts |
CI 시스템의 작업 단계에서 생성된 아티팩트를 저장합니다. |
horde-perforce |
CI 시스템에서 사용되는 리플리케이트된 Perforce 데이터입니다. |
horde-logs |
CI 시스템의 단계에서 생성된 로그입니다. |
horde-tools |
호드 대시보드에서 다운로드할 수 있는 독립형 툴입니다. |