持續(xù)交付發(fā)布可靠軟件的系統(tǒng)方法(交付生態(tài)圈)第十二章:數(shù)據(jù)管理

《持續(xù)交付發(fā)布可靠軟件的系統(tǒng)方法》讀書筆記

應用程序可以通過刪除前一個版本,使用新版本替換舊版本的方式部署怎炊,但是大多數(shù)系統(tǒng)棋傍,數(shù)據(jù)無法使用這種方式進行變更蚜锨,一旦某個系統(tǒng)發(fā)布到了生產(chǎn)環(huán)境中,關聯(lián)的數(shù)據(jù)將不斷增加沙绝。數(shù)據(jù)往往是系統(tǒng)中最有價值的部分搏明。當我們需要對數(shù)據(jù)系統(tǒng)進行結構修改或者內(nèi)容修改時,就需要相關的策略闪檬。
對數(shù)據(jù)的修改是不可避免的星著,關鍵在于將數(shù)據(jù)遷移過程自動化。目前有一些工具對數(shù)據(jù)遷移提供了較多支持粗悯,它們還允許對數(shù)據(jù)庫進行版本化管理虚循。
另一個重要部分是測試數(shù)據(jù)的管理。

數(shù)據(jù)庫腳本化

任何數(shù)據(jù)庫的修改都應該通過自動化過程來管理样傍。包括數(shù)據(jù)庫的初始化横缔,數(shù)據(jù)庫所有的遷移都需要腳本化,并將腳本提交到版本控制庫中衫哥。
幾乎所有的數(shù)據(jù)管理系統(tǒng)都支持通過自動化腳本進行數(shù)據(jù)存儲的初始化工作茎刚。

  • 清除原有的數(shù)據(jù)庫
  • 創(chuàng)建數(shù)據(jù)庫結構、數(shù)據(jù)彎路實例以及模式等
  • 向數(shù)據(jù)庫加載數(shù)據(jù)

在大多數(shù)據(jù)項目中炕檩,數(shù)據(jù)庫的使用要復雜得多斗蒋。

增量式修改

絕大多數(shù)據(jù)系統(tǒng),對數(shù)據(jù)庫更新時笛质,要保留它們的數(shù)據(jù)泉沾。由于在部署時需要保留數(shù)據(jù)庫中的已有數(shù)據(jù),所以需要有回滾策略妇押,以便部署失敗時使用跷究。這就需要對數(shù)據(jù)庫進行版本控制。

  • 在數(shù)據(jù)庫中創(chuàng)建一個數(shù)據(jù)敲霍,用來保存版本號
  • 每次數(shù)據(jù)庫進行修改時俊马,需要創(chuàng)建兩個腳本:升級腳本、回滾腳本
  • 有一個配置項來設置數(shù)據(jù)庫與應用版本對應關系

在很多項目中肩杈,多個程序共用一套數(shù)據(jù)庫存儲柴我。雖然這種方式并不推薦,最好是讓程序直接交互扩然,但是這種情況卻是常見的艘儒。這種環(huán)境下對數(shù)據(jù)庫變更,就需要對程序做完全的集成測試,確保數(shù)據(jù)庫變更對相關影響到的程序都能測試到界睁。同時對哪個應用使用了數(shù)據(jù)庫哪個對象做登記也是可以的觉增。

數(shù)據(jù)庫回滾和無停機發(fā)布

生產(chǎn)環(huán)境部署有兩個需求會成為數(shù)據(jù)庫回滾的約束。

  • 回滾時需要保留本次升級后產(chǎn)生的數(shù)據(jù)
  • 保持應用程序的可用狀態(tài)
  1. 保留數(shù)據(jù)的回滾
    回滾腳本要滿足以下條件
  • 包括模式修改翻斟,即不遷移任何數(shù)據(jù)
  • 只刪除新版本使用的那些數(shù)據(jù)逾礁,即使這些數(shù)據(jù)丟失了也沒問題

對于以下情況

  • 涉及從臨時表中將數(shù)據(jù)導回來
  • 刪除那些舊版本系統(tǒng)無法接受的數(shù)據(jù)

第一種方法是將那些不想丟失的數(shù)據(jù)庫事務緩存,一旦應用程序被成功地重新部署访惜,這些事件就可以重新播放一遍嘹履。
第三種方法是使用藍綠部署,發(fā)布時對生產(chǎn)數(shù)據(jù)庫(藍環(huán)境)做一個備份疾牲,將備份放在綠環(huán)境中應用植捎,遷移數(shù)據(jù),將用戶切換到綠環(huán)境中阳柔⊙媸啵回滾時,將用戶切回藍環(huán)境舌剂,再把綠環(huán)境的數(shù)據(jù)庫上發(fā)生的新事務回收济锄,在下一次更新之前重新應用這些事務到藍數(shù)據(jù)庫上。

  1. 應用程序部署與數(shù)據(jù)庫遷移解耦

第三種方法是將應用程序部署過程與數(shù)據(jù)遷移過程解耦霍转,分別執(zhí)行荐绝,這種可用于管理熱部署。
開發(fā)應用程序升級的中間版本避消,它既與數(shù)據(jù)庫上個版本兼容低滩,也與數(shù)據(jù)庫下個版本兼容。

將應用程序部署與數(shù)據(jù)庫遷移解耦

測試數(shù)據(jù)的管理

  1. 為單元測試進行數(shù)據(jù)庫模擬
    單元測試不使用真正的數(shù)據(jù)庫岩喷,通常它會使用測試替身對象來取代與數(shù)據(jù)庫打交道的服務恕沫。如果做不到的話:
  • 用測試替身對象來替代那些訪問數(shù)據(jù)庫的代碼,通常使用repository模式
  • 使用假的數(shù)據(jù)庫纱意,如H2/SQLite/JavaDB婶溯。單元測試運行在一個內(nèi)存數(shù)據(jù)庫上,讓驗收測試運行在平時使用的磁盤的數(shù)據(jù)庫上偷霉。
  1. 管理測試與數(shù)據(jù)之間的耦合
    以下三種方法可以用來做測試設計迄委,便于管理好數(shù)據(jù)的狀態(tài):
  • 測試的獨立性[推薦],合理組織測試类少,讓每個測試的數(shù)據(jù)只對該測試可見
  • 適應性測試叙身,運行時先對數(shù)據(jù)環(huán)境進行檢查,用檢查的數(shù)據(jù)作為數(shù)據(jù)基礎進行測試
  • 測試的順序硫狞,按某種已知的序列運行信轿,每次測試輸入依賴于前一個輸出

保持測試的獨立性最簡單的方法是確保在測試結束時赞警,總是把數(shù)據(jù)庫中的數(shù)據(jù)狀態(tài)恢復到測試之前。
對于支持事務的數(shù)據(jù)庫來說虏两,測試開始時創(chuàng)建一個事務,在事務內(nèi)執(zhí)行所需的數(shù)據(jù)庫操作與交互世剖,測試結束后定罢,將該事務進行回滾。
不建議創(chuàng)建一個連貫的“故事”進行順序執(zhí)行旁瘫,這個有序的測試無法真正地代表測試的目的和內(nèi)容祖凫。

數(shù)據(jù)管理和部署流水線

  • 提交階段的測試數(shù)據(jù),避免復雜的數(shù)據(jù)準備酬凳。
  • 驗收測試的數(shù)據(jù)惠况,盡可能減少測試對大型復雜數(shù)據(jù)結構的依賴。測試專屬數(shù)據(jù)宁仔、測試引用數(shù)據(jù)稠屠、應用程序引用數(shù)據(jù)
  • 容量測試的數(shù)據(jù),為測試提供足夠的輸入數(shù)據(jù)翎苫,準備適當?shù)囊脭?shù)據(jù)支持測試中的用例
  • 其他測試階段的數(shù)據(jù)权埠,推薦利用生產(chǎn)數(shù)據(jù)的一個子集或者運行一些自動化驗收測試或者容量測試之后產(chǎn)生的數(shù)據(jù)庫,為其他測試階段提供數(shù)據(jù)煎谍。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末攘蔽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子呐粘,更是在濱河造成了極大的恐慌满俗,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件作岖,死亡現(xiàn)場離奇詭異唆垃,居然都是意外死亡,警方通過查閱死者的電腦和手機鳍咱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門降盹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谤辜,你說我怎么就攤上這事蓄坏。” “怎么了丑念?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵涡戳,是天一觀的道長。 經(jīng)常有香客問我脯倚,道長渔彰,這世上最難降的妖魔是什么嵌屎? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮恍涂,結果婚禮上宝惰,老公的妹妹穿的比我還像新娘。我一直安慰自己再沧,他們只是感情好尼夺,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著炒瘸,像睡著了一般淤堵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顷扩,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天拐邪,我揣著相機與錄音,去河邊找鬼隘截。 笑死扎阶,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的技俐。 我是一名探鬼主播乘陪,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雕擂!你這毒婦竟也來了啡邑?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤井赌,失蹤者是張志新(化名)和其女友劉穎谤逼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仇穗,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡流部,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了纹坐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枝冀。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耘子,靈堂內(nèi)的尸體忽然破棺而出果漾,到底是詐尸還是另有隱情,我是刑警寧澤谷誓,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布绒障,位于F島的核電站,受9級特大地震影響捍歪,放射性物質(zhì)發(fā)生泄漏户辱。R本人自食惡果不足惜鸵钝,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庐镐。 院中可真熱鬧恩商,春花似錦、人聲如沸必逆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽末患。三九已至,卻和暖如春锤窑,著一層夾襖步出監(jiān)牢的瞬間璧针,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工渊啰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留探橱,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓绘证,卻偏偏與公主長得像隧膏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嚷那,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容