2012-04-20 3 views
3

우리 프로젝트는 node.js에 대한 TCP 패킷로드 밸런스를 수행해야합니다.Node.js로드 밸런싱을위한 Nginx 또는 LVS?

제안은 다음과 같습니다 (Nginx에 또는 LVS) + Keepalived + 노드 클러스터

enter image description here

질문 :

  1. TCP 서버에 높은 동시 클라이언트 연결을 오래 지속 할 필요가 . Nginx 또는 LVS 중 어느 것이 더 적합합니까?
  2. 마스터 서버의 노드 마스터에 대해 다른 우선 순위 수준을 할당해야합니다 (로컬 호스트 서버의 우선 순위는 원격 서버보다 높습니다). 어느 것이 이것을 할 수 있습니까, Nginx 또는 LVS?
  3. CPU 사용률이 더 낮고 처리량이 더 높은 Nginx 또는 LVS는 누구입니까?
  4. Nginx와 LVS 간의 성능 벤치마킹/기능 비교를위한 권장 문서는 무엇입니까?

마침내 우리의 제안이 합리적인지 궁금합니다. 선택할만한 다른 더 좋은 제안이나 구성 요소가 있습니까?

답변

3

정적 자산 서버에 nginx가 필요 없다고 가정합니다. 그렇지 않으면 LVS가 옵션이 아닙니다.

1) nginx는 타사 모듈을 통한 TCP 만 지원합니다. https://github.com/yaoweibin/nginx_tcp_proxy_module 웹 서버가 필요하지 않은 경우 LVS가 더 적합하다고 말하고 싶지만 # '답의 끝에 추가 설명이 표시됩니다.

2) LVS는 우선 순위를 지원하며 nginx는 우선 순위를 지원하지 않습니다.

3) 아마도 LVS : nginx는 사용자 영역의 LVS 커널입니다.

4) 거짓말, 저주받은 거짓말 및 벤치 마크. 장비에 부하를 시뮬레이션하고, 노드 클라이언트 스크립트를 작성하고, 설정을 파운드 화해야합니다.

우리는 아직 https://github.com/LearnBoost/up까지하지 생산과 앞에서 뒤로 모든 노드를가는보고있다, 그러나 우리는 다음과 같은 이유로이 경로 추구 :

1) 우리는 또한 우선 순위 요구 사항이 있습니다,하지만 그들은 정의입니다 동적으로 변경됩니다. 우리는 런타임에 우선 순위를 조정하고 노드를 프로그래밍하는 데 1 시간도 채 걸리지 않았습니다.

2) 우리는 많은 코드 업데이트를 배포하고 기존 클라이언트를 방해하지 않고이를 수행 할 수 있습니다. 원하는 모든 것을하기 위해 코드를 작성할 수 있기 때문에 새로운 연결을 처리하기 위해 새로운 프로세스를 시작하고 기존 연결이 모두 사라지면 이전 프로세스를 종료 할 수 있습니다.

3) 우리가보고자하는 측정 항목을 redis 서버로 밀어 넣기 때문에 모든 것을 볼 수 있습니다.

프로세스/서버별로 가장 성능이 좋은 것은 아니지만 프로그램 제어가 많은 이점이 있으며 그만큼 더 큰 중복성이 장점이므로 수평 확장 기능을 사용하면 마지막 비트를 쥐어 짜지 않을 것입니다. 스택 밖의 성능

많은 코드를 복사하여 붙여 넣을 수 있는지 직접 확인해 보았습니다.하지만 빠르게 코딩하고 있으며 대중에게 적당하지 않은 내용을 많이 포함하고 있습니다.