假设所有客户端都知道家用计算机(Linux 操作系统)的 IP 地址。文件(约 40KB)将从 Android 设备发送到这台计算机通过互联网计算机(服务器)需要读取这些文件。根据内容,文件将被路由到另一台设备再次通过互联网。
规格:
一分钟内最多可路由 2500 个文件(100MB)
转移应该是安全的。
问题是:
- 是否必须使用 FTP 协议?是否有更方便的协议或方法?
- 有软件可以配置 FTP 服务器,例如 FileZilla。是否可以对 FileZilla 进行编程,使其对每个收到的文件执行相同的代码?如果没有其他选择?
- 如何保证服务器和传输过程中数据的总体安全?
- 假设是双核的,每个核心有两个线程,可以并行执行多少个传输?
- 从头开始编写服务器代码是否可行?推荐使用哪种语言?有什么清晰、基本的教程可以推荐吗?
编辑 :由于该系统不适用于商业环境,因此该问题已关闭。但是,如果该系统经证实能够满足需求,则可能用于互联网上的商业/业务目的。
谢谢。
答案1
很难定义家庭服务器的用途,它实际上取决于您的需求以及您想要在该计算机上托管什么样的服务,假设您还知道如何基本配置带有防火墙 ecc 的家庭网络。
如果不在家中,不向互联网开放,则不建议使用 FTP,您也可以使用 NFS 和 Samba,但它们都是未加密的,适合向外部开放使用。SFTP 是加密的,但速度也较慢。
FileZilla 也有一个服务器应用程序,有很多 FTP 和 SFTP 服务器,这取决于您计划使用什么操作系统来托管它。文件上的脚本可以自动执行某些操作,您可以使用 Python 等优秀的脚本语言来定义某些操作,如果您使用 Linux,我建议使用 rsync/rclone 脚本而不是 ssh 来处理简单的事情,使用 ansible 来管理多台机器,或者 Syncthing 也是非常流行的新东西。
可以通过将家庭网络隔离在防火墙后面,并使用更新的操作系统和应用程序、发送加密内容、使用托管家庭 VPN 从外部位置访问来确保安全性。PfSense 是一个很好的防火墙解决方案,WireGuard 也是 VPN 的解决方案。
取决于计算机要执行的操作类型,例如,加密和/或解密某些文件可能会占用 3/4 个核心,而使用转码流式传输视频则会占用 CPU 和 GPU。这实际上取决于您的流量/网络基础设施(1Gigabit 或 100M 家庭局域网)。需要在满负荷下进行测试,看看它能否成功。还需要大量的 RAM。
服务器代码不应该重写,因为有有效的解决方案以及像 FreeNAS 或 OpenMedia Vault 这样的整个发行版,但如果您需要后端为您进行某些处理,当然您可以从头开始编写它,这取决于它的复杂程度,如果它太简单,您可以依靠其他解决方案和一些脚本来完成工作。
分析您的问题,您可以使用 Rsync 在服务器之间实时同步文件,您可以使用许多标志使其仅发送新的/修改过的文件 + inotify 使其在 3 个设备之间实时同步,内核中直接嵌入 lsyncd(即 rsync + inotify)。
为了安全起见,您可以通过 SSH 使用上述内容来放置一层加密,至于网络,您可以在中间服务器上使用托管 VPN,并有 2 个客户端连接到它。您还可以使用更简单的方法(例如 ZeroTier)来统一 Internet 上的设备,因为它是一个大型“LAN”,它是开源的,它支持所有操作系统,并且它们通过服务器加密所有连接,我使用它,它们是值得信赖的。
祝你好运,注意安全!
答案2
如果不知道您的具体要求,很难给出明确的答案。但一般来说:
- 没有某种隧道的 ftp 并不安全,可能应该避免。也许可以考虑使用 sftp 或 ftps 之类的东西。
- 不知道。
- 使用加密协议进行传输并遵循所有最佳实践。
- 如果不知道在收到文件后要如何处理这些文件,以及不知道文件传入的流程,则很难回答(例如:每秒打开 40 个连接以接收每个连接 1 个文件所涉及的处理开销要比每秒打开 1 个连接以接收 40 个文件所涉及的处理开销大得多)。如果性能似乎不可接受,您可以尝试测试原型并寻找二手服务器。
- 如果您指的是从头开始重写 ftp/sftp/ftps/任何代码,那绝对不行。如果您指的是在收到文件后处理文件的后端代码,那当然可以 - 使用最适合您现有技能的任何语言。
祝你好运!