掘金 AMA:听阿里 Node 基础框架 EggJS 的核心开发者--天猪讲 EggJS 和 Node 那些事

第十期 AMA,掘金团队请来了阿里 Node 基础框架 EggJS 的核心开发者 -- 天猪 作了为期三天的 Ask Me Anything (AMA) 活动(已结束)。前端

咱们在此精选了一些来自用户的提问及天猪的回答。node

关于天猪

社区小伙伴精选提问

Egg 的最大的亮点是什么? ─ @Lanwy

围观大佬,能够说下你以为 Egg 的最大的亮点是什么吗?😃只能说一点git

最大的亮点是定位吧,Egg 的定位是框架的框架,在 Koa 的基础上提供了一套加载规范,从而延伸出插件和上层框架的概念,达到生态共建和差别化定制的平衡点,助力不一样团队的架构师孵化出适合自身业务场景的上层框架。github

过多约束是否阻碍 egg 的大规模推广─ @托尼的夏天

egg 相比其余 node 框架,约束太多了,这是否阻碍了它的大规模推广web

首先,Egg 是很轻量的,它的约束其实不多,就寥寥几个扩展点,比起 sails loopback 等上层框架可谓极简了,它专一于提供这些上层框架的最核心的共性 - 一套加载器。你以为太多,多是咱们官网文档的问题,不少都是插件提供的,并无集成。面试

其次,Egg 并不太须要推广,它最初是为了支撑阿里内部各大 BU 之间的协做问题,涉及到各行各业,譬如电商,自媒体,游戏,金融等等千差万别的业务场景,所以咱们的定位是专一于作框架的框架。以下图所示express

另外,咱们这几我的一直都受益于开源,所以一开始的目标就肯定要开源出来。至于推广,老实说,不是咱们的 KPI。npm

hapi 和 egg 的差别在哪? ─ @chenchao

都是配置优先,请问,hapi和egg的差别在哪?在企业开发中,如何抉择?二者有没有哪些对比express凸显出来的劣势?编程

hapi 并无配置优先吧,它跟 Express,Koa 是差很少层次的,都在微框架这一层。Egg 是在它们之上加了一层 Loader 机制。通常咱们基于 Express 或 Koa 开发的时候,团队里面每每都会在上面封装一层业务框架,Egg 的定位就是抽象出这一层的一些通用能力,让你们基于同一套基础规则来封装上层业务框架,达成生态共享的状态。后端

Express 的局限性,恰好最近个人一本书中有总结了下,主要在于:

  • 只是对 Node 的 HTTP API 作了一层很薄的封装,暴露给开发者的 API 抽象程度不够,不便管控。
  • 中间件模型是线性的,管进无论出,只是处理了 req 进来那条链路,而没有管 res 出去那条。
  • 基于 Callback 的中间件模型,不可避免的受到回调地狱的影响。

egg的扩展中help.js和app.js哪一个更适合扩展工具方法? ─ @magican

egg 的扩展中 help.js 和 app.js 哪一个更适合扩展工具方法?就约定来讲适合 help,可是 help 是绑定到上下文的,就内存占用是否是 app 更好?

内存这个不要去过多考虑,基本上按你们的业务量级,不会有什么问题的。在咱们的定位里面,helper 是给到模板来作局部的 formatter 的。扩展方法,看你具体的场景,甚至能够放到 ctx.service.xxUtils

国内用node作后端的状况还多吗?职业发展要怎么规划?─ @gea

天猪大佬,如今国内用 node 作后端的状况还多吗?职业发展要怎么规划? 由于我是一个两年多工做经验 noder,开始工做的时候是作前端,我本身转型作后端,如今作了接近两年的纯 node 后端工做,最近感受大多数企业把 node 的场景都开始向前偏移了,我我的以为 node 用来作后端是足够的,性能方面也不是那么大的硬伤,能够经过 k8s 等一系列的架构和方式去消除减弱性能的缺点,可是 node 后端愈来愈少,要转向前端仍是转向其它语言呢?

微服务化其实给 Node 带来的是利好,提供服务便可,不关注后面的语言。目前国内用 Node 的团队,我以为是两极分化:

  • 阿里这样的大公司,有完善的基建和中间件支撑,所以能够大放异彩。
  • 创业小公司,追求速度和效率,因此也能放手实践。
  • 反而是中间的中小公司,包括一些大公司里面的团队,受限于运维基建和话语权,推起来比较痛苦。

性能其实各大语言发展到今天,对于绝大部分业务场景来讲,轮不到拼这个天赋的时候。选择一个技术,更多的是看团队的技术栈 + 运维基建 + 中间件服务支撑程度 + 话语权。

就 Node 发展的话,建议仍是进阿里体验一下,在国内阿里的 Node 和其余公司,是彻底两个不一样的阶段。或者至少了解下阿里 Node 在这个过程当中的实践,踩坑经验,将来方向,从而有的放矢。

点评下nest,说说您或者egg团队对他的见解?─ @鲸吃瓜

请问天猪大哥可否简单的点评下nest,说说您或者egg团队对他的见解,以及他的优缺点🙃

nest 是近年来新出的一个框架,比较亮眼的是 TypeScript 和从 Spring 过来的一些概念。

从咱们的角度来看,企业级应用有不少要素,包括编程模型约束、扩展点、多进程管理、日志、安全、RPC 等等很是多的方面,TypeScript 静态类型带来的好处,是其中的一小点,但并非所有。装饰器等特性,目前还在 Stage 阶段,并无落地到 Node LTS 版本中。在咱们看来,静态类型带来的好处,还不如把单元测试覆盖率作上去更实际。

TypeScript 也并非某个框架独有的,就像蚂蚁凤蝶团队就有在用 TS 开发 Egg 应用(据说他们作了个 tegg 框架,后面也许会放出来)。

顺便重提下框架对比,从咱们的角度看来,框架有三层:

  • 基础框架:Express,Koa
  • 框架的框架:Egg
  • 上层业务框架:tegg,chair,sofa-node,ThinkJS,Sails,Loopback,Nest

它们的定位:

  • 微框架专一于底层中间件模型,是 Node HTTP 之上很薄的一层。
  • 上层业务框架,是针对某个领域和业务场景定制的业务框架,针对团队自身的业务场景和技术选型下的组合。(固然也有一些大教堂式的大而全框架)
  • 上层业务框架通常每一个团队都会封装一个,就像当年阿里各大 BU 那样,而 Egg 就定位介于前面二者之间,抽象出上层框架的一些共性 -- 一套加载规范,一方面提供插件能力来复用,一方面提供框架定制能力供团队架构师定制本身的上层业务框架。

Node 新人如何成长?─ @L丶q

一直混迹于创业公司,致力于各类业务以及解决问题,有时候特别基础的知识都要去查一下才能肯定,我的技能也是层次不齐,感受迷茫了怎么办

关键仍是总结,遇到问题后,多思考,遇到了什么问题,解决了什么问题?同类场景是如何解决这个问题的?他们之间的对比是怎么样的?谁优谁劣?若是他们的方案各自优势结合起来,又会怎么样?

或者这么说,将来你参与面试的时候,面试官但愿听到你说 「我用过 xx 框架」,仍是但愿听到你说:「我在作 XX 项目的时候,预研过 XX 和 YY 框架,最终由于 XX 等缘由,我选择了 XX 框架。在这过程当中,我遇到了 XX 问题,为此我去看了 XX 源码,发现他们是基于 XX 原理的,还有优化的空间,因而本身尝试了 XX,解决后写了 XX 总结文章,甚至尝试给 XX 框架提了一个 PR 解决了这个问题」 -- 这句话好像是小芋头说的。

对话:天猪 & 杨雪晋 & 字字珠玑关于开源、egg.js 社区的见解

杨雪晋:我在公司的技术选型中 Node 一块使用了 Egg,两期下来发现开发没问题但体验很通常。错误提示很不明确,官方文档华而不实,三方模块滥竽充数,框架约束邯郸学步。错误提示方面您能够说是 Nodejs 异步缘由很差定位错误,官方文档只是好看但业务开发中咱们发现不少地方文档没有详细说明,第三方模块诸如 egg-jwt 典型的 npm copy 过来改改充数的也能被官方推荐使用,egg 的框架约束对比一下 Laravel,目录和模块名做为类,大写后,路由却必须小写!并且关于模块的引入 ES6 提供了两三种方法,官方文档和大家开发的 cnode 社区源码上用的是代码重复量多的那种,关于 Controller 层有个 egg-validate 插件的使用也能够独立出来文件中,也能够放构造函数中,这些官方文档都没有说明,自定义参数检验和定时器这些更不那么重要可是简单的确说明过分了。

天猪

感谢反馈,社区这块确实有挺大的进步空间。你指的滥竽充数是 awsome-egg 那个吧?那个目前只要是提 PR 就能合并的,目前只做为一个索引,咱们并无精力去逐个分析源码和评价方案,这块若是社区有同窗有兴趣,能够考虑参与进来接管。

jwt 那个是社区插件,不是官方维护的。 validate 那个不是内置插件,因此没有写入文档。cnode 那个其实也不是官方重写的,是朴老师以前召集社区重构的,第一期只专一于迁移,并无优化。

杨雪晋:多谢解释了,抱歉个人态度可能稍微激动了点,实在但愿 Node 社区也能有相对完美的 web 框架和生态系统。

天猪

没事的,咱们每一个人在社区都是有多重角色的。就像苏千他们也是 Koa 的核心开发者,而 Koa 自己也已经完成了本身的核心目标了。而后上一层的封装,他们是做为 Egg 的核心开发,输出到 Egg 里面的。一样,更上层的业务框架输出,咱们是以另外一个角色,在其余项目里面输出的,能够关注下蚂蚁最近开源的 sofa-node 。

也能够看看咱们这篇专栏《InfoQ 专访死马:为何说Egg.js是企业级Node框架》zhuanlan.zhihu.com/p/36240171

杨雪晋:请大家在公司项目中使用下 egg,碰到问题在 github 提交 issue。确实官方回复很快,基本上是天猪回复的多,并且是回复后即使没解决问题也马上关闭 issue,即便如此 egg 项目的 issue 依旧存在不少问题为明显的不足之处,我感受不到官方团队有对 egg 技术创新上作追求

天猪

  1. 若是没有解决能够从新 open 的,这是社区,不要有负担。
  2. 老实说,egg 自己的职责基本上已经完成了,它就是一个加载规范,核心已经很稳定了。
  3. 剩下的,咱们其实跟大家没啥区别,都是社区的一分子的身份,去完善生态。
  4. 而平常开发中咱们没用到的模块和实践,咱们真的没能力也没办法花时间去专门研究,毕竟咱们只是一个虚拟团队,咱们主要是为了支持各自部门的 Node 演进。
  5. 阿里的不少后端和运维基建和社区不同,(固然咱们在尽可能拥抱),故开源的插件都是咱们在内部实践成熟后,才有可能做为社区的角色分享出来。

字字珠玑:请问下大佬们这么拥抱社区有基于KPI考核的部分在驱动吗?而后有新的项目直接上node的吗?仍是就是用node替换原来成熟的体系?

天猪

  1. 拥抱社区一直都是阿里的传统,咱们有阿里开源小组。
  2. 咱们本身自己就很受益于开源社区,回馈是理所固然的。甚至咱们不少人都是从社区招募进来的。
  3. 开源其实有好处的,就好像咱们如今招人,不少已经具有 egg,ant design 的能力,有效的下降了人员招聘筛选和培养成本。
  4. 开源历来都不多是 KPI。咱们的 KPI 之一是各自团队的工程基建,只是为了更好的完成这一目标,咱们会考虑协做和创建生态,而后顺便分享出去。
  5. Egg 也历来不是一个实体团队,咱们都是分布在不一样部门不一样城市的,不可能有同样的 KPI。

『替换体系』这事情真的很难,不是说说就能够的,涉及到生态,运维基建,中间件 SDK ,监控,应用治理等等很是多的领域。Node 的目标历来就不是替代 Java,它们的定位是不同的,是互补的。阿里的 Node.js 也是苏千朴灵等前辈们足足经历了 8 年的开荒,才冲出一条血路,有了今日的开花结果。

皮一下很开心的问题

请问你为何叫天猪…? ─ @诺墨

请问你为何叫天猪……

大学时昵称是阿天,咱们那个时代流行加个猪后缀做为昵称,所以。。。

天猪和飞猪有啥关系? ─ @bearever

天猪和飞猪有啥关系?

他们给我发过一枚飞猪天使用户勋章。


本期 AMA 社区小伙伴提了许多实用问题,感谢天猪认真地为掘金小伙伴解答了很多疑问。浏览更多的问答,能够到天猪的 AMA 进行阅读和讨论。


本周 AMA:《开发者必备的 Docker实践指南》小册做者--有明

本周 AMA 正在进行 时间:2018.11.13 - 2018.11.15,活动传送:👉戳这里

本周 AMA 嘉宾为《没什么难的 Docker》书籍、《开发者必备的 Docker实践指南》小册做者--有明,你们有任何关于 Docker 、虚拟化、容器技术、我的成长、团队管理问题均可以找他交流技术~

相关文章
相关标签/搜索