流量隔离方案 Dpath 护航双十一新零售
需求
在今年的雙11準備期間,業務同學提出要針對新零售進行特殊的保障,希望新零售過來的流量,單獨進入到一批機器,和其他普通流量隔離開來,這對新零售系統穩定性提出更高的要求。
需求總結下來就是:
- 針對特殊流量可以在鏈路上按需選擇一些應用,從所有機器(公共集群)里圈定一些機器作為特殊流量的專屬機器,以便對特殊流量進行特殊支持。
- 普通流量不進入專屬服務器,特殊流量可以按需使用普通服務器
- 整個鏈路上各個應用的劃出來的專屬機器組成了特殊流量的專屬通道,類似公交專用道。
- 我們的RPC框架已有的路由功能是在單次調用上生效,基于單次調用的路由功能實現全鏈路的路由會非常麻煩。所以我們提出了一個全鏈路上的做流量隔離的方案Dpath(Dedicated path)。
方案工作機制
我們分三步來說明Dpath如何工作:
- 圈定專屬服務器
- 識別特殊流量
- 在鏈路上引導流量到對應的服務器
圈定專屬機器
簡單來說,我們需要的信息就是一個專屬環境里包含哪些應用的哪些機器。該信息以JSON形式存放在配置中心,樣本如下:
{ "enable": true, "envRules": [{"envName": "newRetail", "failoverPolicy": 0,"envAppRules": [{"appName": "app1", "ips": [ ], "machineGroups": ["app1_newRetail_host"]}, {"appName": "app2", "ips": [ ], "machineGroups": ["app2_newRetail_host"]}, {"appName": "app3", "ips": [ ], "machineGroups": ["app3_newRetail_host"]}, {"appName": "newRetailEntryApp", "ips": [ ], "machineGroups": ["newRetailEntryApp_host"]}]} ] }上述配置申明了一個名為newRetail的專屬環境,里邊包含app1,app2,app3,newRetailEntryApp四個應用以及對應的機器。
Dpath工具包會訂閱該配置,各個中間件使用Dpath工具包即可獲知所需的信息。
識別流量
Dpath通過trace模塊(全鏈路的trace功能,可以在鏈路上傳遞數據)攜帶的dpath_env屬性來識別當前流量屬于哪一個專屬環境。具體如何根據請求信息映射到一個專屬環境是業務邏輯,由業務同學完成。這個識別動作可以放在如下三個地方:
- Nginx
可以根據http請求信息來識別流量。根據業務規則實現請求到dpath_env的映射,通過Nginx模塊生成將env信息添加到trace模塊的上下文
- 入口應用
中間件取環境信息如果為空,默認會使用當前機器所屬的環境。所以如果入口應用確定,那么將整個入口應用劃到專屬環境即可。目前新零售都是這種模式。
- 業務代碼
業務代碼可以根據需要設置trace模塊上下文中的的dpath_env,隨時改變流量所屬的環境。
引導流量
dpath只定義了機器,環境,以及流量的關系,并沒有規定如何引導流量。引導流量由各個中間件自行實現。
這里只以rpc為例說明如何基于Dpath的規則來引導流量到對應的服務器。
為了方便理解,先忽略RPC其他的路由邏輯,看最簡單情況下,單次調用的處理。沒有Dpath功能時,RPC客戶端就是從注冊中心拿到service對應的服務器列表,然后隨機調用。如下圖所示:
增加Dpath功能之后,服務名到服務器的映射中間插入了一個dpath_env的邏輯。RPC客戶端先根據請求上下文中的環境信息選中對應環境的地址,然后隨機調用。如下圖所示:
整個鏈路上,一個專屬環境里所有應用的專屬服務器串起來構成了特殊流量的專屬路徑。如下圖所示:
- newRetailEntryApp進入的newRetail流量使用專屬機器
- 鏈路上沒有劃機器給newRetail的應用,使用公共集群
RPC之外,消息等中間件,都用各自的方式達到了類似的隔離效果。這里不再贅述細節。下面只提供一個RPC和消息支持Dpath的效果簡圖:
野流量隔離
根據上面的描述,RPC的隔離邏輯是在客戶端生效。那么如果客戶端沒升級的話(很難快速協調所有客戶端統一升級),就會有未知流量打到專屬服務器,老客戶端過來的不符合規則的流量我們稱之為野流量。
為了解決野流量問題。注冊中心的同學在發布訂閱功能的基礎上,提供了一個namespace功能。我們會把專屬服務器的服務發布到Dpath這個namespace下,普通服務器默認發布到default這個namespace。新版本的客戶端會訂閱default+dpath兩個namespace的數據,相當于拿到全量地址。而注冊中心保證老的客戶端只能看到default空間下的數據,這樣就不會有野流量達到專屬服務器了。
總結
Dpath是一個通用的流量隔離方案,可以支持一些需要隔離或者引導流量的場景,比如全鏈路常態隔離,灰度測試,藍綠發布等。
目前業務方主要是在全鏈路上按業務屬性進行常態流量隔離,已經在幾個新零售場景線上使用,并且經歷了雙11的考驗。
以下列舉一些業務流量隔離的好處:
- 業務方可以根據業務屬性的不同做不同的支持:個性的配置,更全的監控等。
- 重要業務不受其他流量影響,不會因為其他流量突增而導致load高,被限流。
- 小集群支持單業務,發布,回滾,都更快。當特定業務出問題時,可以更快地響應。
?
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的流量隔离方案 Dpath 护航双十一新零售的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天啦噜!在家和爱豆玩quot;剪刀石头布
- 下一篇: 阿里云全球首推流量型独享虚拟主机新规格,