페북 사진 하루 20억장…어떻게 보관하나

스토리지용 데이터센터 인프라 설계 기술 소개

일반입력 :2015/05/08 10:56    수정: 2015/05/08 11:03

페이스북이 서비스에서 매일 20억장씩 공유되는 사진을 효율적으로 저장하기 위해 따로 설계한 스토리지용 데이터센터 인프라 설계 기술을 소개했다.

페이스북은 지난 5일 엔지니어링 블로그에 '페이스북의 콜드스토리지시스템 내부(Under the hood: Facebook’s cold storage system)'라는 포스팅을 게재해 관련 정보를 공개했다. 오픈컴퓨트프로젝트(OCP) 규격을 활용한 랙단위 콜드스토리지 시스템 중 '오픈볼트' 인클로저 장비를 응용했다는 설명이다. (☞링크)

콜드스토리지는 이름처럼 '콜드(cold)' 데이터를 보관하는 장치라는 뜻이다. 서비스에서 시스템이 자주 찾거나 많은 이용자에게 쓰이는 데이터를 '핫(hot)' 데이터라 하고, 반대로 호출이 뜸한 데이터를 콜드 데이터라 한다. 자주 쓰이진 않더라도 요청시 바로 제공될 수 있어야 하기 때문에, 문제가 생겼을 때만 필요한 백업 데이터와는 의미가 다르다.

페이스북은 가능한한 데이터센터 운영에 필요한 전력을 줄이면서도 서비스에서 달마다 계속 늘어나는 방대한 사진 데이터를 이용자들이 언제든 열어볼 수 있게 할 방법을 찾고 있었다. 이를 위해 기존 솔루션인 테이프라이브러리를 대규모로 도입하는 대신 새로운 인프라 기술을 개발하기로 했다.

결론적으로 페이스북은 상대적으로 더 많은 상면 공간을 제공하면서도 기존보다 적은 전력을 소비하는 새로운 데이터센터를 지었다. 이 시설은 최대 활용시 페이스북의 기존 데이터센터보다 6분의 1밖에 안 되는 전력만을 쓰면서도 1천페타바이트 또는 1엑사바이트에 달하는 데이터를 처리한다.

이를 위해 페이스북은 OCP 오픈랙 기반 스토리지 구성요소 중 하드디스크드라이브(HDD)를 30개씩 꽂는 2U 크기 서랍 '오픈볼트'를 개조했다. (☞관련기사) 서랍 안에서 한 번에 HDD 1개만 전력을 공급받도록 만들었다. 소프트웨어 버그로 모든 드라이브가 동시에 전력을 쓰지않게하려고 드라이브 펌웨어도 고쳤다.

페이스북은 기존 오픈랙 구성요소도 바꿨다. 앞서 오픈볼트에서 동시에 돌아가는 디스크드라이브 수를 줄여 발열을 낮춘 만큼, 오픈랙 전체 구성에서 스토리지 노드당 냉각팬 수도 6개에서 4개로 줄일 수 있었다. 전반적인 전력 소비를 줄인 덕분에 전원공급장치 숫자도 3개에서 1개로 만들 수 있었다.

랙시스템 중앙에 3U 크기 전원공급장치를 두고 그 위아래에 오픈볼트 16개와 컨트롤러 역할을 하는 '헤드노드' 한쌍을 넣으면 페이스북의 콜드스토리지 랙 구조가 된다. 4테라바이트짜리 디스크를 쓰면 랙당 2페타바이트 용량을 제공하는데, 소비전력은 기존 일반스토리지 랙 대비 4분의 1 수준이다.

다만 여기엔 맹점이 있었다. 4테라바이트 디스크 480개와 이를 담는 오픈볼트 16개의 무게를 포함한 오픈랙 1대의 무게는 1천100킬로그램이다. 이는 랙을 운반하기 위한 고무바퀴를 부숴뜨릴만한 무게였다. 페이스북 엔지니어들은 이렇게 말그대로 '무거운' 시스템을 만들려고 의도하진 않았다고 언급했다.

페이스북은 콜드스토리지를 위한 소프트웨어도 개발해야 했다. 여분의 발전장치나 배터리의 보조 없이 언제나 최소한의 전력만을 사용하면서도 디스크의 데이터 정합성과 내구성을 지속해야 하는 게 조건이었다. 실패단일점(SPOF)을 없애고, 장애 복구시 시스템 데이터가 이를 지원할 수 있어야 했다.

페이스북이 하드웨어와 소프트웨어 개발 관련 사항을 결정한 뒤 남은 문제는 디스크 고장 확률과 신뢰성, 데이터센터 전력 안정성과 같이 실제 운영중 발생할 문제에 대응할 자원을 어떻게 최소화하느냐였다. 이들이 만들기로 한 콜드스토리지 시스템에는 아무런 전원 백업 장치가 없기 때문이었다.

쉬운 방법은 데이터 손실을 줄이고 장애시 백업으로 활용할 수 있도록 흔히 쓰는 수단인 하드웨어 이중화 및 다중 데이터 복제 구성을 동원하는 것이었지만, 이는 결국 더 많은 자원을 쓸 수 밖에 없다는 얘기였다. 페이스북은 같은 데이터의 복본 생성을 최소화하면서 손실을 방지할 기법을 고안했다.

페이스북이 선보인 기법은 '리드-솔로몬(Reed-Solomon) 오류정정코드(ECC)'다. 데이터 단위를 작은 조각으로 나눠서 오류 검출과 정정을 하기 쉽게 만드는 일반적인 방식이다. 예를 들면 1기가바이트(GB)짜리 파일을 100메가바이트(MB)짜리 조각 10개로 나눈 뒤, 오류에 대비해 100MB짜리 보정 데이터를 4개쯤 덧붙이는 식이다. 이는 결과적으로 백업에 1.4GB를 사용하는데, 파일 전체를 이중 백업하기 위해 2GB를 쓰는 것보다 효율적이다.

현재 페이스북은 이런 식으로 구성한 콜드스토리지 데이터센터 2곳을 세웠다. 여기서 매일 증가하고 있는 서비스상의 데이터 중 수백 페타바이트 용량을 보관 중이다.

페이스북은 이렇게 트래픽 부하가 적은 콘텐츠를 위해 갓 만들어진 콘텐츠를 처리하는 스토리지와는 다른 콜드스토리지 시스템을 만들어냈다. 덕분에 전력과 다른 자원 소비를 절감하면서도 요청받은 데이터를 서비스할 수 있게 됐다고 밝혔다.

관련기사

페이스북은 또 이 과정에서 현존하는 파일시스템 대부분이 단시간에 빈번한 저장장치 접속과 차단(mounts and unmounts)을 처리할 수 있도록 만들어지지 않았음을 파악하고 결과적으로 모든 드라이브를 파일시스템을 쓰지 않는 '로 디스크(raw disk)'로 전환했다며 시스템을 통해 전체 데이터 흐름과 스토리지에 대한 가시성을 확보해 우리의 (서비스) 내구성에 대해 더 자신감을 얻게 됐다고 설명했다.

향후 페이스북은 스토리지에 하드디스크 외에도 저가 플래시나 블루레이 디스크같은 저장매체도 활용하는 방안과 또한 인프라 내구성 향상을 위해 다중 데이터센터에 파일을 나눠 저장하는 새로운 방법도 고려 중이라고 밝혔다.