Re: 有一个消息同步的问题请教各位 dalao - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
blessingcr
V2EX    程序员

Re: 有一个消息同步的问题请教各位 dalao

  •  
  •   blessingcr 2024-11-22 15:39:13 +08:00 1534 次点击
    这是一个创建于 371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文: https://v2ex.com/t/1091247 思考着考虑了一下以下形式 不知道这样做有没有什么问题 辛苦各位 dalao 指点(我帮你或我吊你都行的

    https://imgur.com/a/omTULpP

    csys
        1
    csys  
       2024-11-22 16:03:26 +08:00   1
    槽点过多……
    这不就是并发一致性问题么

    无论是同步的 http ,还是异步的 mq ,你这业务场景都是命令消息,都是请求-响应模式的
    一致性冲突的话直接把该失败的请求失败掉不就行了

    http 就不说了,mq 的话

    1.:发送请求上架消息,等待上架结果消息
    2.:处理请求上架消息,发布上架结果消息
    3.:收到上架结果消息,完成上架

    如果这个流程时间很长的话,就给个“上架中”的中间状态来跟踪
    锁用来保证局部的一致性

    关区块链啥事啊,你这不是中心化的数据存储吗

    你这个图也挺抽象的,第一次见到这种图,solidworks 画的吗
    blessingcr
        2
    blessingcr  
    OP
       2024-11-22 16:17:13 +08:00
    @csys 最后没有用区块链,因为没经验线上问题怕处理不了
    mq 也不是不行,主要是多个业务耦合,上架的不能只处理上架,下架也不能只处理下架,同一关联的商品业务之间需要确保串行,但是不同商品的业务之间不需要保证串行。
    为什么不能用纯 MQ 完成呢?因为这个 A 系统需要对外,B 系统是很多个的,有的在内网有的在外网,MQ 不能暴露在外网。
    所以有一个奇怪的中间件类似 mq 的服务,那为什么这个服务需要一个像区块链一样的东西呢?因为需要确保对于某一业务而言消费串行。
    csys
        3
    csys  
       2024-11-22 16:49:12 +08:00
    @blessingcr

    你这交互是 请求-响应 模式的,内部实现可以用 http grpc 或者 mq 都行

    > 有的在内网有的在外网,MQ 不能暴露在外网
    mq 是个内部系统的基础设施,和外界交互肯定还是得用 [接口] 啊
    比如其中一个选择就是 B 系统启动是注册自己的位置,提供一个监听接口,A 和 B 通讯的时候调用 B 注册的接口
    或者 A 系统将待发送的消息放在 outbox ,B 系统通过 polling 来取消息
    或者 更简单的,直接建立 websocket 连接,使用类似聊天室的框架(比如 signalr ),单播、广播也一块支持了
    类似的方案到处都是

    > 确保对于某一业务而言消费串行

    这个和区块链有啥关系,用区块链性能不更低了
    这就看一致性在哪保证,如果是数据库来保证就是用数据库事务,你反正也是中心存储的
    如果是分布式系统,数据分散在不同数据库,就用分布式锁来保证强一致性,或者 saga 来实现最终一致性
    blessingcr
        4
    blessingcr  
    OP
       2024-11-22 17:31:25 +08:00
    @csys
    内部无所谓
    > 比如其中一个选择就是 B 系统启动是注册自己的位置,提供一个监听接口,A 和 B 通讯的时候调用 B 注册的接口
    或者 A 系统将待发送的消息放在 outbox ,B 系统通过 polling 来取消息
    这个就是这个图右下角,主动拉取,类似于这个 outbox ,至于这个请求究竟是 https ,tcp , 还是 websocket 无所谓

    > 这个和区块链有啥关系,用区块链性能不更低了
    这个类似于原文中的有人提到过,用 mq 细分业务,业务相互耦合的放在一起,每一个 topic 是一个链,我这里这个中心化消息服务只是类似的做了一个简单的 queue ,存的结构是一个链式的结构
    用区块链性能并不更低的想法在于,一个有智能合约,可以减少 AB 系统之间的请求,有些直接找链条要就行了,第二个不是做成一条链,可以做成多条。
    这个和区块链有关系吗? 没有,只是样子像


    > 如果是分布式系统,数据分散在不同数据库,就用分布式锁来保证强一致性,或者 saga 来实现最终一致性
    当然有锁,锁的时候只要系统 A 保证他写入顺序,其他的系统 B 因为是通过拉取的方式获得数据,所以一定顺序,拉取后的消息系统 B 自行保证业务耦合的地方顺序即可
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2870 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 10:56 PVG 18:56 LAX 02:56 JFK 05:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86