19

최근에 필자가 쓴 소프트웨어에로드 균형 조정 기능을 추가했습니다. SQL 데이터베이스에서 입력을 기반으로 일부 데이터를 처리하는 네트워크 응용 프로그램입니다. 처리가 꽤 집중적 일 수 있기 때문에이 응용 프로그램의 여러 인스턴스를 여러 서버에서 실행하여로드를 분할 할 수있는 기능을 추가했지만 이제로드 균형 조정은 수동 작업입니다. 사용자는 입력 도메인의 어느 부분을 차지하는 인스턴스를 지정해야합니다.하트 비트 프로토콜/알고리즘 또는 모범 사례

다음 단계로 넘어가서 입력 데이터의 다이빙을 자동으로 협상하고 인스턴스 중 하나가 "사라지다"(충돌했거나 전원이 꺼져 있음) 것을 인식하면 인스턴스를 프로그래밍하여 나머지 인스턴스는 실패한 인스턴스의 작업 부하를 처리 할 수 ​​있습니다.

이것을 구현하기 위해 인스턴스 사이에 간단한 하트 비트 프로토콜을 사용하여 누가 온라인 상태이고 누가 아닌지를 결정할 것입니다.이 작업은 대단히 복잡하지는 않지만 설치 하트 비트 네트워크가 있는지 알고 싶습니다. 프로토콜 (UDP, TCP 또는 둘 다 기반).

분명히 클러스터링, 페일 오버 및 고 가용성 기술로 네트워킹 세계에서 많은 일이 발생합니다. 결국 내가 알고 있어야하는 확립 된 프로토콜이나 알고리즘이 있는지 궁금합니다. of of 또는 구현.

편집

더 잘 하트 비트 프로토콜이 설치되지 않은 어느 쪽이든, 답변을 기반으로 보인다 또는 아무도 그들이 결국 잘 확립되지 것을 의미하는 것이다 (그들에 대해 알고) 그 경우 나는 단지 내 자신을 굴릴거야.

내가 찾던 답변 중 어느 것도 제공하지 않았지만 가장 가까운 번호 였기 때문에 Matt Davis's answer에 투표 할 예정이며 멀티 캐스트를 사용하는 것이 좋습니다.

당신의 시간 ~

+0

WebLogic의 기본 하트 비트 메시지를 사용자 정의하여 현재 CPU 및/또는 네트워크로드와 같은 추가 정보를 추가 할 수 있는지 알고 있습니까? (더 많은 요청으로 어려움을 겪는 서버에 과부하가 걸리지 않도록 해당 정보를 사용하는로드 균형 조정 알고리즘을 허용) – XpiritO

+1

파스칼에 대한 질문이 많습니다 (http://stackoverflow.com/questions/1442189/heartbeat-protocols-algorithms-or- 베스트 프랙티스/1442255 # 1442255). 저는 WebLogic에 익숙하지 않습니다. 제 경우에는 이미 UDP 기반의 맞춤 솔루션이었던 것을 사용하기 시작했습니다. –

답변

7

Distribued Interactive Simulation (DIS)은 IEEE 표준 1278에 정의되어 있으며 UDP 브로드 캐스트를 통해 5 초의 기본 하트 비트를 사용합니다. DIS 하트 비트는 본질적으로 엔티티 상태 PDU로서 주어진 엔티티의 상태를 포함하여 상태를 완전히 정의합니다. 시뮬레이션 커뮤니티 내에서의 적용으로 인해 DIS는 실제 위치가 예를 들어 예측 된 위치의 주어진 임계 값 밖에있을 때 더 높은 주파수의 하트 비트를 제공하기 위해 데드 - 계산 (dead-reckoning)이라고하는 개념을 사용합니다.

귀하의 경우, DIS 엔터티 상태 PDU가 과도합니다. 나는 단지 하트 비트가 상황에 따라 빈도가 다를 수 있다는 사실을 주목하기 위해 언급한다. 당신이 묘사 한 어플리케이션에 대해 이와 같은 것을 필요로할지 모르지만 결코 알지 못합니다.

하트 비트의 경우 TCP가 아닌 UDP를 사용하십시오. 하트 비트는 본질적으로 비 연결 성 (contorvance)이므로 UDP (connectionless)는 TCP (connection-oriented)보다 관련성이 높습니다.

UDP 브로드 캐스트에 대해 유의해야 할 점은 브로드 캐스트 메시지가 broadcast domain에 국한되어 있다는 것입니다. 간단히 말해서 라우터가 3 계층 장치 (예 : 라우터)로 분리 된 컴퓨터의 경우 라우터가 브로드 캐스트 도메인에서 다른 브로드 캐스트 도메인으로 브로드 캐스트 메시지를 전송하지 않기 때문에 브로드 캐스트가 작동하지 않습니다. 이 경우 브로드 캐스트 도메인을 스팬 할 것이므로 멀티 캐스트를 사용하는 것이 좋습니다. TTL (Time-To-Live) 값이 충분히 높게 설정된 경우입니다. 또한 메시지를 보내려면 수신자의 IP 주소를 보낸 사람이 알아야하는 감독 된 유니 캐스트보다 더 자동화 된 방식입니다.

4

방송 하트 비트 UDP를 사용하여 모든 t에 대한 여러분 모두 감사합니다; 당신이 k * t보다 많은 기계로부터 들어 본 적이 없다면, 그것은 추측됩니다. 사용 된 총 대역폭이 리소스의 소모가되지 않도록주의하십시오. IP 브로드 캐스트 주소를 사용하거나 작업중인 특정 IP 목록을 유지할 수 있습니다.

하트 비트에 "재부팅 횟수"와 "컴퓨터 ID"가 포함되어 이전 서버 상태가 알려지지 않았는지 확인하십시오.

맞는 경우 MapReduce을 사용하는 것이 좋습니다. 그것은 많은 일을 줄여 줄 것입니다.

+0

감사합니다. 여러분이 언급 한 매우 기본적인 UDP 패턴은 제가 염두에 두었던 것입니다. MapReduce는 확실히 조사해야 할 것이지만 앱이 이미 다르게 구현되어 있기 때문에이 애플리케이션에 사용할 수 없습니다. –

2

이 질문에 대한 답변은 확실하지 않지만 Weblogic Server 클러스터링이 어떻게 작동하는지에 관심이있을 수 있습니다. 책에서 Mastering BEA WebLogic Server :

[...] WebLogic Server 클러스터링은 클러스터에서 서버의 느슨한 연결을 제공합니다. 클러스터의 각 서버는 독립적이며 기본적인 작업을 위해 다른 서버에 의존하지 않습니다. 다른 모든 서버와의 연결이 끊어 지더라도 각 서버는 계속 실행되어받은 요청을 처리 할 수 ​​있습니다. 클러스터의 각 서버는 정기적 인 하트 비트 메시지를 통해 클러스터의 다른 서버 목록을 유지 관리합니다. 10 초마다 각 서버는 클러스터의 다른 서버에 하트 비트 메시지를 전송하여 서버가 아직 살아 있음을 알립니다. 하트 비트 메시지는 JVM에 내장 된 IP 멀티 캐스트 기술을 사용하여 전송되므로 클러스터의 서버 수가 커질수록이 메커니즘을 효율적이고 확장 가능하게 만듭니다.각 서버는 다른 서버에서 이러한 하트 비트 메시지를 수신하고이를 사용하여 현재 클러스터 멤버십 목록을 유지 관리합니다. 서버가 다른 서버의 행에서 세 개의 하트 비트 메시지 수신을 놓친 경우 해당 서버에서 다른 하트 비트 메시지를 수신 할 때까지 해당 서버를 구성원 목록에서 제거합니다. 이 하트 비트 기술을 사용하면 서버를 기존 서버의 구성에 영향을주지 않고 클러스터에서 동적으로 추가 및 삭제할 수 있습니다.

+0

WAN을 통해 멀티 캐스트가 작동하지 않을 수 있습니다. 멀티 캐스트 IMO의 이점은 보내는 방법을 알 필요가 없다는 것입니다 (노드 또는 피어 목록을 구성 할 필요가 없음). – ChrisW

+0

두 지점 모두에 동의합니다. BTW, Weblogic 10부터는 BEA/Oracle이 Multicast 외에 Unicast (권장)를 사용하는 클러스터 멤버 간의 통신을 지원한다고 언급 했어야합니다. –

+0

WebLogic의 기본 하트 비트 메시지를 사용자 정의하여 현재 CPU 및/또는 네트워크로드와 같은 추가 정보를 추가 할 수 있는지 알고 있습니까? (더 많은 요청으로 어려움을 겪는 서버에 과부하가 걸리지 않도록 해당 정보를 사용하는로드 밸런싱 알고리즘을 허용) – XpiritO

2

Cisco 콘텐츠 스위치는이 문제를 해결하는 하드웨어 솔루션입니다. 가상 IP 주소를 여러 실제 서버의 프런트 엔드로 구현합니다. 실제 IP 주소는 스위치에 알려져 있습니다. 스위치는 웹 서버에 HTTP HEAD 요청을 주기적으로 전송하여 서버가 계속 실행 중인지 확인합니다 (스위치 소프트웨어가 "keepalive"를 호출 함). 시스코 스위치는 라운드 로빈이나 사용자 정의로드 밸런싱과 같은 구성 가능한로드 밸런싱을 사용하여 가상 IP에서 트래픽을 수용하고이를 실제 웹 서버로 전달합니다.

내 비즈니스 파트너가 1 년 전에 약 300 달러에 이베이에서 하나를 선택했지만이 스위치는 $ 3-10K 범위에서 소매됩니다. 비용을 감당할 수 있다면, 여러 서버에서 서비스를 투명하게 확산시키는 방법에 대한 입증 된 하드웨어 솔루션을 제시 할 수 있습니다. Redhat에는 내장 된 포트 구성이 포함되어 있으므로 값싼 RedHat 상자를 사용하여 Cisco 스위치를 구현할 수 있습니다. 자세한 내용은 "가상 IP 주소"및 "cisco 콘텐츠 라우터"에 대한 Google.

+0

@Paul, 팁 주셔서 고맙지 만 그 스위치는 서버가 여전히 살아 있는지 여부와 앱이 아직 실행 중인지 여부를 알 수있게 해줍니다. 내가 관심있는 부분은 –

+0

아, 우리의 경우 서버 * * 응용 프로그램입니다. 하지만 앱을 이미 배포했기 때문에 일부 통신 인프라가 있어야하므로 프론트 엔드에 폴링 인터페이스를 제공하기 위해 피기 백 (piggyback) 할 수있는 Linux 기반 옵션을 고려해야합니다. 이러한 옵션의 대부분은 사용자 지정 킵 얼라이브 인터페이스를 제공하므로 사용자가 직접 작성할 수 있습니다. 행운을 빕니다! – PaulMcG

1

하드웨어로드 밸런서를 시도하는 것 외에도 Linux 및 BSD에서 사용할 수있는 HAProxy과 같은 무료 오픈 소스로드 균형 조정 소프트웨어 응용 프로그램을 사용해 볼 수도 있습니다.