微服务与Node.js为什么会广受喜爱?

大多数项目开始时都是为了解决某一问题,比较简单,后来逐渐发展,就变得越来越大,形成一个很大的单体结构,所有的新功能都会向这个单体中添加,就像滚雪球,越来越大

单体结构发展到一定程度之后,就会带来一些问题,例如:

1. 扩展难,并且会造成资源浪费,因为当某个局部承不住压力时,需要对整体进行扩展

2. 部署难,每次发布新功能,都需要重新部署整个项目,即使是一个很小的改动

3. 管理难,项目大,开发团队多,互相有牵绊,影响效率

微服务

为了解决单体结构带来的种种问题,很多公司开始尝试新的架构方式,就是 微服务

在微服务架构中,以前的单体被打散成多个小块儿,这些小块儿一起对外提供服务,每个小块儿可以使用不同的开发语言,开发者不再被限定在某个特定技术,可以自由的尝试

如果块儿的粒度设置得合适,一个小团队用非常短的时间就可以写完一个微服务,如果某个微服务的质量或者性能不够好,也可以很快的使用其他技术重写,降低了开发风险

各个微服务都单独部署,哪个需要性能提升,就扩展哪个的资源,不再需要全体扩展,自然降低了企业的成本

Node.js 与 微服务是好搭档

在拥抱微服务的团队中,不管是大企业,还是新兴的小公司,Node.js 都被广泛使用

主要有3个因素:

1. 高效

Node.js 的包管理器 npm 拥有数量惊人的模块,可以立即使用,节省大量的开发工作

Node.js 基于 JS,所以前端开发人员也很容易上手,整栈都使用同一个语言,前后端使用同样的模块,便节省了大量时间

2. 性能好

在创建高性能的实时应用时,Node.js  是非常好的方案,因为他的非阻塞,事件驱动I/O模型

GoDaddy公司是采用 Node.js 开发微服务的典型案例,他们给出了自己的性能数据:

使用 Node.js 结合微服务后,在和之前同样的负载情况下,硬件资源只需要之前的10%

3. 开发者喜爱

Node.js 的用户增长速度惊人,每年都翻一倍,npm 的流行度和成长速度都远超其他语言的包管理器

值得注意的是,新一代的开发者尤其喜爱 Node.js,他们不喜欢使用静态类型语言,例如 java,c#

在2015年,Node.js 得到了Linux基金会的长期支持

案例  

  • PayPal

2013之前,PayPal是java技术栈的单体结构,2013初开始向 Node.js 微服务架构迁移

开始时从一个小点开始改造,没有问题之后,再改更加重要的部分,同时还准备了一套java版本的应用作为回退方案,如果 Node.js 开发的应用出现问题,可以马上进行切换,而结果非常成功,便放心进行大面积迁移了

迁移之后的效果:

build的速度快了2倍

代码量降低33%

可以处理的QPS提高1倍

响应时间提升35%

页面快了200ms

采用JS全栈开发后,效率提升显著,对产品的从新思考、重新启动、设计等等非常有帮助

  • Netflix

Netflix 也是2013开始的 Node.js 微服务改造,之前是一个巨大的单体,启动一次需要40分钟,完全无法高效快速的发展

后来网站改为单页结构,采用了 Node.js,Node.js 有一个非常好的理念:一次编码、到处运行,以前混合使用 java 和 js 时,好多东西得写两次,现在就简单了

使用微服务后,每一块儿都非常好管理,可以放到容器中,这样,开发者在本机也可以运行,使本机和产品环境一致,非常有助于开发效率和质量

  • GoDaddy

GoDaddy 以前主要是使用 .net 开发,整体结构也是单体

经过多年的发展,发现 .net 并不适合,因为其没有像 Node.js 那样活跃的模块社区,极大的依赖微软发布的东西,完全不适合一个敏捷型公司

后来选择 Node.js 是因为他的 build、单元测试、集成测试、应用部署 都非常容易

改造后的效果也非常好,例如当时有一个广告带来了1亿的访问量,很好的承受住了,每秒可处理1万个请求,零宕机,他们的 Node.js 集群包含12台服务器

通过微服务,实现了分布式无共享架构,结合持续集成,GoDaddy 可以在1分钟之内完成产品发布。

文章标签: 微服务 NodeJS


关注微信公众号“架构说”,加入Q群微群,让架构师带你飞︿( ̄︶ ̄)︿。


原文链接: 阅读原文
免责申明: 架构说任何转载的文章都会明确标注原文链接。如有侵权,请与本站联系。
转载说明: 架构说原创文章转载时请务必注明文章作者、链接和来源。