Web应用程序后台进程,新手设计问题

Roe*_*ler 9 django background web-applications

经过多年的桌面应用程序开发后,我正在构建我的第一个Web应用程序(我正在使用Django/Python,但这可能是一个完全通用的问题,我不确定).所以请注意 - 这可能是一个超新手的问题......

我的一个用户进程涉及服务器中的繁重处理(即用户输入内容,服务器需要约10分钟来处理它).在桌面应用程序上,我会做的是将用户输入放入受互斥锁保护的队列中,并使用该互斥锁在队列中以低优先级阻塞运行专用后台线程.

然而,在Web应用程序中,一切似乎都面向与HTTP请求的同步.

假设我将数据库用作队列,运行后台进程的最佳实践架构是什么?

Mic*_*ren 7

关于此(至少)有两种思想流派.

  1. 将工作放在队列中,并在Web堆栈外部处理其他内容.

  2. 将工作放在队列中,并在Web堆栈中处理其他内容.

在任何一种情况下,您都可以在某个队列中创建工作单元(例如数据库表),并让某些流程处理它们.

我通常使用数字1,我​​有一个专门的Windows服务来处理这些事情.您也可以使用SQL作业或类似的东西来执行此操作.

第2项的优点是,您可以更轻松地将所有代码保存在一个位置 - 在Web层中.您仍然需要触发执行的东西(例如,加载处理具有足够高超时的工作单元的网页),但这可以通过各种机制轻松完成.