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