在項目迭代的過程中波附,不可避免需要”上線“艺晴。上線對應著部署昼钻,或者重新部署掸屡;部署對應著修改;修改則意味著風險然评。
目前有很多用于部署的技術仅财,有的簡單,有的復雜碗淌;有的得停機盏求,有的不需要停機即可完成部署。本文的目的就是將目前常用的布署方案做一個總結亿眠。
一碎罚、藍綠布署
Blue/Green Deployment(藍綠部署)
1、定義
藍綠部署是不停老版本纳像,部署新版本然后進行測試荆烈,確認OK,將流量切到新版本竟趾,然后老版本同時也升級到新版本憔购。
1、特點
藍綠部署無需停機岔帽,并且風險較小玫鸟。
2、布署過程
第一步犀勒、部署版本1的應用(一開始的狀態(tài))所有外部請求的流量都打到這個版本上屎飘。
第二步、部署版本2的應用版本2的代碼與版本1不同(新功能贾费、Bug修復等)钦购。
第三步、將流量從版本1切換到版本2铸本。
第四步肮雨、如版本2測試正常,就刪除版本1正在使用的資源(例如實例)箱玷,從此正式用版本2怨规。
3陌宿、小結
從過程不難發(fā)現(xiàn),在部署的過程中波丰,我們的應用始終在線壳坪。并且,新版本上線的過程中掰烟,并沒有修改老版本的任何內容爽蝴,在部署期間,老版本的狀態(tài)不受影響纫骑。這樣風險很小蝎亚,并且,只要老版本的資源不被刪除先馆,理論上发框,我們可以在任何時間回滾到老版本。
4煤墙、藍綠發(fā)布的注意事項
當你切換到藍色環(huán)境時梅惯,需要妥當處理未完成的業(yè)務和新的業(yè)務。如果你的數(shù)據(jù)庫后端無法處理仿野,會是一個比較麻煩的問題铣减;
可能會出現(xiàn)需要同時處理“微服務架構應用”和“傳統(tǒng)架構應用”的情況,如果在藍綠部署中協(xié)調不好這兩者脚作,還是有可能會導致服務停止葫哗。
需要提前考慮數(shù)據(jù)庫與應用部署同步遷移 /回滾的問題。
藍綠部署需要有基礎設施支持鳖枕。
在非隔離基礎架構( VM 魄梯、 Docker 等)上執(zhí)行藍綠部署,藍色環(huán)境和綠色環(huán)境有被摧毀的風險宾符。
二酿秸、Rolling update(滾動發(fā)布)
1、滾動發(fā)布定義
滾動發(fā)布:一般是取出一個或者多個服務器停止服務魏烫,執(zhí)行更新辣苏,并重新將其投入使用。周而復始哄褒,直到集群中所有的實例都更新成新版本稀蟋。
2、特點
這種部署方式相對于藍綠部署呐赡,更加節(jié)約資源——它不需要運行兩個集群退客、兩倍的實例數(shù)。我們可以部分部署,例如每次只取出集群的20%進行升級萌狂。
這種方式也有很多缺點档玻,例如:
(1) 沒有一個確定OK的環(huán)境。使用藍綠部署茫藏,我們能夠清晰地知道老版本是OK的误趴,而使用滾動發(fā)布,我們無法確定务傲。
(2) 修改了現(xiàn)有的環(huán)境凉当。
(3) 如果需要回滾,很困難售葡。舉個例子看杭,在某一次發(fā)布中,我們需要更新100個實例天通,每次更新10個實例泊窘,每次部署需要5分鐘。當滾動發(fā)布到第80個實例時像寒,發(fā)現(xiàn)了問題,需要回滾瓜贾,這個回滾卻是一個痛苦诺祸,并且漫長的過程。
(4) 有的時候祭芦,我們還可能對系統(tǒng)進行動態(tài)伸縮筷笨,如果部署期間,系統(tǒng)自動擴容/縮容了龟劲,我們還需判斷到底哪個節(jié)點使用的是哪個代碼胃夏。盡管有一些自動化的運維工具,但是依然令人心驚膽戰(zhàn)昌跌。
(5) 因為是逐步更新仰禀,那么我們在上線代碼的時候,就會短暫出現(xiàn)新老版本不一致的情況蚕愤,如果對上線要求較高的場景答恶,那么就需要考慮如何做好兼容的問題。
三萍诱、灰度發(fā)布/金絲雀部署
1悬嗓、定義
灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式裕坊。AB test就是一種灰度發(fā)布方式包竹,讓一部分用戶繼續(xù)用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見周瞎,那么逐步擴大范圍悟狱,把所有用戶都遷移到B上面來⊙呙ィ灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定挤渐,在初始灰度的時候就可以發(fā)現(xiàn)、調整問題双絮,以保證其影響度浴麻,而我們平常所說的金絲雀部署也就是灰度發(fā)布的一種方式。
注釋:礦井中的金絲雀
17世紀囤攀,英國礦井工人發(fā)現(xiàn)软免,金絲雀對瓦斯這種氣體十分敏感》倌樱空氣中哪怕有極其微量的瓦斯膏萧,金絲雀也會停止歌唱;而當瓦斯含量超過一定限度時蝌衔,雖然魯鈍的人類毫無察覺榛泛,金絲雀卻早已毒發(fā)身亡。當時在采礦設備相對簡陋的條件下噩斟,工人們每次下井都會帶上一只金絲雀作為“瓦斯檢測指標”曹锨,以便在危險狀況下緊急撤離。
灰度發(fā)布結構圖如下:
2剃允、灰度發(fā)布/金絲雀發(fā)布由以下幾個步驟組成:
準備好部署各個階段的工件沛简,包括:構建工件,測試腳本斥废,配置文件和部署清單文件椒楣。
從負載均衡列表中移除掉“金絲雀”服務器。
升級“金絲雀”應用(排掉原有流量并進行部署)牡肉。
對應用進行自動化測試捧灰。
將“金絲雀”服務器重新添加到負載均衡列表中(連通性和健康檢查)。
如果“金絲雀”在線使用測試成功荚板,升級剩余的其他服務器凤壁。(否則就回滾)
除此之外灰度發(fā)布還可以設置路由權重,動態(tài)調整不同的權重來進行新老版本的驗證跪另。
轉自:https://blog.csdn.net/u013970991/article/details/77090717