![运行从数据库提供图像的脚本是否可行?](https://linux22.com/image/635825/%E8%BF%90%E8%A1%8C%E4%BB%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E6%8F%90%E4%BE%9B%E5%9B%BE%E5%83%8F%E7%9A%84%E8%84%9A%E6%9C%AC%E6%98%AF%E5%90%A6%E5%8F%AF%E8%A1%8C%EF%BC%9F.png)
我经营着一个非常动态的游戏评论网站。所有图片(截图、游戏缩略图、用户个人资料图片等)都通过服务器上的 PHP 脚本提供。它以 id 作为参数并从数据库读取数据,并使用 image/[png/jpg] 的内容标头输出。在不久的将来(不到一个月),我们将与另一家公司合作。我们预计网站的流量将大幅增加。
我估计我们的流量将增加到每天5万左右。
过去,我曾遇到过来自我们托管服务器的此错误:您已达到每秒运行的脚本/进程的限制。我查了一下,发现我们每秒同时运行的脚本(php、cgi 等)数量限制为 20 个。平均而言,我们网站上的每个页面有 50 张图片。
我的第一个问题是:这个限制合理吗?其他托管解决方案是否也有这种限制?
第二个问题:
建议使用此设置来提供图像吗?我可以尝试获取没有此限制的服务器,但我担心如果我们获得更多流量,此设置是否可以扩展?
我能想到的替代方案是:
- 将图片以文件形式存储在服务器上。数据库将存储图片的相对路径,而不是图片 ID。这样,至少每张图片不会成为服务器需要运行的动态脚本。
- 运行多个仅提供图像服务的图像数据库服务器。那么负载平衡将如何工作?
任何帮助,将不胜感激。
答案1
我认为,在扩展图像服务方面,最重要的是在前端进行缓存。它可以是 Varnish 或一些 CDN 服务。如果缓存良好,后端对于小型项目来说并不那么重要。它可以是一个相当好的数据库。虽然与静态文件相比,它有一些开销,但它可以提供一些基本的可扩展性解决方案,如复制到多个数据库和可管理性。
最重要的是尽早将其构建到应用程序中,当任何图像发生变化时,其 URL 也会随之改变。然后您将能够无限期地缓存所有内容 :)