我有一个简单的问题,希望听听其他人关于哪种是跨多个主机复制图像的最佳方式的经验。
我确定将图像存储在数据库中,然后在多台主机上使用数据库复制会带来最大的可用性。
我对文件系统的担心是难以同步图像(例如,我不希望 5 个服务器都访问同一服务器以获取图像!)。
现在,我对在数据库中存储图像唯一担心的是额外的查询访问数据库,以及如果我想要“虚拟”图像链接指向数据库条目,我必须在 apache 中进行额外的处理. (例如 AddHandler)
据我了解:
- 如果您有一个脚本服务于 图片:每张图片都需要一个 数据库调用。
- 如果您将内联图像显示为 二进制数据:可以在 一次数据库调用。
- 提供外部/可链接 您必须添加的图像 addHandler 为你的扩展 希望“伪造”并将其指向您的 脚本语言(例如 php、asp)。
我可能漏掉了什么,但我很好奇是否有人有更好的想法?
编辑: Tom 建议使用 mod_rewrite 来使用 AddHandler 进行保存,我已经接受了 AddHandler 问题的建议解决方案;但是我还没有找到完整的解决方案,所以请继续回答 ;)
一些人建议在 Apache 上使用 lighttpd。 lighttpd 的 ISAPI 模块有何不同?
最佳答案
如果您将图像存储在数据库中,您会额外点击数据库加上您会失去网络服务器中固有的缓存/文件服务优化。 Apache 提供静态图像的速度比 PHP 管理静态图像的速度快得多。
在我们的大型应用环境中,我们最多使用 4 个集群:
- 应用服务器集群
- 网络服务/数据服务集群
- 静态资源(图片、文档、多媒体)集群
- 数据库集群
您会惊讶于静态资源服务器可以处理多少流量。由于它不是真正的计算(没有应用程序逻辑),因此可以疯狂地优化响应。如果你使用一个单独的静态资源集群,你也可以让自己敞开心扉去改变你架构的那一部分。例如,在一些基准测试中 lighttpd在提供静态资源方面比 apache 更快。如果您有一个单独的集群,您可以在那里更改您的 http 服务器,而无需更改应用程序环境中的任何其他内容。
我将从 2 台机器的静态资源集群开始,看看它的性能如何。这是分离功能的另一个好处——您可以只在需要的地方扩展。至于同步文件,看看现有的 file synchronization工具与滚动自己的工具。您可能会发现无需编写一行代码即可满足您的需求的东西。
关于php - 文件/图像复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/371721/