본문 바로가기

시스템 디자인

TAO, Facebook의 분산 Social Graph

TAO란?

Facebook이 social graph를 서비스 하기 위한 데이터 모델의 구현체로 지리적으로 분산된 데이터 스토어이다. 

 

 

TAO의 목표

기본적으로 1) 저지연성, 2) 고가용성, 3) 확장성, 4) 일관성을 지키고자 하지만, 조금 업데이트가 늦어도 문제 없다는 SNS의 특성에 따라 빠르게 읽기를 지원하는 대신 일관성 저하를 감수한다. 정리하면 다음과 같다. 

 

  • 저지연성(빠른 응답)
  • ↕  Trade-off, 저지연성을 위해 일관성 저하를 감수.
  • 일관성(데이터 업데이트가 빠르게 전역적으로 반영됨)
  • 고가용성(일부 장애가 발생해도 응답)
  • 확장성(스케일 아웃이 쉬워야 함)

 

TAO의 차별점

그래프 DB를 수평적으로 확장할 수 있도록 아키텍처를 설계했다는 점이 가장 특징적이다. 원래 그래프 DB는 노드간 탐색을 주로 연산하기 때문에 수직적 확장이 일반적이다. 그러나 TAO는 다음 세 가지 전략을 통해 수평적 확장을 달성하였다. 1) 서비스에 알맞게 샤딩 2) Leader-Follower 모델 채택 3) 캐시 최적화

 

 

1) TAO의 샤딩

그래프 DB는 노드 간의 엣지를 따라 탐색을 주로 하기 때문에 서비스에 맞는 기준을 세워 샤딩하는 것이 필요하다. Facebook은 소셜 그래프에서 가장 자주 일어나는 연산을 최적화 하기 위해서 1) 사용자 ID를 기준으로 2) 서로 가까운 관계라면 같은 서버에 저장될 수 있도록 데이터를 분산하여 저장하였다. 

 

예를 들어 사용자 A 정보를 기준으로 가장 자주 조회되는 정보는 사용자 A와 친구인 사람은? 이 게시물에 좋아요를 누른 친구들은? 등이다. 따라서 특정 사용자의 친구 목록 등은 하나의 서버에 저장하였다. 

 

 

관계 기반 샤딩의 단점과 보완 방법

관계를 기반으로 샤딩할 때의 문제점은 친구가 많은 사용자에게 데이터가 쏠린다는 것이다. 이 문제를 해결하기 위해 일부 인기 사용자의 데이터를 여러 샤드에 복제할 수 있다. 이렇게 되면 한 서버로 읽기 부하가 쏠리는 것을 방지할 수 있다. 그리고 관계는 늘 변경되기 때문에 특정 사용자가 새로운 친구를 많이 추가하면, 기존 샤드에서 다른 샤드로 데이터를 이동해야 할 수도 있다. 따라서 샤드 간 로드 밸런싱이 필요하다. 

 

 

2) Leader-Follower 모델이란

TAO: Facebook’s Distributed Data Store for the Social Graph

TAO는 읽기를 최적화 하기 위해서 모든 쓰기는 리더 데이터센터에서 처리하고, 변경 사항을 비동기적으로 팔로워 데이터센터에 전파한다. 변경사항을 비동기적으로 처리하기 때문에 일관성이 엄격하게 지켜지지는 않지만 지연 시간을 줄일 수 있음.

 

 

3) TAO의 캐시 활용 - 읽기

  • 클라이언트 요청이 들어오면 먼저 로컬 캐시에서 먼저 조회
  • 캐시에 없는 경우 팔로워 데이터 센터의 저장소 조회
  • 그래도 없으면 리더 데이터센터로 요청