Skip to main content

15장. 구글 드라이브 설계

  • 아래의 드라이브 설계에 대해서 다음과 같은 내용을 이야기합니다.

1단계 문제 이해 및 설계 범위 확정#

  • 다음의 기능 설계에 집중합니다.
    • 파일 추상화가파일 다운로드
    • 여러 단마렝 파일 동기화
    • 파일 갱신 이력 조회
    • 파일 공유
    • 파일이 편집되거나 새롭게 공유될 때 알림을 표시합니다.
  • 아래의 사항에 대해서는 논의하지 않습니다.
    • 구글 문서 편집 및 협업 기능
  • 기능적 요구사항 이외, 비-기능적 요구사항
    • 안정성 : 저장소 시스템에서 안정성은 아주 중요합니다.
    • 빠른 동기화 속도 : 파일 동기화에 시간이 너무 많이 걸리면 사용자는 인내심을 잃습니다.
    • 네트워크 대역폭 : 이 제품이 네트워크 대역폭을 크게 쓰면 안좋습니다.
    • 규모 확장성 : 아무 많은 양의 트래픽도 처리 가능해야합니다.
    • 높은 가용성 : 일부 서버에 장애가 발생하거나, 느려지거나, 네트워크 일부가 끊겨도 시스템은 계속 사용 가능해야합니다.

개략적 추정치#

  • 가입 사용자는 오천만 명이고 천만 명의 DAU 사용자가 있다고 가정합니다.
  • 모든 사용자에게 10GB의 무료 저장공간 할당
  • 매일 각 사용자가 평균 2개의 파일을 업로드한다고 가정합니다.
  • 읽기:쓰기 비율은 1:1
  • 필요한 저장공간 총량 = 5천만 * 10 GB = 500 페타바이트(Petabyte)
  • 업로드 API QPS = 1천만 사용자 * 2회 업로드/24시간/3600초 = 약 240
  • 최대 QPS = QPS * 2 = 480

2단계 개략적 설계안 제시 및 동의 구하기#

API#

  • 파일 업로드 API
    • 단순 업로드
    • 이어 올리기
  • 파일 다운로드 API
  • 파일 갱신 히스토리 API

한 대 서버의 제약 극복#

  • 로드밸런서
  • 웹 서버
  • 메타데이터 데이터베이스
  • 파일 저장소

동기화 충돌#

  • 동시에 같은 파일이나 업데이트하는 경우, 발생하는 문제를 해소해야 합니다.

개략적 설계안#

개략적 설계안

  • 사용자 단말: 사용자가 이용하는 웹브라우저나 모바일 앱 등의 클라이언트
  • 블록 저장소 서버(block server): 파일 블록을 클라우드 저장소에 업로드하는 서버
  • 클라우드 저장소
  • 아카이빙 저장소: 비활성 데이터
  • 로드밸런서
  • API 서버
  • 메타데이터 데이터베이스
  • 알림 서비스
  • 오프라인 사용자 백업 큐

3단계 상세 설계#

블록 저장소 서버에#

  • 델타 동기화 : 파일이 수정되면 전체 파일 대신 수정이 일어난 블록만 동기화
  • 압축 : 블록 단위로 압축해 두면 데이터 크디를 많이 줄일 수 있습니다.

높은 일관성 요구사항#

  • 강한 일관성을 지원해줘야합니다.

메타데이터 데이터베이스#

메타데이터 데이터베이스

업로드 절차#

업로드 절차

다운로드 절차#

다운로드 절차

알림 서비스#

  • 두 가지 정도의 서비스가 있습니다.
    • 롱 폴링(long polling): 드롭박스가 이 방식을 채택하고 있습니다.
    • 웹 소켓(WebSocket): 클라이언트와 서버 사이에 지속적인 통신 채널을 제공, 양방향 통신이 가능합니다.

저장소 공간 절약#

  • 중복 제거
  • 지능적 백업 전략
    • 한도 설정
    • 중요한 버전만 보관
  • 자주 쓰지 않는 데이터는 아카이빙 저장소

장애 처리#

  • 로드밸런서 장애
  • 블록 저장소 서버 장액
  • 클라이언트 저장소 장애
  • API 서버 장애
  • 메타데이터 캐시 장애
  • 메타데이터 데이터베이스 장애
  • 알림 서비스 장애
  • 오프라인 사용자 백업 큐 장애

4단계 마무리#

  • 설계에는 답이 없습니다.
  • 아래의 내용에 대해 더 이야기해볼 수 있습니다.
    • 블록 저장소 서버가 없는 경우
    • 접속상태를 관리하는 로직을 새로 분리
Last updated on