由于必須回滾/撤消對(duì)所有用戶的部署可能是一種代價(jià)高昂的情況(無(wú)論是技術(shù)上還是用戶的感知),已經(jīng)有許多技術(shù)允許“嘗試”部署新功能并在發(fā)現(xiàn)問(wèn)題時(shí)輕松“撤消”它們。這些包括:
藍(lán)/綠測(cè)試/部署
在這種部署軟件的方法中,維護(hù)了兩個(gè)相同的主機(jī)環(huán)境 —— 一個(gè)“藍(lán)色” 和一個(gè)“綠色”。(顏色并不重要,僅作為標(biāo)識(shí)。)對(duì)應(yīng)來(lái)說(shuō),其中一個(gè)是“生產(chǎn)環(huán)境”,另一個(gè)是“預(yù)發(fā)布環(huán)境”。
在這些實(shí)例的前面是調(diào)度系統(tǒng),它們充當(dāng)產(chǎn)品或應(yīng)用程序的客戶“網(wǎng)關(guān)”。通過(guò)將調(diào)度系統(tǒng)指向藍(lán)色或綠色實(shí)例,可以將客戶流量引流到期望的部署環(huán)境。通過(guò)這種方式,切換指向哪個(gè)部署實(shí)例(藍(lán)色或綠色)對(duì)用戶來(lái)說(shuō)是快速,簡(jiǎn)單和透明的。
當(dāng)新版本準(zhǔn)備好進(jìn)行測(cè)試時(shí),可以將其部署到非生產(chǎn)環(huán)境中。在經(jīng)過(guò)測(cè)試和批準(zhǔn)后,可以更改調(diào)度系統(tǒng)設(shè)置以將傳入的線上流量指向它(因此它將成為新的生產(chǎn)站點(diǎn))?,F(xiàn)在,曾作為生產(chǎn)環(huán)境實(shí)例可供下一次候選發(fā)布使用。
同理,如果在最新部署中發(fā)現(xiàn)問(wèn)題并且之前的生產(chǎn)實(shí)例仍然可用,則簡(jiǎn)單的更改可以將客戶流量引流回到之前的生產(chǎn)實(shí)例 —— 有效地將問(wèn)題實(shí)例“下線”并且回滾到以前的版本。然后有問(wèn)題的新實(shí)例可以在其它區(qū)域中修復(fù)。
金絲雀測(cè)試/部署
在某些情況下,通過(guò)藍(lán)/綠發(fā)布切換整個(gè)部署可能不可行或不是期望的那樣。另一種方法是為金絲雀測(cè)試/部署。在這種模型中,一部分客戶流量被重新引流到新的版本部署中。例如,新版本的搜索服務(wù)可以與當(dāng)前服務(wù)的生產(chǎn)版本一起部署。然后,可以將 10% 的搜索查詢引流到新版本,以在生產(chǎn)環(huán)境中對(duì)其進(jìn)行測(cè)試。
如果服務(wù)那些流量的新版本沒(méi)問(wèn)題,那么可能會(huì)有更多的流量會(huì)被逐漸引流過(guò)去。如果仍然沒(méi)有問(wèn)題出現(xiàn),那么隨著時(shí)間的推移,可以對(duì)新版本增量部署,直到 100% 的流量都調(diào)度到新版本。這有效地“更替”了以前版本的服務(wù),并讓新版本對(duì)所有客戶生效。
功能開關(guān)
對(duì)于可能需要輕松關(guān)掉的新功能(如果發(fā)現(xiàn)問(wèn)題),開發(fā)人員可以添加功能開關(guān)。這是代碼中的 if-then 軟件功能開關(guān),僅在設(shè)置數(shù)據(jù)值時(shí)才激活新代碼。此數(shù)據(jù)值可以是全局可訪問(wèn)的位置,部署的應(yīng)用程序?qū)z查該位置是否應(yīng)執(zhí)行新代碼。如果設(shè)置了數(shù)據(jù)值,則執(zhí)行代碼;如果沒(méi)有,則不執(zhí)行。
這為開發(fā)人員提供了一個(gè)遠(yuǎn)程“終止開關(guān)”,以便在部署到生產(chǎn)環(huán)境后發(fā)現(xiàn)問(wèn)題時(shí)關(guān)閉新功能。
暗箱發(fā)布
在暗箱發(fā)布中,代碼被逐步測(cè)試/部署到生產(chǎn)環(huán)境中,但是用戶不會(huì)看到更改(因此名稱中有暗箱一詞)。例如,在生產(chǎn)版本中,網(wǎng)頁(yè)查詢的某些部分可能會(huì)重定向到查詢新數(shù)據(jù)源的服務(wù)。開發(fā)人員可收集此信息進(jìn)行分析,而不會(huì)將有關(guān)接口,事務(wù)或結(jié)果的任何信息暴露給用戶。
這個(gè)想法是想獲取候選版本在生產(chǎn)環(huán)境負(fù)載下如何執(zhí)行的真實(shí)信息,而不會(huì)影響用戶或改變他們的經(jīng)驗(yàn)。隨著時(shí)間的推移,可以調(diào)度更多負(fù)載,直到遇到問(wèn)題或認(rèn)為新功能已準(zhǔn)備好供所有人使用。實(shí)際上功能開關(guān)標(biāo)志可用于這種暗箱發(fā)布機(jī)制。