我有一个应用程序需要水平扩展以覆盖 Web 和服务节点(目前它们都在一个节点上),但与同一组数据库和源文件(应用程序代码和自定义资产)交互。数据库没有问题,它已通过 MongoDB 中的复制处理。
此外,服务器的配置是相同的(100% Linux)。这个问题实际上是关于在机器之间共享文件系统,以便其内容始终正确,无论哪个节点访问它。
到目前为止,我的两个想法是 NFS 和 SAN - SAN 价格过高,而 NFS 在第二个节点上遇到了与 PHP 中的 glob() 相关的一些性能问题。
是否有人推荐过不涉及跨节点分片数据或 NFS 中任何可能导致磁盘寻道时间缓慢的潜在陷阱的策略或其他技术?
为了让您对规模有个概念,主节点在约 0.01 秒内初始化其应用程序模块。辅助节点需要约 2.2 秒。它们是 ESXi 中本地虚拟网络内的 VM,它们之间的 ping 时间约为 0.3 毫秒
答案1
听起来你对 NFS 做了一些病态的错误——比如把数万个文件放在一个目录中之类的。NFS 表现良好,即使在大型(TB+)数据集上也是如此,所以这是可以做到的。
然而,你是否需要文件系统?我通常发现,通过向数据存储公开一组更有限的原语,并使用这些原语进行操作,可以获得更好的性能和封装。与其再讲一遍,我只想告诉你一个上一个答案我已经写过了,包含所有细节。
答案2
SVN/git 签出到各个节点。跨节点进行 Rsync。所有节点都安装有 Samba 服务器。基本上,除了 NFS 之外的任何方式。