4.1 Brewera에 대한 일관성
우선 Eric Brewer는 데이터베이스 전문가가 아니며 그렇게 주장한 적도 없습니다. 그는 분산 시스템 커뮤니티에 속해 있으며 CAP "정리"가 등장한 그의 유명한 강연은 "분산 컴퓨팅의 원리" 컨퍼런스에서 발표되었습니다. (그런데 10년 후인 2010년에 그는 같은 회의에서 다시 초청 강연을 했으며, 이 강연에서 그는 특히 " 정리" of CAP.) 이 영역에는 데이터베이스 분야에서 사용되는 용어에 대한 고유한 해석이 있습니다.
특히 "즉시 일관성" 이라는 용어는 사용자가 일부 데이터 업데이트 작업의 성공적인 완료에 대한 알림을 시스템으로부터 받은 후 이 작업의 결과가 모든 관찰자에게 즉시 표시됨을 의미합니다.
최종 일관성 은 새로운 데이터 업데이트 작업이 충분히 오랜 시간 동안 시스템에 입력되지 않으면 모든 이전 데이터 업데이트 작업의 결과가 결국 시스템의 모든 노드로 확산되고 모든 복제본 데이터가 일관성(분명히 이것은 "모든 복제본이 동일한 상태를 갖게 됨"으로 이해되어야 합니다.
이러한 일관성을 염두에 두고 Brewer의 "정리"는 매우 이해하기 쉽고 분명한 것으로 간주될 수 있습니다. 공유 데이터가 있는 모든 분산 시스템에서 네트워크의 일관성, 가용성 및 파티션 허용의 두 가지 속성만 동시에 보장될 수 있습니다. 이와 관련하여 Brewer는 심지어 ACID 속성 세트를 그가 제안한 BASE 속성 세트 (기본적으로 사용 가능, 소프트 상태, 최종 일관성 - 대부분의 경우 가용성, 불안정 상태, 최종 일관성)와 대조합니다. 그러나 제 생각에는이 반대는 정당하지 않습니다. 첫 번째 경우에는 거래의 논리적 특성에 대해 이야기하고 두 번째 경우에는 분산 시스템의 물리적 특성에 대해 이야기하기 때문입니다.
4.2 "정리"의 증명
많은 사람들은 Brewer의 "정리"가 공식적으로 입증되었다고 믿습니다. 실제로 Seth Gilbert와 Nancy Lynch의 논문은 "정리"가 실제로 정리가 되고 증명되는 맥락에서 몇 가지 (거의) 공식적인 정의를 소개합니다. 그러나 분산 시스템의 이러한 세 가지 속성이 어떻게 결정되는지 살펴보겠습니다. Brewer의 "정리"에 따르면 이 중 두 가지 속성만 동시에 지원할 수 있습니다.
일관성은 원자성 또는 선형화 가능 일관성(원자 또는 선형화 가능 일관성)이라고 하며, 이는 모든 개별 데이터 개체가 원자성(선형화 가능)인 시스템의 속성입니다. 차례로 원자 개체는 작업 호출 및 응답 데이터 수신이 마치 즉시 발생하는 것처럼 여러 작업이 있는 개체입니다. 개체는 이전 작업이 완전히 완료될 때까지 다음 작업의 호출을 수락하지 않습니다. 작업이 수신되는 순서는 일부 쓰기 유형 작업이 수행된 후 읽기 유형 작업이 도착하는 경우 읽기 작업이 이 쓰기 작업 또는 이후의 쓰기 작업에 의해 쓰여진 값을 반환해야 하는 순서여야 합니다.
장애가 발생하지 않은 노드에서 수신한 모든 요청에 응답해야 하는 경우 분산 시스템을 항상 사용할 수 있습니다. 네트워크 분할에 대한 시스템의 복원력은 한 노드에서 다른 노드로 전송된 임의의 수의 메시지가 손실된 경우 시스템의 생존 가능성을 보존하는 것으로 모델링됩니다.
이러한 정의를 기반으로 Hilbert와 Lynch는 다음 정리를 공식화합니다(비동기 네트워크 모델에는 시계가 없으며 노드는 수신된 메시지 및 로컬 계산을 기준으로만 결정을 내려야 함).
비동기 네트워크 모델에서는 모든 유효한 실행(메시지 손실 포함)에 대한 가용성 및 원자적 일관성 속성을 보장하는 읽기/쓰기 데이터 개체를 구현할 수 없습니다.
이 정리는 "모순에 의해"라는 방법으로 매우 간단하게 형식적으로 증명됩니다. 이 기사는 계속해서 다음과 같은 결론을 내립니다.
비동기 네트워크 모델에서는 모든 유효한 실행에 대한 액세스 가능성 속성과 메시지가 손실되지 않는 유효한 실행에 대한 원자적 일관성을 보장하는 읽기/쓰기 데이터 개체를 구현할 수 없습니다.
또한 주 정리의 진실은 각 노드에 시계가 있는 부분 동기식 네트워크 모델에 대해 입증되었으며, 시간은 동일한 속도로 증가하지만 동기화되지는 않습니다. 동일한 실제 순간에 다른 시간을 보여줄 수 있습니다. 이 경우 유사한 결과가 도출되지 않았으며 따라서 부분 동기식 네트워크의 경우 "좋은" 속성을 가진 분산 시스템을 구성할 가능성이 더 많습니다.
예, 어떤 의미에서(반드시 Brewer가 의도한 것과 동일하지는 않음) Gilbert와 Lynch는 단일 분산 시스템에서 네트워크의 원자적 일관성, 가용성 및 파티션 허용 오차 속성을 동시에 보장하는 것이 불가능하다는 것을 증명했다고 볼 수 있습니다. 그러나 이것이 일반적인 데이터베이스 트랜잭션 및 특히 ACID 트랜잭션과 어떤 관련이 있습니까?
4.3 ACID 트랜잭션
다음은 Julian Browne이 CAP의 "정리"에 대한 논의에 대한 메모에서 이에 대해 쓴 내용입니다.
증명에서 Hilbert와 Lynch는 일관성 대신 원자성이라는 용어를 사용합니다. 엄밀히 말하면 ACID 의미에서의 일관성은 데이터베이스 트랜잭션의 이상적인 속성을 의미하고 어떤 데이터도 사전 설정된 제한 사항을 위반하는 경우 지속됩니다. 그러나 분산 시스템의 미리 설정된 제한이 동일한 데이터 요소에 대해 여러 다른 값의 존재를 금지한다고 가정하면 제 생각에는 일관성 추상화의 이러한 결함을 고려할 수 있습니다 중요하지 않습니다(게다가 Brewer가 원자성이라는 용어를 사용했다면 AAP 정리가 나타날 것이며 그 이름은 발음하기 매우 불편할 것입니다).
이것은 그다지 심각하지는 않지만 정직하게 작성되었습니다. 그리고 실제로 원자적 일관성 요구 사항은 ACID 측면에서 트랜잭션 일관성 요구 사항과 혼합되어서는 안 됩니다. 데이터베이스 무결성 제약 조건은 비즈니스 요구 사항인 경우 논리적입니다. 응용 프로그램 도메인 논리에서 가져옵니다. 원자적 일관성의 요구 사항은 매우 다른 종류입니다. 이는 데이터베이스 업계에서 전통적으로 물리적 일관성이라고 하는 범주에 속하는 구현 요구 사항입니다(예: 인덱스 변경 작업을 수행할 때 해당 B+ 트리의 모든 블록은 유효한 값을 포함하고 유효한 참조로 연결되어야 함). ).
다음은 데이터베이스 커뮤니티의 대표인 Daniel Abadi와 Alexander Thomson이 매우 진지하게 쓴 내용입니다.
... 확장 가능한 트랜잭션 시스템의 가용성에 대한 요구 사항이 점점 더 중요해지고 있으며 이는 일반적으로 노드 중 하나에 오류가 발생할 경우 요청의 복제 및 자동 리디렉션을 통해 충족됩니다. 따라서 애플리케이션 개발자는 ACID 시스템의 일관성 보장(원래 사용자 정의 불변성에 대한 로컬 지원으로 구성됨)이 강력한 일관성(주어진 시간에 동일한 데이터의 모든 복제본이 동일한 복사본이 됨)을 보장하도록 확장될 것으로 기대합니다. 이 사례 일관성은 CAP/PACELC의 의미에서 암시됩니다.
즉, Brewer 일관성은 ACID의 의미에서 일관성과는 아무런 관련이 없지만 강력한 복제 일관성을 유지하는 것이 바람직한 것은 데이터 복제를 통한 고가용성 제공에 중점을 둔 시스템에 있습니다. 이는 ACID 속성이 아니라 애플리케이션 개발을 용이하게 하는 대규모 병렬 DBMS의 기술적(물리적) 기능입니다.
Michael Stonebreaker에 따르면 고품질 최신 DBMS를 구축하기 위한 핵심은 기술적 절충안을 올바르게 선택하는 것입니다. 특정 엔지니어링 솔루션을 선택할 때 미래 사용자의 요구 사항, 다양한 오류 상황의 가능성 등 많은 요소를 고려해야 하며 일반적인 이론적 지침(CAP "정리" 포함)에 의해 독단적으로 안내되지 않아야 합니다.
Stonebreaker는 트랜잭션 병렬 데이터베이스 시스템 영역에서 고가용성 및 네트워크 파티션 허용 오차를 지원하기 위해 Brewer의 일관성을 포기하는 것은 (a) 복제 일관성이 시스템의 매우 유용한 기능이기 때문에 좋지 않은 절충안이라고 생각합니다. (b) 트랜잭션 대량 병렬 DBMS는 매우 많은 수의 노드가 있는 클러스터가 필요하지 않으므로 네트워크 분할 상황이 발생하지 않습니다. (c) 네트워크 분할 때문이 아니라 예를 들어 정기적으로 발생하는 소프트웨어 오류 때문에 시스템을 쉽게 사용할 수 없게 될 수 있습니다.
따라서 종종 Brewer의 "정리"를 언급하는 NoSQL 진영(NoACID라고 읽음) 대표자들의 높은 활동은 ACID 트랜잭션을 지원하는 대규모 병렬 트랜잭션 DBMS를 구축하는 것이 이론적으로 불가능하다는 것과 관련이 있는 것이 아니라 시스템이 단순화되었다는 사실과 관련이 있습니다. ACID 트랜잭션뿐만 아니라 복제본 일관성도 지원하지 않는 트랜잭션이 더 쉽고 빠르게 생성됩니다. 단순한 구성으로 인해 매우 빠른 데이터 처리가 가능하며 일부 응용 프로그램의 경우 이는 데이터베이스 기술에 내재된 모든 편리함보다 더 중요합니다.
데이터베이스 커뮤니티가 이 문제에 어떻게 대응하는지 살펴보겠습니다.
GO TO FULL VERSION