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

这样 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 阻塞主线程的问题,就有可能运用到一些图形计算,机器学习领域了

回到顶部