我问了这个问题堆栈溢出并建议我在这里尝试一下:
我正在建立一个网站,用户可以在其中上传照片,并且我还会将上传的照片转换为缩略图。
提前计划,如果网站变得受欢迎,我该如何扩展它,以便将图像(原始图像和缩略图)存储在多个服务器中并从多个服务器提供服务?也许是一个集群?有没有开源软件可以帮助我做到这一点?
谢谢。
答案1
为了以后有更好的选择,您可以做的最简单的事情就是以这样的方式编写软件,即图像在修改时永远不会保留相同的文件名——对图像的更改必须始终更改文件名。这意味着您可以设置非常长的缓存生命周期,无论是通过您自己的缓存还是通过内容交付网络,这将大大减少您需要的磁盘读取次数。(您可能需要某种机制来立即从缓存或 CDN 中刷新特定文件,如果可能存在图像有将被彻底删除。
为了实现水平扩展,请将图像分成大量组(100 个或更多),并在每个图像的路径前加上其所在组的前缀。您现在可以在同一台服务器上为所有组提供服务,但以后使用负载平衡器根据图像组将流量引导到不同的服务器将相当容易。我不会对图像使用集群文件系统,因为它增加了一层复杂性,使用多台服务器和一些负载平衡器规则来分散负载可能更容易。