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