Web services 对动态创建的图像文件进行高性能缓存的体系结构

Web services 对动态创建的图像文件进行高性能缓存的体系结构,web-services,performance,apache,architecture,Web Services,Performance,Apache,Architecture,我正在开发一个应用程序,它需要以存储在服务器上的矢量图像的不同缩放级别提供光栅图像文件。想象一下,拥有街道和建筑物的矢量化数据,并为类似谷歌地图的服务动态生成一个PNG图块,作为对客户要求特定缩放级别和坐标的响应 在我的例子中,基础矢量数据的变化非常频繁,加上缩放级别的增量比Google Maps中十几个左右的固定缩放步骤要小得多。因此,对我来说,预先计算所有可能的磁贴并将其上载到高性能静态媒体服务器是不切实际的 是否有一种优雅的方法可以从生成特定磁贴的应用程序获取第一个请求,并从静态媒体服务器

我正在开发一个应用程序,它需要以存储在服务器上的矢量图像的不同缩放级别提供光栅图像文件。想象一下,拥有街道和建筑物的矢量化数据,并为类似谷歌地图的服务动态生成一个PNG图块,作为对客户要求特定缩放级别和坐标的响应

在我的例子中,基础矢量数据的变化非常频繁,加上缩放级别的增量比Google Maps中十几个左右的固定缩放步骤要小得多。因此,对我来说,预先计算所有可能的磁贴并将其上载到高性能静态媒体服务器是不切实际的

是否有一种优雅的方法可以从生成特定磁贴的应用程序获取第一个请求,并从静态媒体服务器获取所有后续请求

假设只要我在应用服务器上生成了一个磁贴,我就可以立即在静态媒体服务器上使用它

如果先前生成了磁贴,则使用重定向的明显方法是次优的,因为它将(a)加载应用程序服务器,使其具有许多不必要的点击,(b)降低客户端的总体性能,因为浏览器需要在获取图像数据之前串联发送两个请求,大约是响应时间的两倍


所以我在寻找其他的想法。例如,是否有一种方法可以将web服务器配置为尝试使用高性能静态文件服务,如果文件不存在,则返回调用应用程序而不是返回404?

如果文件缓存不存在,则生成文件缓存是一个相对常见的问题,因此可以由web服务器直接提供服务

在NginX中,有一个选项。这需要一组URI,正如您所期望的那样,尝试每一个URI,直到找到响应为止。如果第一个集合失败,但后一个集合返回OK和数据(当它在那里时,还创建了一个与first try文件路径匹配的文件),那么下一个请求将被短路

try_files $uri $uri/ /makeCacheFile.php?q=$uri&$args;
在Apache中,类似这样的操作将与mod_rewrite执行的操作大致相同

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /makeCacheFile.php?q=$1 [L,QSA]

在这里,我们检查是否为请求提供特定文件,如果不提供,则将URL传递给可能继续生成该URL的脚本。

如果文件缓存不存在,则生成该文件缓存是一个相对常见的问题,因此Web服务器可以直接为其提供服务

在NginX中,有一个选项。这需要一组URI,正如您所期望的那样,尝试每一个URI,直到找到响应为止。如果第一个集合失败,但后一个集合返回OK和数据(当它在那里时,还创建了一个与first try文件路径匹配的文件),那么下一个请求将被短路

try_files $uri $uri/ /makeCacheFile.php?q=$uri&$args;
在Apache中,类似这样的操作将与mod_rewrite执行的操作大致相同

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /makeCacheFile.php?q=$1 [L,QSA]
在这里,我们检查是否为请求提供特定的文件,如果不提供,则将URL传递给脚本,该脚本可能会继续生成URL