소셜 네트워킹 서비스 Twitter의 Redis 적용 사례

Twitter의 데이터 센터에는 방대한 양의 Redis Cluster가 있으며, 이는 각 사용자의 Timeline에 표시될 Tweet 정보(Tweet ID, 작성자 ID)를 List 형태로 약 800개 정도 캐싱합니다. 발생하는 Timeline 요청은 바로 데이터베이스로 접근하지 않고, Redis에서 캐싱된 Timeline 정보를 먼저 가져와서 이를 통해 Query를 단순화하고 데이터베이스에 접근하여 처리합니다.

스크린샷 2024-03-12 오전 1.18.04.png

모든 사용자의 Timeline을 캐싱하게 되면 메모리가 부족해질 수 있기 때문에, 로그인을 하지 않은 지 30일이 지난 사용자의 Timeline은 Redis Cluster에서 삭제합니다. Redis Cluster에서 삭제된 사용자의 Timeline 정보는 해당 사용자가 다시 로그인을 할 때 재생성하는데, 이때 데이터베이스에 직접 접근하는 과정이 필요하여 시간이 다소 소요됩니다.


Timeline 캐시에 Tweet 정보를 삽입하는 과정에 관여하는 모듈은 Write API, Fanout, Social Graph 모듈입니다. Write API는 사용자가 트윗을 작성할 때 호출되는 API로, 이 API는 Tweet의 작성자 ID와 Tweet의 고유 ID를 Fanout 모듈로 전달합니다. Fanout 모듈은 사용자의 Following, Follower 정보를 담고 있는 Social Graph 모듈로부터 Tweet 작성자의 Follower 목록을 받아오고, 해당 Follower 목록에 포함된 사용자들의 Timeline 캐시에 Tweet 정보를 삽입합니다.

스크린샷 2024-03-12 오전 1.17.53.png

요약하면 다음과 같습니다:

  1. 사용자가 트윗을 작성합니다.
  2. 사용자의 팔로워들의 타임라인 캐시에 사용자의 트윗 ID가 추가됩니다.
  3. 팔로워들이 자신들의 타임라인에 접속하면, 타임라인 캐시에 있는 사용자의 Tweet ID로 DB에 요청합니다.