Consistency Models and Replicache

Architecture of OpenAI


Consistency Model은 분산 시스템에서 어느정도의 Consistency를 제공할 것이냐에 대한 여러가지 규약이다. 이전 포스트 중 PACELC 이론에서 Latency와 Consistency를 Trade off 하는 내용이 있는데, 이 Trade off 에 따라서 어느정도의 Consistency 를 제공할 것인가에 대한 내용이다.

이전 포스트에서 다룬 Replicache도 분산 시스템의 일종이다. Replicache는 Causal+ Consistency를 따른다고 한다.


출처



Strict Consistency

항상 시간 순서대로 값을 읽을 수 있는 Consistency이다. 값이 쓰여진 시점 이후에 발생하는 모든 읽기는 항상 그 값을 읽는다. 이를 만족 하려면 두가지의 조건이 필요하다. 모든 노드가 공유하는 global clock이 존재하고 이에 동기화 해야하며, Write가 즉시 수행되어야한다.

w(x)a: x에 a라는 값을 write, r(x)a: x에서 a란 값을 read

t시간에 w(x)a 이 1번 노드에서 발생하고, t+delta(0.0000000000000001s)후에 2번 노드에서 r(x)가 발생했을때, 2번노드는 값 a를 읽어야한다.

같은 t시간에 operation이 수행되지 않도록 global clock이 존재해서 operation을 직렬화해야하고, write가 즉시 수행되어서 t+delta 시간에 write한 값을 읽을 수 있어야한다.

하지만 이는 실제로 불가능한 일이다. 따라서 Strict Consistency는 이론으로 존재한다.

아래 상황에서 Strict Consistency를 준수한다면
Image description

정답은 아래와 같다.
Image description



Sequential Consistency

Sequential Consistency의 핵심 키워드는 ‘Global Ordering’이다. 모든 쓰기/읽기 연산은 하나의 통합된 순서가 있는 것 처럼 동작해야한다. 또 각각의 프로세스(클라이언트)가 수행하는 연산은 그 순서대로 실행되어야 한다.

아래의 경우 p3와 p4는 어떤 값을 읽을 수 있을까?
Image description

아래는 Strict Consistency와 같으므로 Sequential Consistency도 만족한다.
Image description

아래는 Global Ordering을 찾을 수 있으므로 Sequential Consistency가 맞다.
Image description

Global Ordering: w(x)a, r(x)a, w(x)b, r(x)b

하지만 아래의 경우에는 a가 b보다 먼저 쓰여졌는데 나중에 읽힌다. 이런 경우는 Sequential Consistency를 만족하지 않는다.

Image description



Causal Consistency

Causal 이란 원인-결과 관계를 의미한다. “Happens-before (→)” 관계라는 것을 이해하는 것이 중요하다.

A → B 는 다음과 같은 경우에 성립한다.

  1. 같은 프로세스(클라이언트)에서 A가 B보다 먼저 발생됨
  2. A 후에 메세지를 보내고 메세지를 받은 쪽이 B를 수행함.
  3. A → B 이고 B → C 이면 A → C 임.

Causal Consistency란 이런 원인-결과 관계가 모든 노드에서 같이 보이는 규약이다.

아래 경우는 Causal Consistency이다.

Image description

여기에서 찾을 수 있는 “Happens-before” 관계는 w(x)a → r(x)a, w(x)b → r(x)b 뿐이고 이는 모든 프로세스가 만족 한다. P3 가 b를 먼저 읽는 것은 괜찮다. 두 쓰기 연산은 독립적이므로 w(x)a → w(x)b의 원인-결과 관계는 없기 때문이다.

아래는 Causal Consistency를 성립하지 않는다. 이유는 w(x)a → w(x)c의 원인-결과 관계가 존재하는데, P3에서 c가 a보다 먼저 읽히기 때문이다.

Image description



Eventual Consistency

Eventual (결국) 일관성을 가지게 되는 규약이다. 언젠가 쓰기 연산이 없고 네트워크가 안정화 되면 결국 모든 노드는 같은 값을 보게된다. 매우 유한 규약이다.

Replicache는 Causal+ Consistency를 따른다고 한다. 이건 조금더 강한 Causal Consistency라는데 나중에 알아보도록하자.



Source link
lol

By stp2y

Leave a Reply

Your email address will not be published. Required fields are marked *

No widgets found. Go to Widget page and add the widget in Offcanvas Sidebar Widget Area.