我会对在具有多个服务器访问它的集群文件系统上使用 CVS 的任何经验感兴趣。我想这类似于像 SourceForge 这样的供应商所做的。
目前,我们使用基于 RHEL 的 CVS 服务器和 SAN 上的 ext3 存储库文件系统。
这个想法是使用多台机器来处理来自客户端的 CVS 连接,这些客户端都在快速 SAN 上的同一文件系统上工作。这种冗余可以同时用于负载平衡和故障转移目的(例如使用循环 DNS,如果其中一个服务器发生故障,可以重新配置)。
由于各种原因,SVN 不是替代品,请不要开始讨论 CVS/SVN。
VCS 扩展问题的最佳答案是您在问题中给出的答案。不要使用 CVS。不过我同意你的观点,SVN 是解决任何问题的方法。有很多高度可扩展的版本控制系统(Perforce、Rational 就是例子)。
我认为总的来说,尽管您会发现集群文件系统无法提供您正在寻找的性能,但它们的主要目标是可用性。如果您需要选择任何集群 FS,那么我认为您需要研究类似 http://oss.oracle.com/projects/ocfs/ 之类的东西,它是为高性能数据库集群而构建的。但是,高性能数据库不像 CVS 那样依赖于群发或类似的文件锁定机制,它只是无法扩展。您需要添加某种事务性分布式锁管理器。CVS 和高性能不适合同一个球场。
我确实有一种感觉,尽管您并没有尝试扩展源代码控制系统,而是尝试将 CVS 用于特定应用程序。在这种情况下,我建议直接向 RCS 编码,并滚动您自己的锁管理器。我会避免分布式或集群文件系统的复杂性和昂贵性,并专注于使用某种分布式哈希桶方法构建更智能的应用程序。
在您的 san 和运行 CVS 的机器之间,您将需要某种形式的网络文件系统(至少,我想不出任何文件系统可以处理对同一设备的并发访问,我假设 SAN您的意思是作为存储设备呈现给服务器/操作系统的存储)。几年前有关于CVS over NFS的讨论,您可能会遇到任何网络文件系统的相同/相似类型的问题。
现在,我不确切知道 sourceforge 是如何为 CVS 构建的,但是,我的猜测是:
(我的猜测背后的原因是匿名 CVS 有时会服务于一个已经存在几个小时的 CVS 状态,我模糊记得与 sf CVS 提交框说话有时爬行非常缓慢)。
我真的没有答案,但为了进一步讨论......
我假设 CVS 使用某种事务数据库作为后备存储(我知道 SVN 就是这样做的)。如果是这样的话,在我看来,这些文件结构上的多个编写者实际上并不安全。更好的方法不是在数据库接口上创建抽象层吗?例如,使用 SQL 服务而不是本地 BDB/LDBM 或任何可能的服务(假设 CVS 支持这样的东西)。