2017-10-24 6 views
0

우리는 채팅 응용 프로그램에서 뗏목을 구현하려고합니다. 지금까지 내가 읽은만큼, 뗏목은 복제를위한 것이고 그것을위한 것입니다. 따라서 클라이언트가 다른 클라이언트와 채팅하기 위해 채팅 서버에 연결하려면 모든 클라이언트가 리더에만 연결해야합니다. 예인 경우 팔로워에 연결하면 팔로워가 리더에게 방향을 바꿀 수 있습니다. 하지만 그 다음엔? 리더가 다시 폴로 우어 노드에 할당합니다. 즉 리더가 기본적으로로드 밸런서로 작동합니까? 아니면 다른 모든 서버에서 사용자 데이터를 복제하여 모든 작업 자체를 수행합니까?로드 밸런싱과 같이 뗏목에서의 복제 이외의 다른 책임은 리더에게 있습니까?

+0

안녕하세요! stackoverflow 커뮤니티는 개발자가 자신의 목표를 달성하는 것을 돕고 자하는 사람을 먼저 돕는 것을 전제로합니다. 이와 관련하여이 질문 [1]을보고 질문을 체계적으로 작성하고 작업 내용을 보여주고 일반적으로 도움을받을 수 있도록하십시오. 감사! [1] : http://stackoverflow.com/help/how-to-ask – Nick

답변

0

추종자가 클라이언트에게 현재 리더의 주소를 알려주고 클라이언트가 리더에 다시 연결해야하는 경우 리더가 오버로드됩니다. 문제는 리더가 이미 로그 복제에 대한 계산을 수행하고 있으며 모두 다른 노드가 실제로 유휴 상태 인 동안 클라이언트 처리가 리더에서 발생한다는 것입니다. 또한 이것은 클라이언트 연결의 수를 심각하게 제한합니다.

반면에 추종자가 클라이언트 연결을 수락하고 (긴 수명의 tcp 연결을 통해) 리더에게 요청을 전달하면 리더의 부하를 완화시키는 일종의 연결 팬 아웃을 형성합니다. 추종자에게 더 많은 처리 작업을 제공할수록 좋습니다.

위의 내용을 확장하여 클라이언트에 보이지 않는 몇 개의 노드를 만드는 데 성공했으며이 노드는 리더가되는 것이 좋습니다. 그런 식으로 그들은 결코 클라이언트 프로세싱에 의해 방해합니다.

+0

단순히 지도자에게 전달하는 중간 노드를 도입하기 위해 리더에 대한 부하를 어떻게 줄일 수 있습니까? 그것은 리더에게가는 요청 횟수와 같습니다. 전달하지 않고 다음 노드에서만 요청을 처리 할 수 ​​있지만 일반적으로는 그렇지 않습니다. 이 세부 사항을 포함 시키려면 답을 보강해야하며, 더 이상 읽을 수없는 선형화가 불가능합니다. – GManNickG

+0

연결 관리 비용이 0이 아닙니다. –