📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
查看: 1496| 回复: 5
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] 工作上遇到的小疑惑

🔗
Raiy | 只看该作者 |倒序浏览
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
不懂就问:




组内最近要做一个小项目: 将第三方公司的data存到我们组的DB给公司内其他组使用。有几个requirements:
  • 第三方不提供Web hook之类的active push,所以我们只能固定几分钟就poll一次他们的API,更新到我们自己的Postgres
  • Data的变化(新增或删除),要主动push到Message Queue给其他组consume,所以我们要和DB内的旧资料做comparison
  • 除了MQ外,要再提供Http API,必要时其他组可以用来查询任意资料


一开始我没想太多,全都设计给一个service做,像这样:

Data source -> service_A -> DB

但Manager要求先把Http API切出来另外弄一个service,如果Http呼叫太多可以分开scale up。但这样的情况就会变成2个service操作同一个DB,他(manager)认为不好,一个DB应该只给一个service操作。于是变成:

Data source -> service_A  ->  service_B -> DB

service_B提供Http API。任何其他service(例如service_A)要access DB都要透过service_B,类似DB专门的proxy
service_A负责poll, data comparison然后push MQ。但因为comparision需要DB里面的data,所以service_A要先去呼叫service_B

但问题来了,因为需要考虑發送push MQ失败的状况下DB得roll back,不然会造成inconsistency。在原本service_A直接操作DB下,我用transaction,如果发MQ失败就roll back就好。但现在service_A没连DB,要透过Http给service_B....我不知道这怎麽roll back...

另一种选项就是把发MQ的工作给service_B,但这样会违反当初希望service_B单纯做DB proxy的用意。而且实作上code多较redundant... 因爲service_A要跟service_B要DB的资料进行compare,之后又要反过来告诉service_B哪些要发MQ,有點拐彎


请问最佳的解法是什麽?


PS: 楼主只有2年经验 而且是半路转码 小白一枚请包涵...谢谢

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分


上一篇:[保姆级教程]90元买到原价199刀的educative年费的办法
下一篇:一文总结存储引擎和相关资料分享
全局:
Raiy 发表于 2023-03-17 08:49:11
我确实想过这样设计  service_A可以read and write, full control。而service_B只能read-only
不过manager还是认为DB由单一service操
第二个方案的好处主要是为了解决如果你的mq失败了然后db需要roll back的情况,如果你有两个db,然后db1在mq成功之后再向db2发送diff的话,会避开这个问题。不过这个的问题是会导致HTTP API在query db2的时候造成短暂的数据延迟/inconsistencies

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
建议用原始的方案就好了,解决ServiceA在多个实例情况下,只能有一个在拉取数据就好,还需要解决 scale down情况下 如果刚好摘掉的是拉取数据的那台实例,那么需要由另一个存活的实例接管这个拉取数据的操作。如上控制可以基于分布锁来做.

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
可能没完全理解你的问题,但是能不能限制HTTP API对db是只读操作?公司内所有组想要改db的数据的话,都应该通过service a进行。这样的话,可以给db搞几个replica供HTTP API使用。

当然如果你们公司想要通过HTTP服务来写入db的话,我在想是不是能准备两个db。service a从第三方pull来数据,存入db1同时diff进message queue,如果mq成功了,就把diff写入db2。然后你们公司内部的HTTP API只对db2进行读写操作

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
问下gpt4,看看到底能不能取代码农
回复

使用道具 举报

🔗
 楼主| Raiy 2023-3-17 23:49:11 | 只看该作者
全局:
冬冷叶落 发表于 2023-3-17 01:03
可能没完全理解你的问题,但是能不能限制HTTP API对db是只读操作?公司内所有组想要改db的数据的话,都应该 ...

我确实想过这样设计  service_A可以read and write, full control。而service_B只能read-only
不过manager还是认为DB由单一service操作就好 这样万一以后DB schema需要扩充或是修改 不用改那麽多service...

我觉得他说的也不能算错 我们目前只poll了data某些的attribute (项目刚开始) 不能保整以后领导不会要求把其他attribute也要求加进来。但感觉上DB只能让单一service access的要求让流程变複杂了...



第二个建议没看懂 多一个DB的优点是什麽?

谢谢回复

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表