1

나는 Lambda Architecture로 CAP 정리를 깨는 방법에 대해 Nathan Marz의 article을 읽었으며 불변의 데이터가 최종 일관성을 덜 복잡하게 만들 것임을 이해하지 못했습니다.불변의 데이터로 인해 결과 일관성이 어떻게 유지됩니까?

다음 내용은 기사에서 가져온 것입니다 :

의 핵심은 데이터가 불변이다. 변경할 수없는 데이터 란 업데이트와 같은 것이 없으므로 데이터의 다른 복제본이 일관성을 잃지는 못합니다. 즉, 분기 값, 벡터 시계 또는 읽기 - 복구가 없음을 의미합니다. 쿼리의 관점에서 데이터 조각이 존재하거나 존재하지 않습니다. 해당 데이터에는 단지 데이터와 기능 만 있습니다. 궁극적으로 일관성을 유지하기 위해해야 ​​할 일은 없으며 궁극적으로 일관성이 시스템에 대한 추론의 방식으로 사용되지 않습니다.

다음 예를 상상해보십시오. 두 개의 노드 A와 B가있는 분산 된 삽입 전용 데이터베이스가 있고 둘 다 레코드 [timestamp=1; id=1; value=10]을 보유하고 있습니다. 그런 다음 동시에 노드 A에 대한 삽입이 발생하여 [timestamp=2; id=1; value=20]이되고 노드 B에 대해 판독을 위해 id=1이 기록됩니다.

업데이트 가능성이있는 데이터베이스보다 최종 일관성 문제가 어떻게 해결 되는가?

답변

0

저는 100 % 아니에요. 어쨌든 설명하려고 노력할 것입니다.

예를 들어 네트워크 링크로 연결된 쓰기/읽기를 허용하는 2 개의 데이터베이스가 있습니다. 링크가 다운되어 네트워크 파티션이 생성됩니다. 우리는 시스템을 CAP로 사용할 수 있기를 원하므로 양쪽 데이터베이스에서 쓰기/읽기를 허용합니다.

가변 데이터 구조로 작업 할 때 : 첫 번째 데이터베이스에 연결된 클라이언트가 레코드 X의 값을 A로 업데이트하려고하고 두 번째 데이터베이스에 연결된 다른 클라이언트가 해당 값을 B로 업데이트하려고한다고 가정합니다. 시스템을 사용할 수있는 경우 두 데이터베이스 모두에서 쓰기를 허용하지만 네트워크 매개 변수가 사라지면 충돌을 해결해야합니다. 이로 인해 업데이트 중 하나가 손실됩니다.

불변의 데이터 구조를 사용하면 데이터를 업데이트하지 않고 삽입하므로 네트워크 패러디션이 사라진 후에 두 기록이 모두있게됩니다. 매우 까다로울 수있는 작업 순서를 유지하기 위해서는 어떤 종류의 시간 동기화가 필요합니다 (Sebastien Diot의 기사 참조).