我用词可能不太准确,具体情况就是,我们业务会设计到调用某些模型计算,这些模型有的是 java ,或者 python 源码的,有的是 exe ,甚至是 linux 下的可执行程序,总值千奇百怪的。我们只要是组装参数丢给模型,然后模型会经过一段时间返回一些结果,有可能是文件,有可能就是一个数组,问题就出现在这个时间上。
刚开始涉及到的模型是 java 的,计算时间也短,十来秒就结束了,我们采用的方案就是直接接口调用,等待响应就好了。
过了一段时间,涉及到的模型计算时间在半个小时晚上,就涉及到了数据的返回,已经这次计算的时候还要判断上次计算是否结束。(因为模型都是只能一次跑一个,没办法多线程运行。)计算时间长了过后,等待响应肯定是不行了,我们又采用了 grpc 的连接。又因为这个的参数组装加实际使用肯不方便,用着用着又搁置了。
现在我们采用的方案就是:设置全局变量,标志模型是否运行状态,还是调用 http 接口,本次计算后,不会等待响应,模型那边封装个通知接口,模型计算完成之后调用业务的通知接口返回参数或者文件,完成一次计算。
各位经验丰富的彦祖有什么更好,更合适一些的建议吗?感激不尽。
![]() |
1
BingoXuan 114 天前
弄个简单的消息队列?
|
![]() |
2
otakustay 114 天前
每次计算分配一个任务 id ,计算端把自己进度以 id 为 key 入库,然后用 id 轮询状态?轮询还是 websocket 还是啥的就无所谓了,变成 id 以后都是简单逻辑
|
![]() |
3
cat 114 天前
消息队列+轮询+完成回调,搞了好几个这种了
|
![]() |
4
javalaw2010 114 天前
二楼的方案可行,到这一步的话,其实你们架构上要调整一下了,模型侧要搞个平台之类的,然后对外提供统一的接口层,提供同步和异步两种调用方式,速度快的用同步,速度慢的用异步,异步的话就用 submit/query 的方式实现,简单一点的话也可以搞 SSE 实现。
|
5
leonhao 114 天前
异步批处理作业
|
6
z1829909 114 天前 via Android
异步任务加轮询,最好有一个服务或者程序能把这些不同的模型的入参出参整理一下,集中干脏活,提供统一的 API 出去
|
7
AlexJ8175 114 天前
双向队列
|
![]() |
8
kas0yo 114 天前
直接接 slurm ,算完发邮件
|
![]() |
9
oneisall8955 PRO 异步 hook 机制
|