caffeine-library / system-design-interview

🌱 가상 면접 사례로 배우는 대규모 시스템 설계 기초를 읽는 스터디
4 stars 0 forks source link

[additional] 동시 문서 편집 #46

Closed ngwoon closed 2 years ago

ngwoon commented 2 years ago

연관 챕터

44

조사 내용

15장 - 구글 드라이브 설계 챕터를 읽고, 구글 드라이브에서 여러 사람들이 동시에 문서를 편집할 때 어떤 원리로 동기화가 진행되는지 궁금하여 조사했다.

쉽게 생각해 볼 수 있는 방법들

Locking

한 사용자가 문서를 수정할 때, 다른 사용자의 write 권한을 막는 방법.

쉽고 간단하나, 문서 동시 편집이 불가능하다.

아울러 lock을 갖고 있는 사용자에게 네트워크 문제가 발생하면, lock이 손실될 수 있다.

Event Passing

문서 편집에 참여한 모든 사용자들의 모든 연산을 서로에게 전송하는 방법.

여기서 말하는 연산이란 글자 입력, 삭제 뿐만 아니라 이전 연산 취소, 복사, 잘라내기, drag & drop, 자동완성 등 모든 연산을 말한다.

이 방법의 가장 큰 문제점은, 이벤트의 순서가 중요하기 때문에 만약 네트워크 문제 등으로 연산 전송이 실패한다면 그 뒤에 연속된 연산들이 낳는 결과가 달라진다.

Three-way Merging

  1. 문서 편집자가 편집을 수행한다.
  2. 편집된 문서 전체 내용을 서버에 보낸다.
  3. 서버는 서버가 갖고 있는 문서의 현상태와 편집자(클라이언트)가 보낸 문서를 비교해서 차이점을 찾고, 이를 서버 문서에 반영한다.
  4. 서버는 갱신된 문서를 편집자에게 반환하고, 편집자는 갱신된 문서를 보게 된다.

만약 편집자가 문서를 편집해서 위 과정이 수행되고 있을 때 문서를 다시 편집한다면, 서버에서 편집자에게 전달할 문서 (서버에서 갱신된 문서) 를 무시하고 현재 편집이 끝난 뒤에 위 과정을 다시 반복하게 된다.

Differential Synchronization

Differential Synchronization Concept

https://neil.fraser.name/writing/sync/diff1.gif

  1. Client Text, Common Shadow, Server Text는 아래와 같은 텍스트로 시작한다.

    "Macs had the original point and click UI.”

  2. Client Text가 사용자A에 의해 다음과 같이 변경되었다.

    "Macintoshes had the original point and click interface."

  3. 사용자A의 편집은 다음과 같은 Edits 리스트를 만든다.

    @@ -1,11 +1,18 @@
     Mac
    +intoshe
     s had th
    @@ -35,7 +42,14 @@
     ick 
    -UI
    +interface
  4. Common Shadow는 Client Text가 복사되어 다음과 같이 변경된다.

    "Macintoshes had the original point and click interface."

  5. 위 과정이 일어나는 동안, Server Text가 사용자B에 의해 아래와 같이 편집되었다.

    "Smith & Wesson had the original point and click UI."

  6. 이 때 Client Text Edits에 의한 Patch 로직이 Server Text에 적용된다.

    1. 첫 번째 편집내용 (Macs → Macintocshes) 의 Patch는 실패한다. Server Text의 상태와 Edits에 기술된 내용이 다르기 때문이다.
    2. 두 번째 편집내용 (UI → interface) 의 Patch는 성공한다.

    이 과정을 통해 Server Text는 아래와 같이 변경된다.

    "Smith & Wesson had the original point and click interface.”

  7. 이제 Server Text와 Common Shadow의 Diff를 찾고, 이를 토대로 Edits가 만들어진다.

    @@ -1,15 +1,18 @@
    -Macintoshes
    +Smith & Wesson
     had
  8. Common Shadow는 아래와 같이 변경되고, Edits가 Client Text에 Patch된다.

    "Smith & Wesson had the original point and click interface.”

이로써 사용자A,B에 의해 편집된 텍스트의 동기화가 완료되었다.

Diff → Edits → Patch로 이어지는 사이클은 여러 사용자가 동일 문서를 편집하는 동안 끊이지 않고 지속된다.

@caffeine-library/readers-system-design-interview