今天(11月2日)是PASS 2017峰會的首日,Redgate布道師Steve Jones介紹了他在數(shù)據(jù)庫管理中引入DevOps的一些技巧。他所介紹方法中包括了一些可適用于各種規(guī)模應用部署的技巧。Jones在演講一開始就提及Amazon在2016年部署實現(xiàn)每12秒做一次生產(chǎn)層面變更。他分享此案例的一個原因在于,闡明使用有效的變更管理方法做高效交付時可達到的變更頻率。
考慮到存儲在數(shù)據(jù)庫中的數(shù)據(jù)量以及數(shù)據(jù)庫所擔任的關鍵角色,對這些生產(chǎn)環(huán)境中的數(shù)據(jù)庫成功地執(zhí)行變更無疑十分關鍵。為了展示數(shù)據(jù)庫中存儲的數(shù)據(jù)量,Jones舉例Microsoft每日將從Azure用戶采集700TB的遙測數(shù)據(jù)(沒錯,是TB)。
Jones引用了Gene Kim給出的支撐DevOps的三個原則:
系統(tǒng)化考慮;放大反饋循環(huán);實驗和學習的文化。Jones就此原則給出了他在將DevOps引入數(shù)據(jù)庫中所使用的技術。最初的也是基礎的一步,是實現(xiàn)并依賴于版本控制系統(tǒng)的使用,例如Git、SVN等。下一步是實現(xiàn)在應用代碼中無差別地對待數(shù)據(jù)庫代碼。第三步是在版本控制系統(tǒng)中設置并維護一個組織有序的系統(tǒng),這在某些情況可以是存儲應用代碼的同一個代碼庫,但是在某些情況下使用獨立的代碼庫會更好。最后一步是對更改進行代碼審查并認真對待。
由于在非開發(fā)環(huán)境中會有部分的測試更改先于部署執(zhí)行,Jones推薦所使用的數(shù)據(jù)集是特別構造,而非從生產(chǎn)數(shù)據(jù)中抽取。開發(fā)(DEV)、用戶接收測試(UAT)和預發(fā)布測試(STG)等從清空的數(shù)據(jù)庫開始,進而添加表示生產(chǎn)環(huán)境用例的10到40行數(shù)據(jù)。
所有要在生產(chǎn)環(huán)境中部署的代碼應該以一致的方式完成。如果需要執(zhí)行一項手工步驟,那么應對這些步驟做完備的文檔。一致性是十分重要的,它保證了每個部署總是以同樣的方式完成,并且考慮到了一些重要過程,例如單元測試、定義了主鍵的適用表等。
Jones觀察到不成功的變更是很難回滾的,尤其是變更中涉及了數(shù)據(jù)庫。Jones推薦手工編寫回滾代碼,并且這些代碼已在部署到DEV、STG等階段之前進行了測試,使得工作腳本已準備好加入到所需的事件中。另一個可考慮的技術是使用黑箱部署,其中變更被部署到生產(chǎn)系統(tǒng),但是使用它們則是通過一個特征標志觸發(fā)的。這樣一個特性在確定可用于一般通用版(GA)之前,它都是非激活的。據(jù)Jones介紹,F(xiàn)acebook在推出Facebook Messenger中就采用了這個方法,確保它們的系統(tǒng)可處理預期的用戶負載。
查看英文原文: Bringing a DevOps Approach to Databases