0

최근 데이터 만 추적하고 LWW 규칙을 통해 데이터를 쉽게 삭제할 수 있도록 벡터 시계의 도움을 받아야합니다. (마지막 쓰기 승리) 노드가 3 개 있다고 가정 해 보겠습니다.결정 방법 동시 벡터 시계에 대한 최종 쓰기 승리?

- Node1 
- Node2 
- Node3 

그런 다음 벡터 시계를 사용하여 각 이벤트/변경 사항에 대한 인과성 및 동시성을 추적합니다. 우리는 노드 1이 우리가 5 개 씩의 클럭을 증가 의미 5 로컬 변경 사항은 그

{Node1: 5, Node2:0, Node3:0}. 

이 일반적으로 괜찮을 것 오른쪽으로 초래됩니다 처음에 예를 들어

{Node1:0, Node2:0, Node3:0}. 

벡터 시계를 대표? 동시에 노드 2는 또한 지역을 업데이트하고있는 경우 노드 1은 노드 3에 이벤트 업데이트를 통과하고 vectorclock를 편승를 전송 어떤 점에서

{Node1:0, Node2:1, Node3:0}. 

로 결과의 클럭을 증가 무슨 그런

. 그래서 의 VC를 가진 Node3은 아직 변경 사항이 없으므로 데이터와 시계를 쉽게 병합합니다.

내가 처리하는 방법에 대해 생각하고있는 문제는 Node2가 자체 VC 및 업데이트를 전달하는 Node3으로 업데이트 할 이벤트를 보내는 경우 발생합니다. 데이터와 시계는 어떻게됩니까? Node1에서 나온 Node3에 기록 된 첫 번째 항목이 기본적으로 자체 시계에 더 큰 VC 값을 갖는 이후의 쓰기로 표시 될 때 Last Write 항목을 여기에 적용하려면 어떻게해야합니까? 노드 3이받은 {Node1: 5, Node2: 0 , Node3: 1} 노드 2의 messagevc을 : 병합 전 노드 3의 시계 {Node1:0, Node2:1, Node3:0}

어떻게 동시 벤처 캐피탈의 데이터를 해결 처리하나요?

답변

1

이것은 좋은 질문입니다. 벡터 시계에서 카운터를 사용 중이므로 노드에서 카운터를 동기화하지 않기 때문에이 문제가 발생합니다. 몇 가지 옵션이 있습니다 :

  1. 하나의 주 서버를 통해 모든 쓰기를 제출하십시오. 주 서버는 모든 쓰기에 전체 주문을 적용한 다음 개별 노드에 저장하여 저장할 수 있습니다. 시스템에 대한 배경 지식이 있으면 도움이됩니다. 예를 들어 세 개의 독립 노드가있는 이유는 무엇입니까? 복제와 가용성을 제공하기 위해 존재합니까? 그렇다면이 주 서버 방식이 효과적입니다.
  2. Google의 Spanner 용지에 설명 된대로 서버의 시간을 동기화하십시오. 그런 다음 벡터 시계의 각 노드에 대해 단조롭게 증가하는 카운터를 사용하는 대신 서버의 시간을 기준으로 타임 스탬프를 사용할 수 있습니다. 다시 말하지만, 시스템에 배경 지식을 갖는 것이 도움이 될 것입니다. 당신의 시스템이 쓰기를 제출하는 인간 사용자들로만 구성된 경우, LWW 불변량을 위반하지 않고 NTP를 사용하여 서버 시간을 느슨하게 유지할 수 있습니다.