实现无状态服务双机热备的最简单方式是什么 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
feng32

实现无状态服务双机热备的最简单方式是什么

  •  
  •   feng32 2022 年 6 月 30 日 2368 次点击
    这是一个创建于 1392 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景如下:Web 服务会发布一些工单任务。工单分为一些子步骤,每一个子步骤需要通过调用一些外部 API 来完成。所有 API 调用都是从工作机向 Web 服务发起

    +-----------------------------+ | 高可用的 Web 服务和数据库 | (工单有状态) # Initial -> S1 -> S2 -> ... -> Finish/Error +-----------------------------+ ^ ^ | | HTTP (短连接) # 获取 /更新工单状态 | | +--------+ +----------------+ | 工作机 1 | | 工作机 2 (热备) | -------> 外部 API +--------+ +----------------+ 

    正常情况下,所有的工单都被工作机 1 处理。工作机 2 热备,不处理任何任务,但是可以有心跳。如果工作机 1 宕机,工作机 2 需要能够处理剩下的工单,也可能是一个工单剩余的步骤。

    工作机不能直接连接数据库并加锁,但是可以通过 HTTP 请求间接执行类似的操作

    请问这种场景下,最简单的实现方式是什么?(使用 SpringBoot)

    Paxos, Raft 之类的框架套用在这里是不是太重了?

    10 条回复    2022-06-30 17:28:35 +08:00
    xyjincan
        1
    xyjincan  
       2022 年 6 月 30 日 via Android
    无状态的服务一般也不会固执,Nginx 端口负载均衡?
    GoodRui
        2
    GoodRui  
       2022 年 6 月 30 日   1
    互换硬盘 /头像
    realpg
        3
    realpg  
    PRO
       2022 年 6 月 30 日
    haproxy,keepalived,heatbeart,nginx 啥不行 一个无状态的
    feng32
        4
    feng32  
    OP
       2022 年 6 月 30 日
    @realpg 并不是前面顶一个 nginx ,后面挂两个无状态服务器,状态在数据库里

    工作机 1 和 2 是分别主动发起连接,但是限定只有一个能领到任务、执行任务、更新任务结果
    feng32
        5
    feng32  
    OP
       2022 年 6 月 30 日
    本质上这是一个简化版的分布式任务调度
    realpg
        6
    realpg  
    PRO
       2022 年 6 月 30 日
    @feng32 #4
    你把高可用啥的改成 MQ
    工作机 1 工作机 2 改成消费者
    就明确了
    killva4624
        7
    killva4624  
       2022 年 6 月 30 日
    解耦,任务发布到 MQ 里,让工作机 1 和 2 自己去消费。控制每次只发一个任务。
    rrfeng
        8
    rrfeng  
       2022 年 6 月 30 日
    工作机启动的时候往数据库里抢占加锁,带个 TTL ,抢到的每次 TTL 到期前去更新。

    如果 TTL 过期,就允许重新抢占。
    sujin190
        9
    sujin190  
       2022 年 6 月 30 日
    MQ 加工作机 1 工作机 2 两个消费者是最简单可靠的了,这不需要想了吧
    ltkun
        10
    ltkun  
       2022 年 6 月 30 日 via Android
    最简单就是公有云最佳架构部署 自带自带扩展
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5529 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 90ms UTC 07:11 PVG 15:11 LAX 00:11 JFK 03:11
    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