对于特定项目,我必须实现一个临时文件服务器:
- 服务器必须提供中等大小的二进制文件(约 1 MB)
- 文件的最长生存期为 5 分钟
- 文件将由大约 10 个不同的服务器上传
- 文件将由大约 10 个不同的服务器读取
- 给定文件仅由 1 台服务器上传,并且仅由 1 台服务器读取
- 第一次成功读取后,指定的文件可能会被销毁
- 服务器必须仅使用非特权端口(无 FTP 或 NFS)
- 服务器必须在没有任何 root 访问权限的情况下运行
- 服务器必须运行在Linux上
- 服务器必须可以通过 LAN 访问
- 客户端(上传和下载)只能是 Linux 服务器(客户端代码必须能够与任何 root 访问权限兼容)
- 我不需要正式的持久性(我可以接受崩溃后丢失一些文件)
- 服务器必须仅使用开源组件
- 它一定非常快!
我正在考虑两种解决方案: - REDIS 实例(无 VM,无持久性) - 带有 DAV 模块的 NGINX 服务器(使用 PUT 命令上传)
但我确实愿意接受其他解决方案;-)
答案1
如果你可以使用 FreeBSD 解决方案而不是 Linux,自由网络存储是一款出色的 NAS 选项,易于安装和配置,并且具有大量连接和访问控制选项。此外还有该项目的Linux版本正在进行中,但我不确定它的功能是否齐全。
还有开放文件管理器在 Linux 方面,但我们发现 FreeNAS 更适合我们不同的需求(诚然,这听起来与您的需求有很大不同)。
编辑:听起来你需要在现有的 Linux 服务器上运行某些东西,而不是在自己的硬件上运行。如果这是必要的,我会考虑在 KVM 或 Xen 下以 VM 形式运行这些选项之一。
答案2
你可以试试运气memcached或者教练数据库。两者都是键值存储,第一个是“内存中”类型。可以使用它吗?我不知道 - 这取决于消费者是否能“猜测”生产者存储数据的键。
或许nginx 的 memcached 模块正是您所需要的?有了它,您就可以获得内存数据库的 RESTful HTTP 接口。
答案3
只需在非标准端口上运行 NFS,为该 tmpfs 创建磁盘,我推测从这个声音来看,总大小很小?这应该以接近线速的速度运行(传统上,nfs 需要同步写入,但使用 tmpfs,这将不是问题。
tmpfs 是一个 fs,基本上是交换文件/内存的一块。因此,通过任何类型的重启都无法持久保存,但速度与写入内存一样快。
答案4
您的要求表明,除了“服务器”之外,您还需要提供:
1)一些客户端软件将文件放到服务器上
2)从服务器下载的客户端软件
3)上传者和下载者之间的通知通道
4) 服务器上不再需要一些用于过期内容的智能功能
虽然 HTTP 是一个显而易见的选择(1 和 2 已经很好地涵盖了,而 3 和 4 只需要几行代码,就可以在 perl / php / 等等中轻松实现),但这听起来像是一个异步消息排队系统。您没有说事务完整性有多重要 - 但 2 和 12 表明这不是什么大问题。所以我建议使用电子邮件 - 通知是隐式的,它可以承受临时中断,您可以在运行非特权端口的系统上轻松配置第二个 SMTP 服务器,并且大多数服务器允许您指定重试间隔、超时等。至于在接收端添加触发代码 - 使用 procmail 很容易。
高血压
C。