赞,那 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 什么事情了,单进程模式不需要 agent,不需要 cluster-client。如果是为了在容器中运行,就当做 agent 不存在好了,不需要引入新的架构实现吧
如果 egg 为容器化部署操心的话, 应该列出几种部署容器的方式,再根据每种方式来做设计。
个人意见,仅提供实际部署方案参考。好像不需要引入新设计。
我们观点是一致的,我上面想提的是,可以把现在用到 agent 的一些插件拿出来 Review,看看:
- 对于用到了 agentWorker 的,一般来说都是之前的模块和功能,通过提供一层 adapter 让它可以在同一个进程中运行
- 对于完全设计在容器环境运行的单进程模式框架和应用,不考虑 agent 的概念即可
我们目前的业务跑在k8s里面,1c1g,agent感觉没实际意义,worker k8s就能实现进程守护。“进程的模式”这个功能大概什么时候能上?
我们目前的业务跑在k8s里面,1c1g,agent感觉没实际意义,worker k8s就能实现进程守护。“进程的模式”这个功能大概什么时候能上?
你说的这个正是我们要做的,大概近几个月就会做。但是需要社区也兼容这种方案,现在还不知道会有哪些问题。
我们目前的业务跑在k8s里面,1c1g,agent感觉没实际意义,worker k8s就能实现进程守护。“进程的模式”这个功能大概什么时候能上?
你说的这个正是我们要做的,�大概近几个月就会做。但是需要社区也兼容这种方案,现在还不知道会有哪些问题。
“单进程模式”下,是不是就能使用clinic进行代码性能分析了?目前clinic貌似不太好接入egg应用。
@JsonMa 是的,现在接什么都不好直接接。移除进程管理相关的, 我觉着egg库源码和配套工具代码都可以减少至少50%以上.....
@dead-horse 农历新年前出 poc。
期待。
在k8s里跑egg非常需要单进程模式。
当前egg都不适合放在k8s里跑,也不适合做replica
插件秘钥能支持通过环境变量传入吗?
你直接在 config.default.js 里面读取 env 不就行了
提议
用 startServer 来替换 startCluster,并向下兼容。单进程还使用 cluster 确实有点怪,但是 egg-cluster 里包含了大量的能力,如启动 http 服务,异常退出,messenger 支持等功能。现在有部分通过 egg.start 来实现,但是 http 和 start 基本是耦合的,方法中很难再插入逻辑进去。
实现步骤
这个还准备做吗?k8里面单进程是刚需啊,都2020年了
这个还准备做吗?k8里面单进程是刚需啊,都2020年了
+1
现在版本的 egg 是不是还不支持脱离 egg-cluster 来运行,就是单进程的模式启动?
+1
其实现在是可以单进程启动的,只要require('egg').start()就可以了,但是貌似这个api还没有正式发布
require('egg').start(). 不行,它只是启动了 egg,但是没有启动 http server,需要自己再启动下 http server
require('egg').start(). 不行,它只是启动了 egg,但是没有启动 http server,需要自己再启动下 http server
这个能说说具体怎么做吗?不是太明白
require('egg').start().then(app => {
const port = 80;
app.listen(port);
});
require('egg').start().then(app => { const port = 80; app.listen(port); });
这个试了下,修改了index.js,启动的时候还是启动了多个work
还有其他地方要改吗?
require('egg').start().then(app => { const port = 80; app.listen(port); });这个试了下,修改了index.js,启动的时候还是启动了多个work
还有其他地方要改吗?
不要用egg-script,直接用node index.js
require('egg').start().then(app => { const port = 80; app.listen(port); });这个试了下,修改了index.js,启动的时候还是启动了多个work
还有其他地方要改吗?不要用egg-script,直接用node index.js
直接用node启动可以了,但是控制台输出提示
single process mode is still in experiment, please don't use it in production environment
那么现在单进程模式到底是否能用于生产?结合上面大佬的话
egg.start deprecate,当前 API 只实现了部分能力。
到底是实现了哪些能力?缺失了哪些能力?是否能明示一下
实在等不了官方的正式实现了
这周给一个非官方的示例
这周给一个非官方的示例
也就是说其实目前是已经有这个功能,只是没有正式demo和文档是么?
@gxcsoccer 下周回国
Most helpful comment
提议
用 startServer 来替换 startCluster,并向下兼容。单进程还使用 cluster 确实有点怪,但是 egg-cluster 里包含了大量的能力,如启动 http 服务,异常退出,messenger 支持等功能。现在有部分通过 egg.start 来实现,但是 http 和 start 基本是耦合的,方法中很难再插入逻辑进去。
实现步骤