我已经写了诸如auth,location等的微服务。所有微服务都有不同的数据库,对于这些服务的所有数据库中,都有EG位置。在我的任何项目中,我需要用户的位置时,它首先在缓存中查看,如果找不到的话,它会击中数据库。到目前为止,一切都很好。现在,当我的任何不同数据库中更改位置时,我需要在其他数据库中进行更新并更新我的高速缓存。
当前,我以URL为字段制作了一个模型(称为订阅),每当在任何数据库中更改位置时,都会创建此订阅的对象。一个周期性的任务正在运行,该任务检查订阅模型时,当它找到此类对象时,它会击中其他服务的API,并更新位置并更新缓存。我想知道是否有更好的方法?
我想知道是否有更好的方法?
"更好"完全是主观的。如果满足您的需求,那很好。
要考虑的东西:不要将相同的信息存储在一个以上的地方。
如果您需要地址,请每次提供地址的服务查找。
这可能是一个性能的命中,但它消除了复制数据的问题。
另一种选择将是一种更为主动的方法,如评论中所建议的。
当更改发生时,不要立即在兔子上发送一条消息,而不是为更改创建任务列表。让每个需要知道的服务,获取消息的副本并更新其自己的信息的缓存。
不过,请记住。每当您拥有多个信息的副本时,都会减少整个系统的"正确性"。在您的一个应用程序中找到的信息始终可能会过时,因为它没有从官方来源获得更新。