原生支持worker之后,会不会出现这样的web框架
发布于 6 年前 作者 axetroy 3001 次浏览 来自 问答

这样 Controller 是由 worker 动态执行的

在任何时候修改 Controller 都可以不用重新启动服务器

之前写一个 Typescript 的项目,代码量一多,功能一多,重启服务器会花很多时间 主要花在编译,连接多个 db 等上面

每一个请求都在 worker 中执行 Controller,即便有未捕捉的异常,也不会 kill 掉整个进程, 各个请求相互隔离

1.png

不知道这样可行不可行,不知道性能如何?

甚至使用 fastgci 像 PHP 那样,配置 Nginx, 指定 index.js 文件即可启动服务, 而不用常驻内存

10 回复

架构合理,可以试试

之前因为自己服务器一直空着,遂做过一个功能类似的,准备用来搞免费的共享主机。当时没有原生的worker,仅仅用了vm做代码隔离。现在说来,感觉可以试一试。

来自酷炫的 CNodeMD

这样子和以前的 tomcat 多线程模型有啥区别。。。来一个请求开一个 worker 么

@hyj1991

很相似的模型,所以探讨下可行性。因为worker是 用后即焚, 那是不是就没有充分利用到事件循环的优势

@axetroy 异步 I/O 优势就是高并发下服务器资源开销低,线程/进程模型大量创建时服务器资源开销会更大一些,所以一般会有 pool 的限制,而 pool 下其实又是人为设置了并发上限。 所以我觉得 worker 来处理某些 controller 下的 CPU 密集运算是不错的选择,但是拿来一个请求开一个 worker 就有点得不偿失了,而且现在 Tomcat 也来支持 NIO 了,如果是这样的 node web 框架感觉有点在开倒车哦

作为eventloop的补充就好啦,你们想多了,目前只是体验,还远

应该是补充,要不然就又跑回去了,不符合现在设计思想了。

@hyj1991

应该没有人为设置并发上限吧?Master 是 Accept 连接的,假设可以 Accept 10 万 个连接,但是 worker 池只有 1024 个 worker.

而这 1024 个 Worker 不断地去消费 10 万个连接,理论上来说,最多同时消费 1024 个,但是服务器本身能接收的链接数并没有变。

原有的: 1 个 eventloop 接收连接,只有 1 个主线程干活, 开启 cluster 也是几个 讨论的这个: 1 个 eventloop 接收连接,有 N 个 worker 干活

@i5ting 狼叔说的是,现阶段只是体验。

以后成熟的话,弥补密集型 CPU 阻塞主线程的问题,就有可能运用到一些图形计算,机器学习领域了

回到顶部