Node.js 성능을 향상시키는 방법 요약

php中世界最好的语言
풀어 주다: 2018-04-19 10:37:24
원래의
1356명이 탐색했습니다.

이번에는 Node.js의 성능을 향상시키는 방법과 Node.js의 성능을 향상시키기 위한 Notes에 대해 요약해 보겠습니다. 실제 사례를 살펴보겠습니다.

Node.js는 단일 스레드 비차단 I/O로 수천 개의 동시 작업을 지원할 수 있습니다. 이는 NGINX가 C10K 문제를 해결하는 것과 정확히 같은 방식입니다. Node.js는 효율적인 성능과 개발 효율성으로 유명합니다.

1. 역방향 프록시 서버 구현

Node.js는 대부분의 애플리케이션 서버보다 더 쉽게 많은 양의 네트워크 트래픽을 처리할 수 있지만 이는 Node.js가 수행하도록 설계된 것이 아닙니다.

트래픽이 많은 사이트가 있는 경우 성능을 향상시키는 첫 번째 단계는 Node.js 앞에 역방향 프록시 서버를 배치하는 것입니다. 이를 통해 Node.js 서버가 네트워크에 직접 노출되는 것을 방지하고 로드 밸런싱 및 정적 파일 캐싱을 위해 여러 애플리케이션 서버를 유연하게 사용할 수 있습니다.

NGINX를 기존 서버 앞에서 역방향 프록시로 사용합니다. NGINX의 핵심 애플리케이션으로 전 세계 수천 개의 사이트에서 사용되었습니다.

NGINX를 역방향 프록시 서버로 사용하면 다음과 같은 이점이 있습니다.

단순화된 권한 처리 및 포트 할당

정적 리소스를 보다 효율적으로 처리

Node.js 충돌 상황 처리 개선

DoS 공격의 영향 완화

참고: 이 글에서는 Ubuntu 14.04나 CentOS 환경에서 NGINX를 리버스 프록시 서버로 사용하는 방법을 설명하고 있으며, Node.js 앞에서 NGINX를 리버스 프록시 서버로 사용하는 것이 효과적입니다.

2. 정적 파일 캐싱

트래픽이 증가함에 따라 노드 기반 서버는 압박감을 느끼기 시작합니다. 이때 다음 두 가지 작업을 수행할 수 있습니다.

더 많은 Node.js 서버를 사용하세요.

여러 서버 간의 부하 분산

이는 실제로 매우 간단합니다. NGINX는 처음부터 역방향 프록시 서버로 구현되어 있어 캐싱 및 로드 밸런싱이 쉽습니다.

Modulus 웹사이트에는 NGINX를 Node.js 역방향 프록시 서버로 사용할 때의 성능 향상을 소개하는 유용한 기사가 있습니다. Node.js만 사용하세요 당시 작성자의 웹사이트는 초당 900개의 요청을 처리할 수 있었습니다. NGINX를 역방향 프록시 서버로 사용하여 정적 파일을 처리하면 웹사이트에서 초당 1600개 이상을 처리할 수 있습니다. 요청하면 성능이 거의 두 배 향상됩니다.

다음은 위에서 언급한 성능을 향상시키기 위한 웹사이트의 구성 코드입니다:

nginx
server {
listen 80;
server_name static-test-47242.onmodulus.net;
root /mnt/app;
index index.html index.htm;
loction /static/ {
try_files $uri $uri/ =404;
}
location /api/ {
proxy_pass http://node-test-45750.onmodulus.net;
}
로그인 후 복사

3. Node.js 로드 밸런싱 구현

최종 목표 — Node.js는 여러 애플리케이션 서버를 실행하고 이들 간에 로드 균형을 조정합니다.

Node.js는 브라우저 측 JavaScript 및 서버 측 Node.js를 통과할 수 있기 때문에 Node.js에서 로드 밸런싱을 구현하기가 어렵습니다. json은 데이터 상호 작용에 사용됩니다. 즉, 동일한 클라이언트가 특정 애플리케이션 서버에 반복적으로 액세스할 수 있으며, 여러 애플리케이션 서버 간에 세션을 공유하는 것도 어렵습니다.

NGINX가 상태 비저장 로드 밸런싱을 구현하는 방법:

라운드 로빈. 새로운 요청은 목록의 다음 서버로 이동합니다

연결 수가 가장 적은 서버로 새로운 요청이 전달됩니다

IP 해시 클라이언트 IP

의 해시 값을 기반으로 서버를 지정합니다. IP 해시만이 클라이언트 요청을 동일한 서버에 안정적으로 프록시하는 방법으로 Node.js 애플리케이션 서버에 이점을 줄 수 있습니다.

4. 프록시 WebSocket 연결

모든 버전의 HTTP는 클라이언트가 서버에 적극적으로 요청하도록 설계되었으며 WebSocket을 사용하면 서버가 클라이언트에 메시지를 적극적으로 푸시할 수 있습니다.

WebSocket 프로토콜은 클라이언트와 서버 간의 안정적인 상호 작용을 더 쉽게 만드는 동시에 더 짧은 상호 작용 대기 시간을 제공합니다. 전이중 통신이 필요한 경우, 즉 클라이언트와 서버 모두 필요할 때 적극적으로 메시지 요청을 시작한 다음 WebSocket을 사용할 수 있습니다.

WebSocket 프로토콜에는 탄탄한 JavaScript 인터페이스가 있으므로 기본적으로 Node.js를 애플리케이션 서버로 사용하는 데에도 적합합니다. 연결 수가 증가함에 따라 정적 파일 캐싱 및 로드 밸런싱을 위해 클라이언트 및 Node.js 서버에서 NGINX를 프록시로 사용하는 것이 합리적입니다.

5. SSL/TLS 및 HTTP/2 구현

점점 더 많은 웹사이트에서 SSL/TLS를 사용하여 정보 교환의 보안을 보장합니다. 웹사이트에 SSL/TLS를 추가할지 여부도 고려할 수 있지만 추가하기로 결정한 경우 NGINX에서는 이를 지원하는 두 가지 방법이 있습니다.

NGINX를 SSL/TLS 역방향 프록시로 사용할 수 있습니다. 여기서 Node.js 서버는 해독된 요청을 사용하고 암호화되지 않은 콘텐츠를 NGINX에 반환합니다.

HTTP/2를 사용하면 SSL/TLS로 인한 성능 오버헤드를 상쇄할 수 있습니다. NGINX는 HTTP/2를 지원하므로 Node.js 서버를 변경하지 않고도 HTTP/2와 SSL을 모두 사용하여 요청을 프록시할 수 있습니다.

구현 단계에서는 NGINX 구성 파일에서 SPDY 또는 HTTP/2를 사용하여 Node.js 구성 파일의 URL을 업데이트해야 합니다. 연결을 최적화하세요. HTTP/2 지원을 추가한다는 것은 HTTP/2를 지원하는 브라우저가 새로운 프로토콜을 사용하여 애플리케이션과 상호 작용할 수 있다는 것을 의미하며, 이전 브라우저는 계속해서 HTTP/1.x를 사용합니다.

이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 도서:



위 내용은 Node.js 성능을 향상시키는 방법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿