V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
t298
V2EX  ›  科技

关于“长时间计算”的请求方式的解决方案。

  •  
  •   t298 · 114 天前 · 1414 次点击
    这是一个创建于 114 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我用词可能不太准确,具体情况就是,我们业务会设计到调用某些模型计算,这些模型有的是 java ,或者 python 源码的,有的是 exe ,甚至是 linux 下的可执行程序,总值千奇百怪的。我们只要是组装参数丢给模型,然后模型会经过一段时间返回一些结果,有可能是文件,有可能就是一个数组,问题就出现在这个时间上。

    刚开始涉及到的模型是 java 的,计算时间也短,十来秒就结束了,我们采用的方案就是直接接口调用,等待响应就好了。

    过了一段时间,涉及到的模型计算时间在半个小时晚上,就涉及到了数据的返回,已经这次计算的时候还要判断上次计算是否结束。(因为模型都是只能一次跑一个,没办法多线程运行。)计算时间长了过后,等待响应肯定是不行了,我们又采用了 grpc 的连接。又因为这个的参数组装加实际使用肯不方便,用着用着又搁置了。

    现在我们采用的方案就是:设置全局变量,标志模型是否运行状态,还是调用 http 接口,本次计算后,不会等待响应,模型那边封装个通知接口,模型计算完成之后调用业务的通知接口返回参数或者文件,完成一次计算。

    各位经验丰富的彦祖有什么更好,更合适一些的建议吗?感激不尽。

    9 条回复    2025-05-12 18:50:01 +08:00
    BingoXuan
        1
    BingoXuan  
       114 天前
    弄个简单的消息队列?
    otakustay
        2
    otakustay  
       114 天前
    每次计算分配一个任务 id ,计算端把自己进度以 id 为 key 入库,然后用 id 轮询状态?轮询还是 websocket 还是啥的就无所谓了,变成 id 以后都是简单逻辑
    cat
        3
    cat  
       114 天前
    消息队列+轮询+完成回调,搞了好几个这种了
    javalaw2010
        4
    javalaw2010  
       114 天前
    二楼的方案可行,到这一步的话,其实你们架构上要调整一下了,模型侧要搞个平台之类的,然后对外提供统一的接口层,提供同步和异步两种调用方式,速度快的用同步,速度慢的用异步,异步的话就用 submit/query 的方式实现,简单一点的话也可以搞 SSE 实现。
    leonhao
        5
    leonhao  
       114 天前
    异步批处理作业
    z1829909
        6
    z1829909  
       114 天前 via Android
    异步任务加轮询,最好有一个服务或者程序能把这些不同的模型的入参出参整理一下,集中干脏活,提供统一的 API 出去
    AlexJ8175
        7
    AlexJ8175  
       114 天前
    双向队列
    kas0yo
        8
    kas0yo  
       114 天前
    直接接 slurm ,算完发邮件
    oneisall8955
        9
    oneisall8955  
    PRO
       114 天前
    异步 hook 机制
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3961 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:53 · PVG 08:53 · LAX 17:53 · JFK 20:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.