日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

流量隔离方案 Dpath 护航双十一新零售

發布時間:2024/8/23 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 流量隔离方案 Dpath 护航双十一新零售 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需求

在今年的雙11準備期間,業務同學提出要針對新零售進行特殊的保障,希望新零售過來的流量,單獨進入到一批機器,和其他普通流量隔離開來,這對新零售系統穩定性提出更高的要求。

需求總結下來就是:

  • 針對特殊流量可以在鏈路上按需選擇一些應用,從所有機器(公共集群)里圈定一些機器作為特殊流量的專屬機器,以便對特殊流量進行特殊支持。
  • 普通流量不進入專屬服務器,特殊流量可以按需使用普通服務器
  • 如果鏈路上某個應用app_x沒有劃出專屬機器,那么特殊流量和普通流量公用app_x的所有機器(我們稱之為公共集群)。
  • 如果app_x劃了專屬機器,但是這些機器因為某種原因不可達,那么特殊流量可以根據配置的failover策略決定是否使用公共集群。
    • 整個鏈路上各個應用的劃出來的專屬機器組成了特殊流量的專屬通道,類似公交專用道。
    • 我們的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 护航双十一新零售的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。