如何利用單臺服務器實現10萬多個Git倉庫托管
英文原文: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 核來減輕高負載帶來的壓力。
事實證明,我們使用自己的服務器是迄今為止最具性價比的選擇了。
目前,我們有兩臺獨立服務器用來運行 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 卷,這將讓我們的移植變得容易。