로드밸런싱 — 트래픽을 여러 호스트에 고루 나누기

로드밸런싱 — 트래픽을 여러 호스트에 고루 나누기

로드밸런싱은 하나의 업스트림 클러스터 안에 있는 여러 호스트 사이에 트래픽을 분산해서 가용 자원을 효과적으로 쓰는 방법이에요. 이를 구현하는 방식은 매우 다양해서 Envoy는 여러 로드밸런싱 전략을 제공하는데, 크게 글로벌 로드밸런싱(global load balancing)과 분산 로드밸런싱(distributed load balancing) 두 범주로 나눌 수 있어요.

출처: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/overview

분산 로드밸런싱(Distributed load balancing)

분산 로드밸런싱은 Envoy 자신이 업스트림 호스트의 위치를 알고 로드를 엔드포인트에 어떻게 분산할지 결정하는 방식을 말해요.

대표적인 예시는 다음과 같아요.

  • 능동 헬스체킹(active health checking): 업스트림 호스트를 헬스체크해서 사용 불가 호스트를 반영해 프라이어리티와 로컬리티의 가중치를 조정할 수 있어요.
  • 존 인지 라우팅(zone aware routing): 컨트롤 플레인에서 프라이어리티를 명시적으로 설정하지 않고도 더 가까운 엔드포인트를 선호하게 할 수 있어요.
  • 로드밸런싱 알고리즘: Envoy는 제공된 가중치로 어떤 호스트를 선택할지 정하는 여러 알고리즘을 쓸 수 있어요.

글로벌 로드밸런싱(Global load balancing)

글로벌 로드밸런싱은 호스트 사이의 로드를 어떻게 분산할지를 단일 글로벌 권한(authority)이 결정하는 방식을 말해요. Envoy의 경우 컨트롤 플레인이 그 역할을 하는데, 프라이어리티, 로컬리티 가중치, 엔드포인트 가중치, 엔드포인트 헬스 같은 여러 파라미터를 지정해 개별 엔드포인트에 걸리는 로드를 조정할 수 있어요.

간단한 예로, 컨트롤 플레인이 네트워크 토폴로지에 따라 호스트를 서로 다른 프라이어리티에 배정해 네트워크 홉이 적은 호스트를 우선하게 할 수 있어요. 이는 존 인지 라우팅과 비슷하지만 컨트롤 플레인이 처리한다는 점이 달라요. 컨트롤 플레인에서 하는 이점은 존 인지 라우팅의 몇 가지 제약을 피할 수 있다는 거예요.

더 정교한 구성은 리소스 사용량을 컨트롤 플레인에 보고해서, 엔드포인트나 로컬리티의 가중치를 조정하고 바쁜 호스트보다 유휴 호스트에 새 요청을 보내도록 유도할 수도 있어요.

분산과 글로벌의 결합

대부분의 정교한 배포는 두 범주의 기능을 모두 활용해요. 예를 들어 글로벌 로드밸런싱으로 상위 레벨의 라우팅 프라이어리티와 가중치를 정의하고, 분산 로드밸런싱으로 시스템 변화(예: 능동 헬스체킹)에 즉시 반응하게 할 수 있어요. 이 둘을 결합하면 트래픽 흐름을 매크로 레벨에서 제어할 수 있는 글로벌 권한과, 마이크로 레벨에서 변화에 반응하는 개별 프록시라는 양쪽의 장점을 모두 얻을 수 있어요.

더 알아보기