나는 카산드라 1.1 코드를 확인하고 멀티 DC 배포에서 CL.ALL에 기록 할 때 흥미로운 동작을 나타났습니다. 아마 나는 코드를 잘못 해석했다. .... 어쨌든 :
처음에는 행 변이를 보낼 노드의 IP 주소를 수집한다. 이것은 클라이언트가 제공하는 일관성 수준과는 독립적이다. 1.0에서는 모든 DC의 모든 노드였습니다. 1.1에서부터 로컬 DC의 모든 노드에 각 원격 DC의 노드 하나를 더했습니다 (나머지 노드는 메시지의 "전달 대상"임). 각 돌연변이는 별도의 스레드에 의해 보내 지므로 요청은 병렬로 실행될 수 있습니다. 이러한 돌연변이는 메시징 서비스에 의해 메시지로 처리됩니다. 원격 DC의 노드가 메시지를 수신하면 노드는 "앞으로"제공되는 나머지 노드로 메시지를 전달합니다.
클라이언트가 제공하는 일관성 수준은 수신 된 메시지를 확인해야하는 노드 수를 정의합니다. CL.ALL의 경우이 수는 복제 계수에 의해 결정됩니다. 이제 재미 있습니다. 로컬 DC에서 모든 노드로, 원격 DC에서 노드로 메시지를 보내므로 제거 노드에서도 수신 확인을 받게됩니다. 이것은 여전히 복제 계수에 의해 정의되는 번호이지만 notwork 대기 시간에 따라 어떤 노드가 수신 메시지를 준수했는지 확인할 수 없으며 로컬 및 원격 DC의 노드와 혼합 될 수 있지만 로컬 DC의 노드 일 수도 있습니다 . 최악의 경우, 로컬 노드에 메시지가 없으며 원격 DC (많은 경우)에서 확인을받을 수 있습니다. 즉, CL.ALL로 작성한 은 수취인이 아니므로 해당 지역의 DC에서 즉시 메시지를 읽을 수 있습니다.
카산드라의 복제는 DC 기반으로 구성 할 수 있지만 랙 단위로 구성 할 수는 없습니다. 각각에 3 개의 복제본이있는 2 개의 dcs가 있습니까? 또는 해당 데이터 센터에 3 개의 노드와 6 개의 복제본이있는 1 dc (실제로 각 랙에 3 개의 복제본)가 있습니까? 아니면 다른 구성? – nickmbailey
오른쪽 - 내 질문을 수정했습니다 –