目前,軟體開發最大的變化是部署頻率。產品團隊更早(更頻繁)的將產品發布到生產環境。數月或者數年的發布週期變得越來越短-對那些構建純軟體產品的人來說更是如此。
現在,使用面向服務的架構和微服務方式,開發者可以設計模組化的**庫。這允許他們同時在**庫中不同的地方編寫和部署代變更。
縮短部署週期的業務優勢狠明顯:
但是,這種轉變也給運維或者devops 團隊帶來了新挑戰。更頻繁的部署,意味著已經部署的**會對站點可用性和客戶體驗帶來負面影響。這就是制定**部署策略如此重要的原因,因為它可以最大限度的降低產品和客戶的風險。
在本文中,我們將討論不同的部署策略、最佳實踐和工具,讓你的團隊可以更快更可靠的工作。
現代應用通常是分布式的,基於雲的。它們可以彈性擴充套件來滿足需求,基於高可用架構更好地容錯。這些應用可以使用全託管服務,例如aws lambda 和elastic container service(ecs)等平台處理一些運維責任。
它們通常採用微服務架構,多個元件一起工作來提供完整的功能。不同的元件可以有不同的發布週期,但它們全部無縫銜接在一起工作。
活動部分數量的增加,意味著出錯的機率增大。隨著多個開發團隊對**庫的修改,當問題發生時,很難定位到問題的根因是什麼。
另乙個挑戰是基礎設施層的抽象,它們現在已經被當作**了。在部署新應用的時候,可能還需要部署新的基礎設施**。
為了應對這些挑戰,應用和基礎設施團隊應該設計和採用適合他們用例的部署策略。
這裡我們將回顧和討論不同部署策略的優缺點,以便你可以選擇合適的。
顧名思義,「大**」部署一次性更新整個應用或者其中的大部分。這個策略可以回溯到軟體在物理介質上發布並由客戶安裝的時代。
大**部署要求企業在發布之前進行廣泛的開發和測試,通常和大型有序發布的「瀑布模型」有關。
現代應用不管是在客戶端還是服務端,都有定期自動更新的優勢。大**的方式對於現代團隊來說,太慢,而且不敏捷。
大**部署的特點包括:
大**部署不適用於現代應用,因為面向公眾的或者是關鍵業務應用無法接受這種風險,一旦中斷就意味著巨大的經濟損失。回滾通常耗時且代價巨大,甚至是不可能的。
大**的方式適合非生產環境系統(例如,重新建立開發環境),或者是類似桌面應用這種**商打包的解決方案。
滾動、階段性,或者是分步部署比大**部署更好一些,因為它們可以最大限度的降低相關風險,包括面向使用者的停機時間。
在滾動部署中,應用的新版本逐步替換舊版本。實際的部署發生在一段時間內。在此期間,新舊版本會共存,而不會影響功能和使用者體驗。這個過程可以更輕易的回滾和舊元件不相容的任何新元件。
下圖顯示了該部署模式:舊版本顯示為藍色,新版本顯示為綠色,它們部署在集群中的每一台伺服器上。
這是另乙個能自動防禦故障的流程。在這個方法中,兩個相同的生產環境並行工作。
乙個是當前執行的生產環境,接收所有的使用者流量(稱之為藍)。另乙個是它的副本,但是閒置(稱之為綠)。兩者使用相同的資料庫後端和應用配置:
應用的新版本部署在綠色版本環境中,進行功能和效能測試。一旦測試通過,應用的流量從藍色版本路由到綠色版本。然後綠色版本變成新的生產環境。
如果綠色版本啟用後發現了問題,則將流量路由回到藍色版本中。
在藍綠部署中,兩個系統使用相同的持久化層和資料庫後端。保持應用的資料同步至關重要,映象資料庫可以幫助實現這一目標。
你可以使用藍色版本作為主庫進行寫入操作,使用綠色版本作為備庫進行讀操作。在從藍色版本切換到綠色版本時,資料庫會從主庫故障轉移到備庫。如果綠色版本在測試過程中需要寫資料,資料庫可以進行雙向複製。
一旦綠色版本被啟用,你可以關閉或者是**舊的藍色版本例項。你可以在這些例項上部署乙個新版本,用作下次發布的新的綠色版本。
藍綠部署依賴流量路由。這可以通過更新主機的dns cnames 來完成。但是,ttl 太久會導致這些變更被延遲。或者,你可以改變負載均衡的配置,讓變更立即生效。類似elb 的連線特性可以用來提供無縫連線。
金絲雀部署和藍綠有點像,但是它更加規避風險。你可以階段性的進行,而不用一次性從藍色版本切換到綠色版本。
採用金絲雀部署,你可以在生產環境的基礎設施中小範圍的部署新的應用**。一旦應用簽署發布,只有少數使用者被路由到它。最大限度的降低影響。
如果沒有錯誤發生,新版本可以逐漸推廣到整個基礎設施。下圖示範了金絲雀部署:
金絲雀部署的主要挑戰是設計一種路由部分使用者到新應用的方法。此外,一些應用可能需要同類使用者進行測試,另一些應用可能每次都需要不同型別的使用者。
探索一些技術,來考慮路由新使用者的方法:
現代應用團隊可以遵循一些最佳實踐,來最大限度的降低部署風險:
即使你採用了所有的這些最佳實踐,事情仍然可能會失敗。因此,對部署後立即發生的問題進行監控,與規劃和執行完美的部署同樣重要。
應用效能監控(apm)工具可以幫助團隊監控關鍵效能指標,包括部署後的伺服器響應時長。應用和系統架構的變更會極大的影響應用效能。
類似rollbar 這樣的錯誤監控解決方案同樣重要。它會迅速通知團隊新部署或重新啟用部署中的錯誤,這些部署可能會引發嚴重的bug,需要立即引起關注。
如果沒有錯誤監控工具,這些bug 可能永遠也不會被發現。雖然一些遇到bug 的使用者會花時間反饋,但大多數其他使用者不會這樣做。隨著時間推移,客戶的負面體驗會降低滿意度,甚至更糟糕的是,阻礙正在進行的業務交易。
錯誤監控工具還可以在運維/devops 團隊和開發者之間,共享所有部署後發生的問題。這些共享讓團隊變得更具有協作性,響應能力更強。
檢視英文原文:win-wi
n deploym
ent strategi
es for modern
apps
部署策略對比 藍綠部署 金絲雀發布及其他
目前,軟體開發最大的變化是部署頻率。產品團隊更早 更頻繁 的將產品發布到生產環境。數月或者數年的發布週期變得越來越短 對那些構建純軟體產品的人來說更是如此。現在,使用面向服務的架構和微服務方式,開發者可以設計模組化的 庫。這允許他們同時在 庫中不同的地方編寫和部署代變更。縮短部署週期的業務優勢狠明顯...
部署策略對比 藍綠部署 金絲雀發布及其他
目前,軟體開發最大的變化是部署頻率。產品團隊更早 更頻繁 的將產品發布到生產環境。數月或者數年的發布週期變得越來越短 對那些構建純軟體產品的人來說更是如此。現在,使用面向服務的架構和微服務方式,開發者可以設計模組化的 庫。這允許他們同時在 庫中不同的地方編寫和部署代變更。縮短部署週期的業務優勢狠明顯...
部署策略對比 藍綠部署 金絲雀發布及其他
目前,軟體開發最大的變化是部署頻率。產品團隊更早 更頻繁 的將產品發布到生產環境。數月或者數年的發布週期變得越來越短 對那些構建純軟體產品的人來說更是如此。現在,使用面向服務的架構和微服務方式,開發者可以設計模組化的 庫。這允許他們同時在 庫中不同的地方編寫和部署代變更。縮短部署週期的業務優勢狠明顯...