現在docker在雲計算領域發展的勢頭很猛,各個公司不論大小都開始研究這個開源工具和技術,圍繞docker的開源項目和創業公司也多如牛毛,就是一個簡單管理container的web ui都有很多開源項目。不過還是一個人說的好,docker必須要是集群才好玩,而且越大越好玩。當然這是從玩技術的人眼中看待的問題,如果要真正用於生產還是有很多問題需要解決,很多方案需要設計,很多容錯需要處理。今天看資料學習到了docker是怎樣解決容器里面數據存儲的問題的方案,以前做PAAS遇到過這種問題,不過自己也設計了相應的方案解決了問題。不過docker提供的volumes解決方案好像感覺更加完美和靈活一些,但是總體架構和思路其實都是一樣的。下面就根據自己的理解說說docker的volumes解決方案,官方文檔有詳細的使用說明,如果想要嘗試一把,請自行google或者直接訪問docker官方問題:https://docs.docker.com/userguide/dockervolumes/
在介紹具體方案以前先說說基於container運行的程序有什么樣的數據存儲問題。傳統的軟件開發人員都習慣了使用本地磁盤保存文件等數據,如果程序掛了以后重新啟動以后那么數據還在(硬盤沒壞的情況下),你可能會說為什么不使用雲存儲或者分布式文件系統或者數據庫之類的,首先傳統行業開發者可能還沒有接受或者接觸雲存儲系統和概念,其次小公司或者個人開發者不一定能夠可以自己使用的雲存儲系統(第三方往往需要收費,而且不一定好用),數據庫不合適存儲文件。所以這些問題就需要PAAS平台(不管是公有還是私有,當然這里把docker也算在內了)去解決,如果PAAS平台是基於container運行應用的架構那么就存在本地數據存儲的問題。因為PAAS平台需要合理利用資源,那么就需要動態調度運行程序到不同的主機上去運行,那么在應用被從一個container調度另一個container運行的時候,怎樣保證數據也被同樣遷移過去,而且遷移后的container和以前的container可能根本不在同一個主機上。那么數據遷移就是一個很大的問題,想要很優雅的解決這個問題不是那么容易的。
先看看我以前是怎么解決這個問題的(其實你會發現和docker的解決方案是那么驚人的相似),我們為開發者提供一個目錄,承諾在這個目錄下存放的問題保證在大多數情況下不會丟失(極端情況可能會丟失一些數據,例如硬盤壞掉而且這時數據剛好還沒有成功備份,當然也有解決方案,不過需要犧牲用戶體驗和性能:就是同步寫雲存儲),然后我們有一個文件系統的監聽agent會監控這些目錄的變化,如果在一個固定間隔時間內有文件變化就會定期把這個目錄壓縮成一個壓縮文件然后上傳雲存儲,當用戶的應用被遷移到另一個container中去的時候在從雲存儲下載並且解壓到相應目錄即可。這里為了解決用戶不停的寫文件導致頻繁的進行壓縮和上傳操作,我們設置了一個時間間隔來做這些操作。如果在這個時間間隔內有數據寫入並且還沒有執行壓縮上傳操作的時候主機掛掉或者硬盤壞掉那么部分數據丟失。為了解決上傳過多文件到雲存儲每次都是覆蓋以前老的文件,即一個應用只有一個壓縮文件被存放在雲存儲。通過這種方案我們解決了基本上99%以上的數據存儲問題。
繼續閱讀后文,請到:www.wuyouqiang.com