현재 위치: > 최신 기사 목록> Nginx 로드 밸런싱 공정한 알고리즘 원리 및 실무 가이드

Nginx 로드 밸런싱 공정한 알고리즘 원리 및 실무 가이드

M66 2025-10-22

Nginx 로드 밸런싱 및 Fair 알고리즘 소개

분산 시스템에서 로드 밸런싱은 서비스 안정성과 고성능을 보장하는 중요한 연결 고리입니다. 고성능 웹 서버이자 역방향 프록시 서버인 Nginx는 다양한 로드 밸런싱 알고리즘을 지원하며, 그 중 Fair 알고리즘은 가중치 기반 밸런싱 스케줄링 전략입니다.

공정한 알고리즘 원리

Fair 알고리즘의 핵심 아이디어는 각 서버의 부하가 상대적으로 균형을 이루도록 서버의 가중치에 따라 요청을 할당하는 것입니다. 구현 단계는 다음과 같습니다.

  • 각 서버의 가중치를 기준으로 서버 목록을 생성합니다.
  • 요청이 도착하면 현재 가중치가 가장 높은 서버가 처리를 위해 선택됩니다.
  • 요청을 처리한 후 서버 무게에서 총 무게의 최대 공약수를 뺍니다.
  • 업데이트된 서버 목록은 다음 요청 할당에 사용됩니다.

이 방법을 사용하면 서버 성능 차이에 따라 요청을 합리적으로 할당하고 로드 밸런싱을 달성할 수 있습니다.

Nginx에서 Fair 알고리즘 구현

Nginx는 기본적으로 직접적인 Fair 알고리즘 지원을 제공하지 않지만 사용자 정의 구성을 통해 달성할 수 있습니다. 다음 예에서는 Nginx에서 Fair 알고리즘을 구성하는 방법을 보여줍니다.

 http {
    업스트림 백엔드 {
        공정한;
        서버 backend1.example.com 가중치=3;
        서버 backend2.example.com 가중치=2;
        서버 backend3.example.com 가중치=1;
    }

    서버 {
        들어라 80;
        서버 이름 example.com;

        위치/{
            Proxy_pass http://백엔드;
        }
    }
}

구성에서는 upstream 지시문을 통해 서버 목록을 정의하고, Weight 를 통해 각 서버의 가중치를 설정합니다. 가중치가 높은 서버는 더 많은 요청을 처리하고 리소스를 최대한 활용합니다.

Fair 알고리즘의 코드 예

Fair 알고리즘을 보다 직관적으로 이해하기 위해 Python 구현의 예는 다음과 같습니다.

 수학 가져오기

서버 = [
    {'이름': 'backend1.example.com', '체중': 3},
    {'이름': 'backend2.example.com', '체중': 2},
    {'이름': 'backend3.example.com', '체중': 1},
]

total_weight = sum(서버 내 서버의 경우 server['weight'])
gcd = math.gcd(*[서버['weight'] 서버 내 서버])

서버 내 서버의 경우:
    서버['현재_중량'] = 서버['중량']

True인 동안:
    best_server = 없음
    best_weight = 0

    서버 내 서버의 경우:
        서버['현재_중량'] += 서버['중량']
        서버['현재_중량'] > 최고_중량인 경우:
            best_server = 서버
            best_weight = 서버['current_weight']

    best_server['current_weight'] -= 총_중량

    print('요청이 다음으로 전송되었습니다: %s' % best_server['name'])

코드에서는 서버의 현재 가중치를 계산하여 가장 적합한 서버를 동적으로 선택하여 요청을 처리하고, 각 할당 후에 가중치를 업데이트하여 로드 밸런싱을 달성합니다.

요약

Fair 알고리즘은 서버 성능에 따라 요청을 합리적으로 할당하고 시스템 안정성과 효율성을 향상시킬 수 있는 가중치 기반 로드 밸런싱 전략입니다. Nginx 구성과 간단한 코드 예제를 통해 개발자는 Fair 알고리즘을 유연하게 구현하고 실제 서버 성능에 따라 가중치를 조정하여 최적의 시스템 성능을 얻을 수 있습니다.