感觉Nodejs社区,在微服务架构层面的软件太少了啊!有没有类似于Spring Cloud这种的?
发布于 6 年前 作者 qinyang1980 14427 次浏览 来自 问答

感觉Nodejs社区,在微服务架构层面的软件太少了啊!有没有类似于Spring Cloud这种的?

现在用 typescript+express+typeorm写restful后台代码,很爽。轻便,简单。甩java几条街。

想上微服务架构,我现在已经把nodejs写的所有services都分离开了,每一个都是独立的,互相之间通过rest接口调用。

但是,却没有现成的 服务发现,服务注册,熔断,负载均衡,网管,总线,这些管理服务的软件??

难道nodejs社区就没人去撸一个吗??

38 回复

你是想要 rpc 吧,推荐你 hprose,虽然很多人说什么 grpc,但是 phrose 支持的平台更多。

@Hyurl ,不是。我是要一套类似于spring cloud这样的服务管理软件集。不过是用nodejs写的。

@qinyang1980 spring cloud 我不是很清楚,不过我知道 adobe creative cloud,都是用来管理软件,但是 node.js 的 npm 就是用来管理软件的啊。

@Hyurl , 晕。不是管理软件。npm是管理包的,是包管理器。

我要的是管理微服务的框架软件集。是架构层面的。

嗯,负载均衡用的nginx ,如果nginx 不行可以上面加lvs, 注册服务和发现用etcd, etcd 和nginx 可以一起用啊,再加上confd ,那么服务注册,发现,负载均衡都实现了吧。。。总线真的不需要,总是是为了管理而产生的,起初是为了webservice soap xml的方式,如果用了restful 的方式,个人觉得用途不大了。熔断我没有实现过,但是我用MQ (rabbit mq)做了服务降级的类似作用。。这些都是很好用的软件,和nodejs可以完美结合。。。按照需要自己增加和叠加吧,没必要像java 一样,胡子眉毛一把抓,不管需要不需要都塞给你,。。。。。当然,对使用者要求和知识面会有一定要求。。。。

@cnlile ,多谢,受教了。

根据你提出的解决方案,我来总结一下:

第一种方案:是自己找适配的工具,构建一套属于自己的微服务平台。

  • 服务注册,服务发现,服务健康监控 - 使用 consul或者etcd
  • 负债均衡 , 使用nginx
  • 统一配置管理,使用confd
  • 消息系统,使用MQ

这样灵活性比较高,但是要找全不容易。

第二种方案:微服务平台,还是使用Spring Cloud来搭建。 因为spring cloud提供了一整套非常强大的软件集,微服务的方方面面都覆盖到了。你很难自己找到这么多好的软件。 然后再用Spring提供的SideCar将Nodejs应用集成到这个微服务平台中。

这样能利用spring cloud的服务管理功能,也能利用nodejs的快速代码构建能力,我觉得也不错。而且,还能接入其它语言,python,C#,ruby等。

第三种方案: spring boot + spring cloud,这样搭配天衣无缝。 但是java的性能。。。。。。简直了。。。写代码还要编译,等半天,费劲。。。。。。。。。。。

涨知识了。

@qinyang1980 最不建议方案二。。。方案三也是不错的选择,毕竟现在硬件便宜。。nodejs的错误检查很糟糕,项目大了,排错也是麻烦事情,Java 好些。

@cnlile 我在项目里,大量地使用console.assert()断言来辅助排错。

复用java的微服务体系。node只提供rpc服务,这才是目前最好的方式。当然如果有精力完全node写更好

@cnlile ,现代化nodejs程序中,错误处理已经不是问题了。而且我用的是typescript。

  • 我用的async/await , 用try catch可以捕获异步异常的
  • 最外层app层,也有uncaughtException异常的捕获
  • 再有,还有pm2保护进程,怕啥??

@qinyang1980 只能是你来搞一个了

如果开这样一个项目的话,我也想加入呢@qinyang1980

@kanoyami@coolicer

最近几天又看了些文章,觉得其实没必要去开发这样一套软件包,因为存在第四种方案,而且更好。

第四种方案:

将NodeJS写的微服务(不限于nodejs,java,ruby,phython都行),放在docker容器里面运行。 然后再用一套管理容器的框架就搞定了。因为容器技术是标准的,所以语言无关,这个才是王道。

这样的框架是什么呢? 答案就是

Kubernetes

楼主和我的需求差不多,我现在用的是senecajs,registration,server-side/client-side负载均衡、rpc-transport这些都有并且可以定制,社区资源还算丰富

顺便问下楼主,typescript做server端,是每次项目都要转换为js,然后运行吗?这样调试和日志对应该怎么解决呢?

@sopaco

  1. 我现在是每次都转。用命令yarn run start,会一直watch在那儿,你修改ts代码的时候,会自动给你转到js. 当然,也有更好的方案。用ts-node. 不过我还没研究。准备后面上。

  2. 调试。建议你用vs-code。配置tsconfig,产生map文件。 这样,你断点调试就是在ts代码里面。vs-code自动映射到js代码。

@qinyang1980 生产环境是打算怎么部署运行嘞?

k8s,多个service,通过不同端口通信 QQ截图20171101165445.png

@dengnan123 ,是真好用。用了根本停不住。

我们现在前端用的React,也是typescript。

@sopaco ,编译成js,然后用jenkins部署到服务器上。执行脚本。启动。

暂时没放入容器。也没用微服务管理框架。后面上k8s吧。

@shuaishenk ,k8s 看起来真挺不错的。要学的东西太多了啊。。。。。。

@qinyang1980 我们这边也是react 但是ts貌似大家都没关注。。。

用typescript是各种模块都可以正常使用的吗

来自酷炫的 CNodeMD

@Alexerx ,当然可以了。我都用了2年了。

干货满满呀,看完全部,感觉发现了新大陆,公司各个服务一直在想怎么做发现呢,这个可以好好研究一下了

@sopaco 命令行运行 tsc -w 。w表示watch 监控到文件发生变化就自动更新对应js。 或者用vs 开发可以save时自动生成(vscode不支持。

"scripts": {
    "tsc": "tsc -w",
    "serve": "set NODE_ENV=development& set DEBUG=yuedun:*& cd ./build & nodemon --delay 5 ./bin/www.js",
    "dev": "parallelshell \"npm run tsc\" \"npm run serve\"",
    "start": "node ./bin/www.js"
  }

自动编译ts和自动重启服务,npm run dev

可以看下这个 https://docs.nestjs.cn/ typescript、GraphQLAPI、RPC ,使用了装饰器,管道,注解~

@zuohuadong 大哥 这个您就别凑热闹了 nestjs相当于 Spring全家桶中的SpringMVC 人家现在问的是 有没有 Spring全家桶中的Spring Cloud

请看 service mesh 下一代微服务解决方案,比较适合node。

来自酷炫的 CNodeMD

一个docker instance一个微服务,一点也不神秘。

请推荐几篇微服务的文章看看 ,到底是干什么的, 解决什么问题.

话说我见过node作为service注册进spring cloud的eureka,而且这已经不是什么新鲜事了

楼主还招人么 github.com/chenyang-biu 有ts经验, 给开源项目写过声明文件

回到顶部