文件/图像复制

Jay*_*Jay 5 php mysql sql-server apache image

我有一个简单的问题,希望听到其他人的经验,这是在多个主机上复制图像的最佳方式.

我已经确定将数据存储在数据库中,然后在多个主机上使用数据库复制将导致最大可用性.

我对文件系统的担心是难以同步图像(例如,我不希望5台服务器都为图像命中同一台服务器!).

现在,我在数据库中存储图像的唯一问题是,如果我想要"虚拟"图像链接指向数据库条目,则需要在数据库中进行额外的查询以及额外的处理.(例如AddHandler)

据我所知:

  • 如果您有一个提供图像的脚本:每个图像都需要数据库调用.
  • 如果将内嵌图像显示为二进制数据:可以在单个数据库调用中完成.
  • 要提供外部/可链接图像,您必须为要"伪造"的扩展添加addHandler并将其指向您的脚本语言(例如php,asp).

我可能错过了什么,但我很好奇是否有人有更好的想法?


编辑:Tom建议使用mod_rewrite使用AddHandler进行保存,我已经接受了AddHandler问题的建议解决方案; 但是,我还不觉得我有一个完整的解决方案,所以请,请继续回答;)

一些人建议使用lighttpd而不是Apache.lighttpd的ISAPI模块有何不同?

Cor*_*rch 3

如果将图像存储在数据库中,则会遭受额外的数据库访问,并且会失去 Web 服务器中固有的缓存/文件服务优化。Apache 提供静态图像的速度比 PHP 管理它的速度快得多。

在我们的大型应用程序环境中,我们最多使用 4 个集群:

  • 应用服务器集群
  • Web服务/数据服务集群
  • 静态资源(图片、文档、多媒体)集群
  • 数据库集群

您会对静态资源服务器可以处理的流量感到惊讶。由于它不是真正的计算(没有应用程序逻辑),因此可以疯狂地优化响应。如果您使用单独的静态资源集群,您也可以自行更改架构的该部分。例如,在某些基准测试中,lighttpd在提供静态资源方面甚至比 apache 更快。如果您有一个单独的集群,则可以更改其中的 http 服务器,而无需更改应用程序环境中的其他任何内容。

我将从 2 台机器的静态资源集群开始,看看其性能如何。这是分离功能的另一个好处——您可以只在需要的地方进行扩展。至于同步文件,请查看现有的文件同步工具,而不是自行推出。您可能会找到不需要编写一行代码就能满足您需要的东西。