编者按:高可用架构分享及传播在架构领域具有典型意义的文章,本文由桑世龙在高可用架构群分享。转载请注明来自高可用架构公众号「 ArchNotes 」。
“JavaScript 是世界上使用最广泛的语言,没有之一,包括后端开发工程师也更爱使用 JavaScript。” stackoverflow Node.js 全球现状虽然 Node.js 在国内没有盛行,但据 StackOverflow 2016 年开发者调查,其中 Node.js 、全栈、JavaScript 相关的技术在多个领域(包括全栈、后端)都有排名领先。
(http://stackoverflow.com/research/developer-survey-2016) 后端分布 (http://stackoverflow.com/research/developer-survey-2016) Node.js 与生俱来的 2 个特性:
以前总强调的异步特性,到今天异步已经不是明显优势。因此除了性能,其他都是病(不足)? 1、Callback hell 问题 目前已经很好的解决了。promise / generator / async 后面会讲。 2、包管理 npm 已经是开源世界里最大的包管理器了,模块非常丰富(25.6万 )。
以前我们总是喜欢拿异步说事儿,现在我们拿 Node.js 的强大的生态来炫耀。 为什么选择 Node.js?空弦科技做的是基于云仓储的 SaaS 服务,给中小卖家提供服务,核心系统是进销存、订单池、WMS。 先看一下我们的瓶颈在哪里
于是就引出了我认为的Node.js 好处
Node.js 给了我们足够的选择工具
甚至可以用各种编译器 coffee、typescript、babel(es)等。对于从 0 开始的团队来讲,可以先面向过程、然后随着团队的成熟度,一点一点增加难度。 提供好的基础和包管理工具
以上这些都做大型软件的基础,Node.js 在这方面做得非常好 特定场景的快速 很多人把 MEAN 组合(比如 mean.io)起来,这样做的好处是如果熟悉,开发速度确实会非常快,但是难度太大,很少有人能搞的定。metetor 模糊了服务端和客户端,是同构的典型应用,对于实时场景是非常高效的。这种东西都算特定场景的快速,一般不敢轻易上,调优难度非常大,如果有人能 cover 的住,在初期是非常高效的。 总结需求:可以简单,可以难;可以快、也可以慢;可以开发大型软件 如果以上不满足咋办?这时就需要架构平衡了。 架构平衡
在架构中各自做各自合适的事儿就好,我们很坦然的面对 Node.js 的优点和缺点,做好架构平衡。 1、在语言层面可以做,那语言层面做
从上面看,绝大部分需求都可以满足了 2、如果语言层面搞不定,那就架构层面做
稍微解释一下,首先,架构与 Node.js 没直接关系。其次,架构师常用的东东有足够的 Node.js 模块支持,比如 MQ,像 Rabbitmq 有比较好的 Node 模块支持,RPC 里 Thrift、Grpc、Tchannel 支持的都不错,我们使用的 senecajs,Redis,ioredis 等软件,后面做 HA 都是一样的。
3、如果架构层面也解决不了…… 合适的场景用合适的东西。有很多东西是 Node.js 不擅长,又不在架构范畴里的,咋办?如实在不够,Java 补(严格点,应该叫其他语言补)
但凡是 Java 或其他语言里比较成熟的库,可以作为独立服务使用的,都可以做 Node.js 的支持。避免过多的时间用在造轮子上,影响开发进度。 4、Node.js 优劣分析
Node.js 的 Web 开发框架 Express、Koa 等,简单,小巧,精致,缺点是集成度不够,目前已有的 MEAN 或 yo 或 sails 等总有某种方面的不满意 团队 Node.js 使用现状选择 Node.js 我们需要做的包括:固化项目结构;限定 ORM;自定义脚手架。 由于 Node.js 已经提供以下特性,因此你可以在 30 分钟完成一个脚手架。
我们用Node.js做什么?
目前进度
一些正在建设的方面
打算进行技术栈更新,包括Nodejs 4.x(预计今年 6 月份;Koa(generator/co);es6/es7 ( babel )。 4.x 在内存和性能上都有非常大的提升,新的语言特性上,异步流程和语法上都需要学习,故不急于升级,待人才梯队完善。 目前的做法是小步快走,一次只上一样新技术;另外形成梯队,即可准备上新东西;善用 npm,实现 3 化:模块化、最小化、服务化 为什么选择 MEAN 架构MEAN 架构
从我的角度看
|