GitHub最近悄悄地發布了DGit,全稱為“分布式Git”。這是一種基于Git創建的分布式存儲系統,其目標是改進使用GitHub時的可靠性、可用性以及性能。
\\DGit是一個應用層面的協議,它利用了Git分布式的特性,將每個倉庫在三臺不同的、獨立選擇的服務器上保留三個備份。按GitHub所說,這個簡單的架構在可靠性、可用性和性能方面帶來了許多直接的好處。
\\- 考慮到托管某個倉庫的三臺服務器是互相獨立的,那么他們同時變得不可用的可能性非常低。 \\
- 用戶的請求可在這三臺服務器之間進行負載均衡處理,由于這些請求大部分是讀請求,因此可以立即響應,而無需在這三臺服務器之間進行同步,這將帶來直接的、接近于3倍的性能提升。 \\
- 多個倉庫之間出現“命運共享”(fate sharing)的情況大大減少了。命運共享這種情況會造成一個或多個倉庫的性能下降,其原由是這些倉庫與另其他非常流行的或者過于龐大的倉庫共享了相同的服務器。在DGit的實現中,由于這些倉庫在獨立的服務器中進行分發,因此這種情況同時發生在三臺服務器上的可能性少之又少。這也使某個請求可以在負載相對較小的服務器中進行處理。 \\
- 分發服務器之間無需保持一個很近的距離,他們可以分布在不同的可用區域或是數據中心之間。這種方式顯然能夠改進可用性,并且對于在地理位置上更接近的用戶也能夠帶來性能上的改進。\
DGit使GitHub能夠廢除之前所使用的基于備份的模式(由于DGit的發布過程還在進行中,因此目前仍在使用這一模式)。對于每個活動的服務器來說,這種模式要求設置一個專用的備用服務器,以交叉線連接,數據將通過DRDB進行同步。
\\對于GitHub的整體功能來說,廢除這種模式能夠帶來一些額外的好處:
\\- 當某一臺服務器發生故障時,唯一必須要做的一件事就是將等待中的請求重新路由至一臺新的服務器,并重啟發生故障的服務器。 \\
- 此外,替換一臺有故障的服務器變得不再那么緊迫了,因為至少還有兩臺服務器能夠運行,他們可將數據迅速地分發至第三臺服務器。 \\
- 由于新的方式不再需要使用一臺專用的備用服務,這意味著GitHub能夠更好地利用每個CPU以及所有的可用內存,以處理用戶的請求。 \\
- DGit極大地簡化了GitHub基礎設施的管理,例如添加新的服務器、應對某些倉庫變得非常龐大或非常流行等情況。\
正如之前所說,DGit是基于Git本身所打造的,它并沒有利用RAID、DRBD或其他分發技術。GitHub選擇實現自己的算法,以處理序列化、加鎖、故障檢測以及重新分發等操作。在與InfoQ的一次對話中,GitHub表示他們使用了三階段提交(3PC)協議以處理分布式事務。“DGit基本已經消除了在Git層由于單一托管或整個機架不可用所造成的服務故障”。
\\如上文所說,GitHub近幾個月來正在逐步部署DGit,首先從他們自己的倉庫開始部署。當他們對于新的系統具備了充分的信心之后,就會開始遷移受歡迎的公共倉庫。在今年二月,GitHub開始批量地遷移倉庫。目前大約有60%的倉庫、98%的Gist,總計約67%的GitHub數據已經運行在DGit上了。GitHub向InfoQ表示:“我們正在日夜不停地通過導入作業將數據從之前的存儲架構中遷移至DGit”。
\\查看英文原文:GitHub’s DGit Improves Reliability, Performance, and Availability