JavaScript NodeJS 的一些疑惑,我来跑题了

sanvi · 2013年07月22日 · 最后由 ruby_sky 回复于 2013年07月23日 · 2821 次阅读

Nodejs 貌似启动就是单核单进程的

那么我启动 node 后,需要用多核怎么办?

我看外面好像是凯多个 instance,用 nginx 在实现绑定

那么又有疑问了,他们是相对独立的吗?那么如何做数据共享呢?

还有种方式是 fork 多个子进程(是子进程吗?),然后绑定到同一个端口上,那么他们的数据是如何共享的?

假设我有 NodeA,NodeB,NodeC3 个进程都绑定在同一个端口 3000 上

那么 NodeA 里面有个 Array,NodeB 和 NodeC 知道吗?

那么如果客户端访问 3000,是访问有 NodeA,NodeB,NodeC3 其中哪一个

你所谓的数据共享是什么意思?把数据放到 redis 里面不就行了吗?

想做负载均衡两种办法 1, nginx 每个子进程开监听一个端口 2, cluster(比 fork 要简单,不用自己写逻辑)

用 cluster , 数据可以在 master 进程里面做共享(不过不是什么好办法), 可以选择用存储做共享 用 cluster 的话负载是抢先式, worker 谁抢到了谁服务 , 理论上是均衡的。

多核多线程 相互独立,某个线程崩溃随时重启。 数据共享 当然是数据库,其他的缓存,session 这些全部用分布式缓存系统(memcache)或文件系统(redis)共享。 是独立进程,分别绑定到不同端口,比如:3000,3001,3002 数据共享用 分布式系统存储,貌似又说了一遍 客户端访问到前端 Nginx ,Nginx 来根据策略做负载均衡

#4 楼 @winnie 比如我一个 array 放内存的话,需要放 redis 其他 node 才能使用对吧

#3 楼 @kevinxu cluster 其实都是相对独立的,那么我只能通过 redis 这些来进行存储,那比如像 socket 这些能存进 redis 吗

http://nodejs.org/api/cluster.html 可以用 activity Monitor 观察下 CPU 的使用情况,不过看起来感觉怪怪的,是多个 CPU 轮流交替。多核的表示没怎么用过。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号