后端如何处理异步作业
1,后端与 job 作业是完全分离的,中间是用 rebbitmq 进行通信的!也就是说,后端对作业操作只需要发送消息到rebbitmq服务器即可!是由于 job 的完成是耗时的过程!所以采用消息队列来完成异步的处理!
2,当 rebbitmq 服务端发送消息,客户端会进行监听得到消息,采用多线程进行处理,一是job 具体操作处理,一是进行作业的状态进行定时查询处理(死循环)
3,对读写操作采用线程锁的方式,在此处(开启新的进程)是代码来执行脚本,运行状态和错误存储到本地文件之中,所以要频繁的读写。线程里开启进程操作slurm命令行!
4,由于job是耗时的操作,也是状态更改频繁的,因此要时刻的更新数据状态!
5,webhooks 得到的数据是通过rebbitmq 频繁发送的数据,要进行处理,如果和上一个状态不一样,说明状态改变!
6,数据库的插入操作是通过后端进行处理的,此时的状态肯定会随着job进行更改的。
7,一直进行轮训查询状态,是为了保证状态是最新的状态,job 在运行之后不能保证由于自身的原因导致死机,但是数据库还是创建job时的状态,因此需要一直不断的监控并且更新状态。