본문으로 건너뛰기
HexaTransfer
블로그로 돌아가기
기술 심층 분석

분산 파일 스토리지 이해 작동 원리

IPFS, Ceph 같은 분산 파일 스토리지 시스템을 이해하세요. 현대 스토리지의 복제, 일관성, 내결함성에 대해 다룹니다.

개인정보 보호법(PIPA) 시행령 제30조는 개인정보 처리 시스템의 접근 통제와 데이터 보존 안전성을 요구합니다. 분산 파일 스토리지는 데이터를 여러 노드에 분산해 단일 장애 지점을 제거합니다. Ceph(오브젝트/블록/파일), GlusterFS(POSIX), HDFS(빅데이터 배치), MinIO(S3 호환), IPFS와 Filecoin(콘텐츠 주소 지정) 각각이 서로 다른 워크로드를 대상으로 하며 트레이드오프도 실재합니다.

복제 vs. 이레이저 코딩

두 가지 전략이 노드 장애를 방지합니다. 복제는 여러 개의 전체 복사본을 저장합니다: Ceph의 기본값은 3x 복제로, 1GB 객체는 3GB의 원시 스토리지를 사용합니다. 이해하기 쉽고 읽기가 빠르지만 스토리지 비용이 높습니다. 이레이저 코딩은 Reed-Solomon 코드를 사용해 데이터를 k개의 데이터 청크와 m개의 패리티 청크로 분할합니다. (10,4) 방식은 14개 청크를 저장하고 200% 오버헤드 대신 40% 오버헤드로 4개의 장애를 견딥니다. MinIO는 이레이저 코딩을 기본값으로 사용하고, Backblaze Vaults는 17+3 Reed-Solomon을 사용합니다.

일관 해싱과 데이터 배치

시스템은 어떤 노드가 어떤 객체를 저장할지 어떻게 결정할까요? DynamoDB와 Cassandra를 통해 대중화된 일관 해싱은 키를 링에 해시하고 각 범위를 노드에 매핑합니다. 노드 추가나 제거 시 전체 데이터셋이 아닌 일부 키만 이동합니다. Ceph는 토폴로지 맵(랙, 행, 데이터센터)을 기반으로 객체를 배치하는 결정론적 알고리즘 CRUSH(Controlled Replication Under Scalable Hashing)를 사용해 복제본이 서로 다른 장애 도메인에 위치하도록 합니다.

일관성 모델: 강한 일관성, 최종적 일관성, 인과적 일관성

CAP 정리는 일관성, 가용성, 파티션 허용성을 동시에 가질 수 없다고 말합니다. 강한 일관성(선형화 가능성)은 읽기가 최신 쓰기를 보장합니다—Spanner와 etcd가 Paxos나 Raft 같은 합의 프로토콜로 이를 제공합니다. 최종적 일관성(DynamoDB, Cassandra, 일부 S3 작업)은 복제본이 시간이 지남에 따라 수렴하며 전파 중 오래된 읽기가 가능합니다. 파일 스토리지는 종종 메타데이터에는 최종적 일관성을, 같은 객체의 읽기-후-쓰기에는 강한 일관성을 수용합니다.

Ceph 아키텍처: OSD, 모니터, 매니저, MDS

Ceph는 네 가지 데몬 유형을 실행합니다. OSD(Object Storage Daemon)는 객체를 저장하고 복제하며, 클러스터는 일반적으로 10~1,000개의 OSD를 스피닝이나 NVMe 디스크에 운영합니다. 모니터(MON)는 Paxos로 클러스터 상태를 유지하며 3~5개로 쿼럼을 제공합니다. 매니저(MGR)는 메트릭을 노출하고 대시보드를 호스팅합니다. MDS(메타데이터 서버)는 CephFS POSIX 파일시스템 계층을 제공합니다. RADOS Gateway(RGW)로 오브젝트 스토리지 S3·Swift API, RBD로 블록 스토리지를 제공합니다.

HDFS와 Hadoop 유산

HDFS(Hadoop Distributed File System)는 MapReduce와 Spark 작업을 위한 대용량 순차 읽기를 대상으로 합니다. 파일은 128MB 또는 256MB 블록으로 분할되어 DataNode에 3x 복제됩니다. NameNode는 모든 메타데이터를 메모리에 보유해 NameNode당 약 5억 파일로 규모가 제한됩니다. HDFS는 소규모 파일이나 POSIX 호환성에는 좋지 않지만 TB 규모 데이터셋 분석에는 탁월합니다. 클라우드 시대에는 컴퓨팅과 스토리지가 분리되면서 오브젝트 스토리지(S3, GCS)에 자리를 내주고 있습니다.

콘텐츠 주소 스토리지: IPFS와 Filecoin

IPFS(InterPlanetary File System)는 위치가 아닌 해시(CID, Content IDentifier)로 콘텐츠를 식별합니다. 동일한 콘텐츠를 저장하는 누구든 동일한 CID를 생성합니다. 검색은 Kademlia 기반 DHT(분산 해시 테이블)를 사용해 콘텐츠를 보유한 노드를 찾습니다. Filecoin은 경제적 인센티브를 추가해 채굴자가 PoRep(복제 증명)과 PoSt(시공간 증명)으로 스토리지를 증명하고 FIL 토큰을 획득합니다. DHT 조회 지연(수백 밀리초~초)으로 대화형 워크로드에는 느립니다.

오브젝트 스토리지: S3, R2, B2, MinIO

오브젝트 스토리지는 단순한 키-값 API를 제공합니다: 키로 객체를 PUT하고 다시 GET합니다. 디렉토리도 POSIX 시맨틱도 없습니다. 이 단순함이 엄청난 규모를 가능하게 합니다—AWS S3는 11개 나인(eleven nines) 내구성으로 수조 개의 객체를 저장합니다. Cloudflare R2, Backblaze B2, Wasabi, DigitalOcean Spaces가 서로 다른 백엔드에서 S3 API를 구현합니다. MinIO는 온프레미스에서 오픈 소스 AGPL v3로 실행되며, Kubernetes StatefulSet으로 배포해 범용 하드웨어에 S3 호환 스토리지를 제공합니다.

이레이저 코딩의 실제: 재구성 작동 방식

노드가 죽으면 남은 노드들이 손실된 청크를 재구성합니다. (10,4) Reed-Solomon 코드에서 14개 청크 중 어떤 10개라도 유한 필드 위의 행렬 대수로 원래 10개의 데이터 청크를 재구성합니다. Azure가 사용하는 LRC(Local Reconstruction Codes)와 Hitchhiker 코드 같은 최신 코드는 부분 읽기를 허용해 재구성 대역폭을 줄입니다.

테일 지연과 헤지 요청

분산 시스템은 긴 꼬리를 가집니다. 느린 디스크나 혼잡한 네트워크에 걸린 요청은 중앙값의 10배가 걸릴 수 있습니다. 구글의 논문 "The Tail at Scale"(Dean & Barroso, 2013)이 헤지 요청—두 노드에 중복 읽기를 보내 먼저 응답하는 것을 사용—같은 기술을 체계화했습니다. Ceph, DynamoDB, Spanner가 모두 변형을 사용합니다.

파일 전송 서비스는 일반적으로 POSIX 파일시스템이 아닌 오브젝트 스토리지 위에 구축됩니다. HexaTransfer는 클라이언트 측 AES-256-GCM 암호화와 함께 S3 호환 백엔드를 사용해, 분산 스토리지 계층이 내구성을 처리하면서 앱 계층은 파일 콘텐츠를 모든 계층으로부터 비공개로 유지합니다.

https://hexatransfer.com — 무료, 계정 불필요, 최대 10GB.

엔드투엔드 암호화로 대용량 파일을 안전하게 전송

엔드투엔드 암호화로 최대 10GB의 파일을 무료로 전송하세요. 계정이 필요하지 않습니다. 업로드 전에 브라우저에서 파일이 암호화되어 다른 사람은 읽을 수 없습니다.

파일 보내기