관련 권장사항: "node js tutorial"
"노드 서버 앞에 nginx가 없으면 뭔가 잘못하고 있는 것일 수 있습니다." - Bryan Hughes
Node.js는 다음과 같습니다. 가장 널리 사용되는 언어 - JavaScript로 서버측 애플리케이션을 구축하기 위한 최고의 도구입니다. Node.js는 웹 서버와 애플리케이션 서버 기능을 모두 제공하는 기능으로 인해 마이크로서비스 기반 개발 및 배포를 위한 핵심 도구로 간주됩니다.
백엔드 개발에서 Node.js는 Java 및 .NET을 대체하거나 확장할 수 있습니다.
Node.js는 단일 스레드 비차단 I/O로 수천 개의 동시 작업을 지원할 수 있습니다. 이는 NGINX가 C10K 문제를 해결하는 것과 정확히 같은 방식입니다. Node.js는 효율적인 성능과 개발 효율성으로 유명합니다.
그래서, 뭘 잘못했어요?
Node.js의 일부 결함으로 인해 Node.js 기반 시스템은 잠재적인 성능 문제 또는 심지어 충돌에 직면하게 됩니다. 이는 시스템 트래픽이 급격히 증가할 때 특히 두드러집니다. Node.js는 웹 애플리케이션 로직을 처리하는 데는 좋은 도구이지만 이미지, JavaScript 파일과 같은 정적 파일을 처리하는 데는 좋지 않으며 여러 서버 간의 로드 밸런싱에도 좋지 않습니다.
Node.js를 더 잘 사용하려면 정적 파일 캐싱, 프록싱, 로드 밸런싱, 클라이언트 연결 관리 등의 기능을 NGINX에 넘겨야 합니다.
다음은 Node.js의 성능을 향상하기 위한 몇 가지 제안 사항입니다.
역방향 프록시 서버 구현
정적 파일 캐시
다중 서버 부하 분산
프록시 WebSocket 연결
SSL/TLS 및 HTTP/2 구현
참고: 노드 개선 .js 애플리케이션 성능을 향상시키는 가장 빠른 방법은 멀티 코어 프로세서를 활용하도록 Node.js 파일을 수정하는 것입니다. 서버에서 멀티 코어 CPU를 최대한 활용하는 방법을 알아보려면 이 문서를 확인하세요.
대부분의 애플리케이션 서버에 비해 Node.js는 많은 양의 네트워크 트래픽을 쉽게 처리할 수 있지만 이는 Node.js 설계의 원래 의도가 아닙니다.
트래픽이 많은 사이트가 있는 경우 성능을 개선하기 위한 첫 번째 단계는 Node.js 앞에 역방향 프록시 서버를 배치하는 것입니다. 이를 통해 Node.js 서버가 네트워크에 직접 노출되는 것을 방지하고 로드 밸런싱 및 정적 파일 캐싱을 위해 여러 애플리케이션 서버를 유연하게 사용할 수 있습니다.
NGINX를 기존 서버 앞에서 역방향 프록시로 사용하세요. NGINX의 핵심 애플리케이션으로 전 세계 수천 개의 사이트에서 사용되었습니다.
다음은 NGINX를 역방향 프록시 서버로 사용하면 다음과 같은 이점이 있습니다.
간소화된 권한 처리 및 포트 할당
정적 리소스의 더 효율적인 처리
Node.js 충돌 상황의 더 나은 처리
DoS 공격의 영향 완화
참고: 이 문서에서는 Ubuntu 14.04 또는 CentOS 환경에서 NGINX를 역방향 프록시 서버로 사용하는 방법을 설명하며, Node.js 앞에서 NGINX를 역방향 프록시 서버로 사용하는 것이 효과적입니다. js.js.
트래픽이 증가함에 따라 노드 기반 서버가 압박을 받기 시작합니다. 이때 다음 두 가지를 수행할 수 있습니다.
1. 더 많은 Node.js 서버를 사용하세요.
2. 여러 서버 간의 로드 밸런싱
사실 매우 간단합니다. NGINX는 처음부터 리버스 프록시 서버로 구현되어 있어 캐싱 및 로드 밸런싱이 쉽습니다.
Modulus 웹사이트에는 NGINX를 Node.js 역방향 프록시 서버로 사용할 때의 성능 향상을 소개하는 유용한 기사가 있습니다. Node.js만 사용하여 작성자의 웹사이트는 초당 900개의 요청을 처리할 수 있습니다. NGINX를 역방향 프록시 서버로 사용하여 정적 파일을 처리한 후 웹 사이트는 초당 1,600개 이상의 요청을 처리할 수 있으며 이는 성능이 거의 두 배 증가합니다.
다음은 위에서 언급한 성능을 향상시키기 위한 웹사이트의 구성 코드입니다.
nginx
server { listen 80; server_name static-test-47242.onmodulus.net; root /mnt/app; index index.html index.htm; location /static/ { try_files $uri $uri/ =404; } location /api/ { proxy_pass http://node-test-45750.onmodulus.net; } }
궁극적 목표 - Node.js는 여러 애플리케이션 서버를 실행하고 이러한 서버에서 실행됩니다. 서버 간의 로드 균형을 조정합니다.
Node.js를 사용하면 브라우저 측 JavaScript와 서버 측 Node.js가 json을 통해 데이터와 상호 작용할 수 있기 때문에 Node.js로 로드 밸런싱을 구현하기가 어렵습니다. 즉, 동일한 클라이언트가 서버에서 특정 애플리케이션에 반복적으로 액세스할 수 있다는 의미입니다. 또한 여러 애플리케이션 서버 간에 세션을 공유하는 것도 어렵습니다.
NGINX는 무상태 로드 밸런싱을 구현합니다.
라운드 로빈. 새 요청은 목록의 다음 서버로 이동합니다.
최소 연결 수는 IP 해시의 해시 값을 기준으로 합니다. 클라이언트 IP 서버 지정
Node.js 애플리케이션 서버는 클라이언트 요청을 동일한 서버로 안정적으로 프록시할 수 있는 방법인 IP 해시에서만 이점을 얻을 수 있습니다.
모든 버전의 HTTP는 클라이언트가 서버에 적극적으로 요청하도록 설계되었으며 WebSocket을 사용하면 서버가 클라이언트에 메시지를 적극적으로 푸시할 수 있습니다.
WebSocket 프로토콜은 클라이언트와 서버 간의 안정적인 상호 작용을 더 쉽게 만드는 동시에 상호 작용 지연을 줄여줍니다. 전이중 통신이 필요한 경우, 즉 클라이언트와 서버 모두 필요할 때 적극적으로 메시지 요청을 시작한 다음 WebSocket을 사용할 수 있습니다.
WebSocket 프로토콜에는 탄탄한 JavaScript 인터페이스가 있으므로 Node.js를 애플리케이션 서버로 사용하는 데 기본적으로 적합합니다. 연결 수가 증가함에 따라 정적 파일 캐싱 및 로드 밸런싱을 위해 클라이언트 및 Node.js 서버에서 NGINX를 프록시로 사용하는 것이 합리적입니다.
정보 상호 작용의 보안을 보장하기 위해 SSL/TLS를 사용하는 웹사이트가 늘어나고 있습니다. 그렇게 하기로 결정하면 NGINX는 이를 지원하는 두 가지 방법이 있습니다.
NGINX를 SSL/TLS 역방향 프록시로 사용할 수 있으며 Node.js 서버는 해독된 요청을 사용하고 암호화되지 않은 콘텐츠를 NGINX에 반환합니다.
HTTP/2를 사용하면 SSL/TLS로 인한 성능 오버헤드를 상쇄할 수 있습니다. NGINX는 HTTP/2를 지원하므로 Node.js 서버를 변경하지 않고도 HTTP/2와 SSL 프록시 요청을 동시에 사용할 수 있습니다. .
구현 단계에서 Node.js 구성 파일의 URL을 업데이트하고 SPDY 또는 HTTP/2를 사용하여 NGINX 구성 파일의 연결을 최적화해야 합니다. HTTP/2 지원을 추가한다는 것은 HTTP/2를 지원하는 브라우저가 새로운 프로토콜을 사용하여 애플리케이션과 상호 작용할 수 있다는 것을 의미하며, 이전 브라우저는 계속해서 HTTP/1.x를 사용합니다.
이 블로그에서는 주로 NGINX와 Node.js의 혼합 사용에 관해 Node.js 애플리케이션의 성능을 향상시키는 몇 가지 주요 방법을 설명합니다. 역방향 프록시 역할을 하는 NGINX를 사용하면 정적 파일을 캐시하고, 로드 밸런싱을 수행하고, WebSocket 연결을 프록시하고, SSL/TLS 및 HTTP/2 프로토콜을 구성할 수 있습니다.
NGINX와 Node.js의 하이브리드는 마이크로 애플리케이션 서버를 생성하는 친숙한 방법으로 인식되며 Java 또는 Microsoft.NET 프로젝트와 같은 기존 SOA 기반 프로젝트를 유연하게 확장할 수도 있습니다. 이 문서는 Node.js 애플리케이션을 최적화하는 데 도움이 됩니다. Node.js를 사용하는 경우 NGINX와 함께 사용하는 것이 가장 좋습니다.
원작자: Floyd Smith
원본 링크: https://www.nginx.com/blog/5-performance-tips-for-node-js-applications/
번역 링크: https://blog. maxleap.cn/zh/archives/512
더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 학습 코스를 방문하세요! !
위 내용은 Node 애플리케이션 성능을 향상시키는 5가지 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!