본문 바로가기

컴퓨터 공학/데이터 베이스

The Google File System -Google 인트로

GFS Architecture

ABSTRACT(초록)

 우리는 GFS(구글파일시스템)을 설계했고 구현하였다. GFS는 scalable하며 큰 데이터를 처리하는 분산 시스템이다. 이것은 비싸지 않는 하드웨어 위에서 동작하며 fault tolerance 또한 제공하며 많은 수의 클라이언트들에게 높게 측정된 성능을 제공한다. 

 이전의 다른 분산파일 시스템의 목들을 공유하면서, GFS의 디자인은 구글의 어플리케이션과 기술환경 그리고 현재 또는 예상되는 파일시스템의 가정으로부터 추진되었다. 이것은 우리가 기존 전통적인 선택을 다시 고려하도록 그리고 급직적으로 다른 디자인 포인트를 연구하도록 이끌었다.

 GFS는 우리의 저장소의 욕구를 성공적으로 만족시켰고 구글 내부에서 스토리지 플랫폼으로서 연구용 그리고 서비스용으로 사용되고 있다. 수천대의 커다란 클러스터 머신은 동시의 수백명의 클라이언트가 동시접속할 수 있다.

 이 논문에서 우리는 분산 어플리케이션을 지원하기 위한 파일시스템 인터페이스 확장을 제공하고 많은 우리의 디자인 측면에 대해 토론하고, 마이크로 밴치와 실세계 어플리케이션을 통해 성능을 측정할 것이다.

Introduction

우리는 파일 시스템을 공간을 디자인 하는 측면에서 기존의 선택들을 다시 검토해보고 급진적인 다른 관점에서 살펴보았다.

 

 첫 째로, 우선 컴포넌트 Failure는 예외가 아니라 일반적으로 발생하는 현상이다. 파일 시스템은 수백개 혹은 그 이상의 수천개의 Commadity(일반적인)하드웨어로 구성된 스토리지 머신들 위에서 동작한다. 따라서 컴포넌트들은 몇몇 경우에 동작하지 않거나 그 failure로 부터 복구할 수 없는 상황이 생긴다. 우리는 이러한 문제들이 어플리케이션 버그, OS버그, Disk failure, memory, connectors, networking, power supplies에 의해서 발생한 다는 것을 알았다. 그래서 우리는 error detection, fault tolerance, automatic recovery 같은 부분은 시스템에서 가장 중요한 부분이다.

 

둘 째로, 파일은 전통적인 표준에 의해 거대하다. 수백 기가바이트의 파일은 일반적이다. 또한 각각의 파일은 수많은 어플리케이션의 웹 문서와 같은 객체(Object)들로 가득하다. 우리가 점점 증가하는 데이터 테라바이트 단위의 수없이 많은 객체들과 함께 작업을 하다보면, 수천만개의 키로바이트 사이즈의 파일을 다루기는 너무 불편하다. 따라서 결론적으로 우리는 I/O 작업이나, 블록사이즈, 파라미터 같은 부분들을 다시 재정의 할 필요가 있다.

 

셋 째로, 대부분의 파일들은 덮어 씌여지는 것이 아니라 새로운 데이터가 추가됨으로서 변한다. 따라서 파일 중간에 Random적으로 접근하는 것은 존재하지 않는다. 한번 씌여지면, 파일은 차례대로 읽히기만 한다. 다양한 데이터들은 이러한 성격을 공유한다. 몇몇은 데이터 분석 프로그램이 스캔하는 데이터를 구성하는 폴더들을 만들 것이다. 몇몇은 연속적으로 만들어지는 스트리밍 형식의 데이터를 저장할 것이다. 몇몇은 기록문서를 저장할 것이다. 또한 몇몇은 데이터 처리의 중간 결과물을 저장할 것이다. 이러한 여러가지 패턴이 주어졌을 때 파일을 추가하는 것은 성능 최적화와 atomic guarantees에 초점을 맞출 것이다. 이러한 Troughput이 높은 파일시스템에서 블록 캐싱은 매력을 상실할 것이다.

 

넷 째로, 어플리케이션과 파일 시스템 API를 함께 디자인 하는 것은 전반적인 시스템의 융통성을 상스시키는데 도움이 된다. 예를들어 우리는 GFS의 consistency 모델을 완화하였는데, 어플리케이션에 힘든 부담을 주지 않고 파일 시스템을 단순화함으로서 구현하였다. 또한 우리는 여러명의 클라이언트가 그들 사이의 추가로 동기화 작업 없이도 동시에 추가할 수 있도록 하기 위해서 원자적 추가 방식을 도입하였다. 이러한 방식은 뒤에서 추가로 설명할 것이다.

 

 다수의 GFS클러스터들은 각각 다른 목적을 가지고 동시에 실행된다. 가장 큰 것은 1000개의 스토리지 노드들로 이뤄져 있는데 그 크기는 약 300테라바이트다. 그리고 이것들은 수백명의 클라이언트가 끊임없이 각각의 머신에 접근할 수 있도록 한다.