【发布时间】:2019-05-17 08:25:05
【问题描述】:
我正在启动一个个人项目,以了解实现微服务的最佳方式。它可能是经过精心设计的,但它更像是一个学习过程。 这可能无关紧要,但我正在使用.Net Core
我对设计解决方案的想法如下:
- 使用 CQRS 模式,可以轻松分离查询和命令。目前,我有 2 个终点
- 我有一个“手动”API 网关,它将充当我需要的不同微服务的代理
- 使用 NServiceBus 在微服务之间进行通信
问题:
- 我正在考虑使用 Redis 来缓存查询。例如,缓存用户详细信息。但是,由于它是一个缓存,我认为它不应该是事实的来源,这意味着我将同时更新另一个数据存储。根据我对最佳实践的理解,1 个微服务应该只处理 1 个数据存储。因此,我将创建一个仅处理对我有意义的缓存数据的端点。
处理和添加/更新命令的最佳方法是什么?更新缓存并触发事件以更新主数据存储?或者更新数据存储和触发事件来更新缓存。我的感觉是我应该在缓存之前先更新主数据存储(因为我不打算公开和端点来更新缓存,它应该仅用于只读目的)但这会导致一些潜在的不一致。虽然我明白,在微服务世界中,数据是“最终一致的”,这是否意味着对于像更新这样的简单操作,即使他提交了他的更改,用户也可能不会直接更新他的个人数据? - 我可以看到人们越来越提倡事件溯源。如果(目前),我真的不需要审核,甚至不需要重播事件的方法,我需要吗?我有一种感觉,我可以使用消息总线 / sagas 来完成这一切,我认为它比使用事件存储的性能要高得多。我说的对吗?
【问题讨论】:
-
如果很难回答这个问题...您需要事件溯源吗?好吧,既然这是你的个人 POC,为什么不试试看它是否给了你一些东西......
-
看看this
标签: c# redis microservices nservicebus