摘要:就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用,一部分用戶開始用,如果用戶對沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到上面來?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)調(diào)整問題,以保證其影響度。
一、背景
互聯(lián)網(wǎng)產(chǎn)品開發(fā)有個非常特別的地方,就是不停的升級,升級,再升級。采用敏捷開發(fā)的方式,基本上保持每周或者每兩周一次的發(fā)布頻率,系統(tǒng)升級總是伴隨著各種風險,新舊版本兼容的風險,用戶使用習慣突然改變而造成用戶流失的風險,系統(tǒng)宕機的風險,500錯誤服務不可用的風險等等。為了避免這些風險,很多產(chǎn)品都采用了灰度發(fā)布的策略,其主要思想就是把影響集中到一個點,然后再發(fā)散到一個面,出現(xiàn)意外情況后很容易就回退,即使影響也是可控的。
任何脫離實際業(yè)務的技術工作都是耍流氓,技術需要服務于業(yè)務。因此,本文盡量淡化了業(yè)務方面的因素,聚焦于技術層面,建議在實際運用中還是要根據(jù)各自的業(yè)務場景去變化和調(diào)整。
二、什么是灰度
灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。AB test就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度。
互聯(lián)網(wǎng)系統(tǒng),灰度其實就是根據(jù)設定的規(guī)則將請求路由到我們的灰度版本(灰度機器)上來。比如對于API來說,一般有如下幾個需求:特定用戶(比如測試帳號)、 特定的App(比如測試app或者合作App)、特定的模塊、接口(只有某些接口需要灰度,這種一般是API Container的修改,拿一些不是很重要的API做灰度測試)、特定的機器(某些請求IP轉發(fā)到灰度機)等。
三、灰度的優(yōu)勢
1、 在發(fā)布過程中降低上線風險
2、 降低影響范圍,并且范圍可控
3、 降低對測試的依賴,減少線下自測的數(shù)據(jù)構造成本
4、 特定的請求能夠指向特定的服務器,方便集中監(jiān)控日志,方便跟蹤完整的調(diào)用鏈路
5、 方便系統(tǒng)流量切入
6、 便于隨時回滾
7、 指定特定人群,方便系統(tǒng)回訪,方便產(chǎn)品需求收集,完善產(chǎn)品功能,提升產(chǎn)品質量
8、 在無狀態(tài)的情況下保障用戶使用到的版本一致
9、 避免宕機給用戶帶來不好的體驗和使用
四、目標
1、 做到對現(xiàn)有業(yè)務系統(tǒng)無侵入性
2、 能夠發(fā)揮以上提到的灰度的優(yōu)勢
3、 發(fā)布系統(tǒng)的靈活配置
4、 發(fā)布系統(tǒng)和業(yè)務系統(tǒng)的松耦合
5、 和網(wǎng)關系統(tǒng)結合,讓操作平滑
五、功能
1、 路由策略管理/配置
2、 灰度規(guī)則管理
3、 開啟/關閉開關
六、系統(tǒng)設計
需要設計的系統(tǒng)分為兩種場景,一種是http方式接入,需要借助網(wǎng)關(gate-way)去實現(xiàn)流量的切換,和系統(tǒng)路由;另一種是rpc接入(目前為dubbo),需要借助dubbo提供的負載均衡策略
來實現(xiàn),結合自帶的qos(dubbo的在線運維命令)實現(xiàn)服務啟動/關閉。
【說明】:服務內(nèi)部執(zhí)行線程監(jiān)控待定,sentinel 、 pinpoint or other。
1、http方式接入
其中分為幾個重要的部分:
接入層網(wǎng)關,接入客戶端請求,根據(jù)下發(fā)的配置將符合條件的請求轉發(fā)到新舊系統(tǒng)上.
配置管理后臺,這個后臺可以配置不同的轉發(fā)策略給接入層網(wǎng)關.
穩(wěn)定和灰度兩種處理客戶端請求的業(yè)務服務器.
http請求的入口都落在網(wǎng)關上,網(wǎng)關會根據(jù)管控平臺(admin dashboard)的配置進行uri的選擇。此時請求數(shù)據(jù)會判斷當前應用是否已經(jīng)開啟灰度,再次判斷是應用級別的灰度還是服務級別的灰度,然后根據(jù)管控平臺配置的灰度策略進行灰度,可以支持白名單、權重、ip段、業(yè)務域等。
管控平臺會調(diào)用引擎管理執(zhí)行相應的指令,進行關閉、開啟、更新策略和白名單數(shù)據(jù)等,每次網(wǎng)關重新reload和重啟時會從灰度管理系統(tǒng)調(diào)用接口讀取配置應用的信息,加入緩存。
為了提升性能,應用的基本信息、灰度策略、白名單等數(shù)據(jù)緩存在內(nèi)存或者類redis這樣的緩沖中,靈活的進行緩存數(shù)據(jù)的更新。
實現(xiàn)功能:
1、動態(tài)路由
2、服務動態(tài)編排,實現(xiàn)流量的自由切換
3、啟服/停服
4、服務自檢
2、rpc(dubbo)接入
如果直接停機重啟rpc service會有什么影響:
服務發(fā)布時,直接重啟Tomcat,導致節(jié)點正在處理的請求會受到影響,嚴重時會有數(shù)據(jù)異常。
服務發(fā)布時如果節(jié)點正在作為task_tracker運行l(wèi)ts任務,會導致任務失敗并retry。
服務發(fā)布時如果節(jié)點正在消費RocketMQ中的消息,會導致消息消費異常,甚至進入retry或dlq隊列。
服務發(fā)布完成后沒有即時驗證機制,直接暴露給用戶,如有異常影響面很廣。
線上無法同時存在新老版本的服務來用于長時間的驗證。
竟然有這么多問題,想想就可怕,淚崩~,因此必須想法優(yōu)雅的實現(xiàn)服務的啟停,因此引出dubbo 服務的持續(xù)發(fā)布:
dubbo-consumer實現(xiàn)不同的負載均衡,在負載的時候進行白名單校驗和策略選擇。系統(tǒng)對灰度管控平臺非強制依賴,管控平臺出現(xiàn)問題不影響系統(tǒng)正常運行。
負載動態(tài)路由,阻止后續(xù)流量進入,監(jiān)控服務是否還有執(zhí)行的線程,加入鉤子offline服務或者接口,進行服務升級,自檢,啟動online,接入負載均衡。
由于很多接口都有在Dubbo中進行注冊,因此需要有辦法能夠對其Provider Service接口進行下線或屏蔽,使其不提供服務,即其它服務無法調(diào)用它的接口。
Service接口下線后,此consumer機器自然無任何流量流入,因此也無流量返回,達到下線consumer機器的目的,然后即可部署代碼。
官方有提供Dubbo-Admin工具,用于對Dubbo中各APP及其Service接口進行管理,里面自然也包含有實現(xiàn)下線的功能,可以有3種方法:
屏蔽,貌似一直沒有效果(尷尬);
禁用,可以成功禁用;
權重調(diào)節(jié),可以設置0-100的權重,設置為0時即不提供服務。
經(jīng)過權重調(diào)節(jié)方案,通過Dubbo-Admin對需要下線機器的APP應用接口權限設置為0。
實現(xiàn)的功能:
1、緩存負載策略
在系統(tǒng)啟動的時候要根據(jù)系統(tǒng)配置拉取灰度策略,并且保存在內(nèi)存中,定時獲取最新的負載策略,需要提供及時觸發(fā)的策略更新接口。
2、 負載均衡
在系統(tǒng)上線之前選擇運行時使用的負載均衡進行調(diào)用。
3、系統(tǒng)配置
系統(tǒng)在上線前需要錄入管控平臺,并且完成相應的配置,在啟動的時候作為唯一標識能夠拉取相應的配置。
4、監(jiān)控和統(tǒng)計
系統(tǒng)在內(nèi)存中緩存統(tǒng)計信息,定時上傳管控平臺,監(jiān)控出現(xiàn)問題不影響系統(tǒng)正常使用(sentinel,or dubbo-amdin模塊擴展)。
5、qos運維工具
系統(tǒng)的啟動使用qos,停服采用延時關閉結合jvm鉤子。
七、檢查機制
為了平滑發(fā)布的順利進行,檢查確認機制不可或缺,即確保Dubbo/Http中的下線都已生效,并且無流量發(fā)生,我們從以下兩個維度去檢查:
接口檢查,調(diào)用Dubbo、Http的API接口,檢查業(yè)務服務機器狀態(tài),是否為已經(jīng)下線。當然,在做了下線功能的同時,我們也有檢查功能和上線功能,可供調(diào)用。
監(jiān)控檢查,調(diào)用監(jiān)控平臺(ELK)的API接口,檢查業(yè)務服務機器的請求訪問數(shù)和日志流量是否都已經(jīng)為0,已經(jīng)處于下線狀態(tài)。
經(jīng)過上述改造后,我們新的發(fā)布流程如下,基本解決了平滑發(fā)布問題,發(fā)布時對業(yè)務的影響降到了最低;
八、停服/啟服后小范圍驗證
1.灰度驗證--不影響線上用戶
2.部分實例發(fā)布-- 導部分流量到新實例(可通過網(wǎng)關路由規(guī)則:用戶ID取模,區(qū)域限制等等)
3.全部發(fā)布
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/73004.html
摘要:灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。如何使用進行灰度發(fā)布呢將分一下四步第一,設置網(wǎng)關權重路由設置中提供了去實現(xiàn)根據(jù)分組設置權重進行路由,因此使用起來相對比較簡單,有興趣的可以閱讀源碼。 灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。在其上可以進行A/B testing,即讓一部分用戶繼續(xù)用產(chǎn)品特性A,一部分用戶開始用產(chǎn)品特性B,如果用戶對B沒有什么反對意見,那...
摘要:下使用快速搭建灰度網(wǎng)關簡介是新浪開源的一個可以動態(tài)設置分流策略的灰度發(fā)布系統(tǒng),工作在層,基于和開發(fā),使用作為分流策略數(shù)據(jù)庫,可以實現(xiàn)動態(tài)調(diào)度功能。目前在京東如實時價格秒殺動態(tài)服務單品頁列表頁等都在使用架構,其他公司如淘寶去哪兒網(wǎng)等。 Mac下使用ABTestingGateway快速搭建灰度網(wǎng)關 ABTestingGateway簡介 ABTestingGateway 是新浪開源的一個可以...
閱讀 1122·2021-11-23 10:05
閱讀 1805·2021-11-12 10:36
閱讀 1862·2019-08-30 15:56
閱讀 1698·2019-08-29 12:32
閱讀 3056·2019-08-28 18:04
閱讀 3441·2019-08-26 12:17
閱讀 2512·2019-08-26 11:35
閱讀 1253·2019-08-23 15:11