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