GitLab 是如何從 Azure 云遷移到谷歌云的,gitlab云環境GitLab 是如何從 Azure 云遷移到谷歌云的最近 GitLab.com 剛從 Azure 遷移到了谷歌云平臺(GCP),GitLab 認為新平臺能更好地處理關鍵負載,提供最低的錯誤率和最高的可用性。網站并沒有經歷漫長的下線維護時間就完成了遷......
最近 GitLab.com 剛從 Azure 遷移到了谷歌云平臺(GCP),GitLab 認為新平臺能更好地處理關鍵負載,提供最低的錯誤率和最高的可用性。網站并沒有經歷漫長的下線維護時間就完成了遷移工作,而做到這一點背后的關鍵就是 GitLab 的鏡像切換能力。
GitLab 決定遷移到 GCP 的原因之一是希望新平臺能提升性能和一致性。GitLab 的 Chrissie Buchanan 還提到,GCP 對 Kubernetes 的支持是另一個顯著因素。但將 GitLab 完全轉移到 Kubernetes 上來運行的項目被推遲到遷移完成后才繼續進行。
GitLab 團隊很早就意識到,簡單地關掉 GitLab.com,將所有數據從 Azure 復制到 GCP,更改 DNS 以指向新服務器,然后重新啟動服務這條遷移路線是不可行的。實際上,光是復制大約半 PB 的數據然后驗證所有數據是否正確傳輸就需要漫長的下線維護時間了。。
因此 GitLab 的工程師走了另一條路子:他們加入了一項新功能,將網站鏡像到了多個自同步的 GitLab 實例上。平時,這些鏡像可以在云服務內分發數據時提升性能和可靠性;而在這次跨云遷移的任務中,團隊只要關閉基于 Azure 服務的鏡像,然后啟用在 GCP 服務上運行的新鏡像(也就是故障切換)就可以了。
這項新功能稱為 Geo,通過它可以在主服務不下線的前提下遷移 GitLab 的所有數據。所有數據傳輸完畢后,GitLab 的工程師就開始關閉 Azure 上的鏡像,啟用 GCP 上的新鏡像,然后將后者設置為主鏡像。這一過程非常精巧,需要漫長的的迭代、試錯過程才能完美實現目標。
InfoQ 采訪了 GitLab 聯盟副總裁 Brandon Jung 和基礎設施工程師 Andrew Newdigate,了解了更多細節。
InfoQ:你們介紹的遷移流程其實很簡單直觀,核心就是使用鏡像解決問題,只有最后的鏡像切換步驟麻煩一些。能否介紹一下你們遇到了哪些困難,又是如何解決的呢?
Andrew:舉個例子。有一個小問題被我們長期忽視了:
GitLab 公司在幾乎所有工作流程中都用到了 GitLab.com,其中故障轉移流程在 GitLab.com 上還用 markdown 做成了方案模板。
因為我們是在對暫存實例進行故障轉移,而我們的工作流程是在 GitLab.com 的生產實例上運行的,所以后者在前者故障轉移期間都是可用的。結果遷移過程快結束的時候才有人發現,生產實例故障轉移的時候是沒法在 GitLab.com 上繼續展開工作的。事后看來這是顯而易見的問題,但不知何故我們都忽略了它,可能是因為我們太習慣使用自家產品了。
解決方案很簡單:我們使用 GitLab 的推快遞鏡像功能在單獨的內部 GitLab 實例上維護遷移項目的副本。對 GitLab.com 所做的任何更改都將復制到鏡像中。在故障轉移期間我們使用這個實例代替生產實例。
InfoQ:GitLab.com 報告說每日錯誤率和整體服務可用性都有了顯著提升。為什么遷移到 GCP 會有這樣的效果?
Brandon:GCP 的一致網絡是 API 端點性能提升的最大功臣。
Andrew:Brandon 提到了網絡這一因素。我還在一篇博文中討論了其它 5 項因素,而且不是所有因素都是技術層面的。
InfoQ:在這些提升中 Geo 可能帶來的貢獻有多大?
Andrew:Geo 是一種數據復制和異地鏡像解決方案,也能用作災難恢復方案,但它本身并不能提升 GitLab.com 的可用性。
事實上故障轉移完成后我們就在 GitLab.com 上禁用了 Geo。幾個月前我們又啟用了 Geo,用作異地備份用途。如果發生數據中心層面的重大中斷事故,我們就會開始故障轉移到備份鏡像上,但它平時不會直接接收生產流量。
InfoQ:遷移過程并非易事。GitLab 團隊從遷移到 GCP 的經歷中學到了什么?
Brandon:總體來說,我們能夠成功地從微軟 Azure 遷移到谷歌云是我們重視開發和開源的企業文化的功勞。
Brandon:GitLab 遷移到 GCP 后用戶就能更容易使用 Kubernetes 了,同時網站的性能、可用性和客戶服務水平都得到了提升。
Andrew:GCP 遷移項目是 GitLab 迄今為止開展的最大工程項目之一。它需要整個組織內多個團隊之間的協調——包括工程(Geo、CI、計劃)團隊、QA 團隊、基礎架構、營銷、支持等。這些團隊需要協調交付多個工作流。GitLab 有一個非常清晰和成熟的工程交付流程,非常適合我們的遠程文化;但我們需要調整并擴展這些流程,以便按時、安全地交付全公司共同參與的項目。由于我們在為 GitLab(產品)做內部測試,因此還能向產品經理提供反饋來改進網站,以使網站能更好地支持大型多團隊項目。產品管理團隊反應迅速,我們的大部分反饋現已獲得網站采納了。
特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發表后的30日內與ESG跨境電商聯系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部