-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC] 增加单进程启动模式 #3180
Comments
健康检查的实现 #3161 |
赞,那 schedule 这些依赖 Agent 的怎么处理? |
就 schedule 来说的话,我认为采用 k8s 生态的话应该从应用中独立出来,独立调度。 其他还有啥强依赖 agent 吗? |
@killagu 感觉可以重新设计下分布式调度这块,这两个可以独立。现在的 schedule 可以做一层兼容。 |
watcher 和 development 也是基于 agent 的 |
这两个在生产模式也可以不用吧。看起来这三个在禁用 cluster 模式时,也可以同时关闭。 |
chair 那边我记得是有个 watcher 的扩展,用于做凤蝶模板的热更新的。 另外,多进程模型里面的通信模式,也是基于 cluster-client 的。 |
schedule 应该是运行在单独的离线环境,不关掉应该也警告下~ |
推模式应该要被干掉了。cluster-client 插件上要做一次整理,agent 和 worker 功能要统一。 并且 egg 也要修改为 worker 可以成为 cluster-client 中的 agent。 |
development 的 reload 可以考虑放到 egg-bin 去,不过现在工具层不好拿 config,拿到的那个感觉不一定准(虽然也够了) |
我觉得应该是把 agentWorker 和 appWorker 都在一个进程中启动,然后将之前的 IPC 逻辑抽象出来,增加一个进程内的实现。这样才能保证单进程运行和多进程运行的兼容性。同时对性能也不存在什么影响。 |
@dead-horse 这个就是类似 egg-mock 的方式。 上面讨论的应该是兼容之外的,插件原来的对 agent 的实践方式是不是有新的方式 |
其实就没有 agent 什么事情了,单进程模式不需要 agent,不需要 cluster-client。如果是为了在容器中运行,就当做 agent 不存在好了,不需要引入新的架构实现吧 |
|
如果 egg 为容器化部署操心的话, 应该列出几种部署容器的方式,再根据每种方式来做设计。 个人意见,仅提供实际部署方案参考。好像不需要引入新设计。 |
我们观点是一致的,我上面想提的是,可以把现在用到 agent 的一些插件拿出来 Review,看看:
|
我们目前的业务跑在k8s里面,1c1g,agent感觉没实际意义,worker k8s就能实现进程守护。“进程的模式”这个功能大概什么时候能上? |
你说的这个正是我们要做的,�大概近几个月就会做。但是需要社区也兼容这种方案,现在还不知道会有哪些问题。 |
“单进程模式”下,是不是就能使用clinic进行代码性能分析了?目前clinic貌似不太好接入egg应用。 |
@JsonMa 是的,现在接什么都不好直接接。移除进程管理相关的, 我觉着egg库源码和配套工具代码都可以减少至少50%以上..... |
@dead-horse 农历新年前出 poc。 |
期待。 |
#3430 可以初步看看了。 |
插件秘钥能支持通过环境变量传入吗? |
你直接在 config.default.js 里面读取 env 不就行了 |
提议 用 startServer 来替换 startCluster,并向下兼容。单进程还使用 cluster 确实有点怪,但是 egg-cluster 里包含了大量的能力,如启动 http 服务,异常退出,messenger 支持等功能。现在有部分通过 egg.start 来实现,但是 http 和 start 基本是耦合的,方法中很难再插入逻辑进去。 实现步骤
|
这个还准备做吗?k8里面单进程是刚需啊,都2020年了 |
+1 现在版本的 egg 是不是还不支持脱离 egg-cluster 来运行,就是单进程的模式启动? |
+1 |
require('egg').start(). 不行,它只是启动了 egg,但是没有启动 http server,需要自己再启动下 http server |
这个能说说具体怎么做吗?不是太明白 |
require('egg').start().then(app => {
const port = 80;
app.listen(port);
}); |
这个试了下,修改了index.js,启动的时候还是启动了多个work |
不要用egg-script,直接用node index.js |
直接用node启动可以了,但是控制台输出提示
那么现在单进程模式到底是否能用于生产?结合上面大佬的话
到底是实现了哪些能力?缺失了哪些能力?是否能明示一下 |
这周给一个非官方的示例 |
也就是说其实目前是已经有这个功能,只是没有正式demo和文档是么? |
@gxcsoccer 下周回国 |
请问目前进度怎样了 还在推进吗? |
这个能上生产了吗? |
我再问下,k8s 部署egg的正确打开方式是怎么样 |
问题最终解决方案是什么? |
就我们的实践来看,其实单进程的收益没有想象中的那么大。 eggjs/egg-cluster#100 这个 PR 会探索一种 work thread 的方式。 |
背景
在容器化之后,应用运维的能力更加强大,已经不需要在框架层去处理这么复杂的逻辑了。以单进程的模式启动,并配合健康检查已经能基本完成现有 cluster 的功能。从资源利用率上看,只需要给 node 分配 1C1G 的资源或更少。
改造内容
单进程还是以 master 作为入口,但是不走 cluster 逻辑,可以按照 app_worker.js 这个文件执行。
通过入参 --disable-cluster 来判断是 cluster 还是非 cluster
The text was updated successfully, but these errors were encountered: