주문 : 1. nginx 2. 광택 3. haproxy 4. 웹 서버?


50

나는 사람들이 이들을 모두 한꺼번에 결합하는 것이 좋습니다.

nginx :

  • SSL : 예
  • 압축 : 예
  • 캐시 : 예
  • 백엔드 풀 : 예

광택:

  • SSL : 아니요 (터널?)
  • 압축 :?
  • 캐시 : 예 (기본 기능)
  • 백엔드 풀 : 예

haproxy :

  • SSL : 아니요 (터널)
  • 압축 :?
  • 캐시 : 아니오
  • 백엔드 풀 : 예 (기본 기능)

기본 기능 중 일부를 주요 웹 서버 앞에 연결하려는 의도가 있습니까?

너무 많은 데몬이 비슷한 일을 함께 처리하는 것은 매우 약한 것 같습니다.

배포 및 주문 기본 설정은 무엇이며 왜됩니까?


1
Varnish는 이제 SSL을 지원합니다 : blog.exceliance.fr/2012/09/10/…
MiniQuark

4
HAProxy라고 말해야합니까?
Luis Lobo Borobia

Nginx는 모든 것을 가지고있는 것처럼 보이므로 nginx를 사용한다고 말하고 싶습니다.
오세와 Seun

답변:


60

간단히 ..

HaProxy 는 시장에서 가장 뛰어난 오픈 소스로드 밸런서입니다.
바니시 는 시장에서 가장 좋은 오픈 소스 정적 파일 캐시입니다.
Nginx 는 시장에서 최고의 오픈 소스 웹 서버입니다.

(물론 이것은 저와 다른 많은 사람들의 의견입니다)

그러나 일반적으로 모든 쿼리가 전체 스택을 통과하는 것은 아닙니다.

모든 것이 haproxy와 nginx / multiple nginx를 거치게됩니다.
유일한 차이점은 정적 요청에 대한 니스를 "볼트"한다는 것입니다.

  • 모든 요청은 중복 및 처리량에 대해로드 밸런싱됩니다 (확장 가능한 중복성).
  • 정적 파일에 대한 요청은 먼저 니스 캐시에 도달합니다 (좋습니다, 빠릅니다).
  • 모든 동적 요청이 백엔드로 직접 전달됩니다 (위대한, 바니시는 사용되지 않습니다)

전반적으로이 모델은 확장 가능하고 성장하는 아키텍처에 적합합니다 (여러 서버가없는 경우 haproxy 제외)

이것이 도움이되기를 바랍니다 : D

참고 : 실제로 SSL 쿼리에 파운드를 소개합니다 : D
SSL 요청을 해독하고 표준 요청을 백엔드 스택에 전달하는 서버를 가질 수 있습니다 : D (전체 스택을 더 빠르고 간단하게 실행합니다)


1
매우 흥미 롭습니다. 특히 해독 서버에 관한 부분입니다. +1
Gerry

멋진 답변입니다. 무엇이 모든 것 앞에 있는지 궁금합니다. HAProxy 또는 Nginx입니까?
John

2
@John : [클라이언트-> HAProxy-> 니스-> Nginx-> 정적 컨텐츠] 또는 [클라이언트-> HAProxy-> Nginx (옵션)-> Application Server (동적 컨텐츠)]
MiniQuark

2
왜 정적 캐시하고 동적 서비스를 제공 하시겠습니까? Nginx는 정적 파일을 제공하는 데 매우 빠릅니다. 정적에 [ HAProxy-> Nginx] 및 [ HAProxy-> Nginx-> Varnish-> Apache] 와 같은 스택을 사용 하여 동적에 캐시를 구현하는 것을 선호합니다 . 전용 종료 노드로 언급 한대로로드 밸런서에서 SSL을 종료합니다.
Steve Buzonas

33

머리말

2016 년 업데이트. 상황이 발전하고 모든 서버가 개선되고 있으며 모두 SSL을 지원하며 웹이 그 어느 때보 다 놀랍습니다.

언급되지 않은 한, 다음은 비즈니스 및 신생 전문가를 대상으로하며 수천에서 수백만 명의 사용자를 지원합니다.

이러한 도구와 아키텍처에는 많은 사용자 / 하드웨어 / 돈이 필요합니다. 홈 랩에서 시도하거나 블로그를 운영 할 수는 있지만 그다지 의미가 없습니다.

일반적으로 간단하게 유지하고 싶다는 것을 기억하십시오 . 추가 된 모든 미들웨어는 유지해야 할 또 다른 중요한 미들웨어입니다. 추가 할 것이없고 제거 할 것이없는 경우에는 완벽이 달성되지 않습니다.

일반적이고 흥미로운 배포

HAProxy (밸런싱) + nginx (php 애플리케이션 + 캐싱)

웹 서버는 PHP를 실행하는 nginx입니다. nginx가 이미 있으면 캐싱 및 리디렉션을 처리 할 수도 있습니다.

HAProxy ---> nginx-php
A       ---> nginx-php
P       ---> nginx-php
r       ---> nginx-php
o       ---> nginx-php
x       ---> nginx-php
y       ---> nginx-php

HAProxy (밸런싱) + Varnish (캐싱) + Tomcat (Java 애플리케이션)

HAProxy는 요청 URI (*. jpg * .css * .js)를 기반으로 니스로 리디렉션 할 수 있습니다.

HAProxy ---> tomcat
A       ---> tomcat
        ---> tomcat
P       ---> tomcat <----+
r       ---> tomcat <---+|
o                       ||
x       ---> varnish <--+|
y       ---> varnish <---+

HAProxy (밸런싱) + nginx (호스트에 대한 SSL 및 캐싱) + 웹 서버 (애플리케이션)

모두가 SSL을 말해야하지만 웹 서버는 SSL을 사용하지 않습니다 ( 특히 EC2를 통해 진행되는 개인 사용자 정보와의 HAProxy-WebServer 링크 ). 로컬 nginx를 추가하면 SSL을 호스트로 가져올 수 있습니다. nginx가 있으면 캐싱 및 URL 재 작성도 수행 할 수 있습니다.

참고 : 포트 리디렉션 443 : 8080이 발생하지만 기능의 일부는 아닙니다. 포트 리디렉션을 수행 할 필요가 없습니다. 로드 밸런서는 웹 서버 : 8080과 직접 통신 할 수 있습니다.

          (nginx + webserver on same host)
HAProxy ---> nginx:443 -> webserver:8080
A       ---> nginx:443 -> webserver:8080
P       ---> nginx:443 -> webserver:8080
r       ---> nginx:443 -> webserver:8080
o       ---> nginx:443 -> webserver:8080
x       ---> nginx:443 -> webserver:8080
y       ---> nginx:443 -> webserver:8080

미들웨어

HAProxy : 로드 밸런서

주요 특징 :

  • 로드 밸런싱 (TCP, HTTP, HTTPS)
  • 다중 알고리즘 (라운드 로빈, 소스 IP, 헤더)
  • 세션 지속성
  • SSL 종료

비슷한 대안 : nginx를 (로드 밸런서로 구성 다목적 웹 서버)
다른 대안 : 클라우드 (아마존의 ELB, 구글 부하 분산), 하드웨어 (F5, 포티넷, 시트릭스 넷 스케일러), 기타 및 전세계 (DNS, 애니, CloudFlare)

HAProxy는 무엇을하고 언제 사용합니까?
로드 밸런싱이 필요할 때마다. HAProxy는 솔루션으로 이동합니다.

를 제외하고 당신이 사용할 수있는 능력이 없거나 아주 싼 또는 빠른 & 더러운 할 때, 당신은 ELB를 사용할 수 있습니다 : D를

은행 / 정부 / 유사에서 까다로운 요구 사항 (전용 인프라, 신뢰할 수있는 장애 조치, 방화벽 2 계층, 감사 항목, SLA 1 분당 중단 시간 x %를 모두 지불해야하는 SLA)이있는 자체 데이터 센터를 사용해야하는 경우를 제외하고 30 대의 응용 프로그램 서버가있는 랙 위에 2 F5를 넣을 수 있습니다.

100k HTTP (S) [및 다중 사이트]를 지나고 싶은 경우를 제외하고 는 (전역)로드 밸런싱 계층 (cloudflare, DNS, 애니 캐스트) 이있는 다중 HAProxy가 있어야 합니다. 이론적으로, 글로벌 밸런서는 웹 서버와 직접 통신하여 HAProxy를 버릴 수 있습니다. 그러나 일반적으로 HAProxy를 데이터 센터의 공개 진입 점으로 유지하고 호스트간에 균형을 맞추고 분산을 최소화하도록 고급 옵션을 조정해야합니다.

개인적 의견 : 작고 포함 된 오픈 소스 프로젝트로서 전적으로 하나의 진정한 목적에 전념합니다. 가장 쉬운 구성 (ONE 파일) 중에서 가장 유용하고 신뢰할 수있는 오픈 소스 소프트웨어는 제 인생에서 찾아 왔습니다.

Nginx : 아파치하지 않는 Apache

주요 특징 :

  • 웹 서버 HTTP 또는 HTTPS
  • CGI / PHP / 다른 응용 프로그램에서 응용 프로그램 실행
  • URL 리디렉션 / 다시 쓰기
  • 액세스 제어
  • HTTP 헤더 조작
  • 캐싱
  • 리버스 프록시

비슷한 대안 : Apache, Lighttpd, Tomcat, Gunicorn ...

Apache는 사실상 요청 된 웹 서버 httpd.conf아키텍처 위에 수십 개의 모듈과 수천 줄의 거대한 클러스터로 알려진 사실상의 웹 서버 였습니다. nginx는 더 적은 모듈로 (약간) 더 간단한 구성과 더 나은 코어 아키텍처로 모든 것을 다시 실행합니다.

nginx는 무엇을하며 언제 사용해야합니까?
웹 서버는 응용 프로그램을 실행하기위한 것입니다. 응용 프로그램이 nginx에서 실행되도록 개발되면 이미 nginx가 있으며 모든 기능을 사용할 수도 있습니다.

응용 프로그램이 nginx에서 실행되도록 설계되지 않았고 nginx가 스택 (Java shop 누구?)에서 찾을 수없는 경우를 제외하고 는 nginx에 작은 점이 있습니다. 웹 서버 기능은 현재 웹 서버에있을 가능성이 높으며 다른 작업은 적절한 전용 도구 (HAProxy / Varnish / CDN)로 처리하는 것이 좋습니다.

제외 웹 서버 / 응용 프로그램 기능을 결여 될 때, 하드 구성 및 / 또는 당신이 오히려 (사람을 Gunicorn?) 그것을보고보다 일을 죽을 것, 당신은 URL을 수행 할 (즉, 로컬로 각 노드에서) 앞에서 nginx를 넣을 수 있습니다 다시 쓰기, 301 리디렉션 전송, 액세스 제어 시행, SSL 암호화 제공 및 HTTP 헤더 편집 기능 [이것은 웹 서버에서 예상되는 기능입니다]

바니시 : 캐싱 서버

주요 특징 :

  • 캐싱
  • 고급 캐싱
  • 세밀한 캐싱
  • 캐싱

비슷한 대안 : nginx (캐싱 서버로 구성 가능한 다목적 웹 서버)
다른 대안 : CDN (Akamai, Amazon CloudFront, CloudFlare), 하드웨어 (F5, Fortinet, Citrix Netscaler)

바니시는 무엇을하고 언제 사용해야합니까?
캐싱 만 수행하고 캐싱 만 수행합니다. 일반적으로 노력할 가치가 없으며 시간 낭비입니다. 대신 CDN을 사용해보십시오. 캐싱은 웹 사이트를 실행할 때 마지막으로주의해야합니다.

사진이나 비디오에 대한 웹 사이트를 독점적으로 운영하는 경우를 제외하고 는 CDN을 철저히 조사하고 캐싱에 대해 진지하게 고려해야합니다.

를 제외하고 당신이 당신의 자신의 데이터 센터에서 자신의 하드웨어를 사용하도록 강요하고 (CDN이 옵션을 선택하지 않습니다)와 웹 서버가 정적 파일 (도움이되지 않는 많은 웹 서버를 추가) 제공에 끔찍한 때 다음 니스는 최후의 수단이다.

정적이면서도 복잡한 동적으로 생성 된 콘텐츠가있는 사이트를 제외하고 (다음 단락 참조) Varnish는 웹 서버에서 많은 처리 능력을 절약 할 수 있습니다.

2016 년 정적 캐싱이 과대 평가되었습니다

캐싱은 거의 구성이 필요없고 돈이 없으며 시간이 없습니다. CloudFlare 또는 CloudFront 또는 Akamai 또는 MaxCDN을 구독하십시오. 이 라인을 작성하는 데 걸리는 시간은 캐싱을 설정하는 데 걸리는 시간보다 길고, 보유중인 맥주는 CloudFlare 중앙값 구독보다 비쌉니다.

이러한 모든 서비스는 정적 * .css * .js * .png 이상에서 즉시 작동합니다. 실제로, 이들은 주로 Cache-ControlHTTP 헤더 의 지시문을 준수합니다. 캐싱의 첫 번째 단계는 웹 서버가 올바른 캐시 지시문을 보내도록 구성하는 것입니다. 어떤 CDN, 어떤 바니시, 어떤 브라우저가 중간에 있는지는 중요하지 않습니다.

성능 고려 사항

바니시는 일반 웹 서버가 블로그에서 고양이 그림을 제공하기 위해 질식했을 때 만들어졌습니다. 오늘날 현대적인 멀티 스레드 비동기식 버즈 워드 기반 웹 서버의 단일 인스턴스는 새끼 고양이를 전국에 안정적으로 제공 할 수 있습니다. 의례 sendfile().

내가 작업 한 마지막 프로젝트에 대한 빠른 성능 테스트를 수행했습니다. 단일 Tomcat 인스턴스는 HTTP를 통해 초당 12,000-35,000 개의 정적 파일을 제공 할 수 있습니다 (다양한 HTTP / 클라이언트 연결 수로 20B에서 12kB까지 파일 테스트). 지속적 아웃 바운드 트래픽은 2.4Gb / s를 초과합니다. 프로덕션에는 1Gb / s 인터페이스 만 있습니다. 하드웨어보다 더 잘할 수 없으며 바니시를 시도해도 아무런 의미가 없습니다.

복잡한 동적 컨텐츠 변경 캐싱

CDN 및 캐싱 서버는 일반적으로와 같은 매개 변수를 사용하여 URL을 ?article=1843무시하고 세션 쿠키 또는 인증 된 사용자의 요청을 무시하며 application/jsonfrom을 포함한 대부분의 MIME 유형을 무시합니다 /api/article/1843/info. 사용 가능한 구성 옵션이 있지만 일반적으로 "모두"또는 "아무 것도 아닌"세분화되지는 않습니다.

니스는 캐싱 ​​가능한 것과 그렇지 않은 것을 정의하기 위해 사용자 지정 복잡한 규칙 (VCL 참조)을 가질 수 있습니다. 이 규칙은 URI, 헤더 및 현재 사용자 세션 쿠키 및 MIME 유형 및 컨텐츠를 모두 기준으로 특정 컨텐츠를 캐시 할 수 있습니다. 이는 매우 특정한로드 패턴에 대해 웹 서버에서 많은 처리 능력을 절약 할 수 있습니다. 그때는 니스가 편리하고 굉장합니다.

결론

이 모든 조각을 언제, 언제 사용해야하는지, 어떻게 함께 맞추는 지 이해하는 데 시간이 걸렸습니다. 이것이 당신을 도울 수 있기를 바랍니다.

꽤 길다 (6 시간 쓰기. OMG! : O). 어쩌면 나는 그것에 관한 블로그 나 책을 시작해야 할 것입니다. 재미있는 사실 : 답의 길이에는 제한이없는 것 같습니다.


5
답변 길이에는 제한이 있지만 답변을 얻으려면 몇 권의 책을 더 써야합니다.
Michael Hampton

2
캐싱에 관해 언급 할 가치가있는 한 가지 점은 응용 프로그램을 제어 할 수 없을 때 사이트의 성능을 향상시키는 강력한 방법입니다. 특히 응용 프로그램에 실제로 어리석은 캐시 헤더가있는 경우 (엔터프라이즈 앱은 누구입니까?) 인증 된 리소스를 훨씬 더 잘 알고 있어야합니다.
Cameron Kerr

@ user5994461 블로그를 읽고 싶습니다. 놀라운 답변!
oxalorg

20

3 가지 도구가 공통 기능을 공유한다는 것은 사실입니다. 대부분의 설정은 3 중 2를 임의로 조합하여 사용할 수 있습니다. 주요 목적에 따라 다릅니다. 애플리케이션 서버가 정적 인 속도가 빠르다는 것을 알고 있다면 캐싱을 희생하는 것이 일반적입니다 (예 : nginx). 수백 또는 수백 대의 서버를 설치하고 서버를 최대한 활용하거나 문제 해결에 신경 쓰지 않는다면 일부로드 밸런싱 기능을 희생하는 것이 일반적입니다. 어디에서나 많은 구성 요소로 분산 응용 프로그램을 실행하려는 경우 일부 웹 서버 기능을 희생하는 것이 일반적입니다. 아직도, 어떤 사람들은 그들 모두와 함께 재미있는 농장을 짓습니다.

당신은 당신이 3 개의 단단한 제품에 대해 이야기하고 있다는 것을 명심해야합니다. 일반적으로로드 밸런싱 할 필요는 없습니다. 전면 SSL이 필요한 경우 먼저 리버스 프록시로 nginx를 사용하는 것이 좋습니다. 필요하지 않으면 앞면의 광택이 좋습니다. 그런 다음 haproxy를 사용하여 앱의로드 밸런싱을 수행 할 수 있습니다. 때로는 파일 유형이나 경로에 따라 haproxy 자체에서 다른 서버 팜으로 전환하려고 할 수도 있습니다.

때로는 심한 DDoS 공격으로부터 보호해야하며, 전면의 haproxy가 다른 것보다 더 적합합니다.

일반적으로, 당신은 당신의 선택 사이에 타협이 무엇인지에 대해 걱정해서는 안됩니다. 현재 필요에 따라 최고의 유연성을 얻을 수 있도록 조립 방법을 선택해야합니다. 여러 개를 여러 번 쌓아도 필요에 따라 때로는 맞을 수 있습니다.

도움이되기를 바랍니다!


1
HAProxy의 경우 +1-작성자가 서버 결함에 대한 질문에 응답합니다. 감사.
Joel K

Arenstar :이 도구 중 하나를 작성 했습니까? Willy Tarreau는 HAProxy의 주요 개발자입니다.
Joel K

이 윌리에 감사드립니다. 위의 질문에 Arenstar에게 대답했습니다.
John

2
HAProxy의 현재 개발 코드에는 이제 SSL이 포함되어 있습니다.
Joel K

14

다른 모든 답변은 2010 년 이전이므로 업데이트 된 비교가 추가됩니다.

니 진스

  • 전체 웹 서버, 다른 기능도 사용할 수 있습니다. 예 : HTTP 압축
  • SSL 지원
  • Nginx는 처음부터 가볍게 설계되었습니다.
  • 바니시 캐싱 성능
  • HAProxy로드 밸런싱 성능에 근접

광택

  • 복잡한 캐싱 시나리오 및 응용 프로그램과의 통합에 가장 적합합니다.
  • 최고의 정적 파일 캐시
  • SSL 지원 안함
  • 메모리 및 CPU 먹는 사람

하프시

  • 하드웨어로드 밸런서와 비슷한 최첨단로드 밸런싱 기능을위한 최고의로드 밸런서
  • SSL은 1.5.0부터 지원됩니다
  • 더 간단하고 http 구현이없는 tcp 프록시이기 때문에 버그가 적고 빠릅니다.

따라서 가장 좋은 방법은 모든 것을 적절한 순서로 구현하는 것 같습니다.

그러나 일반적으로 캐싱, 리버스 프록시,로드 밸런싱 등 리소스 사용률에 대한 오버 헤드가 거의없는 모두에서 평균 이상의 성능을 얻을 때 Nginx가 가장 좋습니다 . 그리고 SSL 및 전체 웹 서버 기능이 있습니다.


6

바니시는로드 밸런싱을 지원합니다 : http://www.varnish-cache.org/trac/wiki/LoadBalancing

Nginx는로드 밸런싱을 지원합니다 : http://wiki.nginx.org/NginxHttpUpstreamModule

나는 단순히 varnish + stunnel로 이것을 구성 할 것입니다. 다른 이유로 nginx가 필요한 경우 nginx + varnish를 사용합니다. nginx가 SSL 연결을 수락하고이를 바니시하도록 프록시 한 다음 http를 통해 nginx와 바니시 대화를 할 수 있습니다.

일부 사람들은 nginx (또는 Apache)를 혼합에 넣을 수 있습니다. 왜냐하면 이들은 Varnish보다 다소 일반적인 도구이기 때문입니다. 예를 들어 프록시 계층에서 컨텐츠를 변환하려면 (예 : XDV, 아파치 필터 등) Varnish가 자체적으로 수행 할 수 없기 때문에이 중 하나가 필요합니다. 일부 사람들은 이러한 도구의 구성에 더 익숙하기 때문에 Varnish를 간단한 캐시로 사용하고로드 밸런서로 Apache / nginx / haproxy에 이미 익숙하기 때문에 다른 계층에서로드 밸런싱을 수행하는 것이 더 쉽습니다.


맞다- "백엔드 풀"은이 세 가지 모두에로드 밸런싱 기능이 있음을 나타냅니다. 초기 조사에서 HAProxy는 가장 조정 가능한로드 밸런싱 옵션을 가지고있는 것으로 보입니다.
Joel K

로드 밸런싱 도구로 특수 제작되었으므로 합리적으로 들립니다. 반면, Varnish의로드 밸런싱 기능은 매우 우수하며이 믹스에서 하나의 프로세스를 제거하면 대기 시간이 줄고 구성이 단순 해집니다.
Larsks
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.