[REDIS] 어떻게 간단한 익스프레스 응용 프로그램과 함께 Node.js를 클러스터를 사용합니까?
REDIS어떻게 간단한 익스프레스 응용 프로그램과 함께 Node.js를 클러스터를 사용합니까?
- 나는 레디 스 DB의 데이터를 당긴 (50 개 항목) 및 로컬 호스트에 그것을 던져하는 간단한 응용 프로그램을 만들었습니다. 내가 ApacheBench했다 (C = 100, N = 50,000) 나는 듀얼 코어 T2080에 반 괜찮은 150 개 요청 / 초를 얻고 @ 1.73GHz (제 6 요 노트북),하지만 시저의 사용은 매우으로 실망 표시 :
하나의 코어 노드 디자인에 따라 인 사용,하지만 난 Node.js를 클러스터를 사용할 수 있는지 나는 거의, 어쩌면 더 ~ 300 내 요청 / 초를 두 배로 할 수 있다고 생각한다. 나는 꽤 주위에 바이올린을하지만 아래에 나열되어 내 응용 프로그램과 함께 사용하기 위해 여기에 주어진 코드를 삽입하는 방법을 알아낼 수 없었다 :
var
express = require( 'express' ),
app = express.createServer(),
redis = require( 'redis' ).createClient();
app.configure( function() {
app.set( 'view options', { layout: false } );
app.set( 'view engine', 'jade' );
app.set( 'views', __dirname + '/views' );
app.use( express.bodyParser() );
} );
function log( what ) { console.log( what ); }
app.get( '/', function( req, res ) {
redis.lrange( 'items', 0, 50, function( err, items ) {
if( err ) { log( err ); } else {
res.render( 'index', { items: items } );
}
});
});
app.listen( 8080 );
나는 또한 응용 프로그램은 I / O 집약적 (안 CPU를 많이 사용하는 스레드-A-GOGO 같은 클러스터보다 더 나은 선택을 한 것)임을 강조하고 싶다.
이 아웃 파악에 도움이 싶어요.
해결법
-
==============================
1.사실, 당신의 작업은 정말 아니다 / O 바인딩 :이 옥 기반의 동적 페이지 생성의 비용으로 인해 구속 CPU입니다. 나는 당신의 옥 템플릿의 복잡성을 생각하지만, 심지어 간단한 템플릿, HTML 페이지를 생성하는 비용이 없습니다.
사실, 당신의 작업은 정말 아니다 / O 바인딩 :이 옥 기반의 동적 페이지 생성의 비용으로 인해 구속 CPU입니다. 나는 당신의 옥 템플릿의 복잡성을 생각하지만, 심지어 간단한 템플릿, HTML 페이지를 생성하는 비용이 없습니다.
내 테스트를 위해 나는이 템플릿을 사용 :
html(lang="en") head title Example body h1 Jade - node template engine #container ul#users each user in items li User:#{user}
나는 레디 스에있는 항목의 키에 100 더미 문자열을 추가했다.
내 상자에서, 나는 475 REQ를 얻을 수 / (이 듀얼 코어 상자에 50 %의 CPU 소비를 의미) 100 % Node.js를 CPU를이야. 의 교체하자 :
res.render( 'index', { items: items } );
으로:
res.send( '<html lang="en"><head><title>Example</title></head><body><h1>Jade - node template engine</h1><div id="container"><ul id="users"><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li><li>User:NOTHING</li></ul></div></body></html>' );
이제, 벤치 마크의 결과가 가까운 2700 REQ하는 것입니다 / S. 그래서 병목 현상으로 인해 HTML 페이지의 서식에 분명하다.
이 상황에서 클러스터 패키지를 사용하는 것은 좋은 아이디어이며, 그것은 간단합니다. 다음과 같이 코드를 수정할 수 있습니다 :
var cluster = require('cluster') if ( cluster.isMaster ) { for ( var i=0; i<2; ++i ) cluster.fork(); } else { var express = require( 'express' ), app = express.createServer(), redis = require( 'redis' ).createClient(); app.configure( function() { app.set( 'view options', { layout: false } ); app.set( 'view engine', 'jade' ); app.set( 'views', __dirname + '/views' ); app.use( express.bodyParser() ); }); function log( what ) { console.log( what ); } app.get( '/', function( req, res ) { redis.lrange( 'items', 0, 50, function( err, items ) { if( err ) { log( err ); } else { res.render( 'index', { items: items } ); } }); }); app.listen( 8080 ); }
이제 기준의 결과가 근접 750 REQ 인 / 100 % CPU 소비 S (초기 475 REQ / s와 비교되는).
from https://stackoverflow.com/questions/10663809/how-do-i-use-node-js-clusters-with-my-simple-express-app by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 DB와 같은 뭔가가 있지만, RAM의 크기에 제한되지 않는다? [닫은] (0) | 2020.01.04 |
---|---|
[REDIS] 자바위한 최고의 레디 스 라이브러리 [마감] (0) | 2020.01.04 |
[REDIS] 방법 레디 스 인스턴스 버전을 확인하려면? (0) | 2020.01.04 |
[REDIS] 어떻게 레디 스 서버를 실행 유지 (0) | 2020.01.04 |
[REDIS] Logstash와 elasticsearch 사이에서 데이터 브로커 / 메시징 시스템과 같은 레디 스 대 RabbitMQ (0) | 2020.01.04 |