类似于空间图像数据的平铺服务器,我想在基于 Django 的 Web 应用程序中查看许多动态生成的图像(合并图像、颜色更改等)。由于一个客户端可以轻松地在短时间内请求许多(>100)图像,因此很容易使 Web 服务器(Apache + mod_wsgi)停机。
因此,我正在寻找替代方法。由于我们已经使用了 Celery,因此异步执行此图像处理并将生成的数据推送到客户端可能是一个好主意。为此,我将 WSGI 服务器切换为 gevent,并将 Apache 用作代理。但是,我还没有设法让 push 工作,我不太确定这是否是正确的方向。基于此,我有三个问题:
你认为这(Celery、gevent、Socket.IO)是一种允许许多客户端使用应用程序而不会使 Web 服务器停机的明智方式吗?你看到替代品了吗?
如果我将图像处理交给 Celery 并让它在完成后将图像数据推送到浏览器,连接不会通过 Apache,对吗?
如果使用某种推送到客户端,最好为每个图像使用一个连接还是一个连接(完成后关闭它)?
背景:
我正在开发的 Django 应用程序允许用户显示非常大的图像。这是通过平铺之前的大图像并仅向用户显示网格中当前相关的图块来完成的。据我了解,这是在映射和空间图像数据(例如 OpenStreetMap)领域提供数据的标准方式。但与地图数据不同的是,Z 中还有许多切片可供用户滚动浏览(生物图像)。
当瓷砖被静态服务时,所有这些都可以正常工作。现在我添加了动态生成这些图块的选项——不同的图像被合并、颜色校正……。这可行,但对于 Web 服务器来说是一些繁重的负载,因为生成一张图像大约需要 0.1 秒。目前我们使用 Apache 和 mod_wsgi (WSGIRestrictedEmbedded On),很容易让服务器宕机。只需浏览图像堆栈就会导致 Web 服务器挂起。我已经尝试调整 MaxClients 等并关闭 KeepAlive。我还为 mod_wsgi 尝试了不同的线程/进程组合。但是,没有任何帮助足以允许多个用户使用。因此,我认为 Comet/WebSocket 方式可以在这里提供帮助。