我正在开始一个个人项目,以了解实现微服务的最佳方法。它可能是经过通用设计的,但更像是一个学习过程。 可能无关紧要,但我使用的是.Net Core
我对设计解决方案的看法如下:
问题:
答案 0 :(得分:3)
架构决策与权衡有关,并且既然您定义了需求,那么一切都会进行(尤其是关于q.2) 关于q1。对于每个服务而言,将缓存独立用作一个公共资源(从部署角度来看,您可以使用单个实例来托管不同的缓存)是有意义的,将缓存API与您自己的服务包装在一起似乎并不多当然。
关于处理命令-最终还是可以选择的-您可以同时更新真相源和事务性缓存(实际或近似取决于您的需要),您可以在查询后更新中标记要更新(未缓存)版本-还有谁说您甚至需要缓存,并且可能还有其他几种选择
答案 1 :(得分:1)
我不确定从哪里开始,但我会尽力回答您的一些问题。但是我100%与Arnon Rotem-Gal-Oz在一起。这都是关于权衡的问题。
使用消息传递时,队列中可能会有一条消息用于订购已耗尽库存的物料。换句话说,尽管客户(和系统)认为可以订购产品,但是当消息到达时,它就不再有库存了。从技术角度来看,您可以说这意味着您的数据不一致。
从业务角度看,这意味着您可能会退还款项,让客户等待库存补充或为他们提供替代方案的另一种情况。企业始终可以找到一种解决不一致问题的方法。换句话说,现实世界已经可以很好地处理最终一致性。
关于最终一致性的另一件事。很多人最终都会遇到问题,但是在引入缓存时他们不会眨眼。但是缓存永远不会与数据存储100%同步,因此您从缓存中检索的数据已经不与数据存储100%一致,因此最终还是一致的。我希望能回答您有关最终一致性的问题? o:-)
我可以看到人们越来越拥护事件采购。如果(目前)我真的不需要审核甚至不需要重播事件的方式,我是否需要它?
即使您需要审核或重播事件的方法,我也没有发现引入事件来源的任何理由。
注意:我指的是一种事件源,您可以根据某些事件存储中的事件来构建(或合并)对象(或集合)。
只需将您发送的消息存储在某个地方。这样,您便拥有了审核日志,并且可以重播事件。由于您已经在使用NServiceBus,因此可以使用其审核功能。
如果您想了解所有这些信息,请给我发送电子邮件至support@particular.net,我们可以对此进行进一步讨论。