我正在尝试为充当Azure前端的网站找出最佳方法。假设用户想要创建VM:
1)用户提交作业
2)作业立即提交给Azure,但需要大约3分钟才能恢复结果。
3)我希望用户提交并继续他们的业务(即不等待),并且DOM会在收到结果时自动更新结果。
我尝试过的事情:
1)芹菜安排任务 - >将结果保存到DB - > JavaScript经常轮询DB并更新DOM
2)JavaScript运行一个AJAX,它与一个通过API与Azure通信以查看作业是否完成的视图对话。完成后,将结果保存到DB并更新DOM
的问题
1)我真的不喜欢这种依赖其他服务并增加更多复杂性的方法。主要问题是芹菜不可靠,可能会运行或可能排队。我还要担心Celery在最终完成任务时获取最新的数据库数据
2)正常工作但数据库没有得到更新,直到用户实际查询数据。 DB读/写也好像太多了。
有更好的方法吗?
答案 0 :(得分:0)
主要问题是芹菜不可靠
小心解释一下?当排队任务的数量同时超过芹菜工人的数量时,它会排队。因此,您可以拥有多个芹菜服务器,每个服务器都有多个芹菜工作者来处理排队的任务。
现在,要解决轮询问题,可以使用websockets。 https://github.com/django/channels
所以你可以做到以下几点:
当用户使用您的webapp时,您只需打开websocket连接并在JS中收听websocket新消息事件。