Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何处理视频和图像上传到存储服务器?_Php_Go_Data Storage_Zfs - Fatal编程技术网

Php 如何处理视频和图像上传到存储服务器?

Php 如何处理视频和图像上传到存储服务器?,php,go,data-storage,zfs,Php,Go,Data Storage,Zfs,我正在开发一个应用程序(在Go或可能在PHP中),用户需要上传照片和图像 我在不同的位置安装了两台ZFS(镜像)存储服务器,但我对如何让用户最好地上传文件表示怀疑。ZFS处理配额和预订 我在所有服务器上运行一个复制的Galera数据库,既为了安全,也为了方便从每个服务器访问用户帐户。换句话说,每台服务器始终都有数据库的本地副本。所有用户仅为虚拟用户 到目前为止,我已经测试了以下设置选项: 解决方案1 在具有虚拟用户的存储服务器上运行SFTP(带模块的ProFTPD)或FTPS(带TLS的纯FTP

我正在开发一个应用程序(在Go或可能在PHP中),用户需要上传照片和图像

我在不同的位置安装了两台ZFS(镜像)存储服务器,但我对如何让用户最好地上传文件表示怀疑。ZFS处理配额和预订

我在所有服务器上运行一个复制的Galera数据库,既为了安全,也为了方便从每个服务器访问用户帐户。换句话说,每台服务器始终都有数据库的本地副本。所有用户仅为虚拟用户

到目前为止,我已经测试了以下设置选项:

解决方案1

在具有虚拟用户的存储服务器上运行SFTP(带模块的ProFTPD)或FTPS(带TLS的纯FTPS)

这使人们可以使用类似Filezilla的客户端直接访问存储服务器。同时,用户还可以使用我们的web GUI从主web服务器上传

这种设置的一个优点是FTP服务器可以处理虚拟用户。我们的web应用程序还将通过SFTP或FTPS发送文件

一个缺点是FTP很简单,对防火墙来说很烦人。我更喜欢FTP而不是SSH(SFTP),而不是FTP而不是TLS(FTP)。然而,只有ProFTPD有一个SSH模块,但是与PureFTPd相比,使用它确实是一件很痛苦的事情(许多配置选项不工作,文件权限错误),但是PureFTPd只支持TLS

使用真正的SSH/SCP帐户运行并使用PAM不是一个选项

解决方案2

使用NFS或CIFS将存储服务器本地装载到web服务器上(Samba非常擅长在出现故障时自动恢复)

在此设置中,用户只能通过主web服务器上传。然后,web服务器应用程序以及在存储服务器上运行的应用程序需要支持可恢复的上载。我一直在研究使用tus协议

上述两种设置的缺点是需要以某种方式管理存储容量。当存储服务器1达到其最大用户数时,应用程序需要知道这一点,然后只为存储服务器2、3等创建虚拟用户

我计算了每个存储服务器可以容纳多少用户,然后让web应用程序与虚拟用户一起检查数据库,以确定何时需要将新创建的用户移动到下一个存储服务器

这是一个相当古老的学校,但它的工作

解决方案3

与解决方案2相同(无FTP),但将我们的web应用程序上载内容克隆到每个存储服务器,然后重定向用户(或为他们提供指向存储服务器s1.example.com、s2.example.com等的物理链接)

此设置的优点可能是用户直接上传到分配给他们的存储服务器,而不是通过我们的主web服务器(防止它成为可能的瓶颈)

解决方案4

在存储服务器上使用GlusterFS并构建一个易于扩展的集群。我已经测试了GlusterFS,它在这方面工作得非常好

这种设置的优点是,我实际上不需要关心文件在哪些存储服务器上的物理位置,而且我可以通过向集群添加更多服务器来轻松扩展存储

然而,这里的缺点是我们的主web服务器可能再次成为瓶颈

我还考虑添加一个负载平衡器,然后使用多个web服务器,以防我们的主web服务器成为上传文件的瓶颈

无论如何,我更喜欢保持简单!我不喜欢加东西。从长远来看,我希望它易于维护

任何想法、建议和建议都将不胜感激


如何做到这一点?

如果我们谈论的是文件存储,那么web应用程序应该不知道底层存储;关注点分离

(S) 另一方面,FTP不是一种存储方法。这是一个通信协议。这并不妨碍您拥有共享存储。见上文

ZFS不包括共享存储功能,因此您基本上可以选择以下选项:

  • 哪个底层文件系统
  • 我想通过FTP提供额外的访问模式吗
  • 如何使文件系统跨多个服务器可用?GlusterFS、CIFS还是NFS
  • 所以,让我们一起来看看

    文件系统 我知道ZFS很吸引人,但问题是:例如,xfs的最大文件系统大小为8个字节减去一个字节。这方面的专业术语是“s…负载”。给你一个关系:国会图书馆拥有大约20TB的数字媒体——大约40万次。即使是好的ol'ext4也能容纳5万个LOC。如果你持有那么多数据,你的FS是你最不关心的。建造下两座发电厂来维持你的设备运转大概是件好事

    要点考虑起来很好,但是使用你觉得舒服的任何东西。我个人使用xfs(在LVM上)处理几乎所有的事情

    附加访问方法 当然,为什么不呢?除了安全噩梦(权限升级,有人吗?)。ProFTPd,内置咖啡机和厨房水槽,是我最后一台FTP服务器。它有一个巨大的代码库,这使它适合于

    基本上可以归结为项目中的技能。你们能不能正确地加固系统和FTP服务器,并监控它的安全事件?除非你的回答是自信的“是的,ofc,有丰富的经验!”否则你应该尽量减少你的攻击面

    除非你真的知道自己在做什么,否则不要这样做。如果你不得不问,你可能不会问。无意冒犯