可扩展 可伸缩的 Oracle 与 PHP卸载静态内容。如果 Web 应用程序中的页面一般包含九幅图像,则发送到您的 Web 服务器的请求中只有百分之十实际上使用了为其分配的持续连接。换句话说,百分之九十的请求正在浪费有用的(从可伸缩性的观点来看,还是成本很高的)Oracle 连接句柄。您的目标应该是确保只有那些需要 Oracle 连接(或至少需要动态内容)的请求才能接受动态 Web 服务器的服务。这会增加由每个进程所完成的与 Oracle 相关的工作量,而这又会减少生成动态内容所需的子进程数量。 改善这种状况的最简单方法是将您的所有图像卸载到单独的 Web 服务器(或一组 Web 服务器)上。这非常容易。第一步是建立第二个 Web 服务器处理静态请求。虽然您可以为此而使用 Apache,但是还有些专门擅长于为静态数据提供服务的其他 Web 服务器(例如 tux 和 thttpd),它们的结果或许更好。应该建立这个 Web 服务器,为另外子域的请求提供服务。常见做法是将 "www.example.com" 的图像流量委托管给 "images.example.com"。某些硬件负载均衡器实际上允许您为同一域中的图像提供服务,并在内部进行分配 - 有关详细信息请查看负载均衡器文档。 一旦建立了域,就应该创建一个全局配置文件,它包含您在整个应用程序中使用的所有全局常数,并应该至少添加下面一行: define(CDN_URL, "http://images.example.com"); 此文件可以手动地包含在每个文件的顶部,或者可以在 php.ini 配置文件中添加下行,从而在每个脚本开始时能够自动运行该文件: auto_prepend_file = /path/to/config.inc 现在,不管何时在 HTML 中创建图像标记,都应该添加以下代码: <img src="<?= CDN_URL ?>/path/to/image.png"> 如果您更愿意拥有标记编写库,则可以编写一个图像标记创建函数,如下所示: function img_tag($local_uri, $attr) 即使不准备立即使用图像专用网络,还是应该对您的应用程序进行编码,为图像使用单独的基础路径,并简单地将其设置如下: define(CDN_URL, "http://www.example.com/images"); 这允许您在任何时候仅仅更改单行代码,就将整个网站削减为一个替代性的图像服务网络。根据您的网站中静态内容/图像的比例,可以看到服务器资源明显减少甚至极大地减少。在一个客户端,将静态内容从 Apache 移动到专用的系列 thttpd 箱中,可以使它们的总体基础架构减少百分之五十。 为什么要在不必工作的时候而工作呢?对任何查询的最终性能增强是根本不运行查询。很多“动态”Web 页面实际上不是动态的,在短期时间内纯粹是静态的。假设有一个新网站:在新闻项目更新之前,其内容并不改变。无论这种更新是每分钟发生还是每小时发生,在两次更新之间,网站是静态的。这意味着,不必为每个页面请求而在当前新闻项目中进行数据库查找,只需在每个更新周期中作一次查找。 最简单类型的高速缓存是全页随需高速缓存。在这种情况下,当请求到来时,应用程序在高速缓存中查找所需文件。如果存在高速缓存的副本,则将其返回给请求者;否则创建一个高速缓存副本,并将其返回给用户。要刷新高速缓存,只需简单地将旧的高速缓存副本删除即可 - 下一个请求将会自动重新生成高速缓存。 图 2 显示了我们希望完成的流程图:当一个请求需要 /archive/123.html 时,Web 服务器应该查看该文件是否实际存在。如果该文件存在,则返回该文件。如果该文件不存在,用户会被重定向到一个 PHP 页面 generate.php,并将页面标识符 "123" 作为参数传递。随后该页面生成页面的高速缓存项。在 Apache 环境中,执行这种高速缓存查找的两种典型方法是使用自定义的 ErrorHandler 或者 mod_rewrite。mod_rewrite 提供更好的灵活性,因此我将实施这种方法。
首先,需要在 httpd.conf 中建立重写规则。以下是一个示例片段: RewriteEngine On 此示例首先启动重写引擎,然后说明将会重写任何与归档模式 (^/archive/[0-9]+\.html) 相匹配并且不存在 (!-f) 的被请求文件名,将页面标识符作为参数传递,转到生成页面处。 生成器页面同样很简单: <?php 更多相关文章
|
推荐文章
精彩文章
|