Docker熱遷移研究背景,問題描述及解決方案

1.研究背景

  雲計算作爲一種新興的計算模式,近幾年受到越來越多的關注和應用,隨着雲服務規模的擴大,數據中心不斷的擴張,爲了可以在大規模的雲服務平臺下有效實現負載均衡,將計算資源進行有效分配,在線遷移技術就不得不引起人們的重視。傳統模式下,雲計算的核心內容是虛擬化技術,通過虛擬機來提高計算資源的利用率,而且目前虛擬機的熱遷移技術也相對成熟。而隨着人們容器概念的理解不斷深入,及最近幾年Docker的持續火熱使人們對雲服務的模式產生了新的思考,容器將給雲帶來更輕便,更靈活,更密集的服務能力,不同於虛擬機,容器通過共享主機內核可以彈性分配計算資源,進一步提高了資源利用率,在操作系統的角度來看,容器就相當於一個個的進程組在其中運行,而正是容器與內核這種密切的關聯對容器的熱遷移技術提出了挑戰,遷移過程中的狀態信息及資源都分散在操作系統甚至內核之中,容器的熱遷移也就變的更加複雜,但在雲服務均衡調度的需求下,容器的熱遷移技術亟待解決。

 

2.研究現狀

   容器熱遷移指在確保客戶端訪問不中斷的情況下在不同的物理主機之間移動應用程序的過程,它可以解決雲服務下存在的一些問題,如硬件維護期間的停機,負載均衡及雲平臺故障。在虛擬機熱遷移的技術指導下,目前容器的熱遷移也參照虛擬機熱遷移的模式,主要分爲兩種類型,一個是複製前內存(pre-copy memory),另一個是複製後內存(post-copy memory),目前市面上有一些容器熱遷移產品相對成熟,Virtuozzo團隊是研究容器熱遷移技術的先鋒團隊,目前已經可以提供用於生產環境並可以實現容器熱遷移的容器引擎,但唯一美中不足的就是這種技術只能面向Virtuozzo定製的Linux內核,通過對內核的修改或者補丁才能完成容器熱遷移功能,不能面向主流Linux內核來實現熱遷移。因此Virtuozzo爲了解決這一個問題,爲了能面向主流Linux內核在用戶空間來實現熱遷移,成立CRIU項目組來解決這些問題,目前CRIU項目還有一些問題沒有解決還在研究階段。

 

3.面臨的問題

    相對於虛擬機熱遷移,容器由於共享主機內核,狀態信息及進程資源分佈在內核之中,虛擬機是作爲一個整體對象進行熱遷移,不關心內部情況,在凍結過程中,虛擬機內存可以在指定位置獲取,且只需要保存虛擬機CPU及其設備信息就可完成恢復操作,而容器內存分佈在進程之間,需要根據進程信息去依次獲取相應內存信息,並且與容器相關需要在凍結步驟中保存的狀態信息和資源對象十分複雜,大約有1000左右的對象信息需要保存,而且有的對象信息內核並沒有提供相應的接口直接獲取,虛擬機則只需要保存70個左右的對象信息且可以直接獲取。同理,在容器恢復過程中需要創建大量的對象或狀態來支持容器進程組的恢復。除此之外,還有幾個關鍵技術問題需要解決,由於容器之間的進程組之間會存在嵌套父子關係,熱遷移過程需要維持進程之間的關係,所以進程子樹的遷移問題需要得以解決,除了這個問題以外,CRIU這個面向主流linux內核研究容器熱遷移的項目組還存在共享內存及共享文件描述符的遷移,存活狀態的TCP鏈接的遷移及對進程凍結時間的優化這幾個問題需要得以解決。

 

4.研究進展

   目前的研究思路是嘗試瞭解linux內核與進程有關的機制,並隔離出容器虛擬化環境所需要的資源和狀態信息,將這些對象信息通過圖的方式保存下來用於容器的凍結操作,由於這個過程比較複雜,其中涉及到有關內核中的進程相關機制的技術細節需要紮實的linux內核的基礎知識,目前正在深入研究linux內核,嘗試將容器的虛擬化環境從linux內核中隔離出來,其中會涉及到進程子樹遷移問題的解決,需要熟悉進程之間通過namespace構建父子關係的機制並思考如何保存並恢復進程之間的關係。在此基礎上,再通過pre-copy memory的遷移機制實現容器熱遷移的基本功能。目前Dokcer1.13版本的出現,其中checkpoint命令行可以實現爲一個Dokcer容器創建檢查點的功能,從而實現對該容器的虛擬環境的隔離性的描述,這對我們實現Docker熱遷移具有很明顯的參考價值,在接下來的研究過程中,我需要研究Docker checkpoint命令是如何將容器的虛擬化環境隔離出來的,並研究隔離過程中所需要保存的狀態及資源在操作系統中的分佈。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章