上下文:正在使用 API 和 Postgres 编写站点。当一个 Web 应用程序部署在具有不同 IP 的多台服务器上时,会考虑可伸缩性,然后 DNS 使用某种 RoundRobin 将用户发送到其中一台服务器。
问:用户上传到其中几个站点之一的图像怎么样?如何在相同的 Web 服务器之间同步它们?
猜想:现在我正在考虑部署一个服务器来存储图像并通过 sshfs 连接到它的一个文件夹。一次所有服务器。所以一切都会同步,但突然 sshfs 会下降,例如,加上网络负载和此文件服务器需要更昂贵的硬件。
猜想 #2:将图像上传到 Postgres。而当服务器要发一张图片时,它会首先检查文件夹中是否有,如果没有,它会从PostgreSQL上传到它的磁盘上,然后从容地发出。该方法的缺点很明显:将图像存储在工作数据库中非常非常糟糕,我理解这一点。
我该怎么办?
直接链接
将图片的链接连同上传图片的服务器域一起上传到数据库中。将完整的网址放在前面。上传图片时,更改服务器。由于加载图像是一个单独的请求,因此负载将分布在所有服务器上。流量和磁盘将最小化。
代理人
这里的问题仅在有大量流量的评级文章中。如果出现这样的问题,那么您可以稍微改进一下顶部选项。图片也一张一张上传到服务器。
http://server.ex/upload_server/images/00001.jpg在 nginx 上给用户一个表单的链接,在http://upload_server.server.ex/images/00001.jpg.应用可以判断图片的热度,通过缓存或者直接下发链接。