Blog
스터디
Tech Dive
News Feed 전수 조사
Facebook TAO Graph

TAO: 그래프의 힘

기사 정보

  • 제목: TAO: 그래프의 힘 (TAO: The power of the graph)
  • 저자: Mark Marchukov
  • 게시일: 2013년 6월 25일
  • 카테고리: 핵심 인프라, 프로덕션 엔지니어링
  • 단어 수: 2,296 단어
  • 원문: TAO: The Power of the Graph (opens in a new tab)

개요

이 엔지니어링 기사는 Facebook의 소셜 그래프를 대규모로 관리하기 위해 설계된 Meta의 분산 데이터 저장소인 TAO(The Associations and Objects, 연관관계와 객체)를 설명합니다.

과제

Facebook은 10억 명 이상의 사용자에게 수십억 개의 맞춤형 데이터 뷰를 밀리초 단위로 제공해야 했습니다. 기사에서 언급한 것처럼, "데이터 세트는 수백 밀리초 안에 즉석에서 검색되고 렌더링되어야 합니다." 플랫폼은 인기 콘텐츠가 등장할 때 예측 불가능한 트래픽 급증에 직면하므로, 미리 생성된 뷰는 비실용적입니다.

초기 솔루션과 한계

초기에 Facebook은 MySQL과 Memcache를 결합했습니다. 그러나 이 접근 방식은 엔지니어들이 서로 다른 데이터 모델을 가진 두 개의 별도 시스템을 관리해야 하는 복잡성을 초래했습니다. MySQL의 캐싱에서 가정하는 공간적 지역성(spatial locality)은 소셜 그래프 접근 패턴과 맞지 않았으며, "생성 시간 지역성(creation time locality)이 워크로드를 지배합니다."

객체와 연관관계 모델

TAO는 데이터를 다음과 같이 표현합니다:

  • 객체(Objects): 명명된 필드를 가진 타입화된 데이터 항목 (사용자, 댓글, 사진)
  • 연관관계(Associations): 관계를 나타내는 객체를 연결하는 타입화된 엣지 (좋아요, 친구 관계, 댓글)

이 그래프 기반 설계는 "생성 시간 지역성"을 활용하여 캐시 성능과 요청 패턴을 최적화합니다.

주요 기능

TAO는 세 가지 주요 쿼리 유형을 지원합니다:

  1. 특정 관계에 대한 포인트 쿼리(Point queries)
  2. 시간 순으로 정렬된 범위 쿼리(Range queries)
  3. 연관관계 총계에 대한 카운트 쿼리(Count queries)

구현 아키텍처

시스템은 "지리적으로 분산된 서버 클러스터 모음에서" 실행되며, 지역당 두 개의 캐시 계층을 가집니다:

  • 팔로워(Followers): 클라이언트 요청 처리
  • 리더(Leaders): MySQL과의 일관성 유지

데이터는 독립적인 확장을 위해 수십만 개의 샤드(shards)로 분할됩니다.

일관성 전략

TAO는 기본적으로 최종 일관성(eventual consistency)을 구현하며, 대부분의 사용 사례에서 "일관성을 잃는 것이 가용성을 잃는 것보다 작은 악"이라고 인정합니다. 시스템은 보조 지역으로의 MySQL 복제와 함께 단일 주 지역(single-primary-region) 아키텍처를 사용합니다.

기사는 TAO가 "Facebook에서 가장 중요한 데이터 저장소 중 하나"가 되었으며, 대규모 소셜 네트워킹의 까다로운 요구사항을 성공적으로 관리하고 있다고 결론짓습니다.


기술적 특징 요약

아키텍처 핵심

  1. 지리적 분산 (Geo-distribution): 전 세계 여러 데이터센터에 분산
  2. 계층적 캐싱 구조: Follower-Leader 2계층 캐시
  3. 샤딩을 통한 수평 확장: 수십만 개의 독립적인 샤드

데이터 모델의 장점

  • 소셜 그래프의 본질적인 구조를 직접 반영
  • 생성 시간 지역성을 활용한 효율적 캐싱
  • 단순하고 일관된 API (포인트/범위/카운트 쿼리)

트레이드오프

  • 일관성 < 가용성: CAP 정리에서 가용성 우선 선택
  • 최종 일관성: 실시간 일관성 보장 대신 높은 성능 확보
  • 단일 주 지역: 쓰기 일관성을 위한 아키텍처 단순화

관련 문서