假设我们不会使用分布式缓存,因为我们希望我们的微服务是独立的,并且它们没有多个单一的故障点。要么我们将有内存缓存(每个微服务实例中的简单hashmap ),要么每种服务都有一个REDIS。
如果服务A需要来自服务B的一些数据,那么它将缓存REDIS-A中的值。问题来了:当B在接收到某个修补程序请求后更改数据时,它如何也可以使REDIS-A中的数据失效?
比方说,我们不想为此使用任何形式的消息传递(这不是过火了吗?)
发布于 2019-03-08 14:34:14
哦,分布式系统的乐趣。解决这一问题的一般方法有两种:
您可以继续使用这种缓存策略,并接受服务A通常会收到过时的数据。这只是一个性能与一致性的权衡。您可以根据需要对此折衷进行优化,例如,在一段可接受的短时间之后,将缓存项过期。
或者:
您可以停止维护服务A的缓存。相反,它总是通过B的普通API直接联系服务B,就像普通的微服务一样。
因此,服务B有责任以某种方式回答这一请求。例如,B可以为最近的请求维护缓存。B还能够在数据更改时过期缓存项,从而能够提供一致的响应。
此缓存是B. A的内部缓存,不需要了解此缓存,只需使用B的正常接口即可从中获益。
https://softwareengineering.stackexchange.com/questions/388267
复制相似问题