2014-11-22 2 views
6

Cassandra 클러스터에 클라이언트 응용 프로그램이 액세스해야한다고 가정 해보십시오. Java API에서 우리는 클러스터 인스턴스를 만들고 세션을 통해 읽기 또는 쓰기 요청을 보냅니다. 읽기/쓰기 일관성 ONE을 사용하면 api가 요청을 전달하기 위해 실제 노드 (조정자 노드)를 선택하는 방법. 그것은 무작위 선택인가? 이것을 이해하는 데 도움주세요.카산드라가 요청을 보낼 노드를 선택하는 방법은 무엇입니까?

답변

7

카산드라 드라이버는 클러스터에 대한 정보를 얻기 위해 "험담"프로토콜 (및 노드 검색이라는 프로세스)을 사용합니다. 노드를 사용할 수 없게되면 클라이언트 드라이버는 자동으로 다른 노드를 시도하고 해당 노드와의 재 연결 시간을 예약합니다. to the DataStax docs 따르면

잡담은 자신에 대해 주기적으로 교환 상태 정보와 그들에 대해 알고에 대한 다른 노드 노드하는 피어 - 투 - 피어 통신 프로토콜입니다. 가십 프로세스는 매 초마다 실행되며 은 클러스터의 다른 노드 3 개까지 상태 메시지를 교환합니다. 노드는 자신에 대한 정보를 교환하고 다른 노드에 대한 정보를 교환하므로 모든 노드는 클러스터의 다른 모든 노드 에 대해 빨리 알 수 있습니다.

기본적으로 클라이언트에 연결하기 위해 제공하는 노드 목록은 전체 클러스터에 대한 정보를 얻기위한 초기 접촉 지점입니다. 따라서 연결 문자열에 노드의 작은 하위 집합 만 제공 할 수 있더라도 클라이언트가 클러스터의 모든 노드와 통신 할 수 있습니다 (필요한 경우).

드라이버가 클러스터의 가십 정보를 얻으면 쿼리를 실행할 노드를 지능적으로 결정할 수 있습니다. 노드 선택은 투표 또는 임의 선택 프로세스가 아닙니다. 반환 된 가십 정보를 기반으로 클라이언트 드라이버는 Load Balancing Policy을 적용합니다. 고려해야 할 몇 가지 요인이 있지만 기본적으로 클라이언트에서 가장 낮은 네트워크 "거리"를 가진 노드를 선택하려고 시도합니다.

+0

자세한 설명을 위해 고맙습니다. – Anayag

관련 문제