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