microservices - 更新/添加为单独的服务以及获取为单独的服务

标签 microservices

我们开始将现有项目迁移到微服务架构中。在观看了大量视频/讲座之后,我们得出的结论是,一项服务应该只完成一项任务,并且只能完成一项任务,并且应该擅长这项任务。服务应围绕名词动词进行设计。

我们有一个基本上具有 CRUD 操作的实体。现在,添加、更新和删除是最少使用的操作,但与这些操作相比,GET 请求过高。通常,更新/添加/删除是由管理员完成的。

我们想到的是将 CRUD 实体分解为两个服务

  • EntityCUDService(创建/更新/删除)
  • EntityLookupService(获取)

现在这两个服务都指向 mongo 中的同一个集合或者说一些 SQL。 现在,如果 EntityCUDService 对集合/表进行了一些更改,则 EntityLookupService 失败。

我们听说过维护语义版本控制,这听起来不错,但我们也听说微服务不应该共享模型/数据源。那么,在我们有大量获取但同一实体有数十次更新/添加的情况下,处理此问题的最佳解决方案是什么

非常感谢任何帮助。

最佳答案

通常,微服务应该管理单个实体。因此,在您的情况下,您可以使用一个微服务来管理实体(用于实体上的各种操作)。现在,如果您想根据读写操作再次拆分服务,那么您将遵循 CQRS 模式。在 CQRS 中,您可以根据读取和写入操作来拆分微服务。因此,现在您将在同一实体上拥有 2 个服务,一个称为命令服务,另一个称为查询服务。我建议首先使用一项服务来管理实体,然后如果需要,将其拆分为更多单独的服务来进行读写操作。同样,如果您要使用 CQRS,请查看事件源,因为它非常适合微服务设计中的 CQRS。

关于microservices - 更新/添加为单独的服务以及获取为单独的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50688223/

相关文章:

node.js - 将我的整体式 NodeJs 应用程序拆分为微服务架构时,我应该考虑哪些事项?

spring - 如何限制扩展微服务中的传出 http 调用速率?

java - 如何使用本地系统上运行的 Spring Boot 应用程序连接到 AWS 上的 DynamoDB?

java - 微服务架构、认证等服务

azure - 如何在 Azure Devops 中从另一个管道有条件地运行一个管道?

java - 微服务架构

http - 如何在golang中为请求和重定向添加值

design-patterns - 微服务中需要事务发件箱模式

logging - Service Fabric 参与者和服务的关联 token

spring-boot - Netflix 功能区和 Hystrix 超时