기본적으로 node.js는 하나의 코어만 사용을 합니다.
그러나 트래픽이 증가하고 처리할 데이터 양이 많아 짐에 따라 코어 수 많큼 프로세스를
띄워 처리를 분산해야 한다.
이때 코어 수 많큼 프로세스를 띄워주는게 cluster 이다.
위 처럼 cluster 를 구성하게 되면 세션간 데이터가 공유되지 않는 문제가 생긴다.
이를 해결하기 위한 방법이 redis 이다.
redis 에는 node-redis 와 ioredis 를 가장 많이 사용한다.
ioredis 가 조금 더 최근에 나온것이며 더 많은 기능을 지원한다고 한다.
위에 대한 정보는 검색해 보고 적절한 것을 사용하면 될것 같다.
참고 링크 1 : http://bcho.tistory.com/1099
참고 링크 2 : http://www.maengis.com/studio/75
참고 링크 3 : http://rocksea.tistory.com/190
참고 링크 4 : http://mudchobo.tistory.com/539
관련 멀티 포트 지원 샘플정보입니다.
서버 정보에 포트 여러개 설정
manifest.json에 포트 추가
manifest.json 파일에 port는 3001번에 label은 -api-인 포트를 추가한다.
{
"static": {
"port": "8983",
"labels": ["web-ui"]
}, "rest": {
"port": "8984",
"labels": ["api"]
}
}
경로와 handler간 routing을 담당하는 route.js 새로운 mapping인 apiendpoints를 추가한다. 경로는 ‘/’로 동일하지만, 하나는 getentry handler, 다른 하나는 api handler로 맵핑된다.
var handler = require('./handlers');
exports.webendpoints = [
{ method: 'GET', path: '/', config: handler.getentry },
{ method: 'GET', path: '/{filename*}', config:handler.get}];
exports.apiendpoints = [
{ method: 'GET', path: '/', config: handler.api }];
handler를 위한 handlers.js
api handler를 추가한다. client폴더의 secapi.html을 읽어서 return하는 것이다.
exports.getentry = {
handler: {
file: function (request) {
return '../client/html/' + 'fistapi.html';
}
}
};
exports.get = {
handler: {
file: function (request) {
return '../client/html/' + request.params.filename;
}
}
};
exports.api = {
handler: {
file: function (request) {
return '../client/html/' + 'secapi.html';
}
}
};
서버 구동을 담당하는 fistapi.js 서버 설정과 routing 설정을 읽어 hapi 서버 object에 등록한 후 서버를 구동한다. 여기서는 connection시 label에 따라 routing을 다르게 설정하도록 하였다. 이처럼 포트와 라우팅을 쉽게 변경할 수 있다.
var Hapi = require('hapi');
var Route = require('./route');
var config = require('./manifest.json');
var server= new Hsecapi.Server();
for(var i in config){
server.connection(config[i]);
}
server.select("web-ui").route(Route.webendpoints);
server.select("api").route(Route.apiendpoints);
server.start(function() {
console.log('Server started');
});
테스트
client\html 폴더에 secapi.html을 만든다. 내용은 간단히 아래와 같이 작성한다.
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
API TEST
</body>
</html>
server 폴더에서 node . 명령을 통해 서버를 구동하고 크롬 브라우저에서 http://127.0.0.1:8983/ 주소와 http://127.0.0.1:8984/ 주소로 접근해 본다. 8983으로 접근하면 client폴더의 fistapi.html이 읽히고, 8984로 접근하면 secapi.html이 읽힌다.
댓글0