일관성 모델
Consistency model![]() | 이 기사는 독자들에게 혼란스럽거나 불분명할 수 있다.(2015년 1월 (이 및 ) |
컴퓨터 과학에서 일관성 모델은 프로그래머와 시스템 간의 계약을 규정하며, 여기서 시스템은 프로그래머가 메모리 연산을 위한 규칙을 준수하면 메모리는 일관되고 읽기, 쓰기 또는 메모리의 갱신 결과는 예측 가능하다는 것을 보증한다.일관성 모델은 분산 공유 메모리 시스템이나 분산 데이터스토어(파일 시스템, 데이터베이스, 최적 복제 시스템 또는 웹 캐싱 등)와 같은 분산 시스템에서 사용됩니다.일관성은 캐시된 시스템 또는 캐시 없는 시스템에서 발생하는 일관성과는 다릅니다. 모든 프로세서에 대한 데이터의 일관성이 있습니다.일관성은 단일 위치 또는 단일 변수에 대한 쓰기가 모든 프로세서에 의해 인식되는 글로벌 순서를 유지하는 것입니다.일관성은 모든 프로세서에 대한 여러 위치에 대한 작업 순서를 처리합니다.
C++나 Java 등의 상위 레벨 언어에서는 메모리 시멘틱스를 유지하는 방법으로 메모리 동작을 하위 레벨 동작으로 변환하고 일부 메모리 명령을 재정렬하며 다음과 같은 라이브러리 콜과의 필요한 동기화를 캡슐화함으로써 일관성 계약을 유지합니다.pthread_mutex_lock()
를 클릭합니다.[1]
예
다음과 같은 경우가 [2]발생한다고 가정합니다.
- X행은 노드 M 및 N에 복제됩니다.
- 클라이언트 A가 노드 M에 행 X를 씁니다.
- 일정 시간 경과 후 클라이언트 B는 노드 N에서 행 X를 읽습니다.
일관성 모델은 클라이언트 B가 클라이언트 A에 의해 실행된 쓰기를 확실하게 볼 것인지, 확실히 볼 것인지 또는 쓰기를 볼 것인지 여부를 결정합니다.
종류들
일관성 모델은 업데이트의 명백한 순서와 가시성에 대한 규칙을 정의하고 트레이드오프와 [2]연속성을 유지합니다.일관성 모델을 정의하고 분류하는 방법에는 이슈와 뷰의 두 가지가 있습니다.
- 쟁점.
- 발행 방법은 프로세스가 작업을 발행하는 방법을 정의하는 제한 사항에 대해 설명합니다.
- 보다
- 프로세스에 표시되는 작업의 순서를 정의하는 보기 메서드.
예를 들어 일관성 모델은 이전에 실행된 모든 작업이 완료될 때까지 프로세스가 작업을 실행할 수 없도록 정의할 수 있습니다.일관성 모델에 따라 다른 조건이 적용됩니다.한 일관성 모형은 해당 모형의 모든 조건과 그 이상의 조건이 필요한 경우 다른 모형보다 더 강한 것으로 간주할 수 있습니다.즉, 제약 조건이 적은 모형이 더 약한 일관성 모형으로 간주됩니다.
이들 모델은 하드웨어의 배치 방법과 프로그래머가 코드화하는 방법을 개략적으로 정의합니다.선택한 모델은 컴파일러가 명령의 순서를 변경하는 방법도 영향을 줍니다.일반적으로 명령 간의 의존성을 제어하고 같은 위치에 쓰기를 명령하면 컴파일러는 필요에 따라 순서를 변경할 수 있습니다.단, 아래 모델에서는 로드 전 쓰기 순서를 변경할 수 있는 경우와 그렇지 않은 경우가 있습니다.
강력한 일관성 모델
엄격한 일관성
엄격한 일관성은 가장 강력한 일관성 모델입니다.이 모델에서는 모든 프로세서에 의한 변수에 대한 쓰기는 모든 프로세서에 의해 즉시 인식되어야 합니다.
엄격한 모델 다이어그램과 엄격하지 않은 모델 다이어그램은 시간 제약을 순간적으로 설명합니다.글로벌 클럭이 존재하는 것처럼 이해하면 클럭 기간이 끝날 때까지 모든 쓰기가 모든 프로세서 캐시에 반영됩니다.다음 동작은 다음 클럭 기간에만 실행해야 합니다.
순서 | 엄격한 모델 | 엄격하지 않은 모델 | ||
---|---|---|---|---|
P1개 | P2개 | P1개 | P2개 | |
1 | W(x)1 | W(x)1 | ||
2 | R(x)1 | R(x)0 | ||
3 | R(x)1 |
이 모델은 가장 견고한 모델입니다.이 모델에서는 프로그래머의 예상 결과가 매번 수신됩니다.그것은 결정론적이다.순간적인 메시지 교환이 불가능하기 때문에 그것의 실질적인 관련성은 사고 실험과 형식주의에 국한된다.이는 동시 쓰기가 불가능하다고 가정하기 때문에 동일한 데이터 항목에 대한 동시 쓰기의 충돌 해결 문제에 대한 답변에 도움이 되지 않습니다.
시퀀셜 일관성
순차 일관성 모델은 Lamport(1979)에 의해 제안되었다.엄격한 일관성 [3]모델보다 약한 메모리 모델입니다.변수에 대한 쓰기가 즉시 표시될 필요는 없지만, 다른 프로세서에 의한 변수에 대한 쓰기는 모든 프로세서에서 동일한 순서로 표시되어야 합니다.「실행의 결과가, 데이터 스토어상의 모든 프로세스의 (읽기 및 쓰기) 조작이 순서적으로 실행되었을 경우와 같으며, 각각의 프로세서의 조작은,[3][4] 그 프로그램에 의해서 지정된 순서로 이 순서로 표시되는 경우」의 경우, 시퀀셜 일관성이 충족된다.Adve와 Gharachorlu, 1996은[5] 순차적 일관성을 구현하기 위한 두 가지 요건을 정의합니다. 프로그램 순서와 쓰기 원자성입니다.
- 프로그램 순서: 프로그램 순서는 각 프로세스가 프로그램에 의해 순서가 지정된 메모리 요청을 발행하는 것을 보증합니다.
- 원자성 쓰기:쓰기 원자성은 메모리 요구가 단일 FIFO 큐의 순서에 따라 처리되는 것을 정의합니다.
순차적인 일관성에서는 시간이나 최근 쓰기 작업에 대한 개념이 없습니다.모든 프로세스에서 동일한 조작 인터리빙이 있습니다.프로세스는 모든 프로세스의 쓰기 작업을 볼 수 있지만 자체 읽기 작업만 볼 수 있습니다.각 프로세서의 프로그램 순서와 프로세서간의 동작 순서를 유지할 필요가 있습니다.프로세서 간의 순차적인 실행 순서를 유지하기 위해서는 모든 작업이 다른 모든 프로세서에 대해 순간적으로 또는 원자적으로 실행되는 것처럼 보여야 합니다.
이러한 작업은 물리적으로 정보를 즉시 전송하는 것이 불가능하기 때문에 "표시"만 완료하면 됩니다.예를 들어 단일 글로벌 공유 버스를 사용하는 시스템에서는 버스 라인에 정보가 게시되면 모든 프로세서가 동시에 정보를 볼 수 있습니다.따라서 버스 라인에 정보를 전달하면 모든 프로세서에 대한 실행이 완료되어 실행된 것으로 보입니다.캐시가 필요 없는 아키텍처 또는 순간적이지 않은 상호 연결 네트워크를 사용하는 캐시된 아키텍처는 프로세서와 메모리 사이의 경로가 느릴 수 있습니다.일부 메모리는 다른 메모리보다 브로드캐스트 데이터를 더 빨리 수신하기 때문에 이러한 느린 경로로 인해 순차적인 불일치가 발생할 수 있습니다.
순차적 일관성은 비결정론적 결과를 초래할 수 있습니다.이는 프로세서 간의 순차적 작업 순서가 프로그램을 실행하는 동안 다를 수 있기 때문입니다.모든 메모리 조작은 프로그램 순서로 실행할 필요가 있습니다.
선형성[6](원자 일관성 또는 원자 [7]메모리라고도 함)은 각 동작의 시작 시간과 종료 시간을 고려함으로써 실시간 제약이 있는 순차적 일관성으로 정의할 수 있습니다.실행은 시작 시간과 종료 시간 사이에 점을 배치함으로써 선형 가능한 순서로 이루어지는 각 조작을 선형화할 수 있고 순차적인 일관성을 보증하는 경우에 선형화할 수 있다.
모델 체크를 통해 순차적 일관성을 확인하는 것은 일반적으로 유한 상태 캐시 [8]일관성 프로토콜의 경우에도 결정할 수 없습니다.
원인 일관성
Hutto와 Ahamad,[9] 1990년에 정의된 인과 일관성은[4] 사건을 인과적으로 관련된 사건과 그렇지 않은 사건으로 분류함으로써 순차적 일관성 모델의 약화를 의미한다.이는 인과 관계가 있는 쓰기 작업만 모든 프로세스에서 동일한 순서로 표시되어야 한다고 정의합니다.예를 들어, 사건 b가 이전의 사건 a로부터 효력을 발휘하는 경우, 인과 일관성은 모든 프로세스가 사건 a 이후에 사건 b를 보게 하는 것을 보장한다.Tanenbaum et al., 2007은 다음과 같은 [4]조건에서 데이터 저장소가 인과적으로 일관된 것으로 간주된다는 보다 엄격한 정의를 제공한다.
- 잠재적으로 인과 관계가 있는 쓰기는 모든 프로세스에서 동일한 순서로 표시되어야 합니다.
- 동시 쓰기는 머신마다 다른 순서로 표시될 수 있습니다.
이 모델은 프로세서의 동시 쓰기 및 인과 관계가 없는 쓰기의 순차적 일관성을 완화합니다.두 번째 쓰기를 수행하는 프로세서가 첫 번째 쓰기를 방금 읽었을 때 변수에 대한 이전 쓰기에 의존하면 두 개의 쓰기가 원인적으로 관련될 수 있습니다.2개의 기입은, 같은 프로세서 또는 다른 CPU로 행해지고 있을 가능성이 있습니다.
순차적 일관성과 마찬가지로 읽기는 즉시 변경 사항을 반영할 필요는 없지만 변수에 대한 모든 변경 사항을 순차적으로 반영해야 합니다.
순서 | P1개 | P2개 | P3개 | P4개 |
---|---|---|---|---|
1 | W(x)1 | R(x)1 | R(x)1 | R(x)1 |
2 | W(x)2 | |||
3 | W(x)3 | R(x)3 | R(x)2 | |
4 | R(x)2 | R(x)3 |
W(x)2는 W(x)1보다 앞에 P2에서 x로 읽혀지기 때문에 W(x)1보다 뒤에 발생하므로 이 예는 Hutto와 Ahamad의 정의에 따라 인과적으로 일치한다(W(x)2와 W(x)3은 모든 프로세스에서 동일한 순서로 보이지 않기 때문에 Tanenbaum 등에서는 아니다).단, P3과 P4에서는 R(x)2와 R(x)3의 순서가 다르기 때문에 이 예는 순차적으로 [10]일관성이 없습니다.
프로세서의 일관성
데이터의 일관성을 유지하고 각 프로세서가 자체 메모리를 갖는 확장 가능한 프로세서 시스템을 구현하기 위해 프로세서 일관성 모델이 도출되었습니다.[10]모든 프로세서는 1개의 프로세서가 기입하는 순서와 다른 프로세서가 같은 장소에 기입하는 방식(일관성이 유지됨)으로 일관성을 유지할 필요가 있습니다.다만, 다른 장소에의 다른 프로세서에 의한 기입이 있는 경우는, 일관성을 유지할 필요는 없습니다.
모든 쓰기 작업은 모든 메모리에 대한 여러 하위 쓰기로 나눌 수 있습니다.이러한 메모리 중 하나로부터의 판독은, 이 메모리에의 기입이 완료되기 전에 행해질 가능성이 있습니다.따라서 데이터 읽기가 오래될 수 있습니다.따라서 PC 아래의 프로세서는 오래된 저장소가 정지할 필요가 있을 때 보다 젊은 로드를 실행할 수 있습니다.이 모델에서는 쓰기 전에 읽기, 읽기 및 쓰기 전에 읽기 및 쓰기 순서가 유지됩니다.
프로세서의 일관성[11] 모델은 PRAM 일관성 모델과 유사하며, 동일한 메모리 위치에 대한 모든 쓰기는 다른 모든 프로세스에서 동일한 순서로 인식되어야 한다는 강력한 조건입니다.프로세서의 일관성은 시퀀셜의 일관성보다 약하지만 PRAM의 일관성 모델보다 강합니다.
Stanford DASH 멀티프로세서 시스템은 Goodman의 [12]정의와 비교할 수 없는(더 약하지도 더 강하지도 않은) 프로세서 일관성의 변화를 구현합니다.모든 프로세서는 1개의 프로세서에 의한 기입이 표시되는 순서와 다른 프로세서에 의한 같은 장소에의 기입이 표시되는 순서에 일관성이 있어야 합니다.다만, 다른 장소에의 다른 프로세서에 의한 기입이 있는 경우는, 일관성을 유지할 필요는 없습니다.
파이프라인 RAM 일관성 또는 FIFO 일관성
파이프라인 RAM 일관성(PRAM 일관성)은 1988년[13] Lipton과 Sandberg에 의해 최초로 기술된 일관성 모델 중 하나로 제시되었습니다.비공식적인 정의로 인해, Ahamad 등에 의한 구현과 Mosberger에 의한 구현 중 적어도 두 가지 미묘하게 다른 [12]구현이 있다.
PRAM의 정합성에서는 모든 프로세스가 그 프로세스에 의해 발행된 것과 같은 순서로 단일 프로세스의 동작을 표시하지만, 다른 프로세스에서 발행된 동작은 다른 프로세스와 다른 순서로 표시할 수 있습니다.PRAM의 정합성은 프로세서의 정합성에 비해 약합니다.PRAM은 모든 프로세서에 걸쳐 장소에 대한 일관성을 유지할 필요성을 완화합니다.여기서 프로세서에 쓰기 전에 모든 변수에 대한 읽기를 실행할 수 있습니다.이 모델에서는 쓰기 전에 읽기, 읽기 및 쓰기 전에 읽기 및 쓰기 순서가 유지됩니다.
순서 | P1개 | P2개 | P3개 | P4개 |
---|---|---|---|---|
1 | W(x)1 | |||
2 | R(x)1 | |||
3 | W(x)2 | |||
4 | R(x)1 | R(x)2 | ||
5 | R(x)2 | R(x)1 |
캐시 일관성
캐시 일관성을[11][14] 유지하려면 동일한 메모리 위치에 대한 모든 쓰기 작업을 순차적으로 수행해야 합니다.캐시 일관성은 프로세서의 일관성보다 약하고 PRAM의 일관성과는 비교할 수 없습니다.
일관성이 느리다
일관성이 [14]느린 경우 프로세스가 메모리 위치에 이전에 쓴 값을 읽으면 이후 해당 위치에서 이전 값을 읽을 수 없습니다.프로세스에서 수행된 쓰기는 프로세스에서 즉시 확인할 수 있습니다.PRAM 및 캐시 일관성보다 느린 정합성은 더 약한 모델입니다.
예:느린 메모리 다이어그램은 느린 일관성의 예를 나타냅니다.첫 번째 프로세스는 메모리 위치 X에 1을 쓰고 다음으로 메모리 위치 Y에 1을 씁니다.두 번째 프로세스는 Y에서 1을 읽고 X가 Y보다 먼저 쓰여졌음에도 X에서 0을 읽습니다.
Hutto, Phillip W. 및 Mustaque Ahamad(1990)[9]는 적절한 프로그래밍을 통해 느린 기억력(일관성)이 표현적이고 효율적일 수 있음을 보여줍니다.그들은 느린 기억은 두 가지 가치 있는 특성을 가지고 있다고 말한다. 즉, 국소성과 원자 기억으로부터의 감소를 뒷받침하는 것이다.그들은 느린 기억력의 표현력을 나타내기 위해 두 가지 알고리즘을 제안한다.
세션 보증
이 4가지 일관성 모델은 1994년 논문에서 제안되었습니다.이들은 단일 사용자 또는 응용 프로그램만 데이터를 [15]수정하는 상황에서 보증을 중시합니다.
단조로운 읽기 일관성
Tanenbaum et al., 2007은[4] 다음과 같이 단조로운 판독 일관성을 정의한다.
"프로세스가 데이터 항목 x의 값을 읽을 경우 해당 프로세스에 의해 x에 대한 연속적인 읽기 작업은 항상 같은 값 또는 더 최근의 [4]값을 반환합니다."
단조로운 읽기 일관성은 프로세스가 시간 t에 데이터 항목 x 값을 읽은 후 해당 데이터 항목의 이전 값을 보지 않도록 보장합니다.
단조로운 쓰기 일관성
단조로운 쓰기 일관성 조건은 Tanenbaum et al., 2007에[4] 의해 다음과 같이 정의된다.
데이터 항목 X에 대한 프로세스에 의한 쓰기 조작은 동일한 [4]프로세스에 의한 X에 대한 연속 쓰기 조작 전에 완료된다.
읽기/쓰기 일관성
데이터 항목 X에 프로세스가 쓴 값은 데이터 항목 [4]X에 대해 동일한 프로세스에 의해 실행되는 연속적인 읽기 조작에 항상 사용할 수 있다.
쓰기-팔로우-읽기 일관성
쓰기-팔로우-읽기 일관성의 경우 이전 읽기 작업을 수행한 후 업데이트가 전파됩니다.Tanenbaum et al., 2007은[4] 쓰기-팔로우-읽기 일관성을 위해 다음과 같은 조건을 정의합니다.
데이터 항목 x에 대해 동일한 프로세스에 의한 이전 읽기 조작에 이은 프로세스에 의한 쓰기 조작은 [4]읽혀진 x의 동일하거나 보다 최근의 값에 대해 이루어지는 것이 보증된다.
메모리 정합성이 낮은 모델
다음 모델에서는 프로그래머에 의한 특정 동기화가 필요합니다.
빈약한 순서
약한 순서는 메모리 작업을 데이터 작업과 동기화 작업의 두 가지 범주로 분류합니다.프로그램 순서를 적용하기 위해서는 프로그래머는 프로그램 내에서 적어도1개의 동기화 조작을 찾을 필요가 있습니다.동기 조작은, 모든 프로세서에 의해서 행해진 이전의 모든 조작이 완료해, 인식되고 있는 것을 프로세서에 통지합니다.프로그램 순서와 원자성은 동기화 작업에서만 유지되며 모든 읽기 및 쓰기 작업에서는 유지되지 않습니다.이것은, 크리티컬 섹션의 메모리 조작 등, 특정의 메모리 조작을, 크리티컬 섹션의 모든 조작이 완료될 때까지, 모든 프로세서에서 확인할 필요는 없다는 것을 이해하고 있기 때문입니다.동기 조작간의 메모리 조작의 데이터 영역에의 순서 변경은, 프로그램의 결과에 영향을 주지 않는 것을 전제로 하고 있습니다.이를 통해 멀티프로세서시스템에서 실행되도록 작성된 프로그램에는 데이터 레이스가 발생하지 않고 SC 결과가 [16]항상 생성되도록 하기 위해 필요한 동기화가 포함되어 있다는 사실을 이용할 수 있습니다.
P1개 | P2개 |
---|---|
X = 1, fence xready = 1; | (!xready) {} 동안 펜스, 펜스 y = 2; |
이 모델에서는 일관성이 완화되지 않습니다.이러한 요건이 충족되면 다른 모든 "데이터" 작업의 순서를 변경할 수 있습니다.이 방법은 카운터가 데이터 작업 수를 추적하고 이 카운터가 0이 될 때까지 동기화 작업이 수행되지 않습니다.게다가 이전의 모든 동기화가 완료되지 않는 한, 데이터 조작은 더 이상 발행되지 않습니다.프로그램의 정확성에 영향을 주지 않고 2개의 동기화 변수 사이의 메모리 동작을 오버랩하여 순서를 변경할 수 있습니다.이 모델에서는 쓰기 원자성이 항상 유지되므로 약한 순서에는 추가적인 안전망이 필요하지 않습니다.
약한 순서를 유지하려면 동기화 작업 전에 쓰기 작업을 글로벌하게 수행해야 합니다.동기화 작업 후에 표시되는 작업도 동기화 작업이 완료된 후에만 수행해야 합니다.따라서 동기화 변수에 대한 액세스는 순차적으로 일관되며 읽기 또는 쓰기는 이전 동기화 작업이 완료된 후에만 수행해야 합니다.
프로그램의 명시적 동기화에 대한 의존도가 높습니다.약한 순서 모델의 경우 프로그래머는 테스트 앤 세트, fetch-and-op, 조건부 저장, load linked 또는 동기화 변수에 라벨을 붙이거나 펜스를 사용해야 합니다.
릴리스 일관성
릴리스 일관성 모델은 입구 동기화 동작과 출구 동기화 동작을 구별하여 약한 일관성 모델을 완화합니다.약한 순서에서는, 동기 조작을 확인할 수 있을 때는, 동기 조작이 완료되어 프로세서가 속행하기 전에, 모든 프로세서의 모든 조작을 확인할 필요가 있습니다.그러나 릴리스 일관성 모델에서는 "획득"이라고 하는 중요한 섹션의 엔트리 중에 로컬 메모리 변수에 대한 모든 연산을 완료해야 합니다.「릴리스」라고 불리는 종료시에, 로컬 프로세서에 의해서 행해진 모든 변경은 다른 모든 프로세서에 반영됩니다.일관성은 여전히 유지됩니다.
수집 작업은 중요 섹션에 액세스하기 위해 수행되는 로드/읽기 작업입니다.릴리스 조작은 다른 프로세서가 공유 변수를 사용할 수 있도록 수행하는 저장/쓰기 작업입니다.
동기 변수 중 시퀀셜 일관성 또는 프로세서의 일관성을 유지할 수 있다.SC를 사용하여 경쟁하는 모든 동기화 변수를 순서대로 처리해야 합니다.단, PC에서는 이 순서를 따르기만 하면 됩니다.이전 [17]릴리스보다 이전 버전을 먼저 획득할 수 있습니다.
RCSC 및 RCpc
릴리스 일관성에는 두 가지 유형이 있습니다.릴리즈 일관성 with 시퀀셜 일관성(RCSC)과 릴리스 일관성 with 프로세서 일관성(RCPC)입니다.후자의 유형은 다음에 특별히 지정된 작업에 적용되는 일관성의 유형을 나타낸다.
특수한(통상적인 것을 참조) 메모리 조작이 있으며, 그 자체는 동기 조작 또는 nsync 조작의 2개의 클래스로 구성됩니다.후자는 동기화에 사용되지 않는 작업이며, 전자는 획득 및 해제 작업으로 구성됩니다.acquire는 실질적으로 공유된 특정 장소에 대한 접근을 얻기 위해 사용되는 읽기 메모리 조작이다.한편 Release는 공유 로케이션에 대한 접근 권한을 부여하기 위해 실행되는 쓰기 작업입니다.
순차적 일관성(RCSC)의 경우 제약사항은 다음과 같습니다.
- → all 획득,
- 모든 → 릴리즈,
- special → special.
프로세서 일관성(RCPC)의 경우 프로그램 읽기 순서는 다음과 같은 제약이 있어 완화됩니다.
- → all 획득,
- 모든 → 릴리즈,
- 특수 → 특수(특수 쓰기 뒤에 특수 읽기가 이어지는 경우 제외)
참고: 위의 표기법 A → B는 연산 A가 프로그램 순서에서 B보다 앞에 있을 경우 프로그램 순서가 적용됨을 의미합니다.
엔트리 일관성
이것은 릴리스 일관성 모델의 변형입니다.또한 중요한 섹션의 진입 또는 종료를 명시적으로 기술하기 위해 취득 및 해제 지침을 사용해야 합니다.단, 엔트리의 일관성에 따라 모든 공유 변수에는 고유 동기화 변수가 할당됩니다.이와 같이 취득이 변수 x에 해당하는 경우에만 해당 프로세서에 대해 x와 관련된 모든 작업을 완료해야 합니다.이를 통해 서로 다른 공유 변수의 서로 다른 중요 섹션에 대한 동시 작업을 수행할 수 있습니다.동일한 공유 변수에서 중요한 작업에 대해 동시성을 확인할 수 없습니다.이러한 일관성 모델은 다른 매트릭스 요소를 동시에 처리할 수 있는 경우에 유용합니다.
로컬 일관성
로컬 [14]일관성을 유지하기 위해 각 프로세스는 프로그램에 의해 정의된 순서대로 자체 작업을 수행합니다.다른 프로세스의 쓰기 작업이 수행되는 것처럼 보이는 순서에는 제약이 없습니다.로컬 일관성은 공유 메모리 시스템에서 가장 취약한 일관성 모델입니다.
일반적인 일관성
일반적으로 [18]메모리 위치의 모든 복사본은 모든 프로세스의 쓰기가 완료된 후 최종적으로 동일합니다.
궁극적인 일관성
최종적인[4] 일관성은 동시 업데이트가 없는 시스템의 약한 일관성 모델입니다.업데이트에 오랜 시간이 걸리는 경우, 모든 복제본이 일관성을 유지하도록 정의합니다.
대부분의 분산형 공유 데이터베이스에는 최종적으로 일관성 모델이 있습니다.기본적으로 사용 가능, 소프트 스테이트, 최종적으로 일관성, 또는 SALT라고 불리는ACD와 BASE의 조합: 시퀀셜,[19][20][21] 합의, 주도형, 변조 방지, 대칭형, 관리자 불필요, 주도형, 주도형, 시간 일치형입니다.
완화된 메모리 일관성 모델
일부 다른 일관성 모델은 완화 일관성 [7]모델이라고 불리는 하나 이상의 요구사항을 순차적 일관성으로 완화함으로써 정의할 수 있습니다.이러한 일관성 모델은 하드웨어 수준에서 메모리의 일관성을 제공하지 않습니다.실제로 프로그래머는 동기 기술을 적용하여 메모리 일관성을 구현할 책임이 있습니다.위의 모델은 4가지 기준에 따라 분류되며, 더 자세히 설명되어 있습니다.
완화된 일관성을 정의하기 위한 4가지 비교가 있습니다.
- 릴렉스
- 완화 일관성을 분류하는 한 가지 방법은 어떤 순차적 일관성 요건이 완화되는지 정의하는 것입니다.Adve and Garachorloo,[5] 1996년에 정의된 프로그램 순서를 완화하거나 원자성 요건을 작성함으로써 덜 엄격한 모델을 가질 수 있습니다.프로그램 순서는 각 프로세스가 프로그램에 의해 순서가 지정된 메모리 요구를 발행하는 것을 보증하며 쓰기 원자성은 단일 FIFO 큐의 순서에 따라 메모리 요구가 처리되는 것을 정의합니다.이완 프로그램 순서에서는, 조작 페어의 순서, 쓰기 후 쓰기, 쓰기 후 읽기 후 쓰기, 읽기/쓰기 후의 순서를 모두 이완할 수 있다.완화된 쓰기 원자성 모델에서는 프로세스가 다른 프로세서보다 먼저 자신의 쓰기를 볼 수 있습니다.
- 동기화 vs 비동기화
- 동기모델은 메모리액세스를 2개의 그룹으로 분할하여 한쪽 그룹이 약한 일관성 모델을 가질 수 있는 반면 다른 한쪽 그룹은 보다 제한적인 일관성 모델을 필요로 한다는 점을 고려하여 각 그룹에 다른 일관성 제한을 할당함으로써 정의할 수 있습니다.반면 비동기 모델은 메모리 액세스 유형에 동일한 일관성 모델을 할당합니다.
- 문제 vs 뷰 기반
- [14] Issue 메서드는 메모리 동작을 발행하는 프로세스의 제한을 정의함으로써 순차적인 일관성 시뮬레이션을 제공합니다.반면 보기 방법은 프로세스에 대한 이벤트 순서에 대한 가시성 제한을 설명합니다.
- 상대 모델 강도
- 일부 일관성 모델은 다른 모델보다 더 제한적입니다.즉, 엄격한 일관성 모델은 일관성 요건으로서 더 많은 제약을 가합니다.모델의 강도는 프로그램 순서 또는 원자성 완화에 의해 정의될 수 있으며 모델의 강도도 비교할 수 있습니다.일부 모델은 동일한 완화를 적용하거나 그 이상을 적용하면 직접적인 관련이 있습니다.한편, 다양한 요건을 완화하는 모델은 직접 관련되지 않습니다.
시퀀셜 정합성에는 프로그램 순서와 쓰기 원자성의 두 가지 요건이 있습니다.이러한 요건을 완화함으로써 다양한 완화 일관성 모델을 얻을 수 있습니다.이는 완화된 제약과 함께 성능이 향상되도록 이루어지지만, 프로그래머는 동기화 기술을 적용하여 메모리 일관성을 구현할 책임이 있으며 하드웨어를 잘 이해해야 합니다.
잠재적인 완화:
- 읽기 프로그램 순서에 쓰기
- 프로그램 순서를 쓰기 위해 쓰기
- 프로그램 순서를 읽으려면 읽고 쓰려면 읽어야 합니다.
읽기 쉬운 쓰기
하드웨어 레벨에서의 퍼포먼스 향상을 위한 접근방식은 기입의 PO를 완화하고 이어서 판독을 실시하여 기입 조작의 레이텐시를 효과적으로 숨기는 것입니다.이 유형의 이완이 필요로 하는 최적화는 프로세서의 이전 쓰기와 비교하여 이후의 읽기를 여유로운 순서로 할 수 있도록 하는 것입니다.이러한 이완으로 인해 XXX와 같은 일부 프로그램은 이완으로 인해 SC 결과를 제공하지 못할 수 있습니다.반면, YYY와 같은 프로그램은 나머지 프로그램 순서 제약을 적용하기 때문에 일관된 결과를 제공할 것으로 기대됩니다.
세 가지 모델이 이 범주에 속합니다.IBM 370 모델은 가장 엄격한 모델입니다.판독은, 다른 주소에의 이전의 기입 전에 완료할 수 있습니다만, 모든 프로세서가 기입 내용을 인식하지 않는 한 기입의 값을 반환하는 것은 금지됩니다.SPARC V8 TSO(Total Store Ordering Model) 모델은 IBM 370 모델을 부분적으로 완화하며, 판독을 통해 동일한 위치에 대한 자체 프로세서의 쓰기 값을 반환할 수 있습니다. 즉, 다른 프로세서가 쓰기 전에 자신의 쓰기 값을 반환합니다.이전 모델과 마찬가지로 모든 프로세서가 쓰기를 인식하지 않으면 쓰기 값을 반환할 수 없습니다.프로세서 정합성 모델(PC)은 3가지 모델 중 가장 완화된 모델이며, 다른 프로세서에 인식되기 전에 읽기가 완료되도록 두 가지 제약을 모두 완화합니다.
예 A에서는 프로세서의 기입(A)이 완료될 때까지 읽기(A)가 발행되지 않기 때문에 IBM 370에서만 결과를 얻을 수 있다.한편, TSO와 PC에서는, 단일의 프로세서에 플래그를 쓰기 전에 플래그를 읽어낼 수 있기 때문에, 이러한 결과가 가능합니다.
예 B에서는, P2가 P3에 표시되기 전에 기입의 값을 반환할 수 있기 때문에, 이 결과는 PC에서만 가능합니다.이것은 다른 두 모델에서는 가능하지 않을 것입니다.
위의 모델에서 순차적 일관성을 보장하기 위해 안전망 또는 울타리를 사용하여 구속조건을 수동으로 시행한다.IBM370 모델에는 작업 간에 수동으로 배치되는 몇 가지 특수 일련화 지침이 있습니다.이러한 순서는 메모리 명령 또는 분기 등의 비메모리 명령으로 구성됩니다.한편 TSO 및 PC 모델은 안전망을 제공하지 않지만 프로그래머는 읽기-수정-쓰기 작업을 사용하여 프로그램 순서가 쓰기 및 다음 읽기 사이에 유지되는 것처럼 보이게 할 수 있습니다.TSO의 경우 R-modify-W의 일부인 R 또는 W를 R-modify-W로 대체하면 PO가 유지되는 것처럼 보입니다.이 때문에 R-modify-W의 W가 판독값을 반환하는 'dummy'여야 합니다.마찬가지로 PC에서도 읽기가 쓰기로 대체되거나 이미 R-modify-W의 일부인 경우 PO는 유지되는 것으로 보입니다.
단, 컴파일러 최적화는 이 릴렉스만을 실행한 후에는 실행할 수 없습니다.컴파일러의 최적화를 위해서는 PO 내의 임의의 2개의 조작의 순서를 변경할 수 있는 완전한 유연성이 필요하기 때문에, 이 경우, 읽기에 관해서 기입 순서를 변경할 수 있는 기능은 충분히 도움이 되지 않습니다.
P1개 | P2개 |
---|---|
A = flag1 = flag2 = 0 | |
flag1 = 1 | flag2 = 1 |
A = 1 | A = 2 |
reg1 = A | reg3 = A |
reg2 = flag2 | reg4 = flag1 |
reg1 = 1; reg3 = 2, reg2 = reg4 = 0 |
P1개 | P2개 | P3개 |
---|---|---|
A = B = 0 | ||
A = 1 | ||
if (A == 1) | ||
B = 1 | if (B == 1) | |
reg1 = A | ||
B = 1, reg1 = 0 |
읽기 및 쓰기에 여유로운 쓰기
일부 모델에서는 서로 다른 위치에 쓰기 사이의 순서 제약도 완화하여 프로그램 순서를 더욱 완화합니다.SPARC V8 Partial Store Ordering Model(PSO; 부분 스토어 주문 모델)이 이러한 모델의 유일한 예입니다.같은 프로세서에서 다른 장소에 쓰기를 파이프라인하여 오버랩하는 기능은 PSO에 의해 실현되는 주요 하드웨어 최적화입니다.PSO는 TSO와 유사합니다.PSO는 프로세서가 자신의 쓰기의 값을 읽을 수 있도록 하고, 다른 프로세서가 쓰기 전에 다른 프로세서의 쓰기를 읽을 수 없도록 합니다.e는 다른 모든 프로세서에서 볼 수 있습니다.두 쓰기 사이의 프로그램 순서는 명시적 STBAR 명령을 사용하여 PSO에 의해 유지됩니다.STBAR는 FIFO 쓰기 버퍼가 있는 구현에서는 쓰기 버퍼에 삽입됩니다.카운터는 STBAR 명령 전에 모든 쓰기가 완료되었는지 판단하기 위해 사용되며, 메모리 시스템에 쓰기를 트리거하여 카운터를 증가시킵니다.쓰기 확인 응답은 카운터를 감소시키고 카운터가 0이 되면 이전의 쓰기가 모두 완료되었음을 나타냅니다.
예 A와 B에서 PSO는 이러한 비순차적인 결과를 모두 허용합니다.PSO가 제공하는 안전망은 TSO와 유사하며, 쓰기부터 읽기까지 프로그램 순서를 부과하고 쓰기 원자성을 강제합니다.
이전 모델과 마찬가지로 PSO에 의해 허용되는 완화는 컴파일러 최적화에 유용하기 때문에 충분히 유연하지 않습니다.이것은 훨씬 더 유연한 최적화를 필요로 합니다.
프로그램 주문 작성을 위한 여유로운 읽기 및 읽기:Alpha, RMO 및 PowerPC
일부 모델에서는 서로 다른 위치에 대한 모든 작업이 완화됩니다.읽기 또는 쓰기는 다른 위치에서 다른 읽기 또는 쓰기에 대해 정렬할 수 있습니다.약한 순서는 이 범주로 분류할 수 있으며 두 가지 유형의 릴리스 일관성 모델(RCSC 및 RCpc)도 이 모델 아래에 있습니다.이 완화 범주에서는 Digital Alpha, SPARC V9 RMO(완화 메모리 주문) 및 IBM Power의 세 가지 상용 아키텍처도 제안됩니다.PC 모델
이 세 가지 상업용 아키텍처는 안전망으로서 명시적인 울타리 명령을 나타낸다.Alpha 모델은 메모리 장벽(MB)과 쓰기 메모리 장벽(WMB)의 두 가지 유형의 펜스 명령을 제공합니다.MB 연산은 MB 이전의 메모리 연산의 프로그램 순서를 장벽 이후의 메모리 연산으로 유지하기 위해 사용할 수 있습니다.마찬가지로 WMB는 쓰기 사이에만 프로그램 순서를 유지합니다.SPARC V9 RMO 모델은 미래의 읽기 및 쓰기 작업에 대해 이전 읽기 및 쓰기를 주문하도록 맞춤화할 수 있는 MEMBAR 명령을 제공합니다.MEMBAR 명령을 사용하여 후속 읽기에 대한 쓰기 순서를 지정할 수 있으므로 이 순서를 달성하기 위해 read-modify-writes를 사용할 필요가 없습니다.파워PC 모델은 SYNC 명령이라는 단일 펜스 명령을 사용합니다.이것은 MB 명령과 비슷하지만, 같은 위치에 대한 두 읽기 사이에 동기화가 배치되어도 읽기가 프로그램 순서에서 벗어나 발생할 수 있습니다.또한 이 모델은 원자성의 측면에서 알파 및 RMO와 다르다.읽기가 완료되기 전에 쓰기를 볼 수 있습니다.쓰기 원자성을 착각하기 위해서는 읽기 수정 쓰기 조작의 조합이 필요할 수 있습니다.
RMO와 PowerPC를 통해 읽기 순서를 같은 위치로 변경할 수 있습니다.이러한 모델은 예 A와 B의 순차적 순서를 위반합니다.이러한 모델에서는 읽기 조작 후의 메모리 조작이 중복되어 읽기에 대해서 순서가 변경되는 것이 가능하게 되어 있습니다.Alpha 및 RMO를 사용하면 다른 프로세서의 초기 쓰기 값을 읽을 수 있습니다.프로그래머의 관점에서 이들 모델은 프로세서가 자신의 쓰기를 조기에 읽을 수 있도록 해 주더라도 원자성을 쓰는 환상을 유지해야 합니다.
트랜잭션 메모리 모델
트랜잭션 메모리[7] 모델은 소프트웨어 또는 하드웨어에서 지원되는 공유 메모리 시스템의 통신 모델로서 캐시 일관성 모델과 메모리 일관성 모델의 조합입니다. 트랜잭션 메모리 모델은 메모리 일관성과 캐시 일관성 모두를 제공합니다.트랜잭션은 일관된 상태에서 다른 상태로 데이터를 변환하는 프로세스에 의해 실행되는 일련의 작업입니다.트랜잭션은 충돌이 없을 때 커밋되거나 중단됩니다.커밋에서는 트랜잭션이 완료되면 모든 변경이 다른 모든 프로세스에 표시되며 중단은 모든 변경 사항을 폐기합니다.완화된 일관성 모델에 비해 트랜잭션 모델은 사용하기 쉽고 순차적 일관성 모델보다 더 높은 성능을 제공할 수 있습니다.
기타 일관성 모델
기타 일관성 모델은 다음과 같습니다.
그 외의 몇개의 일관성 모델은, 운용의 순서나 가시성에 관한 제한을 나타내거나, 특정의 장해의 [24]가정에 대처하기 위해서 구상되고 있습니다.
일관성 및 리플리케이션
Tanenbaum et al., 2007은[4] 복제의 두 가지 주요 이유인 신뢰성과 성능을 정의한다.현재 복제본에 오류가 발생한 경우 다른 복제본으로 전환하여 복제된 파일 시스템에서 안정성을 확보할 수 있습니다.또한 복제는 서로 다른 복제본에 여러 개의 데이터 복사본을 제공하여 데이터가 손상되지 않도록 보호합니다.또한 작업을 분할하여 성능을 향상시킵니다.복제는 성능과 안정성을 향상시킬 수 있지만 여러 데이터 복사본 간에 일관성 문제가 발생할 수 있습니다.읽기 작업이 모든 복사본에서 동일한 값을 반환하고 쓰기 작업이 단일 원자 작업(트랜잭션)이 다른 작업을 수행하기 전에 모든 복사본을 업데이트하면 여러 복사본이 일관됩니다.Tanenbaum, Andrew, and Maarten Van Steen, 2007은[4] 이러한 유형의 일관성을 동기 리플리케이션에 의해 제공되는 엄격한 일관성이라고 부릅니다.그러나 모든 복사본의 일관성을 유지하기 위해 글로벌 동기화를 적용하는 것은 비용이 많이 듭니다.글로벌 동기화 비용을 절감하고 성능을 향상시키는 한 가지 방법은 일관성 제한을 약화시키는 것입니다.
데이터 중심 일관성 모델
Tanenbaum et al., 2007은[4] 일관성 모델을 소프트웨어(프로세스)와 메모리 구현(데이터스토어) 간의 계약으로 정의한다.이 모델에 의해, 소프트웨어가 특정의 룰을 따르는 경우, 메모리는 정상적으로 동작합니다.글로벌 클럭이 없는 시스템에서는 쓰기 중 마지막 작업을 정의하는 것이 어렵기 때문에 읽기 작업에서 반환할 수 있는 값에 몇 가지 제한이 적용될 수 있습니다.데이터 중심 일관성 모델의 목표는 프로세스가 동시에 업데이트를 수행할 수 있는 데이터 저장소에 일관된 뷰를 제공하는 것입니다.
일관된 운영 순서 지정
순차적 및 인과적 일관성 모델과 같은 일부 일관성 모델은 일관성을 제공하기 위해 복제된 공유 데이터에 대한 작업 순서를 처리합니다.이러한 모델에서 모든 복제본은 일관된 글로벌 업데이트 순서에 동의해야 합니다.
그룹화 작업
그룹화 동작에서는 동기 변수에 대한 액세스는 순차적으로 일치한다.프로세스는 이전의 모든 쓰기가 완료된 동기화 변수에 액세스할 수 있습니다.즉, 동기 변수에 대한 모든 조작이 [4]완료될 때까지 동기 변수에 대한 접근이 허용되지 않습니다.
클라이언트 중심의 일관성 모델
분산 시스템에서는 동시 작업을 제어하기 위해 순차적인 일관성을 유지하는 것이 중요합니다.동시 업데이트가 없는 일부 특수 데이터스토어에서는 클라이언트 중심의 일관성 모델을 통해 불일치를 보다 저렴한 비용으로 처리할 수 있습니다.다음 모델은 클라이언트 중심의 일관성 [4]모델입니다.
일관성 프로토콜
일관성 모델의 구현은 일관성 프로토콜에 의해 정의됩니다.Tanenbaum et al., 2007은[4] 데이터 중심 모델을 위한 몇 가지 일관성 프로토콜을 보여줍니다.
지속적인 일관성
Yu와 Vahdat에 의해 도입된 지속적인 일관성(2000).[25]이 모델에서, 애플리케이션의 일관성 시맨틱은 애플리케이션 내의 conits를 사용함으로써 설명된다.일관성 요건은 애플리케이션 의미론에 따라 다를 수 있기 때문에 Yu와 Vahdat(2000)[25]는 사전 정의된 균일한 일관성 모델이 적절한 접근방식이 아닐 수 있다고 믿고 있습니다.어플리케이션은 어플리케이션의 의미를 만족시키는 일관성 요건을 지정해야 합니다.이 모델에서는 응용 프로그램이 각 일관성 요건을 콘짓(consistency units의 약자)으로 지정합니다.원뿔은 물리적 또는 논리적 일관성이며 일관성을 측정하는 데 사용됩니다.Tanenbaum et al., 2007은[4] 예를 들어 원뿔의 개념을 설명한다.
어플리케이션에서 허용할 수 있는 부정합은 3가지입니다.
- 수치 편차
- [25] 수치 편차는 마지막 업데이트의 conit 값과 상대 값 간의 차이를 제한합니다.특정 애플리케이션에서 쓰기의 중요성을 정의하는 쓰기에 가중치를 할당할 수 있습니다.원뿔에 대해 보이지 않는 쓰기의 총 가중치는 응용 프로그램에서 수치 편차로 정의할 수 있습니다.수치편차에는 절대편차와 상대편차의 두 가지 유형이 있습니다.
- 주문의 편차
- [25] 순서 편차는 복제본의 로컬 쓰기 순서와 최종 이미지에서의 상대적 순서 간의 불일치입니다.
- 복제본 간 정수의 편차
- [25] 정시 편차는 로컬에서 볼 수 없는 콘짓의 현재 시간과 가장 오래된 쓰기 시간 간의 차이를 제한함으로써 가장 오래된 쓰기의 유효성을 정의합니다.각 서버에는 코니트에 실제 순서를 결정하고 적용하기 위해 필요한 불확실한 쓰기의 로컬 큐가 있습니다.불확실한 쓰기 큐의 최대 길이는 순서 편차의 한계입니다.쓰기 횟수가 제한을 초과하면 서버는 새로 제출된 쓰기를 받아들이는 대신 쓰기를 실행해야 하는 순서에 따라 다른 서버와 통신하여 불확실한 쓰기를 커밋하려고 합니다.
세 가지 편차 한계가 모두 0으로 설정된 경우 연속 일관성 모형이 강력한 일관성이 됩니다.
프라이머리 기반 프로토콜
기본 기반[4] 프로토콜은 구현이 더 간단한 일관성 프로토콜 클래스로 간주할 수 있습니다.예를 들어, 순차 순서는 일관된 작업 순서를 고려할 때 널리 사용되는 일관성 모델입니다.순차 순서는 기본 기반 프로토콜로 결정할 수 있습니다.이러한 프로토콜에는 데이터 저장소의 각 데이터 항목에 대해 해당 데이터 항목에 대한 쓰기 작업을 조정하는 연결된 기본이 있습니다.
원격 쓰기 프로토콜
복제를 지원하는 가장 단순한 프라이머리 기반 프로토콜(프라이머리 백업 프로토콜이라고도 함)에서는 쓰기 작업이 단일 서버로 전송되고 읽기 작업을 로컬에서 수행할 수 있습니다.
- 예:Tanenbaum et al., 2007은[4] 프라이머리 백업 프로토콜의 예를 제시합니다.기본 백업 프로토콜의 다이어그램은 이 프로토콜의 예를 보여 줍니다.클라이언트가 쓰기를 요구하면 쓰기 요구는 프라이머리 서버로 전송됩니다.프라이머리 서버는 백업에 업데이트를 수행하기 위한 요청을 전송합니다.서버는 모든 백업에서 업데이트 확인을 수신하고 쓰기 완료 확인을 클라이언트에 보냅니다.클라이언트는 로컬에서 마지막으로 사용 가능한 업데이트를 읽을 수 있습니다.이 프로토콜의 단점은 업데이트 요청을 보내는 클라이언트가 계속하기 위해 승인을 받을 때까지 너무 오래 기다려야 할 수 있다는 것입니다.이 문제는 로컬에서 업데이트를 수행한 다음 다른 백업에서 업데이트를 수행하도록 요청하면 해결할 수 있습니다.논블로킹 기본 백업 프로토콜이 모든 백업 서버에서 업데이트의 일관성을 보장하지는 않습니다.그러나 성능이 향상됩니다.primary-backup protocol에서는 모든 수신 쓰기가 글로벌하게 고유한 시간에 따라 정렬되므로 모든 프로세스에서 쓰기 작업 순서가 동일합니다.차단 프로토콜을 사용하면 프로세스가 마지막 쓰기 작업의 결과를 볼 수 있습니다.
로컬 쓰기 프로토콜
프라이머리 기반 로컬 쓰기 [4]프로토콜에서는 프라이머리 복사가 업데이트를 수행하려는 프로세스 간에 이동합니다.데이터 항목을 업데이트하려면 프로세스가 먼저 해당 데이터 항목을 해당 위치로 이동합니다.그 결과 이 접근법에서는 각 프로세스가 데이터 항목의 로컬 복사본을 읽을 수 있는 동안 연속적인 쓰기 작업을 로컬에서 수행할 수 있습니다.기본 업데이트가 완료된 후, 업데이트는 다른 복제본으로 전달되고 모두 로컬에서 업데이트를 수행합니다.이러한 논블로킹 접근법은 개선으로 이어질 수 있습니다.로컬 쓰기 프로토콜의 다이어그램은 기본 기반 프로토콜의 로컬 쓰기 방식을 보여 줍니다.프로세스는 데이터 항목 x에 대한 쓰기 작업을 요구한다.현재 서버는 데이터 항목 x의 새 주 서버로 간주됩니다.쓰기 작업이 수행되고 요구가 완료되면 프라이머리는 다른 백업서버에 업데이트 요구를 송신합니다.각 백업은 업데이트 작업을 완료한 후 확인 응답을 프라이머리로 보냅니다.
복제-쓰기 프로토콜
복제-쓰기 [4]프로토콜에서는 기본 기반 프로토콜과 달리 모든 복제본에 대해 모든 업데이트가 수행됩니다.
액티브 리플리케이션
액티브 [4]레플리케이션에서는, 각 레플리카에 관련지어 기입 조작을 실행하는 프로세스가 있습니다.즉, 각 레플리카에 대해서, 실행하기 위한 조작의 형태로 갱신이 송신된다.모든 업데이트는 모든 복제본에서 동일한 순서로 수행되어야 합니다.그 결과, 완전 순서가 지정된 멀티캐스트메커니즘이 필요합니다.대규모 분산 시스템에서 이러한 멀티캐스팅 메커니즘을 구현하는 데는 확장성 문제가 있습니다.각 작업이 중앙 코디네이터(시퀀서)로 전송되는 또 다른 방법이 있습니다.코디네이터는 먼저 각 작업에 시퀀스 번호를 할당한 후 모든 복제본에 작업을 전달합니다.두 번째 접근법으로는 확장성 문제도 해결할 수 없습니다.
쿼럼 기반 프로토콜
투표는 복제-쓰기 프로토콜의 또 다른 접근 방식이 될 수 있습니다.이 접근법에서는 클라이언트는 복제된 데이터를 읽고 쓰기 위해 여러 서버에서 권한을 요청하고 받습니다.예를 들어, 분산 파일 시스템에서 파일이 N개의 서버에 복제된다고 가정합니다.파일을 갱신하려면 클라이언트는 적어도 N/2 + 1로 요청을 전송하여 갱신에 동의해야 합니다.합의 후 변경 내용이 파일에 적용되고 업데이트된 파일에 새 버전 번호가 할당됩니다.마찬가지로 복제된 파일을 읽기 위해 클라이언트는 N/2 + 1 서버로부터 관련 버전 번호를 받기 위해 요청을 전송합니다.수신된 모든 버전 번호가 최신 [4]버전인 경우 읽기 작업이 완료됩니다.
캐시 일관성 프로토콜
복제된 파일 시스템에서 캐시 일관성[4] 프로토콜은 캐시의 일관성을 제공하는 반면 캐시는 일반적으로 클라이언트에 의해 제어됩니다.많은 접근법에서 캐시의 일관성은 기본 하드웨어에 의해 제공됩니다.미들웨어 기반 분산 시스템의 일부 다른 접근 방식은 캐시 일관성을 제공하기 위해 소프트웨어 기반 솔루션을 적용합니다.
캐시 일관성 모델은 불일치가 발생하는 시기를 정의하는 일관성 탐지 전략이 다를 수 있습니다.부정합 검출에는 스태틱솔루션과 다이내믹솔루션의 2가지 방법이 있습니다.정적 솔루션에서 컴파일러는 캐시 불일치를 일으킬 수 있는 변수를 결정합니다.따라서 컴파일러는 불일치 문제를 피하기 위해 명령을 실행합니다.동적 솔루션에서는 서버가 런타임에 불일치를 검사하여 캐시된 후 변경된 캐시된 데이터의 일관성을 제어합니다.
일관성 적용 전략은 또 다른 캐시 일관성 프로토콜입니다.서버에 있는 복사본을 사용하여 캐시의 일관성을 제공하는 방법을 정의합니다.데이터의 일관성을 유지하는 한 가지 방법은 공유 데이터를 캐시하지 않는 것입니다.서버는 데이터를 유지하고 공유 데이터의 일관성을 보장하기 위해 기본 기반 프로토콜과 같은 몇 가지 일관성 프로토콜을 적용할 수 있습니다.이 솔루션에서는 개인 데이터만 클라이언트에 의해 캐시될 수 있습니다.공유 데이터가 캐시되는 경우 캐시 일관성을 강화하기 위한 두 가지 방법이 있습니다.
첫 번째 방법에서는 공유 데이터가 갱신되면 서버는 비활성화를 모든 캐시에 전송합니다.두 번째 방법에서는 업데이트가 전파됩니다.대부분의 캐싱 시스템은 이러한 두 가지 접근 방식을 적용하거나 둘 중 하나를 동적으로 선택합니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Mark D. Hill (August 1998). "Multiprocessors Should Support Simple Memory Consistency Models". IEEE Computer. 31 (8): 28–34. doi:10.1109/2.707614.
- ^ a b Todd Lipcon (2014-10-25). "Design Patterns for Distributed Non-Relational Databases" (PDF). Retrieved 2011-03-24.
A consistency model determines rules for visibility and apparent order of updates. Example: * Row X is replicated on nodes M and N * Client A writes row X to node N * Some period of time t elapses. * Client B reads row X from node M * Does client B see the write from client A? Consistency is a continuum with tradeoffs
- ^ a b Lamport, Leslie (Sep 1979). "How to make a multiprocessor computer that correctly executes multiprocess programs". IEEE Transactions on Computers. C-28 (9): 690–691. doi:10.1109/TC.1979.1675439. S2CID 5679366.
- ^ a b c d e f g h i j k l m n o p q r s t u v w x y Tanenbaum, Andrew; Maarten Van Steen (2007). "Distributed systems". Pearson Prentice Hall.
- ^ Herlihy, Maurice P.; Jeannette M. Wing (July 1990). ""Linearizability: A correctness condition for concurrent objects." ACM Transactions on Programming Languages and Systems". ACM Transactions on Programming Languages and Systems. 12 (3): 463–492. CiteSeerX 10.1.1.142.5315. doi:10.1145/78969.78972. S2CID 228785.
- ^ a b c Mankin, Jenny (2007). "CSG280: Parallel Computing Memory Consistency Models: A Survey in Past and Present Research".
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - ^ Shaz Qadeer (August 2003). "Verifying Sequential Consistency on Shared-Memory Multiprocessors by Model Checking". IEEE Transactions on Parallel and Distributed Systems. 14 (8): 730–741. arXiv:cs/0108016. doi:10.1109/TPDS.2003.1225053. S2CID 1641693.
- ^ a b Hutto, Phillip W.; Mustaque Ahamad (1990). Slow memory: Weakening consistency to enhance concurrency in distributed shared memories. IEEE. pp. 302–309. doi:10.1109/ICDCS.1990.89297. ISBN 978-0-8186-2048-5. S2CID 798676.
- ^ a b "Memory Consistency Models" (PDF).
- ^ a b Goodman, James R (1991). "Cache consistency and sequential consistency". IEEE Scalable Coherent Interface (SCI) Working Group.
- ^ a b Senftleben, Maximilian (2013). Operational Characterization of Weak Memory Consistency Models (PDF) (M.Sc. thesis). University of Kaiserslautern.
- ^ Lipton, R.J.; J.S. Sandberg. (1988). PRAM: A scalable shared memory (Technical report). Princeton University. CS-TR-180-88.
- ^ a b c d Steinke, Robert C.; Gary J. Nutt (2004). "A unified theory of shared memory consistency". Journal of the ACM. 51 (5): 800–849. arXiv:cs/0208027. doi:10.1145/1017460.1017464. S2CID 3206071.
- ^ Terry, Douglas B.; Demers, Alan J.; Petersen, Karin; Spreitzer, Mike J.; Theimer, Marvin M.; Welch, Brent B. (1 October 1994). "Session guarantees for weakly consistent replicated data". Proceedings of the Third International Conference on Parallel and Distributed Information Systems. IEEE Computer Society Press: 140–150. doi:10.1109/PDIS.1994.331722. ISBN 0-8186-6400-2. S2CID 2807044.
- ^ "Shared Memory Consistency Models : A tutorial" (PDF).
- ^ Solihin, Yan (2009). Fundamentals of Parallel Computer Architecture. Solihin Books.
- ^ Singhal, Mukesh; Niranjan G. Shivaratri (1994). "Advanced concepts in operating systems". McGraw-Hill, Inc.
- ^ 콜린 커스"SALT: 블록체인의 기술모델", 2018.
- ^ 스테판 타이, 제이콥 에버하르트, 마르쿠스 클렘스."산도 아니고 BASE도 아닌 SALT: 블록체인에 대한 트랜잭션 처리 관점." 2017.
- ^ 차오쉐, 춘지수, 마노스 카프리토스, 양왕, 나비드 야그마자데, 로렌조 알비시, 마하잔 왕자."Salt: 분산 데이터베이스에서 ACID와 BASE를 결합합니다.
- ^ Lloyd, Wyatt; Freedman, Michael; Kaminsky, Michael; Andersen, David. "Don't Settle for Eventual:Scalable Causal Consistency for Wide-Area Storage with COPS" (PDF). Proceedings of the 23rd ACM Symposium on Operating Systems Principles (SOSP’11).
- ^ Almeida, Sérgio; Leitão, João; Rodrigues, Luís (2013). "Chain Reaction". ChainReaction: a causal+ consistent datastore based on chain replication. Proceedings of the 8th ACM European Conference on Computer Systems (EuroSys'13). p. 85. doi:10.1145/2465351.2465361. ISBN 9781450319942. S2CID 651196.
- ^ Paolo Viotti; Marko Vukolic (2016). "Consistency in Non-Transactional Distributed Storage Systems". ACM Computing Surveys. 49 (1): 19:1–19:34. arXiv:1512.00168. doi:10.1145/2926965. S2CID 118557.
- ^ a b c d e Yu, Haifeng; Amin Vahdat (2000). "Design and evaluation of a continuous consistency model for replicated services". Proceedings of the 4th Conference on Symposium on Operating System Design & Implementation. 4: 21.
추가 정보
- Paolo Viotti; Marko Vukolic (2016). "Consistency in Non-Transactional Distributed Storage Systems". ACM Computing Surveys. 49 (1): 19:1–19:34. arXiv:1512.00168. doi:10.1145/2926965. S2CID 118557.
- Ali Sezgin (2004). "Formalization and verification of shared memory" (PDF).
{{cite journal}}
: 학술지 요구 (도움말) (많은 참고 자료 포함) - Kathy Yelick; Dan Bonachea; Chuck Wallace (2004). "A Proposal for a UPC Memory Consistency Model (v1.0)" (PDF).
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - Mosberger, David (1993). "Memory Consistency Models". Operating Systems Review. 27 (1): 18–26. CiteSeerX 10.1.1.331.2924. doi:10.1145/160551.160553. S2CID 16123648.
- Sarita V. Adve; Kourosh Gharachorloo (December 1996). "Shared Memory Consistency Models: A Tutorial" (PDF). IEEE Computer. 29 (12): 66–76. CiteSeerX 10.1.1.36.8566. doi:10.1109/2.546611. Retrieved 2008-05-28.
- Steinke, Robert C.; Gary J. Nutt (2004). "A unified theory of shared memory consistency". Journal of the ACM. 51 (5): 800–849. arXiv:cs.DC/0208027. doi:10.1145/1017460.1017464. S2CID 3206071.
- 테리, 더그"야구를 통해 데이터 일관성을 복제했습니다."ACM 56.12 (2013) 통신: 82-89. https://www.microsoft.com/en-us/research/wp-content/uploads/2011/10/ConsistencyAndBaseballReport.pdf
외부 링크
- IETF 슬라이드
- 최신 마이크로프로세서에서의 메모리 주문(Part I 및 Part II), Paul E.McKenney (2005).Linux 저널