카테고리 없음

[모의 면접 준비] 로드밸런싱

nbcssw 2024. 10. 28. 17:28

로드밸런싱

  • 로드밸런싱은 트래픽을 여러 서버에 고르게 분배하는 기술입니다. 매우 많은 사용자들의 요청을 한 서버에서 처리하기에는 부담스러우니, 여러 서버로 분배해서 처리함으로써 서버의 부하를 낮추는 것입니다.
  • 여러 서버를 사용하기 때문에, 한 서버에 문제가 발생하더라도 로드밸런싱을 담당하는 로드밸런서가 트래픽을 다른 정상 작동하는 서버로 돌려서 서비스를 유지할 수 있습니다.
  • 나중에 사용자가 더 많아져서, 더 많은 트래픽을 처리해야하면 또 서버를 늘릴 수 있기 때문에 유연성도 좋아집니다.
  • 로드밸런서는 트래픽을 나눌 뿐만 아니라 주기적으로 서버의 상태를 확인해주는 헬스체크라는 기능 또한 가지고 있습니다.

로드밸런싱 알고리즘

  • 라운드 로빈
    • 요청을 순서대로 각 서버에 순서대로 분배해주는 방식입니다. 예를 들어서 A, B, C 세 서버가 있을 때, A → B → C → A … 이런 순서로 요청을 보냅니다.
    • 모든 서버에 같은 수의 요청이 전달되기 때문에, 서버의 성능이 비슷할 때 적합한 방식입니다.
    • 복잡한 조건이 없어 구현하기가 쉽고, 서버 수를 늘리기도 쉽습니다.
    • 서버의 성능이 다를 경우 불균형이 발생할 수 있습니다.
  • 가중치 기반 라운드 로빈
    • 서버의 성능이 다를 경우에, 서버의 성능에 따라 가중치를 부여해 더 좋은 서버에 더 많은 요청이 가도록 하는 방식입니다.
  • 최소 연결 방식
    • 현재 연결된 세션의 수가 가장 적은 서버에 요청을 보내는 방식입니다.
    • 연결 수만 고려하기 때문에, 각 요청의 처리에 걸리는 시간 등은 고려하지 않아 특정 서버에 과부하가 발생할 수 있습니다. 예를 들어, A는 자원이 적게 드는 연결 3개를 가지고 있고, B가 자원이 많이 드는 연결 1개를 가지고 있어도 B에게 새로운 요청을 보내는 상황이 발생할 수 있습니다.
  • 최소 응답 방식
    • 현재 응답 시간이 가장 짧은 서버로 요청을 보내는 방식입니다. 응답 시간이 짧다는 것은 곧 서버의 부하 상태가 낮다는 것을 의미하므로, 부하가 낮은 서버로 요청을 보낼 수 있습니다.
    • 하지만 각 서버의 응답 시간을 계속 모니터링해줘야 한다는 단점이 있습니다.

헬스체크

  • 로드밸런싱을 하기 위해선 서버가 현재 정상인지 비정상인지 확인해줘야 하는데, 이를 위한 과정이 바로 헬스체크입니다. 로드밸런서는 헬스체크를 통해 서버의 상태를 확인하고, 만약 비정상인 서버가 있다면 그 서버에는 트래픽을 보내지 않습니다.
  • 헬스체크 방식
    • HTTP 헬스체크: 서버의 특정 URL이나 엔드포인트에 HTTP(S) 요청을 보내고 서버가 예상 응답을 보내는지 확인합니다. 예상 응답이 오지 않으면 비정상으로 간주합니다.
    • TCP 헬스체크: 서버의 특정 포트에 TCP 연결을 시도하여 연결을 수락하는지 확인합니다. 연결이 거부되면 비정상으로 간주합니다.
    • ICMP 헬스체크: 서버에 핑 요청을 보내고 서버가 응답하는지 확인합니다. 응답이 없으면 비정상으로 간주합니다.