【发布时间】:2018-04-07 12:38:00
【问题描述】:
我正在开发一个整体系统。它的所有代码都在一个存储库中(Web API 和后台工作人员)。系统是用 Nodejs 编写的,MongoDB (Mongoose) 用作数据存储。我的目标是为项目的发展设定一条新路径。起初我想知道我是否可以转向基于微服务的架构。
单体架构会产生一些问题:
- 如果我的后台工作人员需要扩展。尽管只使用了其中的一小部分,但我必须将所有项目部署到服务器。
- 代码更改时必须重新部署所有系统。如果在重新部署系统时支付处理器调用 webhook 怎么办?
使用微服务的优势非常明显:
- 单个微服务的代码库更小。更容易推理。
- 能够选择最适合特定用例的编程工具。
- 更易于扩展。
查看当前代码,我注意到 Mongoose ODM(对象文档映射器)模型在所有项目中用于创建、查询和更新数据库中的模型。作为一个好的编程原则,所有这些与数据库的交互都应该被抽象出来。业务逻辑不应泄漏到其他系统层。我可以通过引入存储库模式(域驱动设计)来做到这一点。虽然代码仍然在 web api 和后台工作人员之间共享,但这并不是一项艰巨的任务。
如果我决定将存储库提取到独立的微服务中,那么就会出现所有问题:
- 必须引入某种查询语言来适应复杂的搜索查询。
- 接口必须提供一种在不通过网络返回所有数据库文档的情况下迭代搜索结果(基于光标的导航)的方法。
由于项目处于早期阶段,并且我是唯一的开发人员,因此使用基于微服务的架构似乎有点过头了。也许我应该考虑其他方法?
将业务逻辑和与数据库的交互提取到单独的存储库中并在服务之间共享以避免服务之间复杂的通信协议?
【问题讨论】:
标签: node.js web-services domain-driven-design microservices