作者|顧欣
來源|阿里巴巴雲原生公眾號
互聯網金融時代下,金融產品和服務模式不斷創新,金融系統容量需求急劇增長,為進一步滿足運維標准提升工作的需求,提升服務連續性水平。中國工商銀行(后簡稱工行)從 2014 年開始分布式架構轉型的技術預研工作,通過對開源微服務框架深入調研和技術選型后,確定了基於開源 Dubbo 自主研發建設分布式服務平台,並結合金融場景,工行在 Dubbo 基礎上對服務的注冊、發現等核心能力進行了三十余項定制,以支持單注冊中心超 70 萬提供者的超大規模業務場景。分布式服務作為分布式體系的核心能力,助力工行應用架構向分布式、服務化轉型,承載未來開放平台核心銀行系統。
在分布式系統中,由於分布式全鏈路灰度發布因其鏈路復雜、技術門檻高、落地難度高逐漸成為金融科技實現全鏈路灰度發布的難點所在。工行在分布式系統建設方面一直走在同業前列,積極探索分布式全鏈路灰度發布,致力於解決分布式架構下跨應用、跨服務的全鏈路灰度發布能力。
業界傳統灰度發布
灰度發布是業界一種規避發布風險的有效的手段,通常可以藍綠部署、滾動發布、灰度發布等幾種方式實現。
1. 藍綠發布
藍綠部署是指同時運行兩個版本的應用,如圖1所示,藍綠部署的時候,原有版本不停止服務,直接部署一套新版本,新版本正常運行后,再將流量切換到新版本。但是藍綠部署要求在升級過程中,同時運行兩套程序,對硬件的要求就是日常所需的兩倍。
圖 1 藍綠部署
2. 滾動發布
滾動升級就是在升級過程中,不是同時啟動所有新版本,是先啟動一台新版本,再停止一台老版本,以此類推,直到升級完成。但是滾動升級存在風險,在開始滾動升級后,流量會直接流向已經啟動起來的新版本,但是新版本是不一定可用的,比如需要進一步的測試才能確認。那么在滾動升級期間,整個系統就處於非常不穩定的狀態,如果發現了問題,也比較難以確定是新版本還是老版本造成的問題。
圖 2 滾動發布
3. 灰度發布
灰度發布即先啟動一個新版本應用,但是並不直接將流量切過來,而是測試人員對新版本進行線上測試。如果沒有問題,那么可以將少量的用戶流量導入到新版本上,然后再對新版本做運行狀態觀察,收集各種運行時數據,如果此時對新舊版本做各種數據對比,就是所謂的 A/B 測試。當確認新版本運行良好后,再逐步將更多的流量導入到新版本上,在此期間,還可以不斷地調整新舊兩個版本的運行的服務器副本數量,以使得新版本能夠承受越來越大的流量壓力。直到將 100% 的流量都切換到新版本上,最后關閉剩下的老版本服務,完成灰度發布。如果在灰度發布過程中(灰度期)發現了新版本有問題,就應該立即將流量切回老版本上,這樣,就會將負面影響控制在最小范圍內。
圖 3 灰度發布
工行對企業級鏈路灰度發布能力探索
工行從 2015 年開啟了 IT 架構轉型工程,分布式體系已覆蓋百余個關鍵應用,已有上萬分布式服務節點,日均服務調用量超 60 億,交易峰值逾 10 萬 TPS,實現了遠程主機性能容量的集群處理能力。截至 2019 年,工行各項目主要通過滾動升級、藍綠發布、業務開關三種方式實施了灰度發布。
隨着 IT 架構轉型,分布式體系支撐的服務的底層架構和平台系統日益復雜,生產運行不確定因素相較於主機明顯增加,這就對生產系統穩定運行提出了更高的要求。工行於 2020 年上半年已支持分布式全鏈路灰度發布方式,旨在復雜分布式場景中,針對行內重點產品線、重點應用、公共支撐平台,形成統一的灰度發布規范,為重點產品線提供了全鏈路灰度發布能力的技術支撐。
1. 面對多樣化金融業務場景,構建企業級全鏈路灰度能力
工行目前已有近 10 億賬戶,每日通過多種渠道處理近 2 億筆支付結算業務,對系統的高可用能力要求極高。面對不同產品線,迫切需要端到端的全鏈路灰度發布,來降低版本發布的風險。工行全鏈路灰度發布能力通過對業務流量進行染色,聯合軟負載均衡、網關、服務框架等多個組件,實現染色流量按標簽進行路由,支持跨應用、跨節點的全鏈路灰度路由能力,並建立灰度發布運維監控體系和管控機制。
圖 4 工行全鏈路灰度流程
2. 流量標簽級灰度路由能力,駕馭金融業務場景
全鏈路灰度發布采用標簽路由的方式,通過軟負載和服務框架識別染色流量中的標簽和灰度環境節點標簽,實現對應染色流量只在對應標簽的灰度環境中流轉。
1)軟負載灰度流量分發
軟負載通過識別流量中的灰度標簽,把灰度流量路由發送至對應標簽的灰度環境,實現灰度流量的第一級分發。
圖 5 軟負載灰度路由
2)服務框架灰度路由
灰度請求流量流轉到業務層服務化節點后,后續流量就由服務框架代管,通過 RPC(Dubbo)協議流轉,服務框架的標簽路由層會自動識別本次請求是否攜帶灰度流量標識,並篩選特定的灰度環境並轉發請求。
圖 6 服務框架灰度路由
3)灰度標簽鏈路透明傳遞
在業務服務層,服務框架負責灰度標簽的傳遞。Dubbo 提供了優雅的隱式參數機制,方便地傳遞上下游的一些標記和控制消息,而實現對業務無感的能力。工行微服務框架在此機制上,將灰度標簽作為一隱式參數,在消費方發起請求切面中自動將該參數設置在請求中,使得灰度流量在鏈路傳遞過程中,其攜帶的灰度標識能被層層傳遞下去,實現全鏈路灰度發布能力。
圖 7 灰度標識透明傳遞
4)灰度降級保障業務交易安全執行
當鏈路中存在環節所有服務節點灰度標識均無法匹配灰度請求標識,則灰度請求在該環境通過正常節點處理,且保證灰度標識能繼續向下游傳遞。保障系統高可用能力,防止流量找不到對應標識節點而出現交易失敗的情況。
圖 8 灰度降級
3. 總結
目前工行已建設統一的全鏈路灰度發布標准,降低了各應用實現灰度發布的改造人力成本及灰度環境建設難度,提高了研發效率,最終實現跨應用、跨服務的一致性灰度發布能力。已在聚合支付業務線、手機銀行業務線等二十余個應用實現了全鏈路灰度發布能力。
未來展望
隨着工行 IT 架構轉型的持續推進,工行將持續構建以主機和平台雙核心的金融信息系統,保證金融服務的穩定運行,支撐高頻業務快速增長。以“開放性、高容量、易擴展、成本可控、安全穩定、便捷研發”為建設理念,在分布式全鏈路灰度發布領域積極推動技術創新、管控升級,覆蓋銀行核心交易鏈路場景,持續完善全鏈路灰度發布模式,減少應用接入成本,提升全鏈路灰度發布中各組件兼容適配能力,以適應復雜的分布式金融交易場景,為智慧銀行建設提供有力支撐。