콘텐츠로 이동

로드 밸런싱 가이드

Continuum Router는 먼저 요청 후보를 실행 중이고 정상이며 호출자에게 보이고 해석된 모델을 제공할 수 있는 백엔드로 좁힙니다. 그 다음 설정된 경우 scorer 기반 라우팅을 적용하고, 그렇지 않으면 최상위 selection_strategy를 사용합니다.

표준 설정

selection_strategy: RoundRobin

backends:
  - name: gpu-a
    url: http://gpu-a:8000
    weight: 3
    models: [llama-3.3-70b]
  - name: gpu-b
    url: http://gpu-b:8000
    weight: 1
    models: [llama-3.3-70b]

선택 제어에는 selection_strategy, backends[].weight, backends[].models, smart_routing, prefix_routing을 사용하십시오. 스키마가 받아들이는 routing: 섹션은 런타임 소비자가 없으므로 프로덕션 동작에 사용하면 안 됩니다.

CLI에서 시작 시 전략을 덮어쓸 수 있습니다.

continuum-router --config config.yaml --selection-strategy LeastLatency

CONTINUUM_SELECTION_STRATEGY--selection-strategy와 같은 규칙으로 파싱되는 시작 시 직접 환경 변수 오버라이드입니다(대소문자 구분 없이 여섯 가지 전략 이름 모두, snake_casekebab-case 표기도 허용).

export CONTINUUM_SELECTION_STRATEGY=LeastLatency
continuum-router --config config.yaml

우선순위는 높은 순서대로 --selection-strategy > CONTINUUM_SELECTION_STRATEGY > 설정 파일의 selection_strategy 값 > 기본값 RoundRobin입니다. 환경 변수에 인식할 수 없는 값을 설정하면 파일 값이나 기본값으로 조용히 대체되지 않고 시작이 명확한 오류와 함께 실패합니다.

전략

RoundRobin(기본값)

selection_strategy: RoundRobin

원자적 카운터로 적격 백엔드 목록을 순회합니다. 성능이 비슷한 무상태 백엔드의 좋은 기본값입니다. 백엔드 가중치나 관측 지연은 사용하지 않습니다.

WeightedRoundRobin

selection_strategy: WeightedRoundRobin

backends:
  - name: large
    url: http://large:8000
    weight: 3
  - name: small
    url: http://small:8000
    weight: 1

시간이 지남에 따라 양수 가중치에 비례해 적격 백엔드를 선택합니다. 현재 구현은 결정론적인 3,3,3,1 순서를 강제하지 않고 요청마다 가중 대상 하나를 샘플링합니다. 모든 적격 가중치가 0이면 라운드 로빈 동작으로 폴백합니다.

LeastLatency

selection_strategy: LeastLatency

기록된 평균 응답 시간이 가장 낮은 적격 백엔드를 선택합니다. 후보 관측값이 없을 때는 라운드 로빈 카운터를 사용합니다. 이 전략은 관측 지연을 최적화하지만 요청 복잡도를 예측하지 않으며 한 후보에 트래픽이 집중될 수 있습니다.

Random

selection_strategy: Random

요청마다 적격 백엔드 하나를 균등하게 선택합니다. 장기 분포가 균형을 이루더라도 짧은 구간은 불균등할 수 있습니다.

ConsistentHash

selection_strategy: ConsistentHash

해석된 모델 이름을 백엔드 해시 링에 매핑합니다. 동일한 모델과 후보 집합의 요청은 보통 같은 백엔드를 선택합니다. 이는 사용자/세션 affinity가 아니라 모델 affinity이며, 소수의 인기 모델 키가 트래픽을 지배하면 불균형할 수 있습니다.

PrefixAwareHash

selection_strategy: PrefixAwareHash

prefix_routing:
  enabled: true
  max_prefix_length: 1024
  load_factor_epsilon: 0.25

접두사 추출이 활성화되면 모델과 시스템 프롬프트, 또는 시스템 프롬프트가 없을 때 모델과 첫 사용자 메시지에서 SHA-256 키를 만듭니다. 같은 접두사를 같은 백엔드로 보내고 CHWBL(부하 제한 일관 해싱)로 바쁜 선호 백엔드에서 다음 백엔드로 넘깁니다. 접두사 키가 없으면 모델 기반 일관 해싱으로 폴백합니다.

부하 상한 계산식:

ceil((total_in_flight + 1) * (1 + epsilon) / backend_count)

낮은 epsilon은 균형을, 높은 epsilon은 affinity를 더 보존합니다. 접두사 추출은 코드가 적격 텍스트 접두사를 얻을 수 있는 채팅, Responses, Anthropic 호환 typed 경로를 지원합니다.

prefix_routing.virtual_nodes는 consistent hash 링 크기를 정하며(백엔드당 기본 150개 복제본), 핫 리로드로 실행 중인 풀에 적용되어 값을 바꾸면 링을 다시 만듭니다. anthropic_cache_control_injection(기본값 false)은 fleet 전체 마스터 활성화 스위치로, anthropic_auto_cache_control: false로 설정한 백엔드에도 적격 네이티브 Anthropic 요청에 대해 자동 cache_control 주입을 강제합니다. 요청마다 읽히며 사용자가 지정한 cache_control 블록은 보존합니다.

Scorer 우선순위

BackendPool은 설정된 폴백 전략 전에 등록된 scorer를 평가합니다. 예를 들어 KV 캐시 인덱스가 활성화되고 겹침 점수가 충분히 높으면 관련 캐시 토큰을 가진 백엔드를 선택하며, 그렇지 않으면 selection_strategy가 실행됩니다. 따라서 관측 분포가 순수 라운드 로빈이나 가중 비율과 의도적으로 다를 수 있습니다.

scorer 설정과 임계값은 KV 캐시 아키텍처를 참고하십시오.

상태와 적격성

선택기는 미리 해석된 후보 집합 밖의 백엔드를 의도적으로 고르지 않습니다. 후보 필터에는 다음이 포함됩니다.

  • 모델 가용성과 별칭 해석
  • 백엔드 상태
  • 서킷/재시도 제외
  • 키별 allowed_backends 및 모델 가시성
  • 해당하는 경우 내부 백엔드 필터
  • 기능 활성 시 AppProxy ROUTER 공개 모델 제한

상태 확인은 전역으로 설정합니다.

health_checks:
  enabled: true
  interval: 30s
  timeout: 5s
  unhealthy_threshold: 3
  healthy_threshold: 2

현재 스키마에는 dynamic_weight_adjustment, health_score_threshold, Custom, Geographic 선택 설정이 없습니다.

전략 변경

selection_strategy 수정은 라이브 핫 리로드입니다. 설정 감시자가 새 전략을 실행 중인 백엔드 풀에 원자적으로 교체하므로, 재시작 없이 다음 선택부터 새 전략이 적용됩니다. 교체 과정에서 백엔드 멤버십, 백엔드별 통계, 처리 중(in-flight) 요청 집계는 그대로 유지되며 선택 알고리즘만 바뀝니다.

풀의 prefix_routing.load_factor_epsilon(CHWBL 부하 계수)도 같은 방식으로 리로드됩니다. 새 값이 재시작 없이 실행 중인 풀에 교체됩니다.

변경을 적용하기 전에 파일을 검증할 수 있습니다.

continuum-router config validate /etc/continuum-router/config.yaml

모니터링

설정된 Admin 인증을 사용합니다.

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
  http://localhost:8080/admin/backends

curl -H "Authorization: Bearer $ADMIN_TOKEN" \
  http://localhost:8080/admin/prefix-routing/stats

/admin/backends는 설정된 백엔드 상태 정보를 보고합니다. /admin/prefix-routing/stats는 접두사 결정 카운터와 실시간 진행 중 분포를 보고합니다.

메트릭이 컴파일되고 활성화되면 접두사 라우팅은 다음을 내보냅니다.

  • continuum_prefix_routing_requests_total{strategy=...}
  • continuum_prefix_routing_backend_distribution{backend=...}
  • continuum_prefix_routing_prefix_cardinality

기능 제한 메트릭은 해당 기능을 등록한 빌드에만 있으므로 시리즈에 의존하기 전 실행 중인 /metrics 출력을 확인하십시오.

전략 선택

전략 적합한 경우 주요 절충점
RoundRobin 적격 백엔드 성능이 비슷함 용량과 지연 차이를 무시
WeightedRoundRobin 상대 용량을 알고 있음 가중치 튜닝 필요, 비율은 통계적
LeastLatency 관측 응답 시간으로 라우팅 트래픽 집중 가능, 이전 관측 필요
Random 단순 무상태 분산이면 충분함 단기 분포 예측이 어려움
ConsistentHash 모델 affinity가 중요함 인기 모델 키가 부하를 불균형하게 만들 수 있음
PrefixAwareHash 공유 프롬프트와 분산 KV 캐시가 중요함 고유 프롬프트 이점이 적고 접두사 추출/튜닝 필요

실제 적격 모델 집합으로 테스트하십시오. 모델이 한 백엔드에만 존재하면 어떤 선택 전략도 그 모델을 다른 곳으로 분산할 수 없습니다.

같이 보기