Docker 與分佈式數據庫結合

來自重慶慧谷科技的蔣勇先生,做爲SequoiaDB社區的「骨灰級成員」,於最近分享了主題爲「Dockerizing SequoiaDB」的技術專題,分享主要介紹了他們公司如何使用Docker製做國內領先的NoSQL數據庫SequoiaDB的鏡像的過程,以及有關Docker和Core OS一些介紹和使用心得,那麼筆者就將對他的演講進行概括總結,順便談一談Docker與分佈式數據庫結合的必要性。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 提供了在應用容器內部署應用所須要的基礎功能環境以及一系列用於服務發現和配置共享的內建工具。oop

簡單說,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的結合,幫助產品更好的使用。

相關文章
相關標籤/搜索