5살인 것처럼 Nginx를 사용한 로드 밸런싱에 대해 설명하세요.

5살인 것처럼 Nginx를 사용한 로드 밸런싱에 대해 설명하세요.

업스트림 서버를 사용하여 Nginx를 로드 밸런서로 구성하는 방법에 대한 DIY 게시물과 튜토리얼을 많이 찾았습니다.

upstream backend  {
  ip_hash;
  server 1.2.3.4;
  server 1.2.3.5;
  server 1.2.3.6;
}

server {
  location / {
    proxy_pass  http://backend;
  }
}

하지만 이 아키텍처를 구성하는 한 제가 찾을 수 있는 것은 그 정도입니다. 현재 저는 3개의 백엔드 VPS 서버에 Rails 애플리케이션을 배포하고 있으며 HTTP 서버에 Unicorn을 사용하고 있습니다. 로드 밸런싱 서버에도 레일즈 애플리케이션과 유니콘과 함께 Ruby를 설치해야 합니까? 각 업스트림 서버에 Nginx를 설치해야 합니까? 그렇다면 어떻게 구성합니까? 아키텍처에 Varnish와 같은 것을 도입하면 어디로 가나요? 로드 밸런서 앞인가요, 아니면 각 백엔드인가요?

다음은 모든 것을 정리하는 방법을 시각적으로 보여줍니다.

                                       +---> backend1 <---+
                                       |                  |
[requests] <---> [Nginx load-balancer]-+---> backend2 <---+-[Database server]
                                       |                  |
                                       +---> backend3 <---+

답변1

짧은 답변:

Nginx실제로는 작업이 하나 뿐이며 해당 작업은 들어오는 요청을 수락하고 이를 백엔드 서버에 전달하는 것입니다.

따라서 프런트엔드 서버는 실행만 필요 nginx하고 백엔드 서버는 rails. 말이 되나요?

이제 백엔드와 프런트엔드가 모두 동일한 서버에서 실행되고 있다면 물론 거기에도 설치해야 하지만 다이어그램에서는 그렇지 않다고 생각합니다.

와 같은 HTTP 캐싱 소프트웨어를 도입하면 과 Varnish사이에 위치하며 백엔드 서버에서도 실행될 가능성이 높습니다. 따라서 요청은 다음 경로를 따릅니다.NginxRails

Nqinx -> Varnish -> Rails

답변2

Rails로 작업할 때 nginx여러 역할을 수행하는 데 사용할 수 있으며, 대부분 HTTP 로드 밸런서 또는 앱 서버 프런트엔드로 사용됩니다. 귀하의 설정은 일반적으로 작동하지만 더 높은 수준의 트래픽으로 성장함에 따라 확장 문제가 발생할 수 있습니다.

설명대로 소수의 VPS 서버로 작업할 때 하나의 nginx 인스턴스는 들어오는 트래픽에 대한 기본 HTTP 로드 밸런서이자 Rails 앱 서버의 낮은 수준 책임을 오프로드하는 프런트엔드 역할을 할 수 있습니다(서비스 제공). 정적 파일, URL 재작성/리디렉션 등).

nginx는 많은 리소스 없이 수천 개의 동시 연결을 처리할 수 있는 반면, Unicorn Rails 앱 서버는 일반적으로 소수의 동시 연결만 서비스할 수 있습니다. 더 많이 확장할수록 더 많은 로드 밸런서/프런트 엔드 nginx 인스턴스(및 DNS 라운드 로빈 또는 기타 메커니즘과 같은 인스턴스 간의 로드 밸런싱 방법)가 필요합니다.

Amazon AWS 또는 기타 보다 성숙한 호스팅 플랫폼을 사용하는 경우 ELB(Elastic Load Balancing)와 같은 서비스를 기본 웹 로드 밸런서로 사용하는 경우가 많습니다. 각 앱 서버는 nginx/Unicorn을 실행하며 nginx를 각 Unicorn의 처리 부하를 줄이기 위한 프런트 엔드로 활용합니다. 각 서버 앞에 대용량 ELB가 있기 때문에 확장이 훨씬 쉽습니다.

관련 정보