darukjs / daruk

a node.js web framework based on typescript
http://darukjs.com
MIT License
934 stars 79 forks source link

关于daruk的一些建议 #83

Closed cevio closed 5 years ago

cevio commented 5 years ago

基本上看了一遍文档,总体上感觉不错。但是有几个点我需要问下。

AOP模型

基于AOP的controller模式是否真的适用在架构中的问题其实一直以来都是有争论的。最早起源于java,Spring一整套都是基于AOP设计的路由。那么问题来了

  1. java的路由不是compose模型,可以根据特征识别路由优先级,那么在daruk中,如何通过KOA2保证路由顺序?
  2. 之前我有测试过通过fastify与koa+koa-router的QPS数据,请看这里 ,那么在上述请看下,daruk能保证多少qps?(建议:find-my-way)

变量污染

我看到文档中有一些写法,我举个例子:

this.ctx.service.xxxxx

我知道这种模式来源于eggjs,但是这是eggjs的弊病之一。如果过多的模块中适用,会产生如下情况:

  1. 容易重复覆盖(当然我不知道有没有做override)
  2. 找不到service.xxxx的来源,只有本模块开发者知道,对于团队合作不利。
  3. 无法定义自有service等对象,因为被系统占用。

至于glue等,一样的道理。

容错机制

容错对于一套架构来做很重要,在nodejs的服务架构中特别重要,因为在child_process中错误捕获方式很多,我不清楚贵架构有没有做处理。我例举一些情况:

  1. 断网
  2. 语法错误
  3. 进程奔溃
  4. 请求丢失
  5. ......等等

特别强调下请求丢失,有没有做请求的trace_id,在全局容错中捕获请求错误同时让请求能够response。

特殊业务模型

比如说,daruk开启了多进程(cluster)模式,那么我现在有这样一个需求:我要编写一套基于进程隔离的自动打包前端代码的程序

  1. 我开启一个新进程,独立处理当前打包任务。
  2. 打包时候调用npm run build
  3. 需要将编译信息通过socket打出到前端页面(通过cluster的websocket输出)
  4. 打包结束关闭进程。

特点是每次打包开启一个新的进程进行隔离,那么在daruk中是否可以做到。因为在我看来,daruk没有涉及到自定义子进程模型,而仅仅是cluster模型。

最后

以上是我的愚见。

xiaojue commented 5 years ago

很好的讨论,晚点把我们微信的聊天整理下发出来。

xiaojue commented 5 years ago

在重构的版本会进行对应的解决。

lgh06 commented 3 years ago

和Koatty 有什么大的不一样么…… 看起来你们两个人的目标挺像的…… https://github.com/Koatty/koatty/issues/43

xiaojue commented 3 years ago

@lgh06 看了他的项目介绍,确实蛮像的,但是的应该daruk比koatty的丑到了极致吧。