如何利用單臺伺服器實現10萬多個Git倉庫託管

CSDN發表於2015-01-07

在單臺伺服器上就可以託管 10 萬多個倉庫,GitLab.com 是如何做到的呢?來看 GitLab.com 是如何自建服務和擴充套件儲存來滿足這麼多倉庫的託管。

以下為譯文:

你想在任何地方免費託管公共/私有倉庫嗎?可以選擇 GitLab.com,我們已經在上面託管過一個單例 GitLab,已有將近 20000 人積極地使用 GitLab 來託管倉庫,並且一臺伺服器就已託管 10 萬多個倉庫。

單一伺服器

之前,GitLab.com 託管在亞馬遜上,使用的是 AWS 上最高的配置例項。但隨著使用者數的增長,以及我們只能進行垂直擴充套件和 CPU 繫結,所以,我們必須尋找 AWS 替代品。

100K 倉庫需要佔用好幾個 TB 空間,所以,儲存能力變得相當重要。因為我們使用的是 git,所以,我們只能選擇單一的檔案系統,而不是物件儲存(比如 S3)。我們希望能夠輕鬆地擴充套件儲存,此外,成千上萬個使用者在 push 和 pull 他們的程式碼,這樣就會給 CPU 帶來一定的負擔。因此,我們需要更多的 CPU 核來減輕高負載帶來的壓力。

事實證明,我們使用自己的伺服器是迄今為止最具價效比的選擇了。

目前,我們有兩臺獨立伺服器用來執行 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 卷,這將讓我們的移植變得容易。

相關文章