분류 기타

부하 분산(load balancing)에 대한 초보자 가이드

컨텐츠 정보

  • 조회 382 (작성일 )

본문

부하 분산은 그 순간에 가장 필요한 곳에 리소스를 분산합니다.


개인용 컴퓨터가 어렸을 때 한 가정에는 한 대 (또는 그 이하)의 컴퓨터가 있을 가능성이 큽니다. 아이들은 낮에 게임을 하고 부모님은 회계나 프로그래밍을 하거나 저녁에 BBS를 돌아 다녔습니다. 하지만 오늘날 한 대의 컴퓨터 가정을 상상해보십시오. 그러면 그것이 야기 할 갈등을 예측할 수 있습니다. 모두가 동시에 컴퓨터를 사용하기를 원할 것이며 키보드와 마우스가 충분하지 않을 것입니다.


이것은 컴퓨터가 점점 더 보편화됨에 따라 IT 산업에서 일어나고 있는 것과 같은 시나리오입니다. 서비스 및 서버에 대한 수요가 과도하게 사용되어 중단 될 수 있을 정도로 증가했습니다. 다행히도 이제 수요를 처리하는 데 도움이 되는 로드 밸런싱 개념이 있습니다.


로드 밸런싱이란 무엇입니까? 


부하 분산은 관리하는 리소스가 효율적으로 분산되도록 하기 위해 수행하는 모든 작업을 나타내는 일반적인 용어입니다. 웹 서버의 시스템 관리자에게  로드 밸런싱은 일반적으로 웹 서버 소프트웨어 (예 : Nginx)가 들어오는 방문자의 급증을 처리하기에 충분한 작업자 노드로 구성되어 있는지 확인하는 것을 의미합니다.

즉, 사이트가 갑자기 인기를 얻고 방문자 수가 몇 분 만에 4 배로 증가 할 경우 서버를 실행하는 소프트웨어는 서비스 저하를 인지하지 않고 각 방문자에게 응답 할 수 있어야 합니다. 단순한 사이트의 경우 이는 한 줄 구성 옵션만큼 간단하지만 동적 콘텐츠와 각 사용자에 대한 여러 데이터베이스 쿼리가 있는 복잡한 사이트의 경우 심각한 문제가 될 수 있습니다.


이 문제는 클라우드 컴퓨팅으로 해결되어야 하지만 웹 앱이 예상치 못한 급증을 경험할 때 확장에 실패하는 것은 불가능하지 않습니다.


로드 밸런싱과 관련하여 명심해야 할 중요한 사항은 리소스를 효율적으로 배포하는 것이 반드시 균등하게 배포하는 것을 의미하지는 않는다는 것입니다. 모든 작업에 항상 사용 가능한 모든 리소스가 필요한 것은 아닙니다. 스마트로드 밸런싱 전략은 해당 리소스가 필요할 때만 사용자와 작업에 리소스를 제공합니다. 이것은 종종 IT 인프라의 책임이 아니라 애플리케이션 개발자의 도메인입니다. 비동기식 응용 프로그램은 커피 휴식 시간에 컴퓨터를 떠나는 사용자가 서버에서 귀중한 리소스를 차지하지 않도록 하는 데 매우 중요합니다.


로드 밸런싱은 어떻게 작동합니까? 


로드 밸런싱은 여러 계산 노드에 워크로드를 분산하여 병목 현상을 방지합니다. 이러한 노드는 데이터 센터의 물리적 서버, 클라우드의 컨테이너, 엣지 컴퓨팅을 위해 전략적으로 배치 된 서버, 복잡한 애플리케이션 프레임 워크의 개별 JVM (Java Virtual Machine) 또는 단일 Linux 서버에서 실행되는 데몬 일 수 있습니다.


아이디어는 큰 문제를 작은 작업으로 나누고 각 작업을 전용 컴퓨터에 할당하는 것입니다. 예를 들어 사용자가 로그인해야 하는 웹 사이트의 경우 웹 사이트는 서버 A에서 호스팅 될 수 있지만 로그인 페이지 및 이와 함께 이동하는 모든 인증 조회는 서버 B에서 호스팅 될 수 있습니다. 계정에 로그인 한 새 사용자는 사이트를 적극적으로 사용하는 다른 사용자의 리소스를 훔치지 않습니다.


클라우드 부하 분산 


클라우드 컴퓨팅은 컨테이너를 사용하므로 일반적으로 별개의 작업을 처리하기 위한 별도의 물리적 서버가 없습니다 (실제로는 많은 개별 서버가 있지만 하나의 계산 "두뇌"역할을 하기 위해 함께 클러스터링 됨).

대신 여러 컨테이너에서 "포드"가 생성됩니다. 사용자 또는 작업 로드로 인해 하나의 포드가 리소스 부족을 시작하면 동일한 포드가 생성됩니다. 포드는 스토리지 및 네트워크 리소스를 공유하고 각 포드는 생성 될 때 컴퓨팅 노드에 할당됩니다. 로드에 따라 필요에 따라 포드를 생성하거나 제거 할 수 있으므로 사용자 수에 관계없이 일관된 서비스 품질을 경험할 수 있습니다.


에지 컴퓨팅 


에지 컴퓨팅은 부하 분산시 물리적 세계를 고려합니다. 클라우드는 당연히 분산 시스템이지만 실제로 클라우드의 노드는 일반적으로 몇 개의 데이터 센터에 집중되어 있습니다. 사용자가 클라우드를 실행하는 데이터 센터에서 멀어 질수록 최적의 서비스를 위해 극복해야 하는 물리적 장벽이 커집니다. 광섬유 연결과 적절한 로드 밸런싱이 있더라도 3,000 마일 떨어진 서버의 응답 시간은 불과 300 마일 떨어진 서버의 응답 시간보다 더 큽니다.


에지 컴퓨팅은 지리적 분할을 연결하여 클라우드를 위한 일종의 위성 네트워크를 형성하기 위해 컴퓨팅 노드를 클라우드의 "에지"로 가져옵니다. 따라서 이는 또한 좋은 로드 밸런싱 노력에 기여합니다.


로드 밸런싱 알고리즘이란 무엇입니까? 


로드 밸런싱을 위한 많은 전략이 있으며 관련 기술과 요구 사항에 따라 복잡성이 다양합니다. 로드 밸런싱은 복잡 할 필요가 없으며 Kubernetes 또는 Keepalived와 같은 특수 소프트웨어를 사용하는 경우에도 처음부터 로드 밸런싱을 시작하는 것이 중요합니다.


자체적으로 간단한 예방 조치를 취하도록 애플리케이션을 설계 할 수 있을 때 로드 균형을 맞추기 위해 컨테이너에 의존하지 마십시오. 애플리케이션을 처음부터 모듈 식으로 사용하지 않도록 설계하면 영리한 네트워크 설계, 컨테이너 오케스트레이션 및 미래의 기술이 제공하는 모든 것을 통해 제공되는 로드 밸런싱 기회의 이점을 누릴 수 있습니다.


응용 프로그램 개발자 또는 네트워크 엔지니어로서의 노력을 안내 할 수 있는 몇 가지 인기 있는 알고리즘은 다음과 같습니다.


  • 작업을 서버에 순차적으로 할당합니다 (일반적으로 라운드 로빈이라고 함).
  • 현재 사용량이 가장 적은 서버에 작업을 할당합니다.
  • 응답 시간이 가장 좋은 서버에 작업을 할당합니다.
  • 무작위로 작업을 할당합니다.

예를 들어 특히 복잡한 작업을 할당 할 때 그룹에서 가장 강력한 서버에 유리하도록 이러한 원칙을 결합하거나 가중치를 적용 할 수 있습니다. 오케스트레이션은 일반적으로 관리자가 로드 밸런싱을 위한 완벽한 알고리즘이나 전략을 만들 필요가 없도록 사용됩니다. 때로는 사용할 로드 밸런싱 체계의 조합을 선택하는 것은 관리자에게 달려 있습니다.


예상치 못한 기대 


부하 분산은 모든 리소스가 네트워크에서 균등하게 사용되도록 하는 것이 아닙니다. 로드 밸런싱은 예기치 않은 상황이 발생하더라도 안정적인 사용자 경험을 보장하는 것입니다. 좋은 인프라는 컴퓨터 충돌, 애플리케이션 과부하, 네트워크 트래픽의 맹공격 및 사용자 오류를 견딜 수 있습니다. 서비스가 어떻게 복원 될 수 있는지 생각하고 처음부터 그에 따라 로드 밸런싱을 설계하십시오.


https://opensource.com/article/21/4/load-balancing