藍綠部署和 Drupal - 您真正了解多少?
已發表: 2019-07-23Blue Green Deployment 是部署策略的支柱之一,它克服了傳統應用程序部署方法的局限性。 你對藍綠部署了解多少? Drupal 中的藍綠部署是如何實現的?
是的,你沒有看錯。 必須讓您的應用程序脫機進行更新或在啟動新版本時是一項艱鉅的任務,也是一項真正的痛苦。 確實,您可以通過預定的停機時間來緩解這種情況,但這不會讓客戶滿意。 有些網站實際上每停機一分鐘就會損失數千美元! 部署或升級您的應用程序是否應該是您損失的真正原因?
了解為什麼藍綠部署是減少停機時間和降低應用程序部署中涉及的其他風險的最佳策略。 了解有關藍綠部署和 Drupal 的更多信息。
什麼是藍綠部署?
藍綠部署是一種通過在運行兩個不同應用程序版本的兩個相同環境之間轉移或移動流量來發布應用程序的技術。
簡而言之,有一個應用程序版本,在生產中我們稱之為“藍色版本”。 然後,有一個路由器用於將流量路由到應用程序。 現在你需要另一個版本。 添加了更多好東西的“綠色版本”,待部署。 但是,您還希望確保在進行此部署時,用戶仍然可以查看您的應用程序、按下按鈕或做任何他想做的事情,而您的應用程序不會停機! 更像是秘密部署“綠色版本”,而“藍色版本”同時處理所有流量,然後最終交換連接。

憑藉近乎零停機時間的發布和回滾功能,藍綠部署的基本思想是在運行兩個不同應用程序版本的兩個相同環境之間轉移流量。 雖然應用程序的當前版本由藍色環境表示,但綠色環境正在運行不同的版本。
為什麼是藍綠部署?
部署過程自動化的主要挑戰之一是切換本身,即將應用程序從測試的最後階段轉移到實時階段。 並且必須迅速解決這個問題,以盡量減少任何類型的停機時間。 這正是藍綠部署所做的。 有兩個生產環境(本質上盡可能相同),在任何給定的時間點,其中之一是實時的。 當您準備發布新版本時,您會在其他非實時環境中進行所有測試。 一旦您準備好開始,您所要做的就是切換路由器,以便您的所有流量都指向您的最新版本,而其他環境就會閒置。
此外,藍綠部署提供了最重要的功能之一,即快速回滾。 假設如果您的最新版本出現任何問題,您只需切換迴路由器即可。 雖然當故障環境存在時丟失的事務可能仍然存在問題,但您也可以將其設計為這樣一種方式,即您的兩個環境都接收事務,一個作為另一個的備份。
如何藍綠部署?
現在我們了解了藍綠部署的兩種環境,讓我們看看實現相同的一些最佳實踐。
基於 DNS 交換的負載平衡
請記住,在切換環境時,讓您的域最終指向不同的服務器。 使用負載平衡,而不是轉到 DNS 記錄並在 DNS 管理界面中進行更改。
更改 DNS 記錄的問題只會導致較長的流量跟踪。 這意味著雖然您的一些用戶仍將使用舊環境,但您甚至無法完全控制您的流量路由到哪裡。
但是,負載平衡器將允許您立即設置新服務器,而不必依賴 DNS 機制。 這樣,您就可以完全控制流量,並且可以絕對確保所有流量都路由到新環境。
滾動更新
不要一次切換所有服務器。 改為執行滾動更新。 也就是說,不要一次從藍色服務器切換到綠色服務器,而是在集成環境中工作。 添加一台新服務器,淘汰一台舊服務器。 重複直到每台新服務器就位。 這將大大減少您的停機時間!
環境監測
雖然監控實時環境很明顯,但您不希望因不監控其他環境而措手不及。 是的,對其他環境的監控不太重要。 但是,由於相同的環境可以充當兩種狀態,因此您將需要一種更簡單的方法來在這兩種狀態之間切換警報。 為兩個環境報告設置不同的 API 令牌,或在環境角色更改/切換時以編程方式更改環境的警報策略。
自動化
手動操作集只會增加您的工作量。 相反,為切換過程中的每個操作編寫腳本。 自動化切換過程將更快、更輕鬆、更安全地實施藍綠部署。
Drupal 網站的藍綠部署
問題
- 在代碼部署期間,Drupal 需要運行數據庫更新才能運行,這是一個主要問題,因為 Drupal 更新將網站設置為維護模式,並且您的用戶會看到這個漂亮的白屏。

如果部署失敗,考慮到數據庫架構可能已被修改,則只能通過從轉儲中恢復數據庫來進行回滾。 這意味著停機!

解決方案:藍綠部署!
讓我們看一下使用 Drupal 實施藍綠部署的一些基礎設施概述。 Drupal 中的任何類型的 ops 都需要 Nginx 和一個 php 服務器(主要運行 Drupal),我們需要一個數據庫、一個文件存儲、一些緩存,並且堆棧的設計方式是高度可用的。
使用 Blue Green Deployment,您需要使用新代碼庫部署新堆棧,並複制所有數據庫和之前代碼庫中的不同狀態,最好使用 Drush。

一旦設置了兩個不同的堆棧,就必須獨立於生產堆棧對臨時堆棧進行測試。 基本上,您需要您的用戶訪問堆棧(生產堆棧)並測試部署的網站版本。 當另一個版本(暫存堆棧)準備就緒時,您只需要翻轉版本。 現在用戶被定向到新堆棧,舊版本可供測試。
使用 Docker 進行藍綠部署
在 Drupal 中部署並不容易。 雖然您必須確保已部署代碼、處理 Composer 依賴項、最新架構更新以及清除所有緩存,但您還需要確保“響應式網站”已啟動並運行。 如果出現問題並且部署失敗會發生什麼? 你回滾嗎? 還是停止部署?
您正在尋找的短語是 Blue Green Deployment
在 Drupal 部署期間,Docker 確保了應用程序之間的輕鬆轉換,並使構建和運行相同版本的不同版本變得容易。 在EC2實例上,總會有一組凸起的藍色和綠色的docker容器,nginx充當反向代理服務器。 使用 Docker 的藍綠色部署允許用戶構建一個在兩個不同環境中並行運行的 Drupal 網站。
使用 AWS 進行藍綠部署
雖然從歷史上看,藍綠部署並不是在本地部署軟件的首選,因為它涉及高成本和復雜性,但容器已經徹底改變了這種看法。
容器簡化了藍綠部署的採用,因為它們在環境之間切換時具有簡單的封裝和一致的行為。 要更改容器的配置,您只需更新其 dockerfile 並重建和重新部署容器,而不是更新軟件。
當您更新現有 Amazon ECS 服務時,Amazon ECS 會執行這些滾動更新。 ecs blue green 部署的滾動更新涉及將容器的現有版本替換為最新版本。 Amazon ECS 在更新期間添加或刪除的容器數量是通過調整服務部署期間允許的最大和最小健康任務數量來控制的。更新後,服務的任務定義將使用最新版本的容器映像進行更新, Amazon ECS 會自動開始用最新版本的容器替換舊版本的容器。

使用 AWS ECS 進行藍綠部署還將提供優化優勢,因為您不會綁定到同一組資源。 也就是說,當應用程序的性能範圍從一個版本更改為另一個版本時,您只需啟動具有優化資源的新環境(數量可以更少或一組完全不同的資源)。
AWS 中的藍綠色部署也非常適合持續集成和部署工作流,通過允許部署自動化考慮對現有環境的更少依賴來檢查其複雜性。
該解決方案允許用戶輕鬆管理 Web 平台的部署和可擴展性,而不會浪費任何時間。 此部署有助於配置高可用性環境,該環境將毫無問題地運行 Drupal 網站。
