Django最佳实践,用于将作业和民意调查结果提交到云端的网站

时间:2018-03-22 18:54:23

标签: ajax django azure asynchronous cloud

我正在尝试为充当Azure前端的网站找出最佳方法。假设用户想要创建VM:

1)用户提交作业

2)作业立即提交给Azure,但需要大约3分钟才能恢复结果。

3)我希望用户提交并继续他们的业务(即不等待),并且DOM会在收到结果时自动更新结果。

我尝试过的事情:

1)芹菜安排任务 - >将结果保存到DB - > JavaScript经常轮询DB并更新DOM

2)JavaScript运行一个AJAX,它与一个通过API与Azure通信以查看作业是否完成的视图对话。完成后,将结果保存到DB并更新DOM

的问题

1)我真的不喜欢这种依赖其他服务并增加更多复杂性的方法。主要问题是芹菜不可靠,可能会运行或可能排队。我还要担心Celery在最终完成任务时获取最新的数据库数据

2)正常工作但数据库没有得到更新,直到用户实际查询数据。 DB读/写也好像太多了。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

  

主要问题是芹菜不可靠

小心解释一下?当排队任务的数量同时超过芹菜工人的数量时,它会排队。因此,您可以拥有多个芹菜服务器,每个服务器都有多个芹菜工作者来处理排队的任务。

现在,要解决轮询问题,可以使用websockets。 https://github.com/django/channels

所以你可以做到以下几点:

  • 用户在打开特定网页时或在提交作业后,会自动使用频道与websocket建立连接。
  • 用户提交作业。
  • 作业已加入您的讯息经纪人。
  • 芹菜工人自动轮询代理并执行任务。工作人员将异步执行任务。
  • 完成任务后,通过该用户的回复频道或通过组返回结果(如果您阅读文档,请提供更多信息)。

当用户使用您的webapp时,您只需打开websocket连接并在JS中收听websocket新消息事件。