在上一篇中,介紹了開源實戰(zhàn)項目STP-智慧測試平臺:十分鐘了解:開源實戰(zhàn)項目STP-智慧測試平臺,本文聊一聊產(chǎn)品研發(fā)生產(chǎn)必備環(huán)節(jié)之一:發(fā)布。 在項目研發(fā)迭代的過程中,不可避免需要對“應(yīng)用服務(wù)部署上線”。而對于應(yīng)用程序升級面臨最大挑戰(zhàn)是新舊業(yè)務(wù)切換的同時還要保證系統(tǒng)不間斷提供服務(wù)。特別是微服務(wù)盛行的今天,對服務(wù)發(fā)布的粒度、發(fā)布策略控制更佳尤為重要。 最近幾年,市面上流行了很多與顏色相關(guān)的部署、發(fā)布方法,常見的比如有:藍綠部署、紅黑部署、灰度發(fā)布(金絲雀發(fā)布)、滾動發(fā)布等。接下來,就和大家聊一聊這幾種帶“色”的發(fā)布方法以及他們之間的區(qū)別和優(yōu)缺點。 從部署到發(fā)布的幾個階段 部署、發(fā)布、上線這幾個名詞,其實區(qū)分不太明顯,我們平時在討論服務(wù)部署上線時,也經(jīng)常會混用。在這里,先給大家明確區(qū)分一下這幾個階段。
幾種帶“色”的部署方式定義 我們再來看看藍綠部署(Blue-green Deployment)、紅黑部署(Red-black Deployment)和灰度發(fā)布(Gray Release ,或 Dark Launch)、滾動發(fā)布(Rolling Update)的定義和流程。 1、藍綠部署藍綠部署,是采用兩個分開的集群對軟件版本進行升級的一種方式。它的部署模型中包括一個藍色集群 A 和一個綠色集群 B,在沒有新版本上線的情況下,兩個集群上運行的版本是一致的,同時對外提供服務(wù)。 系統(tǒng)升級時,藍綠部署的流程是:
這樣,我們就完成了兩個集群上所有機器的版本升級。 細心的讀者,從上述的部署流程中,也能發(fā)現(xiàn),藍綠部署它的優(yōu)點在于發(fā)布策略簡單、對于用戶來說無感知,可以實現(xiàn)升級平滑過渡。但它的缺點也很明顯:需要準備正常業(yè)務(wù)使用資源的兩倍以上服務(wù)器,需要投入較大的資源成本。當然對于不差錢、追求服務(wù)穩(wěn)定性的公司而言,較為推薦這種部署模式。 2、紅黑部署 紅黑部署是Netflix采用的部署手段,Netflix的主要基礎(chǔ)設(shè)施是在AWS上,它與藍綠部署類似,紅黑部署也是通過兩個集群完成軟件版本的升級。 當前提供服務(wù)的所有機器都運行在紅色集群 A 中,當需要發(fā)布新版本的時候,具體流程是這樣的:
這樣就完成了一個版本的升級。 可以看到,與藍綠部署相比,紅黑部署只不過是充分利用了云計算的彈性伸縮優(yōu)勢,從而獲得了兩個收益:一是,簡化了流程;二是,避免了在升級的過程中,由于只有一半的服務(wù)器提供服務(wù),而可能導(dǎo)致的系統(tǒng)過載問題。 3、灰度發(fā)布灰度發(fā)布,也被叫作金絲雀發(fā)布。與藍綠部署、紅黑部署不同的是,灰度發(fā)布屬于增量發(fā)布方法。也就是說,服務(wù)升級的過程中,新舊版本會同時為用戶提供服務(wù)。 灰度發(fā)布的具體流程是這樣的:在集群的一小部分機器上部署新版本,給一部分用戶使用,以測試新版本的功能和性能;確認沒有問題之后,再對整個集群進行升級。簡單地說,灰度發(fā)布就是把部署好的服務(wù)分批次、逐步暴露給越來越多的用戶,直到最終完全上線。 之所以叫作灰度發(fā)布,是因為它介于黑與白之間,并不是版本之間的直接切換,而是一個平滑過渡的過程。 AB Test就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來。灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度,而我們平常所說的金絲雀部署也就是灰度發(fā)布的一種方式。 之所以又被叫作金絲雀發(fā)布,是因為金絲雀對瓦斯極其敏感,17 世紀時英國礦井工人會攜帶金絲雀下井,以便及時發(fā)現(xiàn)危險。這就與灰色發(fā)布過程中,先發(fā)布給一部分用戶來測試相似,因而得名。 對于灰度發(fā)布來說,它的優(yōu)點在于如果前期出問題影響范圍很小,相對用戶體驗也少;可以做到及時發(fā)現(xiàn)、及時調(diào)整問題,影響范圍可控。但是采取這種模式對自動化以及運維監(jiān)控能力的要求非常高。 4、滾動發(fā)布滾動發(fā)布是指每次只升級一個或多個服務(wù),升級完成后加入生產(chǎn)環(huán)境,不斷執(zhí)行這個過程,直到集群中的全部舊版本升級新版本。
這種部署方式相對于藍綠部署,更加節(jié)約資源——它不需要運行兩個集群、兩倍的實例數(shù)。我們可以部分部署,例如每次只取出集群的20%進行升級,比較節(jié)約資源,但同時缺點也很明顯:采用滾動發(fā)布方式部署時,沒有一個確定OK的環(huán)境。如果使用藍綠部署,我們能夠清晰地知道老版本是OK的,而使用滾動發(fā)布,我們無法確定。并且一旦發(fā)布過程出現(xiàn)問題,需要回滾,回滾過程非常困難。 在實際工作當中,升級過程中需要保持服務(wù)的連續(xù)性、穩(wěn)定,對外界無感知是幾個基本的要求。在生產(chǎn)上選擇哪種部署方法最合適?這取決于哪種方法最適合你的業(yè)務(wù)和技術(shù)需求。 如果你們運維自動化能力儲備不夠,肯定是越簡單越好,建議藍綠發(fā)布,如果業(yè)務(wù)對用戶依賴很強,建議灰度發(fā)布。如果是K8S平臺,滾動更新是現(xiàn)成的方案,建議先直接使用。 好了,以上就是當前市面常見的幾種有顏色的部署發(fā)布方式。 |
|
來自: 測試開發(fā)技術(shù) > 《待分類》