盡管Git Ketch項目開發才剛剛開始,谷歌公司已經對外宣布了他們的第一個Git項目——Git Ketch,一個多主機Git管理系統,能夠通過訪問多個Git服務器來復制信息,以確保復制信息的復原性和可擴展性。所做的這些改變都是基于原有用Java搭建的名為JGit的Git服務器基礎之上的,雖然這里面的其它Git服務器可能是多主機群集的一部分。
最初設計Git的目的是將Git打造成一個分布式源代碼管理庫系統,但是大多數組織都采用了一個集中式的方式:采用一個帶有“黃金副本”代碼的主庫,所有開發者會在這個主庫上做修改,然后以最終版本作為更新基礎;盡管所有改動能從開發者的私庫里直接調取,但很少有這么做的。
只不過這種集中式方法也會導致單點故障。不過別擔心,JGit提供了部分解決方案,那就是通過它的分布式文件系統(DFS)的存儲選項。此選項僅能解決部分問題,因為JGit只定義了一組抽象類,而這組抽象類又定義了DFS存儲協議,但支持數據復制和創建抽象類實現的整體架構則是由用戶自己設計的。這就意味著組織已投入相當大的資源——為實現JGit DFS,項目組暫時還不能將JGit DFS大范圍推廣使用,谷歌是少有的幾個掌握DFS實現的組織之一。
Ketch所遵循的策略有些與眾不同,不僅僅可以定義一個能夠復制DFS數據的Git服務器,Ketch還可以假定現存的多個普通Git服務器可以互相之間數據和狀態同步,因此被稱為“多主機”。在任何一個制定的節點上,這些服務器都可以當作“主機”來使用,其余的服務器當作“從機”來利用。任何時候向任何一臺服務器發送請求,這個“請求”都會被轉發給“主機”,該“主機”將會向所有其他服務器發送推送請求,一旦絕大多數“從機”服務器已經確認推送請求成功,“主機”會向初始呼叫對象確認操作已成功。這一機制是基于Raft算法,此算法能夠確保至少大多數服務器能夠接收已經做了變更的請求;任何服務器上的數據丟失,都可以通過其它服務器同步過來。目前,只有JGit服務器可以充當“主機”,雖然在多主機集群里任何Git服務器實現的原子推送都可以充當一個參與服務器。
這些已經提出來的改變均可以在JGit內部Gerrit里看到,關于未來在工具上的改進細節及進展都可以從JGit的電子郵件分發列表里獲得。
查看英文原文:Google Kick-Starts Git Ketch: A Fault-Tolerant Git Management System