728x90

[ 리스트 커넥션 알고리즘 ]

 

upstream backend {

    least_conn; // 지시자

    server backend.example.com;

    server backend1.example.com;

}

 

연결이 적은 서버를 먼저 활용하는 리스트 커넥션(least connection)

 

응답 속도가 빠른 서버를 우선 사용하는 리스트 타임(least time)

 

특정 문자열 기반 해시를 활용하는 제네릭 해시(generic hash)

 

임의 서버를 할당하는 랜덤 ip 주소 기반 해시를 사용는 IP 해시(ip hash)등이 있습니다.

 

[ 라운드 로빈 ]

 

기본값으로 설정된 부하분산 방법입니다. 업스트림 풀에 지정된 서버의 순서에 따라 요청을 분산한다.

서버의 가용량이 다양하다면 가중치를 적용한 라운드 로빈 방식도 설정할 수 있습니다.

가중치로 더 높은 값이 정숫값이 지정된 서버는 더 많은 요청을 받습니다. 

가중치는 단순히 가중치 평균의 통계적 확률에 따라 계산됩니다.

 

[ 리스트 커넥션 ]

 

엔진엑스와 연결 수가 가장 적은 업스트림 서버로 요청해 전달해 부하를 분산합니다.

라운드 로빈과 마찬가지로 어떤 서버로 요청을 보낼지 계산할 때 가중치를 설정합니다.

리스트 커넥션 알고리즘 지시자는 least_conn 입니다.

 

[ 리스트 타임 ]

 

엔진엑스 플러스에서만 사용할 수 있는 방법입니다.

리스트 커넥션과 마찬가지로 연결 수가 가장 적은 업스트림 서버로 요청을 전달하지만

이 중 응답 시간이 가장 빠른 서버를 우선시한다는 차이가 있습니다.

 

가장 복잡한 부하분산 알고리즘으로 높은성능이 필요한 웹 어플리케이션에 적합합니다.

 

업스트림 서버가 처리하는 요청수가 적다고 해서 늘 가장 빠른 응답시간을 보장하지는 않으므로

리스트 커넥션방식에 대한 일종의 부가 기능으로 생각할수 있습니다.

 

리스트 타임 알고리즘을 사용할 때는 header나 last_byte 매개변수 중 하나를 지정합니다.

header : 업스트림 서버로 부터 응답 헤더를 받을때까지 소요된 시간

last_byte : 헤더 뿐 아니라 응답 전체를 받을때까지 소요된 시간

 

알고리즘 지시자는 least_time 입니다.

 

[ 제네릭 해시 ]

 

서버 운영자는 주어진 텍스트 문자열 혹은 요청이나 런타임 변수 ( 혹은 둘 다 ) 를 사용해서 해시를 정의 합니다.

엔진엑스는 수신한 요청의 해시를 생성하고 업스트림 서버 선택에 활용해 부하를 분산합니다.

 

제네릭 해시는 요청을 처리할 서버를 선택하는 데 깊이 개입해야 할 때나 캐시가 있을 확률이 높은 서버로 요청을 전달하고 싶을 때 무척 유용합니다. 다만 서버가 업스트림 풀에서 추가되거나 삭제되면 해시 처리되면 요청이 재분배된다는 점을 주의합시다. consistent 옵션 매개변수를 사용하면 재분배의 영향을 최소화 할 수 있습니다. 알고리즘 지시자는 hash입니다.

 

[ 랜덤 ]

 

엔진엑스가 업스트림 풀에 지정된 서버를 임의로 선택해 요청을 전달하며 이때 업스트림 서버에 지정된 가중치를 고려합니다. 매개변수로 two [method] 를 사용하면 먼저 서버 두대를 임의로 선택하고 method에 지정된 알고리즘을 이용해 2차 부하분산을 합니다. method 값을 생략하면 기본 알고리즘은 least_conn으로 지정됩니다. 알고리즘 지시자는 random입니다.

 

[ IP 해시 ]

 

HTTP에 대해서만 동작하는 방법으로 IP 주소를 이용해 해시를 생성합니다. 원격 변수를 사용하는 제내릭 해시와 달리 IPV4 주소 체계의 옥텟 값 중 처음 세 값 혹은 IPv6 주소 전체를 해시에 사용합니다. 이 방식을 통해 사용자는 업스트림 서버에 문제가 없는 한 같은 서버로 할당됩니다. 알고리즘 지시자는 ip_hsh입니다.

 

 

 

 

 

 

 

 

 

728x90

+ Recent posts