求问项目间同步数据的解决方案

2018-12-31 11:48:06 +08:00
 leisurelylicht

我现在有两个项目 A 和 B。都是 django+psgresql 结构的。

A 项目的主要功能是定时去查询数据并保存到本地。B 的主要功能是从各种其他项目中获取数据并保存,做关联展示的。

现在需要让 A 每次查询完数据后能把所有的数据都更新到 B 项目中。

我自己想了两种方案。

  1. 是 B 项目出一个 post 的创建记录的接口,A 项目每次查询结束后访问 B 的接口把数据都吐给 B。
  2. A 项目出一个获取所有数据的接口,B 项目出一个启动异步更新任务的接口。然后每次 A 查询结束后访问一下 B 的启动任务的接口,让 B 中启动一个异步任务去访问 A 的接口拉取数据。

但是两种方案从安全认证,稳定性,可靠性和设计实现等方面讲我觉得都有点蠢。

也有想过用 django orm 连接两个数据库。但是觉得会提高耦合度。

想问下这种情况有没有什么成熟的解决方案?

第一次设计这种分散的系统没什么经验。

1876 次点击
所在节点    Python
4 条回复
sagaxu
2018-12-31 12:41:22 +08:00
1. 直接读库,成本最低,scale 最差。
2. A 提供查询接口,普通青年的选择。
3. B 提供一个 mq,A 把 CUD 作为 event 入队。
4. CQRS,成本最高,scale 最好。
loveCoding
2018-12-31 20:18:30 +08:00
用过消息队列吗?
leisurelylicht
2019-01-01 19:41:14 +08:00
@sagaxu 多谢,我大概看懂了。有个小问题想问下 scale 和 CUD 在具体是什么意思?


@loveCoding 就是 mq 吧,用法应该就像 sagaxu 的第 3 方案吧。
loveCoding
2019-01-01 23:29:04 +08:00
@leisurelylicht 根据你的实际情况选最简单有效的方案实现,不要盲目追求架构引入不必要的复杂性.无论是采用什么方案来实现业务处理的代码是一样的,B 只对上层暴露一个处理业务的函数 ,区别只是接收消息的方式不同 .

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/522689

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX