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

128 天前
 t298

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

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

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

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

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

1492 次点击
所在节点   科技
9 条回复
BingoXuan
128 天前
弄个简单的消息队列?
otakustay
128 天前
每次计算分配一个任务 id ,计算端把自己进度以 id 为 key 入库,然后用 id 轮询状态?轮询还是 websocket 还是啥的就无所谓了,变成 id 以后都是简单逻辑
cat
128 天前
消息队列+轮询+完成回调,搞了好几个这种了
javalaw2010
128 天前
二楼的方案可行,到这一步的话,其实你们架构上要调整一下了,模型侧要搞个平台之类的,然后对外提供统一的接口层,提供同步和异步两种调用方式,速度快的用同步,速度慢的用异步,异步的话就用 submit/query 的方式实现,简单一点的话也可以搞 SSE 实现。
leonhao
128 天前
异步批处理作业
z1829909
128 天前
异步任务加轮询,最好有一个服务或者程序能把这些不同的模型的入参出参整理一下,集中干脏活,提供统一的 API 出去
AlexJ8175
128 天前
双向队列
kas0yo
128 天前
直接接 slurm ,算完发邮件
oneisall8955
128 天前
异步 hook 机制

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1131087

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX