2015-01-01 3 views
0

복제 계수가 3 인 5 노드 클러스터 및 키 공간이 있습니다. 작업 특성은 읽기보다 쓰기가 훨씬 더 중요하지만 읽기 작업 빈도는 쓰기보다 약 10 배 정도 높습니다 . 전반적인 성능을 향상시키면서 일관성을 유지하기 위해 필자는 쓰기의 일관성 수준을 ALL로, 읽기는 ONE으로 설정했습니다. 그러나 이로 인해 하나의 노드가 작동 중지 된 경우에도 조작이 실패하게됩니다.데이터 저장소의 동적 일관성 수준 유지

하나의 노드가 감지되면 (ALL, ONE)에서 (QUORUM, QUORUM)으로 (Write, Read)에 대한 일관성 수준을 동시에 변경할 수있는 방법이 있습니까? 예외; 이것은 임시 (QUORUM, ONE) 설정이있는 임시 단계를 거치지 않는 방식으로 수행됩니다.

또한 용량을 두 배로 늘릴 계획이며, 데이터 센터 3 개에 각각 4 개의 노드가 있습니다. 어느 한 데이터 센터에서 ALL 수준이고 다른 수준에서는 ONE 수준과 같이 사용자 지정 일관성 수준을 정의 할 수 있습니까? 나는 레벨 (EACH_ONE) 읽기에 대해 위 레벨의 쓰기와 결합하여 일관성을 보장하지만 노드가 다운 된 경우에도 클러스터를 사용할 수 있다고 생각합니다.

답변

3

요청 당 일관성 수준을 설정할 수 있으므로 유연성이 있습니다. 사용중인 클라이언트에 따라 몇 가지 좋은 기능이 있습니다. 예를 들어 java driver에는 DowngradingConsistencyRetryPolicy이라는 항목이 있습니다. 요청이 실패하면 요청이 성공할 때까지 다음으로 가장 낮은 일관성 수준으로 다시 시도됩니다. 이렇게하면 클라이언트에 다시 시도하는 복잡성이 높아 지므로 많은 코드를 작성할 필요가 없습니다. 정말 좋습니다!

자바 드라이버는 또한 지금까지 사용자 정의 일관성 수준으로 Statement#setConsistencyLevel()

와 요청에 따라 일관성 수준을 구성 할 수 있습니다, 이것은 당신에게 사용할 수있는 옵션 (카산드라의 소스 코드를 변경하지 않고) 아니다, 그러나 나는 생각 사용 가능하게 만들어야합니다.

읽기의 경우 데이터 센터간에 일관성을 유지하는 데별로 가치가 없습니다. 나는 LOCAL_QUORUM이 충분하다고 생각하지만, 정말로 신경 쓰면 EACH_QUORUM과 같은 것을 사용하여 모든 데이터 센터가 동의하는지 확인할 수 있지만 응답 시간과 가용성에 심각한 영향을 미친다. 예를 들어 데이터 센터 중 하나가 완전히 다운 된 경우 다운 그레이드를하지 않는 한 전혀 읽을 수 없습니다.

글을 쓰려면 응답 시간과 가용성에 신경 쓰면 멀티 데이터 센터에서 ALL을 사용하지 않는 것이 좋습니다. 요구 사항에 따라 LOCAL_QUORUM이 충분할 것입니다.

카산드라의 장점 중 하나는 일관성을 조정할 수 있지만 원하는만큼 강력한 일관성을 유지할 수 있지만 카산드라는 고 가용성 파티션 위주의 시스템으로 최선을 다합니다.

이러한 점을 많이 못마땅하게 생각하는 일관성에 대한 훌륭한 프레젠테이션은 Christos Kalazantis의 이야기입니다. 'Eventual Consistency != Hopeful Consistency'은 일관성 수준이 1 인 경우 많은 사용 사례로 충분하다고 제안합니다.

관련 문제