【发布时间】:2017-07-24 12:47:28
【问题描述】:
在构建面向微服务的应用程序时,我想知道合适的微服务粒度是多少。
让我们想象一个包含以下内容的应用程序:
一组不同的资源类型,其中每个资源映射一个给定的业务模型。 (例如:在待办事项应用中,资源可以是 User、TodoList 和 TodoItem...)
这些资源中的每一个都保存在可以复制的 NoSQL 数据库中。
这些资源中的每一个都通过 REST Api 公开
应用程序管理内部聊天室。
用于收集聊天室和 REST api 交互的 Api 网关。
应用前端:连接API网关的SPA应用
在考虑微服务如何满足此应用程序的需求时,第一种(也是幼稚的)方法是:
- 一个用于管理所有资源和业务逻辑的整体服务: 管理是指为所有这些资源提供 REST API 并处理这些资源在数据库中的持久性。
- 每个数据库副本一个服务。
- 一种使用 websocket 或其他方式提供内部聊天室的服务。
- 一项身份验证服务。
- api 网关的一项服务。
- 为 SPA 前端提供静态资产的一项服务。
另一种方法是将服务 1 拆分为与系统中存在的业务模型一样多的服务。(我们将这些服务称为资源服务)
我想知道第二种方法有什么好处。 事实上,我看到这种方法有很多缺点:
- 需要设置服务间通信进程。
- 当请求代表资源 X 且与资源 Y 有关系的服务时,需要做更多的工作(即:服务间请求)
- 更多 devops 工作。
- 在资源服务之间共享公共代码更加困难。
- 把业务逻辑放在哪里?
当开始一个新项目时,第二种方法对我来说有点过度设计的工作。
我觉得从第一种方法开始,然后根据观察到的需求将单体资源服务拆分为几个特定的服务,这样可以最大限度地降低复杂性和风险。
您对此有何看法? 有什么最佳做法吗?
非常感谢!
【问题讨论】:
标签: web-services rest microservices