存储要从多个节点访问的大型只读文件的最佳方法

时间:2018-01-08 19:11:16

标签: mysql database distributed-system

我有一小部分文件(少于50个),每个文件平均约4GB。我希望能够以尽可能小的延迟访问来自不同服务器的那些文件。你会怎么做?

我最初考虑使用某些数据库,但MySQL对大于2GB的文件有限制。

我正在寻找的界面非常简单,我想发布将它们与密钥相关联的文件,并使用该密钥检索它们(与redis一样,但redis用于缓存,最大大小为512MB )。

2 个答案:

答案 0 :(得分:1)

如果您只是尝试以尽可能小的延迟提供文件,那么您正在寻找CDN(内容分发网络)。

CDN会将文件放在世界各地的多个数据中心,并从物理上最接近您的数据中心拉出,尽可能减少延迟。 CDN还针对尽快检索和发送文件进行了优化。缓存后,请求甚至不必转到您的服务器,它只是在CDN和最终用户之间。

" key"可以只是文件名。

当谈到文件时,将其存储为文件(几乎*)总是最快的。如果将其存储在数据库中,则只需添加额外的延迟来检索文件。它总是比直接检索文件慢一点。

那里有很多CDN。 AWS' CloudFront可能是最容易访问且最便宜的(至少在最初阶段)。 Akamai可能是最大的。 MaxCDN也是一个很好的选择。

*:从超级技术,纯粹的速度来看,只需检索文件,将其保存在内存(RAM)而不是存储(硬盘)中可能会更快,您可以轻松地使用数据库,尽管您也可以使用自定义文件系统驱动程序。使用CDN时,您会失去这种低级控制,具有分布式服务器的CDN的好处将更加有益。

答案 1 :(得分:1)

最小的延迟是从读取它们的应用程序的本地存储中读取文件。这将消除所有网络延迟。

然后,任务变成如何在不同的服务器上保持这些文件的副本同步?我考虑使用SyncThing来帮助解决此问题。