Node.js 我应该转向基于微服务的体系结构吗?

Node.js 我应该转向基于微服务的体系结构吗?,node.js,web-services,domain-driven-design,microservices,Node.js,Web Services,Domain Driven Design,Microservices,我正在研究一个巨石系统。它的所有代码都在一个存储库中(WebAPI和后台工作人员)。系统用Nodejs编写,MongoDB(Mongoose)用作数据存储。我的目标是为项目的发展设定一条新的道路。起初,我想知道我是否可以转向基于微服务的体系结构 整体式体系结构产生了一些问题: 如果我的背景工作者需要扩大规模。我必须将所有项目部署到服务器上,尽管只使用了一小部分 代码更改时,必须重新部署所有系统。若支付处理器在重新部署系统时调用webhook怎么办 使用微设备的优势非常明显: 单个微服务的较

我正在研究一个巨石系统。它的所有代码都在一个存储库中(WebAPI和后台工作人员)。系统用Nodejs编写,MongoDB(Mongoose)用作数据存储。我的目标是为项目的发展设定一条新的道路。起初,我想知道我是否可以转向基于微服务的体系结构

整体式体系结构产生了一些问题:

  • 如果我的背景工作者需要扩大规模。我必须将所有项目部署到服务器上,尽管只使用了一小部分
  • 代码更改时,必须重新部署所有系统。若支付处理器在重新部署系统时调用webhook怎么办
使用微设备的优势非常明显:

  • 单个微服务的较小代码库。更容易推理
  • 能够选择最适合特定用例的编程工具
  • 更容易扩展
查看当前的代码,我注意到Mongoose ODM(对象文档映射器)模型在整个项目中用于创建、查询和更新数据库中的模型。作为良好编程的原则,所有与数据库的交互都应该抽象。业务逻辑不应泄漏到其他系统层。我可以通过引入存储库模式(域驱动设计)来做到这一点。虽然代码仍在web api和后台工作人员之间共享,但这并不是一项困难的任务

如果我决定将存储库提取到独立的微服务中,那么就会出现所有问题:

  • 必须引入某种查询语言来适应复杂的搜索查询
  • 接口必须提供一种方法来迭代搜索结果(基于光标的导航),而无需通过网络返回所有数据库文档
由于该项目尚处于早期阶段,而我是唯一的开发人员,所以选择基于微服务的体系结构似乎有点过头了。也许还有其他的方法我应该考虑?


将业务逻辑和与数据库的交互提取到单独的存储库中,并在服务之间共享,以避免服务之间的复杂通信协议?

根据我过去几年在微服务领域的工作经验,在当前场景中,这似乎是一种过火的做法,但从长远来看是值得的

基于上述信息,我的想法是:

  • 代码结构-微服务体系结构(MSA)在上述上下文中的应用意味着不分离DAO、业务逻辑等,而更多的是根据业务功能设计系统。例如,如果它是一个电子商务应用程序,那么您可以将发货、购物车、搜索作为单独的服务,这些服务还可以进一步划分为更小的服务。阅读更多关于领域驱动设计的信息
  • 部署单元-将微服务应用程序作为一个独立的部署单元是一项关键原则。因此,保留应用程序的垂直部分,并将其打包为Docker映像,其中包含应用程序代码、应用程序服务器(如果有)、数据库和操作系统(Linux等)
  • 通信-使用MSA,服务之间的通信成为一个关键,因此,一般做法是继续采用面向消息的通信方法(阅读有关MSA的更多信息)

  • PaaS解决方案-有多种可用的PaaS解决方案,您可以应用这些解决方案,这样您就不必担心容器管理、容器编排、自动缩放、配置管理、日志管理和监视等所有其他方面。请参阅以下PaaS解决方案:

  • TIBCO

  • -红帽

  • -红帽

  • 云供应商平台-AWS、Azure和谷歌云所有这些平台都从部署角度对微服务应用程序提供了特定支持,如果您不想在您的组织中部署PaaS解决方案,我们可以将其用作替代解决方案


希望这些指针能帮助您了解整体情况,以便您能够根据未来的需要构建您的体系结构。

根据我过去几年在微服务领域的工作经验,在当前场景中,这似乎是一种过火的做法,但从长远来看是值得的

基于上述信息,我的想法是:

  • 代码结构-微服务体系结构(MSA)在上述上下文中的应用意味着不分离DAO、业务逻辑等,而更多的是根据业务功能设计系统。例如,如果它是一个电子商务应用程序,那么您可以将发货、购物车、搜索作为单独的服务,这些服务还可以进一步划分为更小的服务。阅读更多关于领域驱动设计的信息
  • 部署单元-将微服务应用程序作为一个独立的部署单元是一项关键原则。因此,保留应用程序的垂直部分,并将其打包为Docker映像,其中包含应用程序代码、应用程序服务器(如果有)、数据库和操作系统(Linux等)
  • 通信-使用MSA,服务之间的通信成为一个关键,因此,一般做法是继续采用面向消息的通信方法(阅读有关MSA的更多信息)

  • PaaS解决方案-有多种可用的PaaS解决方案,您可以应用这些解决方案,这样您就不必担心容器管理、容器编排、自动缩放、配置管理、日志管理和监视等所有其他方面。请参阅以下PaaS解决方案:

  • TIBCO

  • -红帽

  • -红帽

  • 云供应商平台-AWS、Azure和谷歌云所有这些平台都从部署角度对微服务应用程序提供了特定支持,如果您不想部署PaaS Solute,我们可以将其作为替代解决方案使用