일반 영어의 최종 일관성


130

나는 종종 NoSQL, 데이터 그리드 등에 대한 다른 연설에서 최종 일관성에 대해 듣습니다. 최종 일관성의 정의는 많은 소스에서 다양하고 (아마도 구체적인 데이터 스토리지에 따라 다름).

누구든지 구체적인 데이터 스토리지와 관련이없는 최종 일관성이 무엇인지 간단히 설명 할 수 있습니까?


1
예를 들어 Wikipedia가 도움이되지 않았습니까? en.wikipedia.org/wiki/Eventual_consistency
Oliver Charlesworth

22
@OliCharlesworth : 아뇨. 어쩌면 그것은 단지 나이지만 두 번 읽은 후에도 완전히 불분명합니다.
로마

답변:


228

최종 일관성 :

  1. 날씨 보고서를보고 내일 비가 올 것임을 알게됩니다.
  2. 내일 비가 올 것이라고 말씀드립니다.
  3. 이웃이 아내에게 내일 맑을 것이라고 말합니다.
  4. 내일 비가 올 것이라고 이웃에게 말하십시오.

결국 모든 서버 (당신, 나, 이웃)는 진실을 알고 있습니다 (내일 비가 올 것입니다). 그러나 그 동안 클라이언트 (그의 아내)는 그녀가 물었을지라도 맑을 것이라고 생각하면서 나왔습니다. 하나 이상의 서버 (귀하와 나)가 더 최신의 가치를 얻은 후에.

엄격한 일관성 / ACID 준수와 반대로 :

  1. 은행 잔고는 $ 50입니다.
  2. 당신은 $ 100를 입금합니다.
  3. 모든 ATM에서 쿼리 한 은행 잔고는 $ 150입니다.
  4. 딸이 ATM 카드로 40 달러를 인출합니다.
  5. 어디서나 ATM에서 조회 한 은행 잔고는 $ 110입니다.

귀하의 잔고는 계정에서 이루어진 모든 거래의 실제 합계를 정확히 그 순간까지 반영 할 수 없습니다.

이유는 많은 NoSQL이 시스템은 최종 일관성있는 이유는 거의 모든 이들의 분배 할 수 있도록 설계, 완전히 분산 시스템 (만 지금까지 일을 천천히 시작하기 전에 확장 할 수 있습니다 의미 엄격한 일관성을 유지하기 위해 슈퍼 선형 오버 헤드가된다는 것입니다 다운 될 때 확장을 유지하려면 문제에 대해 기하 급수적으로 더 많은 하드웨어를 던져야합니다.


난 이해가 안 돼요. 성장이 선형입니까 아니면 지수입니까?
Maciek Kreft

4
N 개의 일관된 노드의 시스템의 통신 오버 헤드 증가는 일반적으로 초 선형 (즉, 선형 이상) 인 것으로 이해된다. 지수 될 수 있을까, 통신 프로토콜 등의 입방 ... 종속 주체가 될 수
크리스 샤인

2
좋은 대답입니다. 몇 가지 후속 질문 : 서버에 대한 요청이 잘못된 / 오래된 정보를 얻을 수있는 것은 "나쁜"것이 아닌가? 사람들이 그걸로 괜찮습니까? 아니면 해결책이 있습니까? 또한 데이터는 어떻게 다른 서버에 어떻게 복제됩니까? 서버 중 하나가 다운되고 서버에서 데이터가 복제되는 경우 해당 서버가 다시 가동되면 어떻게 최신 데이터를 가져 옵니까?
noblerare

5
@noblerare는 다양한 정도의 악으로 인해 "나쁜"것입니다. ATM 잔액이 오래된 경우 매우 나쁩니다. 로깅 데이터베이스가 제대로 잡히지 않거나 Facebook 피드가 몇 초 뒤쳐져도 나쁘지 않습니다. 데이터 복제 및 내구성 메커니즘은 매우 다양하며 특정 플랫폼에 따라 다릅니다. Cassandra (예를 들어)의 경우, 작성자는 특정 쓰기가 성공하기 위해 하나, 모두 또는 쿼럼 (대수) 노드에서 커밋해야하는지 여부를 결정할 수 있습니다. HBase는 특정 접근 방식이 각 데이터 행의 "마스터"인 다른 접근 방식을 취합니다.
크리스 쉐인

실제로 대부분의 은행 시스템은 결국 일관성이 있습니다.
혼돈

106

최종 일관성 :

  1. 데이터가 여러 서버에 복제됩니다
  2. 클라이언트는 모든 서버에 액세스하여 데이터를 검색 할 수 있습니다
  3. 누군가 서버 중 하나에 데이터를 쓰지만 아직 나머지 서버로 복사되지 않았습니다.
  4. 클라이언트는 데이터를 사용하여 서버에 액세스하여 최신 사본을 얻습니다.
  5. 다른 클라이언트 (또는 동일한 클라이언트)는 다른 서버 (아직 새 사본을 얻지 못한 서버)에 액세스하여 이전 사본을 가져옵니다.

기본적으로 여러 서버에서 데이터를 복제하는 데 시간이 걸리므로 데이터 읽기 요청은 새 사본이있는 서버로 이동 한 다음 이전 사본이있는 서버로 이동합니다. "최종"이라는 용어는 결국 데이터가 모든 서버에 복제되므로 모두 최신 사본을 갖게됩니다.

응답 서버는 자체 데이터 복사본을 반환해야하며 다른 서버를 참조하고 데이터 내용에 대해 상호 합의에 도달 할 수 없으므로 대기 시간이 짧은 읽기를 원할 경우 최종 일관성이 필수적입니다. 이것을 자세히 설명 하는 블로그 게시물을 작성했습니다 .


2
좋은 블로그 게시물. 최종 일관성에 대한 아이디어를 처음 접하는 사람에게는 가치가 있습니다. 블로그 게시물의 내용을 더 많이 설명하기 위해 다시 작성된 경우이 답변이 더 좋습니다.
axiopisty

1
블로그에 잘 설명되어 있습니다. 공유해 주셔서 감사합니다.
Ataur Rahman Munna

12

응용 프로그램과 복제본이 있다고 생각하십시오. 그런 다음 응용 프로그램에 새 데이터 항목을 추가해야합니다.

여기에 이미지 설명을 입력하십시오

그런 다음 응용 프로그램은 아래의 다른 복제본 쇼와 데이터를 동기화합니다.

여기에 이미지 설명을 입력하십시오

한편 새 클라이언트는 아직 업데이트되지 않은 하나의 복제본에서 데이터를 가져옵니다. 이 경우 그는 정확한 날짜 데이터를 얻을 수 없습니다. 동기화에는 시간이 걸리기 때문입니다. 이 경우 결국 일관성 이 없었습니다.

문제는 어떻게 결국 일관성을 유지할 수 있는가 있는가?

이를 위해 중개자 애플리케이션을 사용하여 데이터를 업데이트 / 생성 / 삭제하고 직접 쿼리를 사용하여 데이터를 읽습니다. 결국 일관성을 유지 하는 데 도움이되는

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


3

응용 프로그램이 한 시스템의 데이터 항목을 변경하면 해당 변경 사항이 다른 복제본으로 전파되어야합니다. 변경 전파가 즉시 이루어지지 않기 때문에 일부 복사본이 가장 최근에 변경되는 시간 간격이 있지만 다른 것들은 그렇지 않습니다. 즉, 사본이 서로 일치하지 않습니다. 그러나 변경 사항은 결국 모든 복사본에 전파되므로 "최종 일관성"이라는 용어가 사용됩니다. 최종 일관성이라는 용어는 단순히 한 시스템에서 변경 한 사항을 다른 모든 복사본으로 전파하는 데 제한이없는 지연이 있음을 단순히 인정하는 것입니다. 전파가 필요하지 않으므로 중앙 집중식 (단일 사본) 시스템에서는 최종 일관성이 의미가 없거나 관련이 없습니다.

출처 : http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf


1

간단한 영어로 말할 수 있습니다. 시스템이 일관성이없는 상태 일 수 있지만 목표는 각 데이터 조각의 특정 지점에서 항상 일관성에 도달하는 것입니다.


1

결국 일관성은 변경 사항이 전파되는 데 시간이 걸리고 데이터가 동일한 작업이나 변환을 위해 모든 작업 후에 데이터가 동일한 상태에 있지 않을 수 있음을 의미합니다. 이는 사람들이 그러한 시스템과 상호 작용할 때 자신이하는 일을 모르는 경우 매우 나쁜 일이 발생할 수 있습니다.

이 개념을 잘 이해하기 전에는 업무상 중요한 문서 데이터 저장소를 구현하지 마십시오. 문서 데이터 저장소 구현을 고정시키는 것은 관계형 모델보다 수정하기가 훨씬 어렵습니다. 고정 될 기본 사항은 단순히 생태계에 존재하지 않기 때문에 고정 할 수 없기 때문입니다. 기내 저장소의 데이터를 리팩토링하는 것도 RDBMS의 간단한 ETL 변환보다 훨씬 어렵습니다.

모든 문서 저장소가 동일한 것은 아닙니다. 요즘 일부 (MongoDB)는 일종의 트랜잭션을 지원하지만 데이터 스토어 마이그레이션은 재 구현 비용과 비슷할 수 있습니다.

경고 : 문서 데이터 저장소의 기술을 모르거나 이해하지 못하고 실직에 대한 두려움이 있지만 RDBMS에 대해 고전적으로 훈련을 받았으며 ACID 시스템 만 알고있는 개발자 및 설계자 (어떻게 다른가 ?) 기술을 모르거나 배우는 데 시간이 걸리는 사람은 문서 데이터 저장소 디자인을 놓치게됩니다. 또한 RDBMS 또는 캐싱과 같은 용도로 사용할 수도 있습니다. 이들은 전체 문서에서 작동해야하는 원 자성 트랜잭션을 "관계형"으로 분류하여 복제 및 대기 시간이 중요하거나 제 3 자 시스템을 "트랜잭션"으로 끌어 당기는 것을 잊어 버립니다. 그들은 RDBMS가 데이터 레이크를 작동 시킬지 여부와 상관없이, 그리고 그들이하는 일을 알고 있기 때문에 테스트 없이도 데이터 레이크를 미러링 할 수 있도록이를 수행 할 것이다. 그런 다음 "주문"과 같은 별도의 문서에 저장된 복잡한 객체에 예상보다 적은 "주문 항목"이 있거나 전혀 없을 때 놀라게됩니다. 그러나 자주 또는 충분하지 않아서 앞으로 나아갈 수 있습니다. 개발 과정에서 문제를 일으키지 않을 수도 있습니다. 그런 다음 재 설계하지 않고 관계형 데이터 모델을 위조하기 위해 "지연"및 "재시도"및 "확인"을 수행하여 작동하지 않지만 추가 복잡성을 추가하지 않습니다. 그러나 지금 너무 늦었습니다. 물건이 배포되었고 이제 사업이 시작되고 있습니다. 결국 전체 시스템이 폐기되고 부서가 아웃소싱되고 다른 사람이이를 유지 관리하게됩니다. 여전히 제대로 작동하지 않지만 현재 실패보다 비용이 적게 듭니다.


0

최종 일관성은 스펙트럼과 비슷합니다. 한쪽에는 강한 일관성이 있고 다른쪽에는 최종 일관성이 있습니다. 그 사이에는 Snapshot과 같은 레벨이 있으며, 내 글을 읽고, 부실함을 경계합니다. Doug Terry는 야구를 통해 최종 일관성에 대한 그의 논문에서 아름다운 설명을 했습니다. .

나에 따르면 최종 일관성은 기본적으로 데이터 저장소에서 읽을 때마다 임의의 순서로 임의의 데이터를 허용합니다. 그보다 더 좋은 것은 강력한 일관성 모델입니다. 예를 들어 스냅 샷에 오래된 데이터가 있지만 다시 읽을 경우 동일한 데이터를 반환하므로 예측할 수 있습니다. 때때로 응용 프로그램은 일정한 데이터를 요구하는 일정 시간 동안 유효하지 않은 데이터를 허용 할 수 있습니다.

일관성의 의미를 보면 균일 성 또는 편차 부족과 관련이 있습니다. 따라서 컴퓨터 시스템이 아닌 용어에서는 예상치 못한 변형에 대한 내성을 의미 할 수 있습니다. ATM을 통해 매우 잘 설명 될 수 있습니다. ATM은 오프라인 상태 일 수 있으므로 핵심 시스템의 계정 잔액에서 벗어날 수 있습니다. 그러나 한 시간 동안 다른 저울을 보여주는 것은 관용입니다. ATM이 온라인 상태가되면 핵심 시스템과 동기화하고 동일한 균형을 반영 할 수 있습니다. 따라서 ATM은 결국 일관성이 있다고 말할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.