藍綠部署、A/B 測試和云雀發(fā)布
近些年,“DevOps”非常熱門,最近,我們團隊討論了部署最佳實踐、熱部署、回滾等,當(dāng)提到藍綠部署時,大家表現(xiàn)出濃烈的興趣。
藍綠部署已經(jīng)在像亞馬遜這樣的地方實踐了 10 多年。它們是一種安全、經(jīng)過驗證的方法?,F(xiàn)在,藍綠部署不是靈丹妙藥,但它們有一定的用處。
其實還有A/B 測試,甚至 Canary 測試,在所有微服務(wù)、DevOps和云原生交流中,有很多關(guān)于它們的討論,因此,我簡單歸納了它們的區(qū)別。
藍綠部署
Blue Green Deployments的詳細(xì)介紹請參閱Martin Fowler 關(guān)于藍綠部署的鏈接(http://martinfowler.com/bliki/BlueGreenDeployment.html)。它給出了總體要點。
它基本上是一種以可預(yù)測的方式發(fā)布應(yīng)用程序的技術(shù),目的是減少與發(fā)布相關(guān)的任何停機時間。這是在發(fā)布前為您的應(yīng)用做好準(zhǔn)備的一種快速方式,如果您發(fā)現(xiàn)問題,也可以快速回滾。
簡單地說,您有兩個相同的環(huán)境(基礎(chǔ)架構(gòu)),其中“綠色”環(huán)境托管當(dāng)前的生產(chǎn)應(yīng)用程序(例如 app1 version1、app2 version1、app3 version1):
圖片
現(xiàn)在,當(dāng)您準(zhǔn)備對 app2 進行更改并將其升級到 v2 時,您將在“藍色環(huán)境”中進行。在該環(huán)境中,您部署應(yīng)用程序的新版本、運行冒煙測試和任何其他測試(包括那些用于運行/啟動操作系統(tǒng)、緩存、CPU 等的測試)。當(dāng)事情看起來不錯時,您將負(fù)載均衡器/反向代理/路由器更改為指向藍色環(huán)境:
圖片
您監(jiān)視由于發(fā)布而導(dǎo)致的任何故障或異常。如果一切看起來不錯,您最終可以關(guān)閉綠色環(huán)境并使用它來發(fā)布任何新版本。如果沒有,您可以通過將負(fù)載均衡器指向回快速回滾到綠色環(huán)境。
理論上聽起來不錯。但是有一些事情需要注意。
? 在綠色環(huán)境中長期運行的交易。當(dāng)您切換到藍色時,您必須優(yōu)雅地處理那些未完成的交易以及新的交易。如果您的數(shù)據(jù)庫后端無法處理此問題,這也會變得很麻煩(見下文);
? 企業(yè)部署通常不適合“微服務(wù)”風(fēng)格的部署——也就是說,你可能有微服務(wù)風(fēng)格的應(yīng)用程序和一些傳統(tǒng)的、難以更改的應(yīng)用程序一起工作的混合體。為藍綠部署在兩者之間進行協(xié)調(diào)仍然可能導(dǎo)致停機;
? 數(shù)據(jù)庫遷移可能會變得非常棘手,并且必須與應(yīng)用程序部署一起遷移/回滾。有很好的工具和技術(shù)可以做到這一點,但在傳統(tǒng) RDBMS、NoSQL 和文件系統(tǒng)支持的數(shù)據(jù)庫的環(huán)境中,這些事情確實需要提前考慮;盲目地說你在做藍綠部署沒有任何幫助——實際上可能會造成傷害。
? 你需要有基礎(chǔ)設(shè)施來做到這一點;
? 如果您嘗試在非隔離的基礎(chǔ)架構(gòu)(VM、Docker 等)上執(zhí)行此操作,您將面臨破壞藍色和綠色環(huán)境的風(fēng)險;
正如我所說,有一些很好的技術(shù)可以克服這些挑戰(zhàn)并使這種部署方式非常有效,包括插入到持續(xù)部署管道中,但不要輕易跳入其中。
A/B測試
A/B 測試不是藍綠部署,有些人會混淆這一點。A/B 測試是一種出于各種原因(例如可用性、流行度、引人注目度等)以及這些因素如何影響底線而測試應(yīng)用程序功能的方法。它通常與應(yīng)用程序的 UI 部分相關(guān)聯(lián),但當(dāng)然需要后端服務(wù)才能執(zhí)行此操作。您可以使用應(yīng)用程序級開關(guān)(即知道何時顯示某些 UI 控件的智能邏輯)、靜態(tài)開關(guān)(在應(yīng)用程序中)以及使用 Canary 版本(如下所述)來實現(xiàn)這一點。
圖片
藍綠部署和 A/B 測試之間的區(qū)別在于 A/B 測試用于測量應(yīng)用程序中的功能。藍綠部署是關(guān)于安全地發(fā)布新軟件并按預(yù)期回滾。您顯然可以將它們結(jié)合起來:使用藍綠部署在可用于 A/B 測試的應(yīng)用程序中部署新功能。
云雀發(fā)布
最后,Canary發(fā)布是一種將您的應(yīng)用程序的新版本發(fā)送到生產(chǎn)環(huán)境的方式,它扮演“云雀”的角色,以了解它將如何執(zhí)行(與其他應(yīng)用程序、CPU、內(nèi)存、磁盤使用情況等集成) )。這是另一種發(fā)布策略,可以緩解以下事實:無論您在較低環(huán)境中進行的測試級別如何,您仍然會在生產(chǎn)中遇到一些錯誤。云雀版本讓您在完全釋放扳機之前先試水。
圖片
您獲得的反饋越快,部署失敗或謹(jǐn)慎進行的速度就越快。出于與藍綠部署相同的一些原因,請注意上述事項;即,數(shù)據(jù)庫更改仍然會絆倒您。
概括
無論您是否使用特定的云技術(shù),都可以實施所有這些策略。但正如您想象的那樣,Docker和Kubernetes等技術(shù)對實施這些策略非常有幫助(如果甚至沒有內(nèi)置規(guī)定)。例如,OpenShift和Fabric8通過提供使用這些技術(shù)所需的工具而無需擔(dān)心底層細(xì)節(jié),從而大大簡化了使用 Docker 和 Kubernetes。
原文鏈接:https://blog.christianposta.com/deploy/blue-green-deployments-a-b-testing-and-canary-releases/