如何實現 Docker 與分散式資料庫結合
作者:蔣勇
技術新潮流 - Docker
隨著如今開源軟體以及開源專案的熱潮,Docker作為如今在技術圈非常火爆的一款開源軟體產品,除了開源專案的貢獻非常活躍,目前應用也十分的廣泛,包括Redhat在內的多個作業系統都已經能支援Docker,而更是無數的軟體已經在使用Docker映象進行安裝部署。
那麼Docker是什麼呢?
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。幾乎沒有效能開銷,可以很容易地在機器和資料中心中執行。最重要的是,他們不依賴於任何語言、框架包括系統。
這是對Docker的一個官方解釋,簡單說,有兩個部分:
1) 對於應用程式,曾經我們需要為了不同的系統專門的調整應用程式的程式碼或者是構造相應的依賴包驅動等等,大大增加了開發量以及開發的難度。現在,Docker向不同的應用程式,提供了一個統一的環境。
2) 對於伺服器,為了支援不同版本的應用,曾經可能需要在物理機上安裝多個版本或者不同的GuestOS或者說虛擬機器。這就大大佔用了物理機的效能,影響了最終程式的表現,提高了資源的成本。
使用Docker容器的方式,對於應用程式,不需要開發多種多樣的版本或者是針對OS每個版本的升級再進行程式碼方面的調整,實現了廣泛的相容性和開發的最簡性。同時對於物理機,部署的環境“瘦身”也節約了更多的資源,將更多的資源用於提高應用程式本身的效能。
CoreOS是Docker的不二之選?
之前大概介紹了Docker,那麼伺服器上面還是需要最基本的應作業系統才能支撐Docker容器,那麼這麼多中的Linux核心OS究竟哪一個好呢?筆者和很多Docker技術專家的的觀點就是Core OS。
CoreOS是一個基於Linux 核心的輕量級作業系統,為了計算機叢集的基礎設施建設而生,專注於自動化,輕鬆部署,安全,可靠,規模化。作為一個作業系統,CoreOS 提供了在應用容器內部署應用所需要的基礎功能環境以及一系列用於服務發現和配置共享的內建工具。
簡單說,CoreOS去掉了大量的非必要的功能,只保留了Server端需要的最基本功能,真正意義做到了“輕量化”。
此外,CoreOS還做到了:整體系統升級/回滾方案;容器化所有非系統應用、無包管理器;叢集化排程器Fleet;分散式高可靠的KV儲存系統ETCD。
這些特性都讓它成為Docker生態的首選作業系統。不過最新的訊息是,CoreOS不滿足於做Docker生態下的一環,它正在推出自己的容器AppC計劃,想對Docker來一招“釜底抽薪”。當然,現階段並沒有出現完全的兩者 “分手”,所以對於普通使用者,並沒有太大影響。
Docker+分散式資料庫
資料庫是每一個軟體專案必須的一個部分,作為這樣的一類底層基礎軟體,相容性、通用性、易用度都是需要考慮的重點。非常遺憾的是,現在的作業系統以及資料庫都沒有完全的實現完全的通用。特別對於NoSQL資料庫這樣的分散式系統,需要部署在多臺物理機時,對於通用性要求就更高了。
目前,像SequoiaDB已經實現了自動化的安裝,大大提升了部署的效率,但是考慮到部署之後的配置以及不同環境下的除錯問題,仍然可能會耗費不小的人力物力。所以基於剛剛提到的Docker的優點,作為一個通用的基礎軟體,NoSQL資料庫的Docker化就成了必須。
一個簡單的例子,你可以用docker把資料庫的資料與資料庫程式本身分離開:用一個container A作為資料儲存,然後另一個container B執行資料庫。當你想升級資料庫時,用新的container C替換掉container B即可。
Docker+分散式資料庫的結合,帶來諸多的好處:
1) 部署簡單,使用映象部署非常簡單,特別是對叢集環境,使用Docker映象的部署還可以再資料庫上提前整合Hadoop、Spark等架構,真正實現“一步到位”。
2) 方便應用的更新,應用的更新只需要考慮製作一個新的映象就可以與容器適配,無需重新再調整與底層的配置。資料和程式的分離,這樣升級替換等等都不會影響到資料。
3) 操作簡單方便,除了底層免除了複雜的與環境進行配置的工作,操作也更加方便,配置好的Docker映象在部署時候只需要一條指令就可以了。
4) 開發、應用環境一致,Docker讓資料庫能做到 開發---測試---實施應用 三個階段的環境是完全一致的。降低開發到應用過程中的工作量,開發出來就能保證實際應用環境上能同樣的執行。
5) 系統穩定,因為Docker的隔離作用,將應用與OS獨立開,這樣能更好保證整個系統的穩定性。
6) 節省系統資源,系統只需要執行一個統一的環境就可以,不需要佔用太多效能去支援執行環境本身,能將更多的系統資源投入到應用當中。
有了這些特性, Docker+資料庫,將成為一個數據庫發展的新方向,Docker這樣的通用性和簡單操作解決方案,大大提高了資料庫使用的效率,幫助使用者節約了大量成本。
Docker是如今技術圈的新潮流,開發人員是最樂見於Docker的這種應用部署模式,因為應用的生命週期起始於開發人員的開發系統,經過開發,測試,壓力測試,等過程,最終應用釋出到生產系統,並可能在不同的生產系統中遷移。應用開發人員對此都會有切身的體會,任何微小的執行環境的錯誤都會導致應用出現問題,尤其在講究快速敏捷的今天,應用模組,新的程式碼,新的配置,被快速的加入應用的環境中,可能還沒等寫入到文件,新特性就已經被推送到生產上了。作為一個新的技術,筆者也希望更多的產品能加強與Docker的結合,幫助產品更好的使用。