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

rwgo5882 8年前
   <p>大多数项目开始时都是为了解决某一问题,比较简单,后来逐渐发展,就变得越来越大,形成一个很大的单体结构,所有的新功能都会向这个单体中添加,就像滚雪球,越来越大</p>    <p>单体结构发展到一定程度之后,就会带来一些问题,例如:</p>    <p>1. 扩展难,并且会造成资源浪费,因为当某个局部承不住压力时,需要对整体进行扩展</p>    <p>2. 部署难,每次发布新功能,都需要重新部署整个项目,即使是一个很小的改动</p>    <p>3. 管理难,项目大,开发团队多,互相有牵绊,影响效率</p>    <h2><strong>微服务</strong></h2>    <p>为了解决单体结构带来的种种问题,很多公司开始尝试新的架构方式,就是 <strong>微服务</strong></p>    <p>在微服务架构中,以前的单体被打散成多个小块儿,这些小块儿一起对外提供服务,每个小块儿可以使用不同的开发语言,开发者不再被限定在某个特定技术,可以自由的尝试</p>    <p>如果块儿的粒度设置得合适,一个小团队用非常短的时间就可以写完一个微服务,如果某个微服务的质量或者性能不够好,也可以很快的使用其他技术重写,降低了开发风险</p>    <p>各个微服务都单独部署,哪个需要性能提升,就扩展哪个的资源,不再需要全体扩展,自然降低了企业的成本</p>    <h2><strong>Node.js 与 微服务是好搭档</strong></h2>    <p>在拥抱微服务的团队中,不管是大企业,还是新兴的小公司,Node.js 都被广泛使用</p>    <p>主要有3个因素:</p>    <p>1. 高效</p>    <p>Node.js 的包管理器 npm 拥有数量惊人的模块,可以立即使用,节省大量的开发工作</p>    <p>Node.js 基于 JS,所以前端开发人员也很容易上手,整栈都使用同一个语言,前后端使用同样的模块,便节省了大量时间</p>    <p>2. 性能好</p>    <p>在创建高性能的实时应用时,Node.js  是非常好的方案,因为他的非阻塞,事件驱动I/O模型</p>    <p>GoDaddy公司是采用 Node.js 开发微服务的典型案例,他们给出了自己的性能数据:</p>    <p>使用 Node.js 结合微服务后,在和之前同样的负载情况下,硬件资源只需要之前的10%</p>    <p>3. 开发者喜爱</p>    <p>Node.js 的用户增长速度惊人,每年都翻一倍,npm 的流行度和成长速度都远超其他语言的包管理器</p>    <p>值得注意的是,新一代的开发者尤其喜爱 Node.js,他们不喜欢使用静态类型语言,例如 java,c#</p>    <p>在2015年,Node.js 得到了Linux基金会的长期支持</p>    <h2><strong>案例</strong></h2>    <ul>     <li> <p>PayPal</p> </li>    </ul>    <p>2013之前,PayPal是java技术栈的单体结构,2013初开始向 Node.js 微服务架构迁移</p>    <p>开始时从一个小点开始改造,没有问题之后,再改更加重要的部分,同时还准备了一套java版本的应用作为回退方案,如果 Node.js 开发的应用出现问题,可以马上进行切换,而结果非常成功,便放心进行大面积迁移了</p>    <p>迁移之后的效果:</p>    <p>build的速度快了2倍</p>    <p>代码量降低33%</p>    <p>可以处理的QPS提高1倍</p>    <p>响应时间提升35%</p>    <p>页面快了200ms</p>    <p>采用JS全栈开发后,效率提升显著,对产品的从新思考、重新启动、设计等等非常有帮助</p>    <ul>     <li> <p>Netflix</p> </li>    </ul>    <p>Netflix 也是2013开始的 Node.js 微服务改造,之前是一个巨大的单体,启动一次需要40分钟,完全无法高效快速的发展</p>    <p>后来网站改为单页结构,采用了 Node.js,Node.js 有一个非常好的理念:一次编码、到处运行,以前混合使用 java 和 js 时,好多东西得写两次,现在就简单了</p>    <p>使用微服务后,每一块儿都非常好管理,可以放到容器中,这样,开发者在本机也可以运行,使本机和产品环境一致,非常有助于开发效率和质量</p>    <ul>     <li> <p>GoDaddy</p> </li>    </ul>    <p>GoDaddy 以前主要是使用 .net 开发,整体结构也是单体</p>    <p>经过多年的发展,发现 .net 并不适合,因为其没有像 Node.js 那样活跃的模块社区,极大的依赖微软发布的东西,完全不适合一个敏捷型公司</p>    <p>后来选择 Node.js 是因为他的 build、单元测试、集成测试、应用部署 都非常容易</p>    <p>改造后的效果也非常好,例如当时有一个广告带来了1亿的访问量,很好的承受住了,每秒可处理1万个请求,零宕机,他们的 Node.js 集群包含12台服务器</p>    <p>通过微服务,实现了分布式无共享架构,结合持续集成,GoDaddy 可以在1分钟之内完成产品发布</p>    <p> </p>    <p> </p>    <p> </p>    <p>来自:http://mp.weixin.qq.com/s?__biz=MzA4Nzc4MjI4MQ==&mid=2652402202&idx=1&sn=d73910a225a419f474f63a4ced3ccfde&scene=0#wechat_redirect</p>    <p> </p>