로드 밸런싱

Istio는 Envoy를 통해 다양한 로드 밸런싱 알고리즘을 제공하여 트래픽을 효율적으로 분산시킵니다.

목차

Why Load Balancing?

효율적인 리소스 활용

로드 밸런싱은 트래픽을 여러 인스턴스에 분산시켜 시스템 전체의 처리량과 안정성을 향상시킵니다.

spinner

주요 이점

문제
로드 밸런싱 없이
로드 밸런싱 사용

가용성

단일 장애점 (SPOF)

장애 시 자동 우회

성능

특정 인스턴스 과부하

균등한 부하 분산

확장성

수평 확장 어려움

쉬운 스케일 아웃

응답 시간

불균일 (0-1000ms+)

일관된 응답 시간

리소스 활용

비효율 (일부만 사용)

효율적 리소스 활용

로드 밸런싱 개요

spinner

로드 밸런싱 알고리즘

Istio는 다음과 같은 로드 밸런싱 알고리즘을 제공합니다.

알고리즘 비교

알고리즘
설명
사용 시나리오
장점
단점

ROUND_ROBIN

순차적 분배 (기본값)

스테이트리스 서비스

간단, 공평

부하 불균형 가능

LEAST_REQUEST

최소 활성 요청

고성능 API, DB 연결

부하 균등화

약간의 오버헤드

RANDOM

무작위 분배

대량 트래픽

간단, 빠름

단기 불균형 가능

PASSTHROUGH

원본 목적지

TCP 프록시, SNI 라우팅

유연성

제한적 제어

CONSISTENT_HASH

해시 기반 고정

세션 유지, 캐시

Sticky 세션

불균형 가능

1. ROUND_ROBIN (기본값)

요청을 순차적으로 각 엔드포인트에 분배합니다.

spinner

설정 예제:

사용 사례:

  • 스테이트리스 REST API

  • 동일한 성능을 가진 파드

  • 기본 설정으로 충분한 경우

장점:

  • 구현이 간단하고 예측 가능

  • 공평한 분배

단점:

  • 파드별 부하 차이를 고려하지 않음

  • 긴 요청이 있으면 불균형 발생 가능

2. LEAST_REQUEST

가장 적은 활성 요청을 처리 중인 엔드포인트로 라우팅합니다.

spinner

설정 예제:

고급 설정:

사용 사례:

  • 응답 시간이 불균일한 API

  • 데이터베이스 연결 풀

  • 무거운 처리를 하는 서비스

  • 실시간 부하 균형이 중요한 경우

장점:

  • 실시간 부하에 따라 적응

  • 응답 시간 일관성 향상

  • 파드별 성능 차이 흡수

단점:

  • 약간의 오버헤드 (활성 요청 추적)

3. RANDOM

무작위로 엔드포인트를 선택합니다.

사용 사례:

  • 대량의 트래픽 (통계적으로 균등)

  • 간단하고 빠른 선택이 필요한 경우

  • 파드 성능이 동일한 경우

장점:

  • 매우 빠른 선택

  • 구현이 간단

  • 대규모에서 통계적으로 균등

단점:

  • 단기적으로 불균형 가능

  • 예측 불가능

4. PASSTHROUGH

클라이언트가 지정한 원본 목적지로 직접 연결합니다.

사용 사례:

  • TCP 프록시

  • SNI 기반 라우팅

  • 외부 서비스 직접 연결

  • TLS PASSTHROUGH 모드

장점:

  • 원본 목적지 주소 유지

  • 유연한 라우팅

단점:

  • 로드 밸런싱 제어 제한적

5. LEAST_CONN (Deprecated → LEAST_REQUEST)

주의: LEAST_CONNdeprecated되었으며, LEAST_REQUEST로 대체되었습니다.

마이그레이션:

Consistent Hash 상세

Consistent Hash는 특정 속성을 기반으로 항상 같은 엔드포인트로 라우팅하여 세션 유지를 보장합니다.

Consistent Hash 동작 원리

spinner

1. HTTP Header 기반

특정 HTTP 헤더 값으로 해시를 계산합니다.

사용 사례:

  • 사용자별 세션 유지

  • API 키 기반 라우팅

  • 테넌트별 격리

쿠키 값으로 해시를 계산하며, 쿠키가 없으면 자동 생성합니다.

사용 사례:

  • 웹 애플리케이션 세션 유지

  • 쇼핑 카트 유지

  • 사용자 경험 일관성

3. Source IP 기반

클라이언트의 소스 IP 주소로 해시를 계산합니다.

사용 사례:

  • IP 기반 세션 유지

  • Rate limiting (IP별)

  • 지역별 캐시

주의사항:

  • NAT 뒤에 있는 클라이언트는 같은 파드로 라우팅될 수 있음

  • 프록시 사용 시 실제 클라이언트 IP를 확인해야 함

4. HTTP Query Parameter 기반

쿼리 파라미터 값으로 해시를 계산합니다.

사용 사례:

  • RESTful API에서 리소스 ID 기반 라우팅

  • 캐시 친화적 라우팅

  • 샤딩 전략

5. Minimum Ring Size 설정

Consistent Hash Ring의 최소 크기를 설정하여 재분배를 최소화합니다.

설명:

  • Ring size가 클수록 더 균등한 분배

  • 파드 추가/제거 시 재분배되는 키의 비율 감소

  • 메모리 사용량 약간 증가

권장값:

  • 소규모 (< 10 파드): 1024 (기본값)

  • 중규모 (10-50 파드): 2048

  • 대규모 (50+ 파드): 4096

Consistent Hash 조합 예제

Consistent Hash 주의사항

1. 불균형 위험

spinner

원인: 특정 해시 값에 트래픽이 집중되는 경우

해결책:

  • minimumRingSize 증가

  • 여러 해시 키 조합 사용

  • Bounded Load 알고리즘 고려 (Envoy 미지원)

2. 파드 추가/제거 시 재분배

대응 방안:

  • Graceful shutdown 활용

  • 세션 외부 저장소 사용 (Redis, Memcached)

  • 서서히 스케일 조정

Locality 기반 로드 밸런싱

Locality-based Load Balancing은 지리적으로 가까운 엔드포인트를 우선적으로 사용합니다.

기본 Locality 설정

Locality 분배 비율 설정

Locality Failover

한 지역이 실패하면 다른 지역으로 자동 전환합니다.

Multi-Region 예제

사용 사례:

  • Multi-region 배포

  • 지연 시간 최소화

  • 리전 간 장애 복구

  • 비용 최적화 (같은 AZ 통신)

Connection Pool 설정

로드 밸런싱과 함께 Connection Pool을 설정하여 성능을 최적화합니다.

HTTP/1.1 Connection Pool

HTTP/2 Connection Pool

실전 예제

예제 1: 고성능 API 서비스

사용 시나리오:

  • 고성능 REST API

  • 응답 시간이 불균일한 요청

  • 파드별 성능 차이가 있는 환경

예제 2: 사용자 세션 기반 라우팅

사용 시나리오:

  • 웹 애플리케이션 세션 유지

  • 쇼핑 카트 일관성

  • 사용자별 캐시 활용

예제 3: Multi-Region 글로벌 서비스

사용 시나리오:

  • 글로벌 SaaS 서비스

  • 지연 시간 최소화

  • 리전별 장애 복구

  • Cross-AZ 트래픽 비용 절감

예제 4: 캐시 서비스 최적화

사용 시나리오:

  • 캐시 히트율 최대화

  • 일관된 캐시 키 라우팅

  • 샤딩 전략

예제 5: 데이터베이스 연결 풀

사용 시나리오:

  • 데이터베이스 연결 풀 관리

  • 느린 쿼리 분산

  • 연결 수 제한

예제 6: 대규모 트래픽 처리

사용 시나리오:

  • 이벤트 수집 (Analytics)

  • 로그 수집

  • 대용량 데이터 처리

알고리즘 선택 가이드

결정 트리

spinner

서비스 유형별 권장 알고리즘

서비스 유형
권장 알고리즘
이유

REST API

LEAST_REQUEST

응답 시간 일관성

GraphQL API

LEAST_REQUEST

복잡한 쿼리 분산

gRPC

LEAST_REQUEST

스트리밍 부하 균형

웹 프론트엔드

CONSISTENT_HASH (cookie)

세션 유지

WebSocket

CONSISTENT_HASH (header)

연결 유지

캐시 서비스

CONSISTENT_HASH (header)

캐시 히트율

분석/로그 수집

RANDOM

대규모 처리

데이터베이스

LEAST_REQUEST

연결 풀 관리

Static Content

ROUND_ROBIN

간단하고 충분

Message Queue

LEAST_REQUEST

큐 부하 균형

배치 처리

LEAST_REQUEST

작업 분산

트래픽 패턴별 선택

모범 사례

1. 알고리즘 선택 원칙

✅ 좋은 예:

❌ 나쁜 예:

2. Connection Pool 필수 설정

로드 밸런싱과 함께 항상 Connection Pool을 설정하세요:

3. Outlier Detection 조합

Circuit Breaker와 함께 사용하여 장애 파드 제거:

4. Consistent Hash 사용 시 주의

5. Multi-Region 배포

6. 모니터링 및 메트릭

로드 밸런싱 효과를 모니터링하세요:

7. 점진적 적용

8. 문서화

문제 해결

불균형한 부하 분산

증상:

원인 및 해결:

Consistent Hash 불균형

증상:

해결:

Locality 기반 라우팅이 작동하지 않음

확인 사항:

수정:

참고 자료

마지막 업데이트