使用原生 asyncio 和 zeroMQ 编写的异步 rpc 库,现已支持代理节点的互通 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
firejoke
V2EX    程序员

使用原生 asyncio 和 zeroMQ 编写的异步 rpc 库,现已支持代理节点的互通

  •  
  •   firejoke 2024-03-15 17:52:18 +08:00 1403 次点击
    这是一个创建于 579 天前的主题,其中的信息可能已经有所发展或是发生改变。

    gate-rpc

    一个月前写的一个异步 rpc 库
    因为初衷就是为了优化一个使用中的分布式 NoSQL 软件而写的,所以在 rpc 调用没啥问题后,就开始写代理节点的互通,参考之前的 Client-Majordomo-Worker 的流程,新增了 GATE_COMMAND 一系列命令和处理 Majordomo 节点间的请求和回复。
    节点间是使用的 ZeroMQ 的 ROUTE socket ,因为 ROUTE socket 的限制,所以在连接其他节点前需要先使用一个临时的 ZeroMQ REQ socket 打个招呼获取对方的 id ,然后才能使用自身的 ROUTE socket 连接上去。
    下一步就是使用这个 rpc 库写一个分布式的 NoSQL 软件。

    6 条回复    2024-03-16 22:57:18 +08:00
    lesismal
        1
    lesismal  
       2024-03-15 18:18:46 +08:00
    我委婉点评价吧:用消息队列实现 RPC 真的是我见过的最差的设计之一了。。
    firejoke
        2
    firejoke  
    OP
       2024-03-16 11:05:38 +08:00 via Android
    @lesismal 为什么呢?也许你没用过 ZeroMQ ?(接受不同意见,接受所有建议,感谢你浪费时间)
    L1shen
        3
    L1shen  
       2024-03-16 11:37:05 +08:00
    zeromq 最好别看是一个消息队列吧,当成一个通信库看可能好一些
    firejoke
        4
    firejoke  
    OP
       2024-03-16 11:52:34 +08:00 via Android
    @L1shen 是的,我就是当网络通信用的,他的文档里示例也是作为网络库最多
    lesismal
        5
    lesismal  
       2024-03-16 15:15:22 +08:00
    对不起,#1 是我草率了,没了解过 zeromq 、以为是消息队列发布订阅的方式实现的 rpc ,如果只是用 zeromq 做网络库、那 ok ,我向 OP 道歉!

    简单扫了下 gaterpc 代码,其他一点看法不知道是否准确,python 我不熟,如果不对请指正:
    1. 一些地方用了 await asyncio.sleep(1),例如 connect 相关的,connect 之后 await asyncio.sleep(1),这个感觉应该根据实际的连接成功为好,固定等待这么久可能性能上不够友好了
    2. 看到注释里有这么一段:
    “客户端,TODO: 对于没有收到回复的请求记录并保存下来,可以设置重试次数来重新请求。”
    不建议框架层自己做重试,因为 timeout 并不代表对方一定没收到,有可能对方收到了请求并进行了处理但连接异常、
    回包没收到,因为框架层不知道应用层业务特点、无法保证幂等之类的,由用户在应用层自行处理重试可能会更好
    firejoke
        6
    firejoke  
    OP
       202-03-16 22:57:18 +08:00 via Android   1
    @lesismal connect 后的一个休眠是最近加的代理节点间的一个临时连接,因为用的是 REQ socket ,在异步处理时,需要先用 asyncio.sleep 让出当前运行时,临时连接用完后,使用节点间的 ROUTE socket 相互第一次连接,也需要使用 asyncio.sleep 让出运行时,用 sleep(0.1)或者用被特殊处理的 sleep(0)也行,这里当时测试用了 sleep(1)后没改,是个错误,谢谢!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5157 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 09:26 PVG 17:26 LAX 02:26 JFK 05:26
    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