如何利用单台服务器实现10万多个Git仓库托管

jopen 10年前

英文原文:The hardware that powers 100,000 git repositories

在单台服务器上就可以托管 10 万多个仓库,GitLab.com 是如何做到的呢?来看 GitLab.com 是如何自建服务和扩展存储来满足这么多仓库的托管。

以下为译文:

你想在任何地方免费托管公共/私有仓库吗?可以选择 GitLab.com,我们已经在上面托管过一个单例 GitLab,已有将近 20000 人积极地使用 GitLab 来托管仓库,并且一台服务器就已托管 10 万多个仓库。

单一服务器

之前,GitLab.com 托管在亚马逊上,使用的是 AWS 上最高的配置实例。但随着用户数的增长,以及我们只能进行垂直扩展和 CPU 绑定,所以,我们必须寻找 AWS 替代品。

100K 仓库需要占用好几个 TB 空间,所以,存储能力变得相当重要。因为我们使用的是 git,所以,我们只能选择单一的文件系统,而不是对象存储(比如 S3)。我们希望能够轻松地扩展存储,此外,成千上万个用户在 push 和 pull 他们的代码,这样就会给 CPU 带来一定的负担。因此,我们需要更多的 CPU 核来减轻高负载带来的压力。

事实证明,我们使用自己的服务器是迄今为止最具性价比的选择了。

如何利用单台服务器实现10万多个Git仓库托管

目前,我们有两台独立服务器用来运行 GitLab.com,其中一台是活动的主服务器,另外一台备用。服务器配置如下:

  • 服务器型号:HP DL180 G6 (2009 年引进)
  • 处理器:2x X5690 (共 24 核)
  • 32GB RAM
  • 12x 2TB HDDs (其中两个用于 root 卷,使用 RAID 1,另外 10 个磁盘使用 RAID 10 ext4 文件系统)

实际上,我们开始只用了 16 个核,但又增加了 8 核来取代 CPU,从而减少 CPU-bound 加载。

故障和故障转移

弃用 AWS 意味着我们不可以再使用任何 AWS 功能,因此,为了预防宕机等现象发生,我们需要进行故障转移。

我们使用 DRBD 来创建一台主服务器和一台从服务器,其中一个服务器作为应用服务器,并且应该是活动的,如果出现问题,我们会通知 DRBD 来开启另一台服务器作为备用。

我们的 DRBD 工具以及完成构建,并且提供给我们的用户

未来扩展

GitLab.com 目前在已有的硬件上能够很好的运行,但其正以前所未有的速度在增长。扩展当前的硬件将会非常昂贵,而且并不会轻而易举完成。

未来,GitLab.com 将会再次托管在 AWS 上面,横向扩展也会变得非常轻松。此外亚马逊刚刚宣布了超过 10TB 的 ESB 卷,这将让我们的移植变得容易。

来自: CSDN