微服务和多个数据库

时间:2016-12-08 16:06:19

标签: python django rabbitmq celery

我写了MicroServices,比如auth,location等。 所有的微服务都有不同的数据库,例如,我的所有数据库都有这些服务的位置。当我的任何项目中我需要一个用户的位置时,它首先查看缓存,如果没有找到它就会访问数据库。到目前为止一直很好。现在我的任何一个不同的数据库中的位置发生了变化,我需要在其他数据库中更新它以及更新我的缓存。

目前我创建了一个模型(称为订阅),其中url作为其字段,每当在任何数据库中更改位置时,都会创建此订阅的对象。正在运行的周期性任务会检查订阅模型,当它找到此类对象时,它会访问其他服务的api并更新位置并更新缓存。 我想知道是否有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:2)

  

我想知道是否有更好的方法可以做到这一点?

"更好"完全是主观的。如果它符合您的需求,那就没问题了。

但是,需要考虑的事项是:不要在多个地方存储相同的信息。

如果您需要地址,请每次从提供地址的服务中查找。

这可能会影响性能,但它消除了在任何地方复制数据的问题。

另一种选择是更积极主动的做法,正如评论中所建议的那样。

而不是为更改创建任务列表,并定期执行此操作,在更改发生时立即在rabbitmq上发送消息。让每个需要知道的服务,获取消息的副本并更新它自己的信息缓存。

但是,请记住。每当你有多个信息副本时,你就会降低"正确性"作为一个整体的系统。您的某个应用中发现的信息总是有可能过时,因为它没有从官方来源获得更新。