1. 程式人生 > 其它 >同城雙活-流量分流

同城雙活-流量分流

  1. 引言
    現階段,在同城頻寬時延問題沒有經過大規模的生產實踐、驗證的情況下,我們只匯入“白名單或1%“的小比例請求流量,進入雙活環境,確保環境有效的(活的),同時能支援“容災切換“。

     那麼,請求流量如何匯入雙活環境?有哪些分流方法?存在什麼樣的問題和挑戰,需要注意些什麼?本文將從這些角度進行剖析。
    
  2. 流量分流方法
    流量分流的主要方法有:

     1、HTTP-DNS
    
    2、公網GSLB(公網DNS+公網F5出口)
    3、SLB(F5+Nginx)
    4、內網GSLB (內網DNS+內網F5)
    5、點對點軟路由(Dubbo/SpringCloud)

2.1 HTTP-DNS
在口袋App渠道終端,通過HttpDNS模組,以“域名”為單位,按白名單或比例進行分流。

    說明:

        1. HTTP-DNS服務的IP地址列表,內建到APP中。App啟動時,非同步基於IP傳送請求,獲取各域名的對映IP。

        2. 前端App傳送業務請求時,HTTP-DNS模組進行攔截,獲得域名對映IP,替代預設的DNS服務。

        3. HTTP-DNS服務通過裝置ID返回不同的對映IP,實現白名單或比例分流

        4. HTTP-DNS服務雙活,前端偵測模組定時偵測,當預設環境IP不可用時,切換使用雙活環境IP,進行域名對映IP獲取。

    侷限性:

        1.  依賴App的native能力,不適用於微信公眾號/小程式、PC、純H5等型別的終端渠道

        2.  分流策略為全域性策略:以“域名”為單位,後端多個應用系統共享域名,分流策略也就多個應用系統共用,需要協同。

    優點:

        1.  相對於GSLB(公網DNS)方式,切換速度快,更改策略準實時生效

        2.  基於裝置ID分流,也就是“使用者”請求只會進入到同一IDC,不會隨機進入不同的IDC。長遠來看,對於後端應用系統處理跨IDC延時和資料一致性是有利的。

2.2 公網GSLB
通過公網域名解析服務(DNS)進行分流,公網渠道端入口的分流方法:

    說明:

       1. GSLB服務在域名解析時,按照預先配置的分流規則(按比例或根據客戶端IP按地域),返回不同的域名對映IP,實現請求流量分流

       2. GSLB服務本身雙活

    侷限性:

        1.  公網DNS服務提供方的DNS快取策略的不確定性,會影響分流策略的準確度,以及策略變更生效的時效性

        2.  分流策略為全域性策略:以“域名”為單位,後端多個應用系統共享域名,分流策略也就多個應用系統共用,需要協同。

2.3 SLB(F5+Nginx)
SLB(F5+Nginx)通過Nginx配置動態變更,實現流量分流。內網動態分流方法。

    說明:

        1.  公網接入SLB雙活,實現網際網路出口雙活。上圖示例中,假設域名M由應用A和應用B共用,應用B尚未雙活,則域名M雙活流量中,請求應用B的部分,需要回到觀瀾IDC。

        應用B雖未做雙活,但網際網路出口是雙活的,也是有價值的。

        2.  內網SLB,上圖示例中,假設應用C通過內網SLB呼叫應用A,需要通過分流策略,將部分流量分流到應用A的雙活叢集。這種情況下,需要在SLB治理平臺上,設定分流策略。

        3.  內網SLB,Nginx跨IDC連線雙活叢集所有節點,心跳偵測機制確保及時排除故障節點

        4.  SLB治理平臺,自身雙活,支援隨時線上變更分流策略

    侷限性:

        1.  內網系統間呼叫,大部分應用未使用SLB做負載均衡,大部分是直接使用F5。應用使用需要F5後面加Nginx,進行改造接入SLB

    優點:

        1. 可以按應用系統維度,設定不同的分流策略,且變更實時生效

        2. 公網基於域名分流,域名下沒有做雙活的應用,可以通過SLB把雙活環境(福田IDC)流量導回觀瀾IDC,起到一個很好的補充作用

        3. 對比內網GSLB(DNS域名解析),內網SLB(Nginx)策略變更實時生效,也不依賴呼叫方,呼叫方無需重啟或策略變更。

2.4 內網GSLB
通過內網DNS域名解析,結合內網F5,實現流量分流

    說明:

        1.  通過GSLB管理工具,進行分流策略管理。應用呼叫時,進行域名解析時,根據分流策略(按比例)返回不同IP,實現分流。

        2. 目前已實現應用雙活的系統,基本上是基於此方案實現。  

        應用A-->F5-->ESB-->F5(DNS分流)-->應用B

    侷限性:

        1.  當呼叫方啟用連線池時,將受到呼叫方連線池策略的影響。分流策略可能得不到有效執行,同時策略變更時,策略可能不能生效。

        2.  為了保證策略生效,呼叫方有可能需要重啟。

2.5 點對點軟路由
Pafa5(Dubbo),Halo(SpringCloud),是通過點對點軟路由方式進行流量分流的。本章節通過Dubbo來描述這塊的解決方案。

    說明:

        1.  兩套環境,通過服務提供者工具,將對方環境所有服務提供者(IP列表)同步到當前環境的註冊中心,保證當前環境的註冊中心中,有服務提供者的全集。

        2.  當應用間進行點對點呼叫時,根據提供者權重或同IDC優先原則,篩選(路由選擇)提供者,獲得可用提供者列表,再進行負載均衡,點對點呼叫。

        3. 當某應用沒有做雙活時,雙活環境將獲得預設環境的提供者列表,呼叫回到觀瀾IDC(預設環境),比如:示例圖中的應用C。

        4. 當其中某一環境不可用時,對方環境的服務同步者工具偵測到,自動刪除對方環境的提供者。

    侷限性:

        1. 需要升級Pafa5或Halo的新版本才能支援
  1. 分流存在挑戰
    流量分流,是雙活建設最為重要的課題之一。

3.1 同IDC優先 VS IDC權重
如果從公網渠道入口分流(如:HTTP-DNS),內網執行“同IDC優先原則“,則內網系統間,是不需要設定“分流策略”,

    但這前提條件是:主要渠道或呼叫方已完成雙活,業務場景比較全,能有效驗證雙活環境,通過“同IDC優先“方式實現全鏈路雙活。

    同IDC優先的優點:雙活環境獨立,流量分流由渠道入口統一控制,內部應用系統不需要單獨做“分流策略”。
如果應用系統的呼叫方或主要接入渠道,都沒有實現雙活,那隻能自己在應用系統維度設定分流策略(IDC權重),匯入部分流量來驗證自己的雙活環境和雙活能力。例如:     
   那我們到底選用哪一種方案呢?現階段,D+等核心業務系統,接入渠道較多,且多沒有完成雙活,

   可以以應用系統為維度,自已獨立驗證雙活能力,建議先使用“IDC權重“方案,後續主要渠道及呼叫方完成雙活後,再切換到“同IDC優先“的方案上來。

   以口袋APP為主要渠道的渠道系統,則建議以“同IDC優先“的方案,協同進行全鏈路的雙活建設和驗證。  

3.2跨IDC時延和頻寬問題
跨IDC時延和頻寬問題,問題影響有多大,應用系統能否接受,終端使用者體驗能否接受,目前還沒有大規模生產實踐、論證過,暫時是沒有答案的。

    現階段,我們只匯入極小部分流量(白名單,百分之一,甚至萬分之一),進入雙活環境,能驗證雙活環境可用,保證它是活的即可。

    長期手段,我們慢慢增加匯入的流量,持續監控觀察,持續改進,在實踐過程中,逐步把這個問題解決掉或規避掉。

    所以,短期我們可以忽略這個問題。  

3.3 白名單分流的支援
白名單分流,是比較安全的雙活環境驗證方式。

     目前支援白名單分流的方式,只有HTTP-DNS,且口袋APP是行內的主要C端渠道,場景也比較全。所以要充分利用這個渠道和HTTP-DNS這個方法做雙活分流。

3.4 變更實時生效

    公網GSLB、內網GSLB,存在實時生效問題,如果有替代方式,儘量用替代方式。

    比如:HTTP-DNS替代公網GSLB,SLB替代內網GSLB。  

3.5 B端如何分流

    B端合作方渠道,一般通過專線或公網,服務端對服務端連線進行互動,分流方式需要合作方商定。

4.總結

   前面,我們分析了各分流方法,及各自優劣,也分析了現階段存在的挑戰和問題,並給出瞭解決辦法,有以下觀點,我們再闡述一下:

    1.  現階段,應該儘快把雙活環境搭建起來。大家都搭建起來了,才能執行”同IDC優先“原則,保證雙活環境獨立性,並全鏈路雙活驗證。

    2.  現階段,只要匯入極小部分流量,進入雙活環境,保證它是可用的,是活的,就可以了。當容災切換時,儲存手工切換,確保所有流量能即時切入雙活環境。

    3.  現階段,只匯入極小部分流量進入雙活環境,先忽略掉跨IDC時延和頻寬問題。容災切換後,雙活環境確保沒有跨IDC流量。

    4.  推薦使用:HTTP-DNS、SLB、點對點軟路由(Dubbo/SpringCloud)這三種分流方法。GSLB儘量不使用。

    5.  "同IDC優先“的策略下,在渠道入口端進行分流,後端應用系統無需設定自己的分流策略,由運維統一變更和協同。

    6.  “同IDC優先“與”IDC權重“二選一,應用系統可以根據自身情況選擇”IDC權重“,自己設定自身的分流策略,匯入一定比例的流量進入自己的雙活環境。

    7.  所有分流方法都需要同時支援這二種策略:“同IDC優先“與”IDC權重“。

    8.  現階段,在達到目的的前提下,儘量保持架構簡單,謹防過度設計

本文轉載至:https://www.modb.pro/db/52907