我希望能用一个master生成若干childprocess,由master负责接收request,然后根据url路由到不同的childprocess进行处理(这是由于数据同步要求只能分派到固定的一个process进行处理),这显然无法用cluster解决。当然也可以让子进程侦听不同端口,由master转发request,但这样要引入额外间接层和开销。 是否有高手可以提供指导,不胜感激!
手一滑不知为何发了3遍,囧
你的 childprocess 要和 master 是不同的 thread 吗?
是的。事实上,每个childprocess对应我一个独立的数据库,独立进程对于架构的安全和灵活还是很重要的。
这本质上就是所谓的IPC问题(inter-process communication),成熟的解决方案就那几种,具体到nodejs平台上的选择貌似就3种,pipe/socket/unix domain socket,无论怎么折腾,若想把req,res直接传递到子进程,那是门都没有。就楼主的情况,选择unix domain socket吧,它的开销远低于连接数据库的开销,在考虑转发对性能的影响前,先考虑下改善数据库的访问速度吧。
可能有人不知道domain socket是什么玩意,其实就是server监听unix的某个path,与传统的socket区别就是domain socket没有额外的网络数据包开销,直接是内存数据的复制。
http.createServer(function(req,res){
//............
}).listen('/var/tmp/test.sock');
var opts={
socketPath:'/var/tmp/test.sock'
// more options...
}
var req=http.request(opts)
首先感谢shiedman的指导
目前看来传递socket应该是可取的方向,不过考虑到增加了socket路由等一系列的复杂性,所以我打算退而求其次,多开几个http server和端口,利用反向代理来解决问题了