NW-study / system-design-interview

8 stars 0 forks source link

[Chapter 15] Q&A #15

Open easyfordev opened 2 years ago

easyfordev commented 2 years ago

[Chapter 15] 구글드라이브 설계

easyfordev commented 2 years ago

이지

느낀점

참고 자료

질문

KKambi commented 2 years ago

한비

공유

  1. 책에서 네임스페이스(사용자의 루트 디렉토리)로 사용자별 저장공간을 분리하는데, 네이버의 OwFS 스토리지도 비슷한 개념을 사용한다. Owner라는 단위로 저장소를 구분하며, Owner가 달라지면 파일이 저장되는 서버도 달라진다 (책에서 user_id를 기준으로 샤딩했던 것처럼) Fuse를 통해서 마운트하게 되면 /owfs/{owner이름}/... 이렇게 마운트가 되는 것으로 보아, 동일하게 루트 디렉토리로 구분하는 것 같다.

  2. Long polling vs Message broker

    • API 서버 -> 알림 서비스 -> 클라이언트(웹, 안드로이드, iOS, ...)
    • 알림 서버 -> 푸쉬 알림 큐 -> 작업 서버 -> 제3자 알림 서비스 -> 클라이언트
    • 100% 이해되진 않지만, server to server communication에는 메세지 브로커가 적합하고, client-server 간 통신에는 폴링/웹소켓이 적절하다고 한다.
    • 메세지 큐를 사용한다면, API 서버와 알림 서비스 사이에 큐를 두고 롱 폴링은 사용하지 않으면 될 듯 https://softwareengineering.stackexchange.com/questions/426448/long-polling-and-message-brokers

질문

  1. (292p) device 테이블에 push_id 필드가 있다는데 보이지 않음 -> 실수겠죠?
travelbeeee commented 2 years ago

현석

느낀점

동기화 충돌

궁금증

  1. 블록 저장소 서버에서 파일을 블록으로 나눠서 해시값을 부여하면, 재구성해서 순서대로 다시 파일로 합칠 때는 해당 해시값이 몇 번째 순서인지도 메타데이터로 저장하고 있겠죠...?? ( 당연한 것 같은데 맞게 이해한건지 궁금해서 끄적끄적해봅니다... )
  2. p.296 저장소 공간 절약에서 '중요한 버전만 보관' 한다는 전략은 구글 드라이브를 생각했을 때, 가장 최신 버전을 중요하다고 판단하는 걸까요?? 판단 기준이 궁금합니다. (서비스 목적마다 다르겠지만...!)
janeljs commented 2 years ago

지선

zziri commented 2 years ago

지훈

meloncha commented 2 years ago

민석

rsync algorithm : 블록 저장소 서버의 델타 동기화(delta sync) 방법

수정이 일어난 블록 찾는 법

  1. 파일 서버 데이터를 일정한 크기의 블록으로 나눈다
  2. 블록을 hash한 값들을 클라이언트에 보낸다
  3. 클라이언트는 수정한 데이터를 블록 크기만큼 '롤링 해시'하여 해시 값을 비교한다
  4. 비교 후 겹치는 데이터는 제외하여 수정되는 데이터 블록만 파일 서버에 보낸다 참고 ) https://stackoverflow.com/questions/1535017/rolling-checksums-in-the-rsync-algorithm

블록의 순서는 어떻게 알 수 있을까?