일관성 모델
일관성은 경쟁 변화 동안 독자가 보는 가치와 순서를 설명합니다. 올바른 모델 선택은 불변량의 엄격함, 대기 시간, 가용성 및 비용 (PACELC) 간의 균형입니다. 아래는 모델과 해당 응용 프로그램에 대한 실용적인 안내서입니
1) "엄격한" 모델
선형 가능 (강한)
마치 실시간을 존중하는 일정한 순서로 모든 작업이 즉시 수행되는 것처럼 동작합니다.
장점: 단순한 정신 모델, 돈과 독창성에 안전합니다.
단점: 쿼럼/리더 → p95/p99 성장, 특히 지역 간.
사용 사례: 잔액, 하드 한계가있는 재고, 고유 한 이름/키.
순차적 일관성
모든 스레드에는 동일한 작업 순서가 표시되지만 실시간 순서는 필요하지 않습니다. 선형 가능한 것보다 약간 약하고 제품에 직접 전시되는 경우는 거의 없습니다.
직렬 화 가능
일부 순차적 트랜잭션 순서와 동일합니다 (개별 작업이 아님).
장점: 쿼리/테이블 레벨에서 복잡한 불변량의 정확성.
단점: 더 비싸다 (차단/버전/충돌 검증).
사용 사례: 복잡한 금융 거래, 일관된 재고, 재고.
스냅 샷 격리 (SI)
각 트랜잭션은 시간이 지남에 따라 불변의 스냅 샷을 읽습니다. 항목은 "동일한 줄" 에서 충돌하지만 쓰기 왜곡이 가능합니다.
장점: 자물쇠가없는 빠른 읽기, 안정적인 보고서.
단점: 직렬화 할 수 없으며 스큐 트랩을 작성하십시오 (예: 근무 의사).
사용 사례: 하드 불변량이없는 분석, 보고서, 대부분의 CRUD.
2) 세션 당 및 인과 적 보증
읽기 (RYW)
클라이언트는 항상 입장 후 후속 판독 값에서 볼 수 있습니다.
장점: 좋은 UX (양식 → 확인).
단점: 전 세계가 아닌 현지 보증.
단조로운 읽기/쓰기
읽기는 "롤백" 되지 않습니다. 한 클라이언트의 레코드는 전송 된 것과 동일한 순서로 적용됩니다.
인과 적 일관성
작업이 다른 작업 (A → B) 에 의존하는 경우 모든 사람이 B.
장점: 소셜 피드, 의견에 직관적입니다.
단점: 라우팅 및 인과 관계 레이블 (벡터 시계) 이 더 어렵습니다.
사용자 키: 통신, 공동 편집, 이벤트 피드.
3) 약한 하이브리드 모델
경계 스탈 레니스
판독 값은 지연되거나 N 버전을 넘지 않을 수 있습니다.
장점: 예측 가능한 UX, 지역간 좋은 타협.
단점: 쓰기 충돌로부터 보호하지 않습니다.
최종 일관성
시간이 지남에 따라 모든 사본이 수렴합니다 주문 및 지연이 보장되지 않습니다.
장점: 최소 대기 시간/비용, 높은 가용성 (AP)
단점: 명시 적 병합 (CRDT/도메인 규칙) 이 필요합니다.
캐시, 피드, 메트릭, 좋아요, 중요한 디렉토리 사용.
4) 전형적인 이상과 그 의미
더러운 읽기: 커밋되지 않은 데이터 읽기.
반복 불가능한 읽기: 거래 내에서 동일한 읽기는 다른 값을 제공합니다.
팬텀: 요청이 반복되면 술어와 일치하는 문자열이 나타나거나 사라집니다.
Skew (SI 포함) 쓰기: 두 트랜잭션은 교차 불변량을 읽고 다른 줄을 작성하여 "합계는 1 이상이어야합니다" 라는 조건을 위반합니다.
잃어버린 업데이트: 레코드는 경쟁 업체의 변경 사항을 "오버 라이트" 합니
5) 정족수 및 읽기/쓰기 수준
많은 상점에서 'R '/' W' 레벨 (읽기/쓰기 복제본 수) 을 설정할 수 있습니다.
Quorum (R + W> N) 은 "교차" 와 마지막 레코드의 읽기를 강력하게 보장합니다.
W = 1, R = 1 → 낮은 대기 시간이지만 오래된 데이터가 가능합니다.
튜닝: 중요한 작업-높은 'W' (또는 리더), 나머지-속도가 낮은 'R'.
읽기 수리/힌트 핸드 오프는 백그라운드에서 일관성을 얻는 데 도움이됩니다
6) 시간과 질서: 인과 관계를 "이해하는 방법"
램 포트 시계: 일부 이벤트 순서.
벡터 시계: 인과 관계를 수정하고 충돌을 감지 할 수 있습니다.
하이브리드/트루 타임 접근 방식: 트랜잭션 순서 및 바운드 정체성을 위해 클러스터의 시계 확산을 제한합니다.
Versioning: 병합을위한 '버전/ts + 액터'; CRDT에서 닫힌 세미 그룹 (정류성/dedempotency).
7) CRDT 및 도메인 병합
CRDT (수렴/복제 된 데이터 유형) 는 G-Counter, OR-Set, LWW-Register, 맵, 텍스트 OT/WOOT 변형과 같은 조정없이 수렴을 보장합니다.
유용한 경우: 좋아요, 많은 태그, 바구니, 문서.
제한: 특정 도메인 엔티티에 대한 올바른 "병합" 의미를 생각해보십시오.
8) CAP/PACELC와의 커뮤니케이션
대기 시간이 증가하는 다중 지역 → CP의 엄격한 모델 (선형 가능/직렬화 가능) (PACELC: 선택 C 및 지불 L).
약한/하이브리드 모델 → AP 및/또는 낮은 L이지만 병합/충돌 해상도가 필요합니다.
하이브리드: 불변량을위한 CP- 커널 + 읽기를위한 AP- 프로젝션/캐시.
9) 모델 선택: 체크리스트
1. 불변량: 무엇을 위반해서는 안됩니까? (독창성, 균형, 한계).
2. 지역: 쓰기/읽기는 어디에서 이루어 집니까? (로컬/글로벌).
3. 대기 시간별 SLO: 중요 경로의 경우 p95/p99?
4. 조정 가격: 지역 간 정족수로 지불 할 준비가 되셨습니까?
5. 충돌: 결정 론적 합병이 있습니까, 아니면 코디네이터가 필요합니까?
6. UX 기대: 고객에게 RYW/monotonic/causal이 중요합니까?
7. 관찰 가능성: 지연/충돌/노후화 정도를 어떻게 측정합니까?
8. 폴백: 그물이 분할되면 어떻게됩니까 (P)? 읽기 전용/로컬 항목/대기열?
10) 빠른 레시피
지불/균형: Linearable/Serializable, 리더 + 쿼럼, 짧은 타임 아웃; RYW 판독 값.
프로필/피드: Causal/Bounded staleness + 캐시; 좋아요/카운트에 대한 CRDT; 저자를위한 RYW.
검색/분석: SI/읽기 커밋, 비동기 투영, 최종 색인.
글로벌 SaaS: 지역 분할; "홈 레코드" -CP, 보고서/디렉토리-AP.
공동 편집: 인과/최종 + CRDT/OT; "역사" 보존.
11) 일관성 관찰
래그 메트릭: 'replication _ lag', 'staleness _ age _ ms' (p50/p95/p99).
갈등: 갈등의 백분율, 평균 해결 시간.
정원: 'R/W' 정족수의 성공, 지역 간 경로의 타임 아웃.
고객 보증: RYW/monotonic-세션 별 추적 태그.
12) 전형적인 오류
비즈니스 기반없이 강력한 "모든 곳" 을 요구합니다. → 대기 시간과 비용의 폭발.
sagas/CRDT → 팬텀이없고 불변량이없는 다른 지역으로 이중 쓰기.
UX → 방금 전송 된 데이터를 "누락" 하여 RYW/monotonicity를 무시하십시오.
캐시/프로젝션의 노화 → "영원한" 불일치를 추적하지 마십시오.
병합하지 않음 → 예기치 않은 손실/중복 값.
13) 미니 참조 아키텍처
쓰기 코어 (CP): 리더, 쿼럼 레코드, SLO 및 타임 아웃, 로그.
읽기 평면 (AP): 구체화 된보기, TTL 캐시, 읽기 수리.
클라이언트: 끈적 끈적한 세션/세션 보증 (RYW/monotonic), 버전 레이블.
엔진 충돌: CRDT/도메인 규칙, 수동 결제 대기열.
모니터링: 지연, 갈등, 오래된 독서의 공유.
결론
일관성 모델은 데이터, 대기 시간 및 가용성 간의 엔지니어링 계약입니다. 불변량과 SLO로 시작하여 필요한 곳을 엄격히 선택하고 고객 보증, 정족수, 시간 및 관찰 가능성을 잊지 않고 가능한 곳을 약화시킵니다. 유능한 모델 조합은 비즈니스 진실과 사용자 신뢰를 희생시키지 않으면 서 규모, 예측 가능성 및 지속 가능성을 제공합니다.