[AWS] ELB - Target Group: 로드밸런싱 알고리즘
AWS의 로드밸런서는 총 3가지 로드밸런싱 알고리즘을 제공한다.
로드밸런서 수준 설정은 아니고, Target Group 단위에서 관리된다.
nginx나 haproxy를 직접 쓰는 것과 비교하면 구성에 한계가 있긴 한데, 일반적인 상황에서는 대체로 충분하다.
라운드 로빈 (Round Robin)
대부분의 LB 시스템에서 기본값으로 간주되는 옵션이다.
무조건 공평하게 요청을 분산한다. 가중치 개념도 없다.
개별 API들의 처리 시간/소모 리소스가 엇비슷하고, 서버마다 처리 능력이 거의 같을 경우에 적합하다.
일반적인 웹서비스에는 대체로 적합하나, 규모가 일반적인 형태를 벗어나면 한계가 생긴다.
최소 미해결 요청 (leastconnection)
커넥션 유지 상태인 요청이 적은 서버에 우선적으로 라우팅을 하는 알고리즘이다.
요청마다 처리 시간의 차이가 현격하고, 요청의 처리시간이 길어질수록 서버 처리능력에 문제가 생기는 경우에 유용하다. 혹은 서버마다 스펙 자체가 달라서 처리능력이 다를 때도 쓸만하다.
내 경우에는 모델 서버를 서빙할 때 주로 사용했다.
AI 모델들은 보통 GPU 수준의 단일 병목 때문에 GPU 사용 시간이 길어질수록 처리량에 제동이 걸리고, 그만큼 물려있는 커넥션이 많을 것이기 때문이다.
가중치 랜덤과 이상 완화(Anomaly mitigation)
가중치 랜덤은 말 그대로 랜덤으로 분산한다는 것이다.
이걸 어디다 쓰냐 싶지만, 이상 완화라는 부가기능 때문에라도 쓸 가치가 제법 있다.

다른 로드밸런싱 알고리즘들은 기본적으로, 개별 API가 실패하든지 말든지 신경쓰지 않고 헬스체크만 살아있으면 정상이라고 판단하고 계속 라우팅한다.
하지만 이상 완화를 켜면 개별 API의 실패도 회색 실패(gray failures)로 분류하고, 회색 실패가 높은 서버의 우선순위를 낮춰서 분포하게 해준다.
내 경우에도 이게 꽤 효과적인 사례가 있었다. 개별 API의 타임아웃 발생률이 높아지면 어느정도 쉴 시간을 줘야 했기 때문이다.
참조
https://aws.amazon.com/ko/blogs/tech/networking-and-content-delivery-improving-availability-with-application-load-balancer-automatic-target-weights/
https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/load-balancer-target-groups.html