还在为node运行于单进程而苦恼么?即便是node本身提供了cluster功能,或者在github和npm上有很多优秀的模块帮你做封装,但你仍然逃避不掉这些问题:
- 性能问题;
- 多进程worker的存活状态管理;
- 服务的平滑重启;
- 配置或者静态数据的动态reload.
我相信你完全有能力把这些事情做得很好。但在自己动手之前,为何不尝试一下node-cluster呢?
https://github.com/aleafs/node-cluster
node-cluster只有一个文件,区区500多行代码(包括注释),为你解决了上面的所有问题。利用node-cluster构建你的多进程服务非常简单:
在master进程中,你只需要5行代码:
var cluster = require('node-cluster');
var master = new cluster.Master();
master.register(8080, 'app.js');
master.dispatch();
在worker进程中,你只需要关心你的app逻辑即可。一个基于HTTP协议的典型例子如下:
var Http = require('http');
var cluster = require('node-cluster');
var admin = new cluster.Worker();
var server = Http.createServer(function (req, res) {
admin.transact();
res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'});
res.end('hello world');
admin.release();
});
admin.ready(function (socket) {
server.emit('connection', socket);
});
实际上,我设计node-cluster的初衷可不只是这点用途。糯米们都能发掘出哪些应用场景呢?