Colossus 심층 분석: Google의 확장 가능한 스토리지 시스템 간단히 알아보기
Denis Serenyi
Tech Lead, Google Cloud Storage
Dean Hildebrand
Technical Director, Office of the CTO, Google Cloud
* 본 아티클의 원문은 2021년 4월 20일 Google Cloud 블로그(영문)에 게재되었습니다.
Google Cloud를 믿고 중요한 데이터를 맡기는 고객은 많지만 Google의 다른 비즈니스도 동일한 스토리지 인프라를 기반으로 운영된다는 사실을 아는 고객은 많지 않습니다. 사실은 Google Cloud를 구동하는 스토리지 시스템이 YouTube, Drive, Gmail처럼 전 세계에 서비스되는 Google의 가장 유명한 제품도 동일하게 지원하고 있습니다.
바로 그 기반이 되는 스토리지 시스템인 Colossus는 Cloud Storage 및 Firestore 같은 Google의 광범위한 스토리지 서비스 생태계를 뒷받침하고 트랜잭션 처리, 데이터 제공, 분석 및 보관처리, 부팅 디스크, 홈 디렉터리 같은 다양한 워크로드를 지원하는 역할을 합니다.
이 게시물에서는 Colossus 파일 시스템을 중심으로 VM 이면의 스토리지 인프라는 어떤 모습이고 고객 애플리케이션과 Google 서비스에 높은 확장성과 데이터 내구성을 더하는 데 어떤 도움이 되는지 보다 심도 있게 살펴봅니다.
Google 규모의 확장성을 그대로 발휘하는 Google Cloud
스토리지 서비스 운영 방식을 자세히 살펴보기에 앞서 Cloud와 Google 제품을 둘 다 지원하는 하나의 인프라를 이해하는 것이 중요합니다. 우수한 설계를 갖춘 소프트웨어 시스템이 보통 그렇듯 모든 Google 서비스에는 확장 가능한 서비스 집합이 공통적으로 계층화되어 있습니다. Google의 각 스토리지 서비스에는 다음과 같은 3가지 주요 구성 요소가 사용됩니다.
- Colossus: Google File System(GFS)의 뒤를 잇는 Google의 클러스터 수준 파일 시스템입니다.
- Spanner: 전역 일관성 및 확장성을 갖춘 관계형 데이터베이스입니다.
- Borg: 컴퓨팅부터 스토리지 서비스에 이르는 모든 것을 실행하는 확장 가능한 작업 스케줄러입니다. 지금까지는 물론 앞으로도 Kubernetes의 설계 및 개발에 큰 영향을 미칠 것입니다.
이러한 3가지 핵심 구성 요소가 Firestore부터 Cloud SQL, Filestore, Cloud Storage에 이르는 모든 Google Cloud 스토리지 서비스의 기반 인프라를 구성합니다. 즐겨 찾는 스토리지 서비스에 액세스할 때마다 이와 같은 3가지 구성 요소가 함께 작동하여 필요한 모든 것을 제공해 줍니다. Borg는 필요한 리소스를 프로비저닝하고, Spanner는 액세스 권한과 데이터 위치에 대한 모든 메타데이터를 저장하며, Colossus는 모든 데이터를 관리 및 저장하고 그에 대한 액세스를 제공합니다.
Google Cloud에서도 이러한 구성 요소가 동일하게 사용되며 스토리지 서비스에 요구되는 가용성, 성능, 내구성 수준을 제공하는 데 필요한 모든 것을 계층화합니다. 다시 말해 이러한 3가지 서비스를 기반으로 고객의 니즈에 맞게 확장되는 동일한 핵심 인프라를 활용하기 때문에 고객의 애플리케이션 역시 Google 제품과 동일한 확장성을 갖추게 됩니다.
Colossus 요약 정보
이제 Colossus의 작동 방식을 보다 자세히 살펴보겠습니다.
먼저 Colossus에 관한 간략한 배경 정보는 다음과 같습니다.
- 차세대 GFS입니다.
- 스토리지 확장성을 개선하고 가용성을 높여 점점 많아지는 애플리케이션에서 폭발적으로 증가하는 데이터 니즈를 처리하도록 설계되었습니다.
- Colossus는 분산형 메타데이터 모델을 도입하여 확장성 및 가용성이 높은 메타데이터 하위 시스템을 제공했습니다.
그렇다면 이 시스템은 어떻게 작동하는 걸까요? 어떻게 이 하나의 파일 시스템이 광범위한 워크로드를 지원할 수 있을까요? 아래는 Colossus 제어 영역의 핵심 구성요소를 나타낸 다이어그램입니다.
클라이언트 라이브러리
클라이언트 라이브러리는 애플리케이션이나 서비스가 Colossus와 상호작용하는 수단이 됩니다. 클라이언트는 아마도 전체 파일 시스템에서 가장 복잡한 부분일 것입니다. 소프트웨어 RAID를 비롯한 많은 기능이 애플리케이션의 요구사항을 바탕으로 클라이언트를 구성합니다. Colossus를 기반으로 설계된 애플리케이션은 다양한 인코딩으로 서로 다른 워크로드의 성능과 비용을 미세 조정하여 절충점을 찾습니다.
Colossus 제어 영역
Colossus는 수많은 큐레이터로 구성된 확장 가능한 메타데이터 서비스를 기반으로 합니다. 클라이언트는 파일 생성과 같은 제어 작업을 큐레이터에 직접 전달하고 수평으로 확장할 수 있습니다.
메타데이터 데이터베이스
큐레이터는 Google의 고성능 NoSQL 데이터베이스인 BigTable에 파일 시스템 메타데이터를 저장합니다. 처음에 Colossus를 구축하게 된 계기는 Google File System(GFS)에서 검색과 관련된 메타데이터를 수용하려고 할 때 확장 한도가 발생하는 문제를 해결하기 위해서였습니다. BigTable에 파일 메타데이터를 저장한 덕분에 Colossus는 최대 규모의 GFS 클러스터에서 100배 넘게 수직 확장할 수 있게 되었습니다.
D 파일 서버
Colossus는 네트워크에 있는 데이터 홉 수를 최소화합니다. 데이터는 클라이언트와 'D' 파일 서버(Google의 네트워크 연결 디스크) 사이를 바로 통과합니다.
Custodians
Colossus에는 Custodians라는 백그라운드 스토리지 관리자도 포함됩니다. 이 도구는 전반적인 효율성은 물론 데이터의 내구성과 가용성을 유지하는 데 핵심적인 역할을 하며 디스크 공간 균형과 RAID 재구성 같은 작업을 처리합니다.
Colossus에서 안정적이고 확장 가능한 스토리지를 제공하는 방식
이 모든 요소가 실제로 작동하는 방식을 살펴보기 위해 Cloud Storage에서 Colossus가 사용되는 방식을 생각해 보겠습니다. 아카이브 스토리지부터 처리량이 높은 분석에 이르기까지 Cloud Storage의 광범위한 사용 사례는 익히 들어 잘 알고 있지만 그 기반이 되는 시스템에 대해서는 알려진 이야기가 많지 않습니다.Colossus를 사용하면 하나의 클러스터를 엑사바이트 규모의 스토리지와 수만 개의 머신으로 확장할 수 있습니다. 예를 들어 위의 예시에서는 Compute Engine VM, YouTube 제공 노드, Ads 맵리듀스 노드에서 Cloud Storage에 액세스하고 이 모든 노드가 동일한 기반 파일 시스템을 공유하여 요청을 완료하고 있습니다. 이를 위해서는 반드시 공유 스토리지 풀을 Colossus 제어 영역으로 관리해 분리된 자체 파일 시스템을 갖춘 것 같은 효과를 내야 합니다.
리소스를 분할하면 소중한 리소스를 보다 효율적으로 사용하고 모든 워크로드의 비용을 낮출 수 있습니다. 예를 들어 YouTube 동영상처럼 지연 시간이 짧은 워크로드의 최대 수요에 맞춰 프로비저닝한 다음 유휴 시간으로 낭비될 수 있는 공간을 채워 보다 저렴한 비용으로 일괄 분석 워크로드를 실행하는 것이 가능합니다.
Colossus를 통해 얻을 수 있는 몇 가지 다른 이점도 살펴보겠습니다.
하드웨어 복잡성 간소화
쉽게 예상할 수 있듯이, Google 서비스를 지원하는 파일 시스템은 수 테라바이트에 달하는 파일과 방대한 데이터 세트를 처리해야 하기 때문에 버거울 정도로 높은 처리량과 확장성을 갖춰야 합니다. Colossus는 많은 물리적 하드웨어 복잡성을 추상화하여 스토리지를 많이 소모하는 애플리케이션의 과부하 가능성을 방지합니다.
Google 데이터 센터는 기본 스토리지 하드웨어를 매우 다양하게 갖추고 있어 여러 규모와 유형의 회전 디스크와 플래시 스토리지 조합을 제공합니다. 그뿐만 아니라 애플리케이션별로 내구성, 가용성, 지연 시간에 대한 요구사항이 극단적으로 다르기 때문에 Colossus는 각 애플리케이션이 필요한 스토리지를 갖출 수 있도록 다양한 서비스 등급을 제공합니다. 애플리케이션은 I/O, 가용성, 내구성 요구사항을 지정한 후 추상화되어 통일된 단위로 리소스(바이트 및 I/O)를 프로비저닝하는 방법으로 이러한 다양한 등급을 사용합니다.
또한 Google 규모에서는 하드웨어 장애가 사실상 늘 발생합니다. 안정성이 부족해서가 아니라 하드웨어 수가 많기 때문입니다. 이처럼 거대한 운영 환경에서는 장애가 자연스러운 현상이기 때문에 파일 시스템에서 필수적으로 내결함성과 투명한 복구를 제공해야 합니다. Colossus는 이러한 장애를 중심으로 I/O를 조정하고 신속하게 백그라운드 복구를 진행하여 내구성과 가용성이 높은 스토리지를 제공합니다.
결과적으로 하드웨어 리소스를 처리해야 하는 복잡한 문제가 발생할 가능성이 크게 줄어 모든 애플리케이션이 쉽게 필요한 스토리지를 확보하고 사용할 수 있게 됩니다.
스토리지 효율성 극대화
알다시피 오늘날 오버프로비저닝 없이 애플리케이션에서 필요로 하는 스토리지 리소스를 제때 제공할 수 있으려면 마법과 같은 관리 기술이 필요합니다. Colossus는 액세스 패턴과 빈도(예: 자주 액세스되는 핫 데이터)가 데이터마다 다르다는 사실을 활용하여 필요에 따라 플래시와 디스크 스토리지를 조합해 사용합니다.
사용률이 가장 높은 데이터는 제공 효율성 향상 및 지연 시간 단축을 위해 플래시에 저장합니다. 기가바이트당 I/O 밀도를 디스크에서 일반적으로 제공 가능한 수준에 맞출 수 있을 정도로만 플래시를 구매하고 충분한 용량을 확보할 정도로만 디스크를 구매합니다. 적절한 조합을 통해 스토리지 효율성을 극대화하고 불필요한 오버프로비저닝을 피할 수 있습니다.
디스크 기반 스토리지의 경우에는 인벤토리 초과 및 디스크 IOPS 낭비를 피하기 위해 디스크를 채워진 상태로 상시 사용하려고 합니다. 이를 위해 Colossus는 가용 디스크 IOPS에서 최대한의 가치를 얻기 위해 지능형 디스크 관리를 사용합니다. 새로 작성된 데이터(예: 사용률이 높은 데이터)는 클러스터의 모든 드라이브에 균등하게 분산됩니다. 데이터의 분포는 재조정되며 시간이 지나고 사용률이 낮아지면 더 큰 용량의 드라이브로 이동합니다. 이 방식은 일반적으로 시간 경과에 따라 데이터의 사용률이 떨어지는 분석 워크로드에 적합합니다.
철저한 현장 검증을 거친 높은 확장성
이처럼 Colossus는 Google의 스토리지 인프라를 비밀스럽게 떠받치고 있는 뛰어난 확장 기능입니다. Colossus는 Google Cloud 서비스의 스토리지 니즈를 처리할 뿐 아니라 Google 내부 스토리지 니즈에 따른 스토리지 용량을 제공하며 매일 검색, 지도, YouTube 등을 이용하는 수십억 명의 사용자에게 콘텐츠를 전달하는 과정을 돕고 있습니다. Google Cloud를 기반으로 비즈니스를 구축하면 Google 서비스를 지원하는 것과 동일한 최고급 인프라를 이용하게 됩니다. 물론 지속적인 인프라 개선 작업도 Google이 담당하므로 걱정할 필요가 없습니다.
Google Cloud의 스토리지 아키텍처에 대해 보다 자세히 알아보려면 이 게시물의 기반이 된 'VM 이면의 Google Storage 인프라 간단히 살펴보기'라는 Next ‘20 세션을 확인해 보시기 바랍니다. 또한 Google의 모든 스토리지 제품군을 자세히 알아보려면 클라우드 스토리지 웹사이트를 방문하세요.