Web services 微服务粒度:是否按域模型?
在构建面向微服务的应用程序时,我想知道什么是合适的微服务粒度 让我们想象一个应用程序,包括:Web services 微服务粒度:是否按域模型?,web-services,rest,microservices,Web Services,Rest,Microservices,在构建面向微服务的应用程序时,我想知道什么是合适的微服务粒度 让我们想象一个应用程序,包括: 一组不同的资源类型,其中每个资源映射一个给定的业务模型。(例如:在todo应用程序中,资源可以是用户、TodoList和TodoItem…) 这些资源中的每一个都保存在可以复制的NoSQL数据库中 这些资源中的每一个都是通过RESTAPI公开的 该应用程序管理一个内部聊天室 用于收集聊天室和REST Api交互的Api网关 应用程序前端:连接到API网关的SPA应用程序 在考虑微服务如何满足此应用
- 一组不同的资源类型,其中每个资源映射一个给定的业务模型。(例如:在todo应用程序中,资源可以是用户、TodoList和TodoItem…)
- 这些资源中的每一个都保存在可以复制的NoSQL数据库中
- 这些资源中的每一个都是通过RESTAPI公开的
- 该应用程序管理一个内部聊天室
- 用于收集聊天室和REST Api交互的Api网关
- 应用程序前端:连接到API网关的SPA应用程序
在考虑微服务如何满足此应用程序的需求时,第一种(也是最天真的)方法是:
另一种方法是将服务1拆分为系统中存在的业务模型数量相同的服务。(我们称这些服务为资源服务) 我想知道第二种方法的好处是什么。 事实上,我看到这种方法有很多缺点:
- 需要设置服务间通信过程
- 当请求表示与资源Y有关系的资源X的服务时,需要做更多的工作(即:服务间请求)
- 更多的devops工作
- 在资源服务之间共享公共代码更加困难
- 业务逻辑放在哪里
当开始一个新的项目时,第二种方法对我来说是一种过度设计的工作 我想从第一种方法开始,然后根据观察到的需求将monolith资源服务拆分为几个特定的服务,这样可以最大限度地降低复杂性和风险 你对此有什么看法? 有什么最佳实践吗
非常感谢 根据定义,第一种方法不是微服务方式 是的,我们的想法是将每个服务拆分为有限的上下文,一个用于用户,一个用于库存,待办事项等 微服务的概念非常简单,假设:
如果您的系统不可避免地存在大量的分布式事务,那么可以考虑使用/制作一些CQRS迷你框架作为“共享代码基础结构组件”/通信协议 这是微服务或任何其他SOA方法的关键问题。这是理论符合现实的地方。一般来说,您不应该为了它而强制使用微服务体系结构。这应该很自然地来自功能分解(自上而下)和操作、技术、开发和运营需求(自下而上)。第一种方法更接近您需要做的事情,但是在第一步,不要太关注t