很早以前,在Internet早期,将浏览器指向某个URL意味着您的计算机将与一台服务器开始对话,而只有一台服务器与该URL连接。 如果您访问个人博客,这种情况仍然可能发生,但是今天所有主要网站和大多数小型网站实际上都是服务器群,有时是数十个,有时是数百个,有时甚至是数千个。
Node.js一直是使这种飞跃进入未来的流行基础。 可能是因为Node.js与微服务范例几乎同时流行。 也许是因为Node.js非常适合Docker容器。 也许仅仅是因为JavaScript无处不在。 现在,当我们进入网站时,我们的数据包将传输到Node.js堆栈,从而触发了对更多Node.js服务器的调用,每个服务器都提供了一部分填满屏幕的数据。
Node崛起的一个重要原因可能是简单性。 只需几行代码就可以构建功能性的Node.js微服务:一个可以侦听端口,一小部分可以连接到任何数据库,然后再添加一些编码可以对业务逻辑进行编码。 “ Hello World”示例与正在运行的微服务之间的区别只是一个或两个功能。 Node.js是由希望在Internet上提供服务的人们设计和构建的。
这不仅仅是代码的简单性。 Node.js社区将列举出Node.js无处不在的许多实际原因。 有些人将专注于令人难以置信的轻量级Node.js运行时。 它在几秒钟内启动,并且不会占用RAM来创建线程来处理每个传入和传出请求。 IO例程经过优化,可快速获取和获取数据,而无需花费太多时间来创建对象来跟踪线程和其他临时信息。 对于新手程序员而言,回调范例可能会有些挑战,但其结果是速度飞快且计算机负载很小。 这使得在云中轻松启动多个快速微服务成为可能。
其他人喜欢Node.js世界已经由底层到顶层由开源主导的想法。 Node的原始版本是一个开源项目,该项目基于本身就是开源JavaScript解释器构建。 所有主要的Node.js框架都是开源的,道德规范如此占主导地位,以至于很难在许多Node.js堆栈中的任何地方找到专有的代码块。
这里有18个不同的开源项目,这些项目使使用几行JavaScript来启动微服务变得更快,更简单。 而且,当您完成该微服务后,您可以创建更多的微服务,直到您自己的微服务群协同工作以将比特交付给互联网的无限需求。
API蓝图
API蓝图项目只是用于描述您的API的类似YAML的语言的规范。 真正的价值来自所有可以读取规格并使用API进行智能操作的工具。 有一个Drakov (一个用于测试代码的模拟服务器)和一个Dredd (一个用于在后端测试API文档的工具),以确保您的API始终与蓝图的当前版本一致。 还有一些针对诸如Python和C之类的语言的标准解析器。 有数十个使用API蓝图格式的不同项目 。
Claudia.js
厌倦了建立自己的服务器? Claudia.js是用于将Node.js例程移至AWS Lambda或AWS API Gateway的工具包。 您获取了用于响应事件的例程,然后Claudia将通过一次命令行调用来部署它们。 (当然,在配置了所有亚马逊帐户详细信息之后。)
科特
对于任何需要快速微服务的开发人员来说,“零配置”这句话听起来像音乐,而这正是Cote所提供的。 “零”一词并不是严格正确的,因为您需要说明对象和API的一些基本细节,但是Cote将在此之后进行自我组织,从而节省了配置IP地址,端口和路由的繁琐工作。 大多数聪明之处在于广播机制和低开销协议,这些协议允许Cote实例相互查找并进行通信。
表达
有许多Web应用程序框架可用于构建Node.js站点。 Express是最简单,最常见的一种。 您无需添加其所有结构即可创建微服务,但它可以帮助为其处理的角色提供一些标准化。 后端微服务是否应具有与前端相同的体系结构是一个有趣的问题。 他们可能并非一直都需要额外的模板功能,但是当需要时,添加诸如Express的简单框架可以提高一致性和稳定性。
羽毛
Feathers是一个开源项目,其中包含大量第三方插件,这些插件只需几行配置即可创建快速的REST API。 但是,真正的魔力在于您可以添加的额外行,以快速集成数据库,身份验证和分页。 Feathers通过提供实时推送机制,通过Sockets.io和Primus库向客户端发布新事件,变得更加聪明。 这些只是Feathers开发人员将其项目描述为“包含电池”的部分原因。
哈皮
Hapi是另一个流行的Node.js框架,可用于处理网站或备份网站的微服务的基本配置。 有许多插件,其中包括一些可以处理微服务的一些标准作业,例如安全性和配置 。 您还可以将Hapi与Seneca等常见服务模型集成。
考阿
如果您将微服务视为位于诸如数据库之类的某些源前面的“中间件”,那么Koa可以为您的数据构建相当广泛的管道。 好吧,对于Koa来说,管道可能不是最好的隐喻,因为这些函数是在“类似堆栈”的结构中应用的。 这意味着您的函数会调用其他函数,然后在返回数据时再次破解数据。 所谓的“堆栈”是按承诺实现的。
在Koa之上构建了令人惊讶的大量软件包集合,这些软件包引入了安全性,监视,预处理和许多其他选项。 大多数项目将添加其中一些以完成软件包。
海妖
将您的后端划分为这么多微服务的缺点之一是,前端必须发出许多不同的调用。 KrakenD是一个聚合器,可以帮助您组织与后端的通信以及所有响应,从而使前端的工作变得更加简单,而前端只需致电给KrakenD。 如果这些后端中的某些后端返回的数据多于当前前端所需的数据,则KrakenD可以减少工作量。
回送
想要构建快速API的Node.js用户可以使用LoopBack ,这是另一个框架,它可以将您的数据模型转换为完整的API。 您将获得用于操作对象的所有CRUD函数以及一些其他维护功能(如访问控制)。 易于安装的连接器支持大多数标准数据库,从而使LoopBack成为启动微服务以保留基本数据的较简单方法之一。
Mocha.js
编写代码后,必须保持其运行。 编写好的微服务通常包括添加一些测试例程。 当您拥有数十个微服务时,这可能会有些麻烦,但它可以帮助您更快地解决问题,同时避免在您认为自己有所改进时避免退化代码库。 Mocha是使用最广泛的Node.js测试框架之一。 Mocha允许您通过一些执行测试的功能将良好的单元测试与构建例程集成在一起。
分子
用于Node.js的最快的微服务框架之一是Moleculer 。 除了速度之外,Molecular还提供了许多重要的功能,可将重负载分散到整个群集中,包括基于CPU负载或延迟的智能平衡以及纯粹的随机选择或轮询。 您可以使用插件进行Redis缓存,序列化或其他传输。 失败的连接将回滚并使用多个后备选项重试。
木偶戏
从理论上讲,浏览器是为肉类空间中的人类而设计的,而微服务则是从后台为浏览器提供服务的,使用诸如JSON或YML之类的面向机器的格式在后台处理所有数据。 实际上,通常有很多理由说明为什么微服务需要深入研究以人为中心的格式并解析HTML和CSS中标记的信息。 有时只是将某些网页转换为PDF。 有时是为了自动化仅在网页中讲的代码库的某个古老角落。 有时是因为您想编写精巧的测试例程来真正代表用户所见。 Puppeteer是在Node.js内运行的Web浏览器的无头版本,等待URL可用。 您可以使用Puppeteer执行许多后台工作来支持各种微服务。
红鸟
您的应用是否需要一些代理才能保持管道连接? Redbird是一台反向代理生成机器,它支持您需要确保隐私的大多数复杂加密算法。
重新调整
创建微服务的另一个选择是Restify ,这是一个快速的框架,它使用Sinatra样式的链接函数调用集合提供经典路由。 您可以根据需要插入自己的定制代码。 Restify还将自动将标准调试调用( DTrace )插入所有不同的路由,从而更容易理解调用其他微服务的微服务的意大利面。 当然,您的代码将不需要它,但是您仍然可以接受它,因为它可以帮助团队中的其他人。
帆
正式而言, Sails是一个完整的MVC(模型-视图-控制器)框架,用于在Node.js上构建Web应用程序。 但是,它也带有从MVC中的M自动生成REST API的例程,也就是Sails所说的“蓝图”。 如果需要REST API,则可以从Sails开始,然后根据需要添加V和C。
塞内卡
勾勒出微服务架构的一个好方法是创建一堆规则,以匹配某种形式的传入参数。 Seneca旨在让您做到这一点。 您编写一个函数和一些模式来描述何时触发,然后由Seneca完成其余工作。 它提供了连接到所有主要数据库的插件,以及一些用于构建主要功能(例如CMS或购物车的后端)的示例。 Seneca希望不仅仅是一个微服务基础。
无服务器
随着越来越多的企业编码人员探索无服务器范式,他们将需要一个抽象层来平滑从AWS Lambda到Apache OpenWhisk的各种平台之间的差异。 Serverless的名称可能太笼统了。 它提供的第一件事是建立API并使其在无服务器环境中运行的机会。 您可以利用大量的插件和示例,并将其部署到AWS Lambda,Azure Functions,Google Cloud Functions,IBM OpenWhisk等。
昂首阔步
微服务架构包含许多部分,所有这些部分都具有与外界的接口。 Swagger提供了用于设计这些API的标准格式。 您提出关于API 用途的想法,然后Swagger将其转变为人类可读的文档和机器可读的测试代码。 标准化的结构可在整个代码库中实施一致的模型。