어떤 종류의로드 밸런싱 알고리즘이 있습니까


32

나는 HTTP에 대해 다른로드 밸런싱 알고리즘을 연구하고 있었고 방금 3. Random, Round Robin 및 Weighted Round Robin을 발견했습니다. 다른 옵션이 있습니까?

감사합니다 폴

답변:


33

HTTP로드 밸런서에 가장 일반적인로드 밸런싱 알고리즘은 IMHO입니다.

  • 라운드 로빈 (때때로 "Next in Loop"라고 함).

  • 가중 라운드 로빈 -라운드 로빈이지만 일부 서버는 전체 트래픽에서 더 큰 점유율을 얻습니다.

  • 무작위 .

  • 소스 IP 해시. 소스 IP 주소를 기반으로 백엔드 서버에 연결이 분배됩니다. 웹 노드가 실패하고 서비스가 중단되면 분배가 변경됩니다. 모든 서버가 지정된 클라이언트 IP 주소를 실행하는 한 항상 동일한 웹 서버로 이동합니다.

  • URL 해시. 요청의 URL에서 해싱이 수행된다는 점을 제외하고는 소스 IP 해시와 매우 유사합니다. 지정된 객체에 대한 요청은 항상 하나의 백엔드 캐시로 이동하므로 프록시 캐시 앞에서로드 밸런싱 할 때 유용합니다. 이렇게하면 동일한 객체가 여러 개의 / 모든 캐시에 저장되어 캐시 중복이 발생하지 않으며 백엔드 캐시의 유효 용량이 증가합니다.

  • 최소 연결 , 가중 최소 연결. 로드 밸런서는 각 서버에 대해 열려있는 연결 수를 모니터링하고 사용량이 가장 적은 서버로 보냅니다.

  • 최소 트래픽 , 가중 최소 트래픽. 로드 밸런서는 각 서버의 비트 전송률을 모니터링하고 나가는 트래픽이 가장 적은 서버로 보냅니다.

  • 최소 대기 시간 . Perlbal 은 백엔드 서버에 대한 빠른 HTTP OPTIONS 요청을 작성하고 첫 번째 서버로 요청을 보내 응답합니다.

위의 내용은 엄격한 컴퓨터 과학적 의미의 알고리즘이 아니며 일반적인 접근 방식에 대한 일반적인 설명입니다. 다음은 Cisco에서 사용하는 일부 알고리즘에 대해 자세히 설명하는 작은 문서입니다 . 다른 공급 업체의 구현은 약간 다릅니다.

보다 이국적인 알고리즘이 유용한 경우가 있습니다. 예를 들어 비디오 스트리밍은 "최소 트래픽"에 적합합니다. 그러나 일반적으로 대부분의 웹 응용 프로그램 및 웹 사이트에서 최적의 솔루션은 다음과 같습니다.

  • 공유 / 분산 세션 시스템은 , 어떤 webnode는 사용자 요청에 응답 할 수 있도록 (예 : 세션 쿠키와 같은 즉, 사용자 세션 데이터는 모든 서버에 동일하게 볼 수 있습니다).

  • 라운드 로빈 (선택적 가중치 라운드 로빈) 또는 임의 분포를 사용한로드 밸런싱 . 라운드 로빈 (Round Robin)과 랜덤 (Random)은 '핫스팟 (hot spot)'문제가없는 단순하고 복원력있는 알고리즘입니다. 즉, 백엔드로의 부하 분산은 모든 상황에서 공정하게 유지됩니다.


5

질문이 불완전하다 :

무엇로드 밸런스?

CPU가 포화 상태가 될 수 있습니다. 일반적인 관점은 뒤로 당기는 것입니다. 끌어 당기지 않고 리소스를 밀어내는 것입니다.

디스크에는 공간, 읽기 속도, 쓰기 속도, 처리량 등과 같은 다양한 종류의로드 균형이 있습니다.

대기 시간 또는 총 처리량에 따라 네트워크를로드 밸런싱 할 수 있습니다 ...

사람들은 개별 용량에 따라로드 밸런싱을 수행 할 수 있습니다. 일부 멀티 태스킹은 잘하고 다른 것은 그렇지 않으며 품질과 수량이 있습니다. 여러 가지 요소와 다른 속성에 다른 가중치를 부여하여 인적 자원을 최적화 할 수 있습니다.

위의 내용은 철저하지 않습니다. 요점은 서로 다른 리소스가 완전히 다른 종류의로드 밸런싱을 취한다는 것입니다. 사용 가능한 속성과 용량 중에서 WHICH에 균형을 맞추고 자합니다.

균형을 잡는 것은 좋은 균형 알고리즘을 만드는 첫 번째 기준입니다. 그리고 단지 3 명만이 존재한다는 제안은 깨달 지 않았습니다. "부하가 균형을 잡는"모든 방법을 묘사하려고 노력하는 적절한 일을하는 것은 박사 학위에 합당합니다.

RT


2
Richard라는 질문이 누락되었습니다. 알고리즘은 모든 메소드 또는 구현의 기초입니다.
monomyth

2
미안하지만, 미신은, 저주받은 것을 놓치지 않았다. 마음을 열어
Richard T

@monomyth, @Richard가 옳음-알고리즘 선택은로드 밸런싱에 따라 다릅니다. 디스크 공간 사용량의로드 밸런스를위한 알고리즘을 개발하여 HTTP 요청과 같은 다른 것에 전혀 적용되지 않을 수 있습니다.
Josh

@Josh, @ Richard,로드 밸런싱의 개념은 동일합니다. 디스크 사용량, iSCSI, HTTP, CPU 등의 균형을 맞추기 위해 Round Robin을 계속 사용할 수 있습니다.
Mark Henderson

@Farseeker 동의합니다. 라운드 로빈은 매우 보편적입니다. 그러나 작업과 관련된로드 밸런싱 알고리즘이 없습니까?
Josh

0

귀하의 질문에 대한 직접적인 답변은 아니지만 유용한 해결책입니다. HTTP로드 밸런싱은 LVS 및 펄스 데몬을 사용하여 간단한 SSH 연결 및 가동 시간 호출을 통해 "실제 서버"의로드를 결정하는 사용자 정의 bash 스크립트를 호출하도록 구성됩니다 .

그런 다음 서버의로드 평균을 기반으로 서버 당 가중치가 설정됩니다. 로드 평균이 HTTP 연결 또는 해당 연결로 인한 CPU로드를 나타내는 것은 아니기 때문에 가장 과학적인 접근 방식은 아닙니다. 그럼에도 불구하고 우리는 놀랍도록 효과적인 결과를 얻었습니다.

내 2c. YMMV.

추신 : LVS 프로젝트를 살펴보십시오 -로드 밸런싱 스케줄링 구현에 대한 정보를 확실히 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.