我有一个塔的网应用程序服务Apache(mod_wsgi,prefork).因为阿帕奇,有很多独立运行的进程,我的应用程序代码同时进行。一些非关键任务应用程序没有我想要延迟进行处理背景中的改进"居住"的响应时间。所以我想的任务的队列,许多Apache进程增加任务,该队列,一个独立的蟒蛇过程中处理它们一个接一个,并除去排队。

排队好应该坚持到磁盘,以便排队未处理的任务不是丢失,因为停电,重新启动服务器等。问题是 是什么将是一个合理的方式来实施这样的队列?

作为对的事情我已经试过:我开始跟简单的源码数据库和单一表在它储存的队列项目。在负载检测,增加时的并发级别,我开始得到"数据库锁"的错误,如预期。快速恩'dirty解决是取代源码MySQL--它处理并发问题,但感觉就像一个过分简单的事情,我需要做。的队列相关DB行动也显示了突出在我的分析报告。

有帮助吗?

解决方案

一个消息经纪人喜欢Apache 今后 是一个理想的解决方案。

管道可能如下:

  • 应用程序过程中,负责处理HTTP请求的生成答复的迅速发低优先重任务AMQ队列中。
  • 一个或更多的另一个进程订阅的消耗AMQ队列中并且做什么目的是要做到与这些繁重的任务。

所要求的队列中的持久性是履行开箱由于今后存储的消息是尚未消耗的持久性存储。此外,它的尺度相当好,因为你免费为部署多个HTTP应用程序,多个消费者应用程序和AMQ本身在不同的机器的每一个。

我们使用这样的事情在我们的项目编写蟒蛇利用 跺脚 作为基础的通信协议。

其他提示

一个网络服务器(任何网服务器)是多制作人,单个消费者的过程。

一个简单的解决方案是建立一个 wsgiref 后台服务器,以处理您的后端的请求。

由于这个"后端"服务器的建立使用过技术,这是非常,非常类似于前端网络服务器。除外。它不会产生HTML答复(JSON通常更简单).除此之外,它是非常简单。

你设计的宁静的交易,此后端。你使用的所有各种过特URI分析、授权、认证,等等。你----一般不需要的会议管理,由于宁静的服务器不会通常提供的会议。

如果你获得成严重的扩展性问题,你只需把你的后台服务器中的程序或其他一些网页的引擎,以创建一个多线程的后台。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top