Node.js微服务实践(一)

什么是微服务

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
微服务的概念源于2014年3月Martin Fowler所写的一篇文章“Microservices”(http://martinfowler.com/articles/microservices.html)。

尽管“微服务”这种架构风格没有精确的定义,但其具有一些共同的特性,如围绕业务能力组织服务、自动化部署、智能端点、对语言及数据的“去集中化”控制等等。微服务架构的思考是从与整体应用对比而产生的。

通常,在一家公司随着业务需求的增长为逐步发展(自然增长)的过程中,前期往往是以单块架构的方式来组织系统的。因为对于软件的初期构建来说,单块架构的方式是最容易且最高效的。但是若干年(甚至是几个月)后,受限于前期既有单块软件系统内部耦合性,再向该系统加新功能变得越来越艰难。

单块软件

企业应用,因为服务于众多业务需求,因此会有些特定的软件应用提供许多功能,而一般惯例是把这些功能都堆在单个单片应用中。例如,ERP,CRM和其他各种软件系统被规划构建为具有数百个功能的整体。这种带坑应用一经部署,在往后的故障排除、扩展和升级场景中就是一场接一场的恶梦了。

面向服务架构(SOA)旨在通过引入“服务”的概念来克服以上的限制,“服务”是从应用程序提供的类似功能中提取出来的聚合和分组。因此,使用SOA,软件应用程序就会被设计为“粗粒度”服务的组合。然而,SOA中服务的范围非常广泛,这又引出了复杂而庞大的服务与一大堆操作(功能)以及复杂无比的消息格式和标准(如WS *标准)。

Node.js 并不是一门适合执行并行任务的语言。针对那些处于压力之下的微服务来说,我们可以选择一门更适合的语言来进行开发,比如 Erlang,从而可以以一种更加优雅的方式来管理并发。

可替换性

可替换性是指替换系统中某个组件而不影响系统行为的一种能力。
当我们在讨论软件的时候,可替换性往往是与低耦合密不可分的。在编写微服务的时候不能讲内部逻辑暴露给调用服务,服务实现对客户端来说是透明的,客户端只需要了解的只有接口。

独立性

所有服务应该都是独立的,他们通过接口进行交互。除了协定确认接口这一环节之外,不同的工程师团队可以在无需交流的情况下完成对服务的开发。

易于部署

微服务应当易于部署,原因如下:

  • 少量的业务逻辑,导致更易于部署。
  • 微服务是自治的工作单元,所以升级一个服务对于复杂的系统来说是一个局部可控的问题。无需重新部署整个系统。
  • 微服务架构中的基础设施和配置都应该尽可能的自动化(如 Docker 来部署微服务)。

SOA 与微服务的比较

面向微服务架构(SOA)与微服务架构非常想象的。那么他们之间的区别到底是什么呢p>

微服务是细粒度的 SOA 组件。换句话说,某个单个SOA组件可以拆成多个微服务,而这些微服务通过分工协作,可以提供与原SOA组件相同级别的功能,如下图:

image

微服务与 SOA 之间的另一个不同之处是服务互联和编写服务时所使用的技术。而另一方面,微服务推崇执行的标准(例如 HTTP)却是人民广泛了解并共同使用的。我们可以通过选择合适的语言或者工作来构建某个组件(微服务),进而获得 技术多样性 提到的关键好处。

除了技术栈和服务规模之外,在SOA于微服务之间还有一个更大的区别:领域模型。在一个机遇微服务的软件中,每个微服务应该在本地存储自身管理数据,并将领域模型分别隔离到单个服务中。而在面向SOA的软件中,数据往往存储在单个大型的数据库中,服务之间会共享领域模型。

为什么选择 Node.js

Node.js 是一门新型技术栈,对于很多人而言,它仅仅只是一个趋势,离作为解决问题的实际工具还欠点火候。

让我们来看重点看看 Node.js 。 Node.js 是用来构建面向微服务的架构的绝佳选择,原因如下:

  • 学习门槛低(如果想要精通还是有一定门槛的)
  • 易于扩展
  • 对测试友好
  • 易于部署
  • 可以通过 npm 进行依赖管理
  • 有着大量与主流标准协议相集成的库

API 聚合

API 聚合是一项用于将不同功能(插件、方法等)组合成一个接口的高级技术。例子:

前面的例子使用了 Express, 这是一个在Node.js技术栈中广为流行的 Web 框架。该框架同样也是围绕API聚合来构建的。

让我们来看下 第四行和第七行。在这些代码里,开发者注册了两个方法。当某人以 GET 请求的方式分别请求 URL:/sayhello 和 /saygoodbye 时,这两个对应的方法将被执行。在该例子中,该接口就是一个在3000端口上监听的app。

小结

最后,我们讨论了 Node.js 是用来构建微服务的强大工具,以及如何通过利用像 API 聚合这样的技术来从 JavaScript 获益,从而构建出高质量的软件组件。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92916 人正在系统学习中 相关资源:Wikka高速可伸缩性软件v1.3.1-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年2月6日
下一篇 2019年2月6日

相关推荐