本文以DCDN產品為例,為您介紹如何通過DCDN搭配靈活易擴展的高級條件及邊緣腳本EdgeScript,實現客戶上云的“安全灰度”。實踐方案同樣適用于CDN服務。
背景信息
內容分發網絡CDN可以保護源站IP、降低源站流量風險、提升終端用戶體驗,同時可以將源站的應用功能卸載到邊緣,進一步釋放邊緣算力滿足業務需求。在CDN的基礎上,DCDN面向動態元素,通過智能路由、協議優化、壓縮傳輸等手段,將轉發場景的性能進一步提升,廣泛應用于電商、游戲、政企等行業。在互聯網蓬勃發展、傳統企業尋求數字化轉型機會的今天,DCDN作為流量的入口,搭配靈活易擴展的高級條件及邊緣腳本EdgeScript,通過流量轉發這一技術手段,實現客戶上云的“安全灰度”。
業務背景
A公司以直銷模式聞名,生產的產品有450余種,其業務遍布80多個國家和地區,在全球范圍內積累了一批忠實用戶,形成了一套循環、高利潤的商業模式。
A公司為什么要上新電商平臺?
A公司在電商模式及線上直銷業務上頗具經驗,早期通過某公司的電商平臺(本場景示例為Platform),搭建了如下圖所示的環境:
可以看出A公司的電商系統高度依賴電商平臺,在業務運營過程中,該套業務架構存在如下問題:
- 上線難
電商平臺版本更新周期長,割接工作數量繁多,實際操作大量回滾。
- 擴展差
單集群支撐的用戶數量有上限,無法支持A公司300萬用戶在線的電商愿景。
- 低可靠
基于電商平臺集群流量調度的問題,同一集群主機負載不均衡,系統穩定性差。
- 不敏捷
無法滿足A公司數字化轉型的核心訴求,即“創新與快”。
A公司希望如何切換到新電商平臺?
A公司切換到新電商平臺的訴求包含登錄中心、API中心和電商主站,由于實施方案類似,因此本方案以電商主站的切換作為主線進行分解。電商主站切換包含前端切換及后端切換。
- 前端切換
前端切換是指A公司需要根據特定的范圍(如訪問IP、HTTP頭部、URL參數等),將新功能發布到特定的URL上。由于測試環境有限(僅有功能測試、壓力測試兩個環境),而項目周期較緊,各個部門對于測試環境同時存在測試需求,因此A公司需要DCDN具備在同一個測試環境區域灰度更新前端功能的能力。
- 后端切換
后端切換是指A公司需要根據特定的范圍(特定工作室IP、用戶IP所在的區域),將服務從電商平臺遷移到阿里云業務中臺上,同時阿里云業務中臺上已部署新版本的電商平臺服務。A公司計劃分四次將流量從舊電商平臺逐步遷移到新電商平臺。
問題拆解
A公司新電商切換是A公司整體業務的重中之重,切換成功與否、順利與否,決定了整個阿里云業務中臺項目的交付。DCDN作為流量的入口,承擔了前端切換與后端切換的主要工作,承擔著重大的責任,面臨著困難和挑戰。
- 問題一:時間緊,需要解決交付時間緊的問題
從制定切換計劃到首次切換,僅有不到20天的時間。在這段時間里,需要完成方案設計、方案測試、方案演練和方案完善等一系列動作,已經沒有足夠的時間為該項目開發及發布定制化場景的功能來趨于完善地滿足需求,因此需要以低開發、輕發布的方式來進行方案設計和落地。
- 問題二:變量多,需要解決灰度維度靈活多變、邏輯復雜的問題
本次切換不僅從架構上區分了前端切換及后端切換,每個切換動作的規則變量和維度都是多種多樣,對于如何合理地構建代碼邏輯、最大程度地符合業務需求提出了挑戰。
- 問題三:需敏捷,需要解決灰度及回退的敏捷性問題
A公司電商平臺的在線用戶數量雖然不多,但所有用戶本質上都是渠道代理商,客單價較高。DCDN作為流量入口,不僅是精細維度的切換開關,還承載著交易、下單等用戶核心業務接口的加速職責,一旦出現問題,將直接影響用戶的GMV,因此需要分鐘級的灰度下發及版本回退能力。
- 問題四:要可靠,需要解決配置同步、失敗驅逐、可視化監控等問題
灰度首要解決的問題是確?;叶葏^域范圍生效,確保非灰度區域不生效,針對灰度出現異常的單元及時進行驅逐,同時需要可視化的方式全面、客觀地了解灰度進程、單元細節、驗證手段及業務整體情況。
解決方案
DCDN在整體系統架構中處于流量的入口,同時具備轉發能力這一核心模塊,因此推薦使用DCDN進行流量切換。本方案介紹持續開發DCDN的轉發能力,使其成為切換灰度的關鍵。
設計思路
如上圖所示,集成DCDN高級條件及EdgeScript,利用其可擴展性及豐富的變量表和函數庫,來實現前端切換及后端切換的定制化請求改寫與轉發。
代碼示例
阿里云EdgeScript是面向DCDN可編程化演進的重要產品,通過簡單易學的語法、擴展多元的變量、豐富實用的函數、快速輕量的部署,可以自由定義業務需求。本方案介紹使用阿里云EdgeScript來實現A公司較為復雜的前端灰度需求,示例如下:
- 灰度對象:
/test/
路徑下包含state
文件名的JSON類型文件、主頁文件。 - 灰度變量:測試人員IP、
grayID
頭部、ada
參數。 - 灰度規則:
- 規則一
請求IP為測試人員IP,且請求URI為
/test/
路徑下包含example
文件名的JSON類型文件,且攜帶grayID
頭部且頭部值為59384454。需要灰度,將請求轉發至/canarytest/
路徑下(金絲雀環境),增加灰度標識。 - 規則二
請求IP為測試人員IP,請求主頁文件,且攜帶參數
ada
,參數值為3d3debc39e1ed1d0c56aa54d7e5af80b
(登錄場景);或請求IP為辦公室IP,請求主頁文件,不攜帶ada
參數(游客場景)。需要灰度,將請求轉發至/canarypc/index
(金絲雀環境),增加灰度標識。該業務訴求較為復雜,存在多場景、多判斷變量,通過EdgeScript實現,代碼示例如下:
m1 = match_re($remote_addr, '1.1.XX.XX|2.2.XX.XX') m2 = match_re($uri, '^/pc/index$') if and (m1,match_re($uri, '^/test/example.*json$'),$http_grayID, eq($http_grayID, '59384454')) { pcs = capture_re($uri,'^/([^/]+)/(.*)') pcs1 = get(pcs,2) new_uri = concat('/canarytest/',pcs1) add_rsp_header('X-DEBUG-INFO', 'on gray') rewrite(new_uri, 'break') return true } if or(and(m1,m2,$arg_ada,eq($arg_ada, '3d3debc39e1ed1d0c56aa54d7e5af80b')),and(m1,m2,not($arg_ada))){ add_rsp_header('X-DEBUG-INFO', 'on gray') rewrite('/canarypc/index', 'break') } else { add_rsp_header('X-DEBUG-INFO', 'off gray') }
通過該代碼,實現了前端切換訴求,且可以靈活更換灰度范圍和灰度目標,具備一定的擴展性。相關代碼僅使用了EdgeScript內置函數庫中的條件判斷類函數、字符串類型函數和請求處理函數,而EdgeScript所具備的函數庫可以支持更為復雜的業務場景,詳情請參見EdgeScript內置函數庫。
- 規則一
基于DCDN的高級條件、高級回源、更改回源HOST功能模塊,設計了如下的轉發路徑:
阿里云DCDN具備高級條件配置功能,可以引用豐富的變量,制定靈活的規則,再搭配轉發功能模塊,可以實現不同規則、不同路徑的靈活轉發,實現灰度上云的業務目標。示例如下:
高級條件配置
#灰度條件
(($remote_addr~"3.3.XX.XX|4.4.XX.XX")|($ip_region_id~"610000|630000"))>if_stmt
#非灰度條件
(($remote_addr!~"3.3.XX.XX|4.4.XX.XX")&($ip_region_id!~"610000|630000"))>if_stmt
上述代碼展示了當用戶IP為3.3.XX.XX或4.4.XX.XX,或用戶的IP歸屬于陜西、青海時,執行灰度規則,轉發至新電商平臺,否則按照原有業務架構轉發。
高級條件具備豐富的變量可用,本次切換規則僅涉及用戶IP(A公司辦公室灰度測試IP)及灰度區域用戶IP歸屬區域,其他變量詳見<Nginx變量說明>。
項目管理
實施本次項目,除了滿足代碼和架構層面的業務需求外,通過項目管理進行管控,確保業務平穩過渡也是重要的一環。
- 切換計劃
每一次切換均會提前至少一周制定計劃,該計劃在于厘清業務耦合關系、確認工作執行順序、規劃時間節點及里程碑事件、工作項具體到人、工作內容代碼化等。
- 回退方案
通過腳本的方式生成一鍵回退方案,后臺保存配置歷史版本,如有異常一鍵回退,回退性能可以達到秒級,確保業務無損。
- 切換/回退演練
每一次切換及回退,需要在功能測試環境演練至少三遍,用來發現代碼層級、業務層級、執行人層級的潛在風險。
- 現場協同辦公
切換當天集中現場協同辦公,PM(項目經理)來主導切換實施節奏,確保執行切換時的各個環節可知、可控。
運營監控
- 發布監控
通過內容管理系統的任務監控模塊,監控每一次變更的全局生效進度、節點生效進度,出現異常及時進行節點驅逐(如發布卡死或失敗等)。
- 業務監控
通過業務監控系統關注對應域名的帶寬、請求數、狀態碼和響應時間,重點關注天眼監測下灰度區域的業務情況。
- 第三方監控
通過周期任務重點關注灰度區域的用戶訪問情況,并在灰度完成后第一時間進行即時監測,確保服務可用、功能生效。
方案優勢
- 靈活易擴展
該方案通過集成EdgeScript、高級條件下的Nginx變量與Tengine API,滿足A公司的業務需求。同時由于所引用的變量表和函數庫存在更為豐富的資源,因此適用于更加復雜的應用場景,存在被持續開發的潛力。
- 敏捷高可用
該方案通過DCDN自有的動態配置發布變更邏輯,確保了發布及回退分鐘級粒度的性能及完整性。同時通過低開發、輕發布的方式,避免了軟件版本的迭代發布,對于DCDN可編程化的應用是一個良性的促進。
- 完善可復用
該方案的硬性集成(產品、組件)及軟性集成(項目管理體系)比較完善,類似場景下移植成本接近于0,存在較高的復用性。
項目成果
該方案的交付成果,對于阿里云及A公司來說是一次雙贏。
對于A公司來說,四次切換,單次切換生效時間可以控制在5分鐘以內,且通過熱切換避免了用戶體驗受到影響,全程0客情、0問題,保證了業務平穩過渡。同時切換到新電商平臺后,用戶訪問的速度翻倍,服務側RT時間減半,也解決了業務背景中提及的電商平臺運營難題。
對于阿里云來說,該次DCDN的切換完成了臨門一腳,標志著A公司業務中臺交付的正式上線,收獲了商業價值及A公司的高度認可。對于DCDN產品來說,由于用戶訪問速度的提高,帶寬接近翻倍。同時通過實踐證明了可編程化應用的巨大潛力,也衍生了更多的應用機會。
適用場景
- 有上云需求且具備一定數字化轉型能力的客戶(如阿里云業務中臺、數據中臺等)。
- 存在動態加速業務需求,對于流量轉發有定制化要求的客戶。
總體而言,依托于商業數字化轉型的浪潮,及對終端用戶性能體驗的重視,會有越來越多的客戶選擇對動態內容加速,如API(內部API+外部應用API)、POST場景、無法緩存的持續變化內容等,DCDN的應用機會也會相應增加。在這種場景下,DCDN作為流量入口,結合本文描述的功能,可以成為微服務中間件的一部分,幫助客戶實現流量的靈活轉發,達到上好云、用好云的目的。