有一个 app 的后端整体是微服务体系,现在新增一个服务(记为 A )来保存用户对一个开关的选项(也就是 user_id -> pref 的映射)。其他服务可以通过集成 A 的 client 包来实现对 A 接口的调用的,包括查询、修改。现在一共有 B 、C 两个服务在使用。
A 存储的东西修改频率非常低,而 B 、C 对 A 的查询会有很多重复的请求,例如 B 会在短时间内多次查询同一个 user_id 的值,造成网络资源的浪费。因此,我们在 A 的 client 包里加了一个带 TTL 的本地缓存。也就是说,B 查询时如果在 client 里的 cache 能命中,就不向 A server 发起请求了。
B 、C 两个服务的本地各有一个缓存。如果我在 C 服务更新了某个 user_id 的值,可以顺便删除 C 的缓存,但 B 这边感知不到变化,在 B 的本地缓存失效前依然在使用旧值。这种场景一般会怎么处理来让 B 的本地缓存也能更新呢?我应该用什么关键词去网上查询?谢谢大家!
我一个直观的想法是用消息队列,A 的 server 端在收到修改请求后,向消息队列发消息。B 、C 分别监听消息队列,根据收到的消息来使本地缓存失效。但这样的话需要在 client 实现消费者,是不是太重了?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.