Computing

Distributed File System 본문

Cloud/Storage

Distributed File System

jhson989 2022. 11. 3. 21:30

File System

파일 시스템은 컴퓨터 저장장치(HDD, SSD)에 파일(=데이터)을 어떻게 저장하고 읽어올지를 담당하는 OS의 함수와 자료구조를 가리킨다[3]. 우리가 데이터를 컴퓨터에 저장할 때, 데이터를 파일의 형태로 저장하고 이들을 디렉토리(directory) 구조로 배치하여 관리한다. 이러한 계층적 구조를 통해 사람들은 쉽게 데이터를 저장하고 읽어올 수 있다.

 

Fig 1. 파일시스템의 디렉토리 구조 예시

 

파일 시스템의 특징은 데이터를 파일(opaque data type이라고도 한다)의 형태로 저장한다는 것이다. 파일은 실제 저장되는 데이터뿐만 아니라, 데이터의 주인은 누구이고, 언제 생성되었으며, 크기는 얼마인지 등에 대한 메타데이터(Metadata, data를 관리하기 위한 data)를 함께 저장한다.

 

또한 앞서 말했듯, 디렉토리라는 계층적 구조로 파일들을 관리한다. 한 파일은 그 파일이 저장된 디렉토리 경로와 그 파일의 이름으로 식별된다. 그렇기에 한 파일시스템 내에는 디렉토리 경로와 파일의 이름이 모두 일치하는 파일은 존재하면 안된다(이름이 같은 파일들이 서로 다른 폴더 내에 존재할 수는 있다). 이를 위해 파일시스템은 파일들의 이름공간(Namespace, 디렉토리경로+파일이름)을 관리하며, 파일의 디렉터리경로+파일이름이 유일한 지를 항상 확인한다.

 

하드웨어(=저장장치)를 조작하기에 일반적으로 커널 코드로 구현되지만, FUSE[1]를 통해 userspace file system을 개발할 수 있기도 하다. 개발자는 파일 시스템 API를 통해서 물리적인 저장장치에 상관없이 디렉토리 구조 속에서 파일들을 관리(생성, 읽기, 수정, 삭제 등)하는 애플리케이션을 개발할 수 있다. 이러한 파일 시스템 API는 대부분 POSIX-like interface이다. 

 

 

 

Distributed File System 특징

기존의 파일 시스템은 하나의 컴퓨터 내에 있는 저장장치(SSD, HDD)를 기반으로 하여, 해당 컴퓨터에서 실행되는 프로세스만 직접 접근할 수 있다. 한 컴퓨터의 자원만을 사용하는 기존 파일 시스템은 여러 가지 한계가 있을 수 밖에 없다. 일단, 한 컴퓨터에 설치할 수 있는 저장장치의 개수에는 한계가 있기에 파일 시스템의 용량을 무한히 늘릴 수 없다. 또한, 그 컴퓨터가 고장나면 더 이상 데이터에 접근할 수 없다. 이러한 한계뿐만 아니라, 여러 컴퓨터 사이에 데이터를 공유하는 서비스(클라우드 스토리지 등)가 등장하면서 물리적인 컴퓨터 한대에서 벗어난 파일 시스템이 필요하게 되었다.

 

Fig 2. 분산 파일 시스템 예시[4]

 

분산 파일 시스템(Distributed File System)은 이러한 기존 파일 시스템의 한계에서 벗어난다. Fig 2.는 분산 파일 시스템 예시를 나타내는 것이다. 네트워크로 묶인 파란색으로 색칠된 컴퓨터(=서버) 4개(1개의 MDS, 3개의 OSSs)를 하나의 파일 시스템으로 보여주는 것이 분산 파일 시스템이다. Client들은 파랑색 서버 4개를 하나의 파일 시스템이라고 생각하고 기존 파일 시스템에서 하던 것과 같이 파일을 생성, 수정, 읽기, 삭제 할 수 있다. (기존의 파일 시스템이 제공하는 모든 기능을 제공할 수 있다.)

 

이러한 분산 파일 시스템의 장점으로는 데이터 보관의 안정성(High availability), 높은 확장성(scalability), 데이터 공유 가능을 뽑을 수 있다. 

 

분산 파일 시스템은 RAID[5] 시스템과 같은 역할을 수행한다. 즉 데이터 하나의 복제본을 여러 서버에 분산하여 저장한다. 설정을 통해 어떤 파일을 첫 번째 OSS, 두 번째 OSS에 복사하여 저장할 수 있다(대부분 3개 이상의 서버를 사용하여 저장하는 것 같다). 첫 번째 OSS가 고장나더라도 두 번째 OSS에서 데이터를 읽어올 수 있기에 서비스 장애가 발생하지 않는다.

 

또한 여러 컴퓨터를 묶어서 하나의 파일 시스템으로 제공하기에, 컴퓨터 한대에 비해 하드디스크를 매우 많이 추가할 수 있다. 이를 통해 페타바이트급 이상의 스토리지 시스템이 가능해진다. 다만 하드디스크를 많이 추가할수록 관리해야할 디스크 영역이 많아지기에 성능을 유지할 수 있는 우수한 분산 파일 시스템 설계가 필요할 것이다.

 

마지막으로 분산 파일시스템은 네트워크로 접근할 수 있기에 여러 Client들이 동시에 사용할 수 있다. 즉 구글드라이브와 같이 데이터 공유가 가능하다. 다만 파일 consistency 문제(여러 client들이 동시에 한 파일에 접근하면 어떻게 하냐)나 보안 문제, 네트워크 사용으로 인한 입출력 성능 감소(컴퓨터 내에 설치된 하드디스크보다 입출력 성능은 떨어질 것이다) 등 분산 파일 시스템을 사용함에 따라 여러 새로운 문제들이 발생한다.

 

대부분의 분산 파일 시스템은 많은 사용자(Client)가 동시에 사용하는 환경에서 사용될 것이다. 따라서 많은 양의 데이터 입출력을 빠르게 처리할 수 있어야 한다. 저장되는 데이터양도 많아 파일시스템의 네임스페이스 또한 매우 클 것이다. 따라서 입출력 성능 향상을 위한 연구가 필요하다(네트워크 성능 향상(infini-band 사용), stripped 데이터 저장 metadata server와 storage server의 분리 등). 마찬가지로 거대한 네임스페이스에서 네임을 빠르게 검색하기 위한 연구 또한 필요하다.

 

대표적인 분산 파일 시스템으로는 AFS, NFS, Ceph, Lustre, HDFS, GlusterFS 등이 있다[6]. 각각에 대해서는 앞으로 천천히 정리해 나갈 예정이다.

 

 

 

Reference

[1] https://www.kernel.org/doc/html/latest/filesystems/fuse.html

[2] https://beknazarsuranchiyev.medium.com/os-file-and-file-system-cd54d3bbb91a

[3] https://en.wikipedia.org/wiki/File_system

[4] https://techcommunity.microsoft.com/t5/azure-high-performance-computing/parallel-virtual-file-systems-on-microsoft-azure-part-2-lustre/ba-p/306524

[5] https://ko.wikipedia.org/wiki/RAID

[6] Jakob Blomer. A Survey of Distributed File System Technology. CERN PH/SFT and Stanford University. ACAT 2014. Prague