SVN合并期间的缓存凭据

时间:2014-02-11 19:10:28

标签: apache svn

从功能分支到主干的合并需要45分钟才能完成。 合并包含了大量的jar(~250MB),但是,当我使用file://协议在服务器上完成时,这个过程花了不到30秒。

Apache正在通过https提供SVN。

服务器上的SVN版本是

svn, version 1.6.12 (r955767)
   compiled Sep  3 2013, 17:49:49

我的本​​地版本是

svn, version 1.7.7 (r1393599)
   compiled Oct  8 2012, 20:42:17

在检查Apache日志时,我发出超过10k个请求,显然每个请求都通过了身份验证层。

是否有办法配置服务器以便在一段时间内缓存凭据并且不会产生如此多的身份验证请求?

我认为棘手的部分是确保凭证仅在单个svn'请求'的生命周期内缓存。如果svn merge发出许多独特的https请求,那么如何在不增加潜在安全漏洞的情况下确定存储凭据的时间长短?

2 个答案:

答案 0 :(得分:2)

首先,我强烈建议您将服务器升级到自1.7和newer servers support an updated version of the protocol that requires fewer requests for many actions以来的1.7或1.8版本。

其次,如果您使用基于路径的授权,则可能需要在配置中使用SVNPathAuthz short_circuit。如果没有这个用于辅助路径(即不在请求URI中的路径),那么当对这些路径的授权运行时,许多递归请求(尤其是日志)可能会发生这种情况,它会在整个Apache httpd身份验证基础结构中运行。通过设置而不是为httpd运行整个身份验证/授权基础结构,我们只需要求mod_authz_svn根据路径授权操作。如果您使用LDAP并且需要返回LDAP服务器来检查凭据,那么在整个httpd基础架构中运行会特别痛苦。不使用short_circuit设置的唯一原因是,如果您有其他一些依赖于路径的身份验证模块,我还是会在野外看到这样的实际设置。

最后,如果您使用LDAP,那么我建议您配置凭据的缓存,因为这可以大大加快身份验证。 Apache httpd提供mod_ldap module for this and suggest you read the documentation for it

如果您提供有关服务器端设置的更多详细信息,我可能会提供更多量身定制的建议。

建议您不要将jar放入存储库中的评论很有价值,但是通过一些配置改进,您可以帮助解决一些缓慢的问题。

答案 1 :(得分:-1)

  

合并包括很多罐子(~250MB)

那是你的问题!如果您通过http://通过您的网络,则必须通过http://发送这些广告,这可能会非常缓慢。您可以增加Apache httpd的缓存大小,或者您可以设置并行svn://服务器,但您仍然通过网络发送1/4千兆字节的jar。这就是file://如此快得多的原因。

您不应该在Subversion存储库中存储jar。原因如下:

版本控制为您提供了强大的力量:

  • 它可以帮助您合并分支之间的差异
  • 它可以帮助您跟踪发生的变化。
  • 它有助于确定特定的变化以及发生特定变化的原因。

存储像jar这样的二进制文件不能为您提供任何帮助。您无法合并二进制文件,也无法跟踪其更改。

不仅如此,版本控制系统通常使用 diffs 来跟踪更改。这节省了大量空间。想象一个1千字节的文本文件。在5个版本中,改变了6行。而不是占用6K空间,只存储1K加上这六个变化。

当你存储一个jar,然后是一个新版本的jar时,你不能轻易做一个diff,因为jar格式是zip,你也不能真正压缩它们,存储五个版本的jar Subversion,你存储的容量几乎是那个jar大小的五倍。如果jar文件是10K,那么你将为该jar存储50K的空间。

因此,不仅jar文件占用了大量空间,并且它们不会给你任何存储空间,它们可以快速接管你的存储库。我见过的网站中,超过90%的8 GB存储库只是编译代码和第三方jar。而且,这些二进制文件的使用寿命也非常有限。因此,在这些地方,80%的Subversion存储库都是浪费空间。

更糟糕的是,你往往会失去你拿到那个罐子的地方,以及里面的东西。当用户放入一个名为commons-beans.jar的jar时,我不知道该jar是什么版本,该jar是否是由某人构建的,以及它是否以某种方式被该人所控制。我看到用户将两个独立的jar合并到一个jar中,以便易用性。如果有人调用jar commmons-beanutils-1.5.jar,因为它是版本1.5,很可能有人会将它更新到版本1.7,但不会更改名称。 (它会影响构建,你必须添加和删除,总有一些原因)。

因此,有大量的浪费空间,几乎没有任何好处,几乎没有信息。储存罐子只是个坏消息。

但你的构建需要罐子!你应该怎么做?

获取类似NexusArtifactory的jar存储库。这两个存储库管理器都是免费和开源的。

将jar存放在那里后,您可以通过Maven,Gradel或者使用Ant获取所需jar的修订版,并希望保留您的Ant构建系统Ivy。如果您不喜欢那种想法,也可以通过Ant <get/>任务获取罐子。如果您使用Jenkins,Jenkins可以轻松地为其他项目部署构建的jar以在Maven存储库中使用。

所以,摆脱罐子。然后,合并将是文本文件之间的简单差异。合并分支将更快,并且必须通过网络发送更少的信息。如果您不想切换到Maven,那么使用Ivy,或者只需使用<wget>任务更新您的构建版本以获取所需的jar和版本。