ZeroFS: S3 호환 스토리지를 위한 로그 구조 파일 시스템
ZeroFS: S3 호환 스토리지를 위한 로그 구조 파일 시스템
ZeroFS는 S3 호환 객체 스토리지를 사용 가능한 POSIX 파일 시스템 또는 원시 블록 장치로 변환합니다. 로그 구조 엔진을 활용함으로써 ZeroFS는 클라우드 버킷을 기본 스토리지처럼 사용할 수 있게 하여 객체 스토리지의 확장성과 전통적인 파일 시스템의 인터페이스 요구 사항 사이에 다리를 놓습니다.
아키텍처 및 스토리지 엔진
ZeroFS는 S3 호환 버킷에서 데이터를 관리하기 위해 로그 구조 방식을 사용합니다. 데이터를 제자리에서 재작성하는 대신, 쓰기는 불변 객체로 처리되며, 압축 과정이 삭제된 데이터로부터 공간을 회수합니다.
엔진의 주요 기술적 특성은 다음과 같습니다:
- 불변 세그먼트: 파일 데이터는 불변 세그먼트 객체 내의 32 KiB 익스텐트로 구성됩니다. 별도의 메타데이터 인덱스가 이러한 익스텐트를 추적하여 체크포인트와 읽기 복제본이 버킷에 대한 일관된 뷰를 유지하도록 합니다.
- 암호화 및 압축: 모든 데이터는 업로드 전에 XChaCha20-Poly1305로 암호화됩니다. 데이터 키는 Argon2id를 통해 파스워드에서 파생된 키로 래핑됩니다. 암호화 전에 데이터는 zstd 또는 lz4 중 하나로 압축되며, 읽을 때 코덱을 감지해 데이터 마이그레이션 없이 압축 설정을 변경할 수 있습니다.
- 캐싱: S3 왕복 지연시간(보통 50–300 ms)을 완화하기 위해 ZeroFS는 구성 가능한 메모리 및 디스크 캐시를 구현합니다. 이러한 캐시에서의 워밍 리드는 마이크로초 단위로 반환될 수 있습니다.
- TRIM 지원: 파일 시스템이나 ZFS 풀에서 발생하는 discard 명령은 해당 익스텐트를 해제합니다. 이후 압축 과정이 살아있는 데이터를 재패킹하고 S3에서 빈 세그먼트를 삭제해 스토리지 비용을 절감합니다.
접근 프로토콜 및 인터페이스
ZeroFS는 스토리지 백엔드와 상호 작용하는 세 가지 주요 방식을 제공하며, 모두 단일 사용자 공간 프로세스 내에서 실행됩니다:
POSIX 파일 시스템 (NFS 및 9P)
- NFS: 네이티브 NFS 지원을 이용해 macOS, Linux, Windows, BSD 등 주요 운영 체제에서 마운트할 수 있으며, 클라이언트 측 소프트웨어가 필요 없습니다.
- 9P: NFS보다 POSIX 의미론에 더 가깝게 맞춥니다. 루트 권한 없이 마운트할 수 있는 번들된 FUSE 클라이언트를 포함하며 자동 재연결을 지원합니다.
원시 블록 장치 (NBD)
- NBD (Network Block Device): 버킷을 원시 블록 장치로 제공합니다. 이러한 장치는 ext4 파일 시스템, ZFS 풀 또는 VM 부팅 디스크를 호스트할 수 있습니다. 새 장치는 서버를 재시작하지 않고도 런타임에 추가할 수 있습니다.
고가용성 및 데이터 무결성
ZeroFS는 내구성과 일관성을 보장하기 위해 여러 기능을 구현합니다:
- 정직한 fsync: 성공적인
fsync작업은 모든 확인된 쓰기가 S3에 영구적으로 저장되었음을 확인합니다. 장애 발생 시 플러시되지 않은 쓰기가 손실되면 이후fsync는 거짓 성공이 아닌 오류를 반환합니다. - 고가용성 (HA): 선택적인 대기 인스턴스가 동일한 버킷을 통해 리더를 추적합니다. 대기 인스턴스는 리더가 확인했지만 아직 플러시되지 않은 쓰기를 보관하여 장애 시 자동으로 인계받으며 해당 쓰기를 보존합니다.
- 체크포인트: 명명된 체크포인트를 통해 파일 시스템을 특정 시점에 캡처하고 읽기 전용으로 열 수 있습니다.
- 읽기 복제본: 다중 읽기 전용 인스턴스가 동일한 버킷을 제공하며, 단일 작성자가 만든 변경 사항을 자동으로 반영합니다.
검증 및 테스트
ZeroFS는 안정성과 성능을 검증하기 위해 광범위한 공개 CI 파이프라인을 사용합니다:
- POSIX 준수:
pjdfstest스위트를 모든 변경에 대해 실행해 권한, 소유권, 링크 및 이름 변경 동작을 검증합니다. - 커널 검증:
xfstests스위트( ext4 및 XFS 검증에 사용)를 NFS, 9P 및 FUSE에서 실행합니다. - 엔드‑투‑엔드 ZFS 테스트: CI는 ZeroFS 블록 장치에 ZFS 풀을 구축하고, Linux 커널 소스 트리를 추출한 뒤 전체 스크러빙을 수행해 체크섬 오류가 없음을 확인합니다.
- 스트레스 테스트: 시스템은
stress-ng와 병렬 Linux 커널 컴파일(make -j$(nproc))을 사용해 테스트합니다. - 모델 기반 검사: Jepsen의
local-fs스위트를 사용해 무작위 연산 이력에 대한 파일 시스템 모델을 검증하고, 충돌 복구 테스트를 포함합니다.
커뮤니티 인사이트 및 반론
프로젝트가 높은 기술적 야망을 보여주지만, Hacker News의 커뮤니티 토론에서는 몇 가지 주의점이 강조됩니다:
- 지연 시간 우려: 일부 사용자는 서브밀리초 쓰기 주장이 오해의 소지가 있다고 주장합니다. 이는 네트워크 또는 커널 지연 시간을 측정했을 가능성이 높으며, 데이터가 S3에 영구 저장되는 데 필요한 시간을 반영하지 않는다고 지적합니다.
"S3에 데이터가 있는 서브밀리초 쓰기는 거짓이며 불가능합니다. 벤치마크를 보면 fsync가 시간 측정에 포함되지 않으므로 이는 네트워크 또는 커널 파일 작업의 지연 시간일 뿐입니다..."
추상화 오버헤드: 비평가들은 객체 저장소를 파일 시스템 뒤에 추상화하는 것이 객체 저장소와 파일 시스템의 작동 방식 차이 때문에 본질적으로 비효율적이라고 지적합니다. 일부는 파일 시스템 추상화 대신 애플리케이션이 "객체 저장소 인식"하도록 권장합니다.
성능 vs. Ceph: 일부 사용자는 로컬 S3 환경에서 ZeroFS 성능이 특히 작은 I/O 작업에 대해 Ceph와 같은 대안보다 현저히 낮다고 주장합니다.
메타데이터 관리: 장애 발생 시 메타데이터가 어떻게 처리되는지, 고가용성을 단순화하기 위해 메타데이터가 이제 버킷 전체에 저장되는지에 대한 질문이 제기되었습니다.
요약
ZeroFS는 로그 구조 파일 시스템으로, S3 호환 버킷을 NFS 및 9P를 통한 POSIX 파일 시스템이나 NBD를 통한 원시 블록 장치로 사용할 수 있게 하며, 내장된 암호화와 압축 기능을 제공합니다.
제목
ZeroFS: S3 호환 스토리지를 위한 로그 구조 파일 시스템