容器的持久化存儲

jopen 8年前發布 | 13K 次閱讀 虛擬化 數據庫

【編者注】本文是該系列的第二篇文章,討論了容器的持久化存儲的問題。從持久化的定義到持久化的理解,并且對目前容器持久化的三種方案進行了回顧。盡管本文只是個概括性的介紹,但對于理解容器的持久化存儲還是很有幫助的。

本篇文章是 前一篇 文章關于詢問“持久化存儲對于容器是否是個好主意”的后續。我收到了很多關于前一篇文章的反饋,各方面的觀點都有。于是,我認為值得回應一下對于持久化存儲的三種"觀點"。觀點是加了引號的,因為我準備使用一句格言來論述:僅僅是因為你能做到,而并不是說明你應該去做。

在本文討論持久化存儲之前,先來從聲明持久化存儲的范疇。我已經同一些讀者討論過,在運行各類應用時如何能夠不用持久化數據的。聲明下,運行容器并不意味著完全摒棄數據持久化。但是,容器的傳統持久層已經采用對象存儲,如S3,數據庫作為一項服務使用,如RDS,并且,數據庫運行在虛擬機上或者裸機上。

在每個應用場景中,數據并不是存儲在容器文件系統中,而是通過網絡進行訪問。當在這兩篇博文中討論持久化存儲時,我們指的是掛載一個卷到容器宿主并且鏈接到容器,卷存在于容器之外,并且用于持久化事務數據。這些卷是容器宿主機上的本地存儲,但它同樣可以被網絡文件系統和網絡塊存儲使用。

關于事務數據持久化,我們來回顧下容器存儲的三種方案:

  1. 原生云:按照純粹的原生云的設計模式,例如那些 Twelve-Factor 應用提出的大綱。這個方案假定持久化數據并不是存儲在容器中,而是作為后端服務,例如對象存儲和數據庫即服務。這個方案可以確保容器和它們的數據持久化支持服務松耦合,同時也不需要那些會限制擴展的依賴。彈性不是通過共享基礎設施提供,例如網絡存儲,而是通過應用運行在容器中,容器與容器管理平臺的配合工作。
  2. 把容器作為虛擬機:為了利用容器帶來的應用便攜性的優點,一些用戶將容器作為輕量虛擬機來使用。在這種方案中,一部分直接使用遺產應用,例如Oracle,同時將他們從虛擬機中遷移到容器里。這包括掛載共享網絡存儲卷到容器中作為數據存儲使用。盡管這種架構可以起作用,它同樣帶來了實際的條件和限制。例如,重啟一個容器,甚至一個共享存儲,已經不同于在vSphere中重啟虛擬機的核模式。當一個容器在一個新的容器宿主機上重啟,它的期望是這個應用能夠通過重啟到數據庫卷鏈接來恢復。相對于遺產應用假定為虛擬機基礎設置將處理恢復,而不是需要設計應用。同樣,如果便攜性是遷移到容器中的一個原因,采用它們來替代虛擬機來安裝遺產應用是這種便攜性的反模式。在大卷中存儲數據是緊耦合在容器上,這使得便攜性非難實現。像這樣的限制使得一個虛擬機直接容器化存在很多問題。
  3. 混合:由于沒找到一個更好的詞,第三種方案我將之稱為混合,利用容器和卷來應對帶事務持久要求的應用。然而,與上一中方法不同,這個方案縮小持久化存儲方案的應用使用場景,它不需要共享基礎設施來實現彈性和恢復。例如非關系型數據庫,如Cassandra,它有可用性架構在應用程序層,并且它比遺產應用程序有不同的基礎設施預期。在這個方案中,持久層產生價值,不是通過彈性,而是通過可編程和靈活,例如通過優秀設計的API來擴展存儲。這個方案結合了持久層和或多或少的純原生云設計模式。

這篇文章中,我只是提供對該話題的一個整體回顧。我將會提供更多的細節關于上面提到的幾個方案。同時,如果你計劃參加在奧斯汀舉行的OpenStack Summit,并且想聽到關于這個話題的更多內容。我、來自SolidFire的John Griffith以及來自IBM的Shamail Tahir已經提交了一個關于容器持久化存儲的話題。請認真考慮為這個話題投票,投票期為2月9日至2月17日。同樣的,歡迎給這篇博文進行反饋、修正或者反駁。

原文鏈接: Follow Up Post: Using Persistent Storage With Containers (翻譯:陳杰)

===================================================

譯者介紹

陳杰,北京理工大學計算機學院在讀博士,研究方向是自然語言處理在企業網絡信譽評價方面的應用,平時也樂于去實現一些突發的想法。在疲于配置系統環境時發現了Docker,跟大家一起學習、使用和研究Docker。

來自: http://dockone.io/article/1051

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!