python - 使用大型 mod_wsgi 应用程序最大化 apache 服务器实例

标签 python database django apache mod-wsgi

我正在编写一个培根预言型网站,该网站涉及对非常大的有向图(> 500 万个节点,每个节点平均可能有 30 个出站边)进行广度优先搜索。除了显示一些主要是文本的页面(它的工作原理、联系信息等)之外,这基本上也是该网站要做的所有事情。我目前有一个在 Python 中运行的测试实现,但即使使用 Python 数组来有效地表示数据,也需要 >1.5GB 的 RAM 来保存整个数据。显然,对于像这样的低级算法问题,Python 是错误的语言,因此我计划使用 Python/C 绑定(bind)以 C 语言重写大部分内容。我估计这将需要大约 300 MB 的 RAM。

根据我当前的配置,这将通过 apache 2.2.14 中的 mod_wsgi 运行,该版本设置为使用 mpm_worker_module。然后,每个 apache 子服务器将加载整个 python 设置(加载 C 扩展),从而使用 300 MB,而我只有 4GB 的 RAM。这将需要一些时间来加载,并且看起来它可能会使服务器实例的数量低于其他情况。如果我理解正确的话,像这样的数据密集型(而不是客户端交互密集型)任务通常会通过设置 SQL 数据库或所有服务器进程都可以查询的某种东西来与服务器分离。但我不知道有哪个数据库框架可以满足我的需求。

那么,如何进行呢?是否值得尝试设置一个与网络服务器分离的数据库,或者以其他方式将应用程序移到比 mod_wsgi 更远的地方,以便可能运行更多的服务器实例?如果是的话,这怎么办?

我的第一印象是数据库,而不是服务器,永远是限制因素。看起来典型的 Apache mpm_worker_module 配置无论如何都有 ServerLimit 16,所以我可能只会再获得几台服务器。如果我确实将数据库与服务器分离,我还必须有某种方法来运行数据库的多个实例(我已经知道,仅一个实例可能无法满足我想要支持的流量级别)并且让他们与服务器相处得很好。所以我可能大部分回答了我自己的问题,但这是一种奇怪的情况,所以我认为值得看看是否有人对此有更坚定的处理。我缺少什么吗?这个实现有意义吗?提前致谢!

技术细节:这是一个 Django 网站,我将在 Ubuntu 10.4 上使用 Apache 2.2.14 提供服务。

最佳答案

首先,查看 mod_wsgi 的守护进程模式,不要使用嵌入模式,因为这样您就可以单独控制 Apache 子进程的 Python WSGI 应用程序进程的数量。其次,最好将内存消耗大的部分放在单独的后端进程中。您可能会使用 XML-RPC 或其他消息队列系统与后端进程进行通信,甚至可能会看看是否可以以某种方式使用 Celery。

关于python - 使用大型 mod_wsgi 应用程序最大化 apache 服务器实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017645/

相关文章:

javascript - Django - 表单输入字段未发布

python - PIL─Python Imaging Library─通过CherryPy将图像缩略图上传到SQLAlchemy数据库

python - 当我按下一个按钮时,两个按钮被按下,pygame

python - 在动态规划问题中得到错误答案或超出时间限制

mysql - 在 Web 服务器级别锁定 MySQL 表

django 剩余元素被截断

python - 在python中以任意音高合成声音

SQL:使用 NULL 值与默认值

sql - SQL查询的临时表与短路操作

python - django form.is_valid 返回 false