如今互聯(lián)網(wǎng),隨著業(yè)務(wù)需求迭代快速,同一個服務(wù)可能存在多個同時開發(fā)和測試的功能,容易發(fā)生資源搶占分支互相沖突影響的問題,降低開發(fā)測試效率。
同時微服務(wù)架構(gòu)下,一個功能可能需要依賴多個服務(wù)。在測試其中一個服務(wù)的改動時,如果依賴的服務(wù)發(fā)生了改動或者故障,也會影響這個功能的測試。
......
以上種種問題情況,都會導(dǎo)致服務(wù)從測試到線上正式環(huán)境的環(huán)境差異性較大。
規(guī)范上線部署流程,通過對環(huán)境的隔離來剝離耦合型風(fēng)險,便于問題暴露及快速解決。
圖片
預(yù)發(fā)布環(huán)境 Staging,即線上環(huán)境、正式生產(chǎn)環(huán)境。
為避免因為測試環(huán)境和線上環(huán)境的差異性等帶來的缺陷漏測而設(shè)立的一套環(huán)境。其配置等基本和線上一致,只是預(yù)發(fā)布環(huán)境web服務(wù)器不在線上集成服務(wù)器范圍之內(nèi),為單獨的一臺機(jī)器。
預(yù)發(fā)布環(huán)境 也算是線上/正式生產(chǎn)環(huán)境,只是其具有特殊的隔離特性(包括網(wǎng)絡(luò)/數(shù)據(jù)/用戶/行為等),不能被線上用戶訪問。
預(yù)發(fā)布環(huán)境 | 灰度環(huán)境 | |
目標(biāo) | 正式發(fā)布之前進(jìn)行最后的測試和準(zhǔn)備工作,確保產(chǎn)品穩(wěn)定可靠 | 在產(chǎn)品正式發(fā)布之前對用戶進(jìn)行試用,收集反饋和觀察市場反應(yīng) |
范圍 | 涉及整個產(chǎn)品,所有功能和特性都會進(jìn)行全面測試 | 僅涉及一小部分用戶,為了控制風(fēng)險和規(guī)模可控 |
時間點 | 預(yù)發(fā)布通常在正式發(fā)布之前的最后階段進(jìn)行,通常會有一個明確的時間表 | 灰度發(fā)布在預(yù)發(fā)布之后,但在正式發(fā)布之前的任何時間進(jìn)行,其持續(xù)時間可以根據(jù)反饋和調(diào)整的需要而定 |
網(wǎng)絡(luò) | 與生產(chǎn)隔離 | 與生產(chǎn)一致 |
隔離性 | 真實用戶無法訪問 | 真實用戶可訪問 |
Q:如果新版本程序需要更改表結(jié)構(gòu)等(eg. 加個表字段),那么,部署到預(yù)發(fā)布環(huán)境時也需要更改表字段,這個可能會影響線上環(huán)境程序代碼的運行,如何解決?
圖片
1)把預(yù)發(fā)布環(huán)境使用的數(shù)據(jù)庫切換為測試環(huán)境使用的數(shù)據(jù)庫;
2)根據(jù)實際部署過程,如果有必要,可有針對性的測試下數(shù)據(jù)庫的變更是否會影響線上當(dāng)前代碼程序的運行;
3)把新代碼部署到預(yù)發(fā)布環(huán)境,測試程序是否正常運行;
4)預(yù)發(fā)布測試完畢,如果沒問題,先上線數(shù)據(jù)庫(即在正式環(huán)境執(zhí)行對應(yīng)的數(shù)據(jù)庫變更操作);
5)把預(yù)發(fā)布環(huán)境連接的數(shù)據(jù)庫切換為線上環(huán)境使用的數(shù)據(jù)庫,再次進(jìn)行預(yù)發(fā)布環(huán)境的測試;
6)如果預(yù)發(fā)布環(huán)境測試通過,則把預(yù)發(fā)布環(huán)境的代碼部署到線上生產(chǎn)環(huán)境。
多泳道部署(Multi-lane Deployment)是一種部署策略。
當(dāng)指定某泳道發(fā)布服務(wù)時,發(fā)布系統(tǒng)會為該服務(wù)的實例打上相應(yīng)的泳道標(biāo)記,服務(wù)注冊和發(fā)現(xiàn)模塊就能知道同一服務(wù)的不同實例所屬的泳道。
圖片
所謂泳道,可以理解為多個并行且相互隔離的調(diào)用鏈,彼此調(diào)用互不影響,就如同泳池里的泳道一樣。這種策略可以提高系統(tǒng)的可用性和容錯性,因為如果一個泳道出現(xiàn)問題,其他泳道仍然可以正常運行。
除了創(chuàng)建出來的泳道之外,還會存有一條默認(rèn)的主干道,為各個服務(wù)提供默認(rèn)實例,可以將其理解為常規(guī)的、常備的測試環(huán)境。除了創(chuàng)建的泳道外,還會存在一條默認(rèn)的主干道,提供各個服務(wù)的默認(rèn)實例,可以理解為常規(guī)、常備的測試環(huán)境。
1)在服務(wù) A 需對服務(wù) B 進(jìn)行訪問之時,服務(wù) A 會率先于服務(wù)發(fā)現(xiàn)模塊當(dāng)中獲取服務(wù) B 實例的地址。鑒于服務(wù) A 在請求中添加了 t2 泳道的標(biāo)識,此時服務(wù)發(fā)現(xiàn)模塊將會從服務(wù) B 處于 t2 泳道的實例之中選取其一進(jìn)行返回,隨后服務(wù) A 便可直接對相應(yīng)實例予以訪問。
2)移動端和 web 端團(tuán)隊需要配合做相應(yīng)的改造。測試時,移動端和 web 端的測試人員能夠自行切換至指定泳道,切換完畢后,所有發(fā)送至服務(wù)端的請求都會帶上相應(yīng)的泳道標(biāo)記,這樣泳道測試就實現(xiàn)了端到端統(tǒng)一。
圖片
泳道 主要解決的問題:
實現(xiàn)多泳道部署,主要思路包括以下幾點:
1、環(huán)境準(zhǔn)備
首先,需要準(zhǔn)備多個獨立的環(huán)境,這些環(huán)境可以是物理服務(wù)器,也可以是虛擬機(jī)或容器。不同的需求需要隔離級別不同,如果多環(huán)境共用底層數(shù)據(jù),則代碼中使用域名配置數(shù)據(jù)庫,由 DNS 服務(wù)指向同一套數(shù)據(jù)庫。
多數(shù)情況下,泳道還是采用的底層共用數(shù)據(jù)存儲,好處是每次新創(chuàng)建分支用不到不用再創(chuàng)建數(shù)據(jù)庫和同步數(shù)據(jù),大大提高了環(huán)境申請和銷毀效率。對于自動化測試等需要數(shù)據(jù)隔離的,我們則另外部署一套全鏈路環(huán)境。
2、配置管理
每個泳道可能需要不同的配置,例如數(shù)據(jù)庫連接字符串、第三方服務(wù)的API密鑰等。你需要一個配置管理系統(tǒng)來管理這些配置,并確保它們在部署時被正確地應(yīng)用到每個泳道。
邏輯結(jié)構(gòu)主要分為主泳道和分支泳道
主泳道部署全鏈路穩(wěn)定代碼,作為公共環(huán)境,承載其他環(huán)境缺省服務(wù),保證請求鏈路通暢。
分支泳道只需部署改動或增量服務(wù),未改動服務(wù)使用主泳道中服務(wù),減少公共服務(wù)的維護(hù)成本,提高使用效率等。
3、部署策略
你需要決定如何將應(yīng)用程序部署到各個泳道。你可以選擇一次部署到所有泳道,也可以選擇逐個部署。
逐個部署可以降低風(fēng)險,因為如果新版本有問題,你可以在部署到所有泳道之前發(fā)現(xiàn)并修復(fù)它。
4、流量管理
你需要一個負(fù)載均衡器或類似的工具來管理流量,將請求分發(fā)到各個泳道。你可以根據(jù)各種策略來分發(fā)流量,例如輪詢、最少連接數(shù)、響應(yīng)時間等。
網(wǎng)關(guān)層負(fù)責(zé)環(huán)境識別與環(huán)境標(biāo)識注入,通過測試域名隔離不同環(huán)境,RPC 層負(fù)責(zé)服務(wù)發(fā)現(xiàn)與選擇,環(huán)境標(biāo)識透傳等。
5、監(jiān)控和故障恢復(fù)
你需要監(jiān)控每個泳道的性能和健康狀況,并在檢測到問題時自動或手動切換到其他泳道。
多泳道建設(shè)是一種高效、靈活的開發(fā)模式,尤其適用于復(fù)雜項目和跨部門協(xié)作場景。通過合理劃分泳道、優(yōu)化資源分配和加強(qiáng)團(tuán)隊協(xié)作,我們可以顯著提高軟件交付速度和質(zhì)量。
在未來軟件開發(fā)中,多泳道建設(shè)將繼續(xù)發(fā)揮重要作用。希望本文能為你提供有益的參考和啟示。
本文鏈接:http://m.www897cc.com/showinfo-26-98410-0.html如何正確使用上線部署,泳道、預(yù)發(fā)布到底如何理解?
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com