公司在用egg, 有几个问题比较困扰.
发布于 6 年前 作者 xiaozhongliu 7978 次预览 最后一次回复是 6 年前 来自 问答
egg总体来说挺好用的, 我们也内部开发了一些插件和中间件.
但一直有这些问题有些困扰:
1.本地调试比较麻烦: 使用的官方的vscode ts的配置, 但启动慢并且如下的断点会停两次, 总共要花将近20秒真正准备好.
2.单进程貌似还没有正式支持吧, 这样在容器化环境里面多起了对我们来说不必要的worker等进程.
3.我们用的ts, 有时候想直接跳过去查看egg成员的源码很不方便, 不知道有没有计划用ts重写.
4.有些默认功能想定制还是比较头疼, 比如日志模块需要做大的修改, 文档上对此说明不详细, 需要看源码.
20 回复
@waitingsong 感谢回答。但。。。 1.你说的我知道,我截图的文件是不知道从哪冒出来的,无法操作,不知道别人有没有碰到过。 2.说的是多进程,我需要单进程。egg很早开始做单进程了,但还没有正式做好吧。 3.我用的官方ts教程里的配置。 4.开源项目维护不容易,但egg确实有的东西有些难定制,要去用上层的框架,心虚啊。
昨天开始实验nest了,有惊喜,比如: 文档友好(日志那个看了几分钟就知道怎么写自己的logger了),比想象中简约,参数验证方式和我之前自己捣鼓的一样,用了我喜欢的jest做测试,用typescript写起来很顺畅。
@xiaozhongliu https://docs.nestjs.cn/ 中文文档,希望有帮助
@zuohuadong 昨天下午开始读文档搭了一下架子, 有个问题请教一下: 已经写好了自己的Logger, 请问在Interceptor里面怎么注入Logger依赖, 或者有文档可以直达最好: https://github.com/xiaozhongliu/nest-api-seed/blob/master/src/framework/logger.module.ts 文档还没怎么读, 毕竟后面平时搬砖忙.
@xiaozhongliu https://github.com/notadd/next 我们以前的项目有参考
@xiaozhongliu https://github.com/nest-cloud/nestcloud/tree/master/packages/logger 新项目看这个
Egg 的定位本来就是
框架的框架,你有自定义需求的时候,要不就 PR ,要不就写插件,要不就用现成的上层框架。单进程应该在 10 月左右吧,我们内部现在正在做 Serverless 化,等验证通过后就会放出来。其实现在就算是多进程,也没大关系吧,我们内部 docker 化的用 4 个 workers 也很久了,不会有什么资源浪费的问题。
本地断点启动慢的问题,可以二分排查下,不一定是 egg 这一层慢,前面的 TS 转译,vscode 的 inspect 都有可能的,要具体分析才知道。
@zuohuadong Logger不能被注入到GlobalInterceptor, Interceptor挂在Controller上就ok了. https://github.com/nestjs/nest/issues/1916
@atian25 单进程这个可以这么想: 相同的服务能力, 一个pod内4个worker和4个单进程的pod对比, 应该是更多pod更优, 可以分摊到更多机器中去. 比如如果集群的机器在同城多区, 那么就很可能分散到更多的区. 像本地调试, 直接起单进程更高效吧.
断点调试: 刚开始断点会在那个奇怪的文件停两次, 这个貌似没办法…
@xiaozhongliu 我倾向于一个pod 适量多个 worker。 pod 实例过多带来的不稳定因素也是增加的。
@waitingsong 不稳定因素比如?可以举一些egg多worker比k8s管理pod/container更靠谱的场景. 容器内应用职责应该简单化,最理想的状态就是只关注业务逻辑,其他的东西交给基础设施,这也是云原生所追求的并且已经走了很远。 我相信也是众多需要单进程的呼声促进了egg社区推出单进程。
@xiaozhongliu 断点那个,你可以去掉 inspect-brk
云原生化和单进程我们是有在搞了,但要随着蚂蚁的云原生进程,快了。其实现在单进程已经支持了,只是周边的工具还没。
@atian25 ok调试那个我试试,感谢。 单进程只在issue里找到些蛛丝马迹,按里面的方法是能启动,但记得是请求接口没有反应。
@atian25 从前天下午开始接触nest,利用下班时间,一边看文档一边已经把自己的logger和请求日志切面做出来了,真的是好用。 https://github.com/xiaozhongliu/nest-api-seed/blob/master/src/_interceptor/logging.interceptor.ts
没用过midway,不知道midway是否也能一样顺手?另外虽然egg是基础框架,但应该要一样方便定制,如果有这个目标应该是合理的吧。如果egg这方便好用的话我应该会继续去用midway。后面打算我们的devops系统用rest。业务项目还是继续egg,不然技术栈太多,开发哥哥要哭。
@xiaozhongliu 灵活扩展性本来就是 egg 的特性之一,个人认为 egg 的扩展性还是不错的,具体是什么方面的你可以提 issue 讨论。
@xiaozhongliu 这是我的
.vscode/launch.json文件,你看看能用否@waitingsong 为啥要 preLaunchTask?内置有 ts-node 开发期提速的。
@atian25 启动 tsc --watch 模式 。 当时eggjs不支持修改ts文件后自动更新功能。现在应该是有了吧。 这个配置我用起来比较顺手,贴主可以试试看是配置的问题还是其它的。
!