2017-09-29 4 views
2

크로니클지도의 원 자성 의미에 대해 궁금합니다. 두 개의 노드 (서버)에서 공유 된 크로니클 맵이 있고이 키를 두 노드에서 동시에이 맵에 삽입하려고하면 트랜잭션 의미는 무엇입니까?크로니클지도 원 자성 의미

첫 번째 put은 성공하고 두 번째 put은 실패합니까?

크로니클 맵이 Apache Zookeeper와 동일한 트랜잭션 의미를 보장하는지 궁금합니다.

내 usecase에서 node1이 K1 키를 맵에 넣으면 node2가 K1의 존재를 확인할 수 있고 거기에 없으면 확실히 알 수 있습니다. 그것은 K1을 처음 추가 한 것입니다.

효과적으로, ChronicleMap에 대한 put이 두 노드에 걸쳐있는 분산 트랜잭션인지 묻습니다.

많은 감사 클리포드

답변

1

크로니클지도 최종 일관성을 사용하고 마지막 승리. 미세한 두 번째 시간 스케일을 보면, 노드는이 속도로 동기화 상태를 유지할 방법이 없으므로 분할 된 두뇌 노드에 있습니다. 이것은 Map이 서버 당 초당 수백만 개의 업데이트를 지원하도록 설계된 것으로 설계된 것입니다. 일반적으로 두 서버가 정상 작동 중에 같은 키를 동시에 업데이트하지 않도록하는 것은 어렵지 않습니다. 예 : 엔진을 사용하여 모든 업데이트를 한 서버에 전달하거나 업데이트 키를 분할 할 수 있습니다. 분산 트랜잭션은 좋은 생각처럼 들리지만주의해야합니다. - 많은 수의 주문이 더 느립니다. - 스플릿 브레인과 같은 오류가 발생했을 때 복구하기가 매우 어렵습니다. - 응용 프로그램 테스트가 여러 가지 실패 조건에서 올바르게 작동하는지 여부는 매우 어렵습니다.

내 생각에 우리는이 가정이 필요없는 시스템을 설계하는 것이 좋으며 광범위한 테스트를 거치지 않고 실패한 경우 어떻게 작동하는지 알 수 있습니다.

zookeeper를 3 개의 데이터 센터에 설치한다고 가정 해보십시오. 데이터 센터의 노드가 절반 이상 (두 개의 데이터 센터가 충분하지 않음)을 보장하지 않아도 데이터 센터의 오류로 인해 작동이 중지되지 않는다고 가정하면 일시적으로 분할됩니다 두뇌는 느린 상호 연결 때문에 발생하지만, 이는 모든 업데이트에 영향을 미치지 만 재현하기 어렵거나 테스트 방식으로 일시적으로 발생합니다. 크로니클지도를 사용하면 데이터 센터의 연결을 끊을 수 있으며 모든 보증이 적용되며 추가 테스트가 필요 없습니다. 사실 하나의 노드를 제외한 모든 노드를 잃어 버리고 여전히 완전한 동작을 할 수 있습니다.

+1

자세한 답변을 주셔서 감사합니다. ECN에 궁극적으로 전달하기 위해 3 개의 발신 게이트웨이 중 어느 곳으로도 라우팅 할 수있는 주문이 있습니다 (이는 고 가용성을 보장하기위한 것입니다). 주문을받는 첫 번째 게이트웨이가이를 교환기로 전송하고 다른 게이트웨이가 결코 전송하지 않아야한다는 것을 보증하려고합니다. 고유 한 주문 ID를 Chronicle에 추가하고 주문을 통해 전송하기 전에이 주문 ID의 존재를 확인하기 위해 3 개의 게이트웨이를 모두 갖게했습니다. 위의 권장 사항에 따라이를 달성하는 방법에 대한 제안이 있습니까? 크로니클지도가 잘 어울리는지도? – cliff

관련 문제