實戰用丟包實現流控

                        

1.基本思路:

虛擬專用網用週期性丟包(每N個丟一個)觸發後臺服務器週期性流控,經過一段時間流量會趨於一個穩定值。以上一秒的流量以及一個較長週期的流量作爲因子調整丟包率。運用強化學習的策略,當流量在閾值之外時進行懲罰(調整丟包率),當流量在閾值之內時進行獎勵(不改變丟包率,甚至容忍之後的小範圍波動)應用這種策略,我測試的case最後都可以收斂到閾值80%-130%這個範圍內。

 

2.關於強化學習(增強學習)

因爲決定帶寬的因素錯綜複雜,很難建立一個數學模型來決定丟包率。增強學習是試錯學習(Trail-and-error),由於沒有直接的指導信息,智能體要以不斷與環境進行交互,通過試錯的方式來獲得最佳策略,這種方法適合QOS的開發。

3.丟包算法

 

1)當限速比(原始速率/目標速率)較低時

以丟包率N(每隔N秒丟一個)大於等於10爲標準。此時相鄰兩個丟包率的差別較小,比如10和11,每110個包前者纔多丟一個。當限速比較低(比如20M到5M)時,可以以10以上的丟包率收斂到閾值。

 

(1)超過閾值:

N = 上一秒的丟包率 /(1 + 0.2 * (上一秒流量/閾值) + 0.05 * (長期流量調節因子))

 

(2)低於閾值:

N = 上一秒的丟包率 *(1.8 + 0.05 * (長期流量調節因子))

 

長期流量調節因子是一個較長週期內流量超出或者低於閾值的程度,比如長期流量過大時可自動做如下調整:

(1)在流量超標時更快地增大丟包率,

(2)在流量低於閾值時更快地減少丟包率

 

這個參數在一定程度上可以修正丟包算法裏寫死的參數.同時這個參數使算法加入了一定的隨機性,可以在一定程度上避免計算出的丟包率在一個誤差較大區間停留太長時間。

 

2)當限速比較高時用插值算法

 

比如從20M限速到1M,丟包率是3時速率遠小於1M,丟包率是4時速率遠大於1M,無法達到預期的閾值。最優值在3和4之間,比如3.4,但是%運算無法計算非整數。

近似的方法是用插值算法,在一個較長的週期裏實現更高的丟包精度。以當前丟包率爲3,最大插值20爲例:

 

  1. 開始的時候丟包率爲3,此時帶寬小於1M,這時需要進行丟包率4的插值。

每3個丟1個先丟20個包,然後插入一次4丟1,這時丟包率爲3.05。

 

  1. 如果帶寬還小於閾值,每3個丟一個先丟19次,然後插入一次4丟1,以此類推增加丟包率4的插值。如果在閾值之內,則停止。如果大於閾值,則進行反向插值進行回溯。
  2. 當達到每3個丟1個和每4個丟一個交替進行,這時丟包率爲3.5。

每3個丟1個和每4個丟一個交替進行,這樣丟包率爲3.5,如下(1代表發包,0代表丟包)所示:

111011110111011110

進行一輪後相當於搜索了3.0-3.5這個範圍,

  1. 如果次輪插值完成後沒有收斂並且貸款小於閾值,丟包率變成4。如果丟包率4的流量大於閾值,那麼進行在其中進行丟包率3的插值,即在4-3.5之間搜索。如果流量小於閾值,進行丟包率5的插值,即在4.0-4.5之間搜索。

 

這種丟包方式能以更小的步長來查找最優解,丟包率的變化較爲平穩,有利於避免流量大幅波動。其代碼實現也非常簡單。

實際測試中把插值個數設成20可以在大多數情況可以收斂,有很少的情況會在兩個步長之間震動,但平均流量在閾值誤差30%之內。

這個插值方法並不是線性插值,在開始的時候步長較小,然後逐漸加大步長,這樣有利於穩定流量,增大收斂的概率。

 

4.泛化能力

強化學習的泛化能力較強,同時儘量提高算法的泛化能力,在編碼中儘量遵循下面原則:

(1)簡化算法,用最少的數量的因子。減少條件判斷,儘量用普適性強的判斷條件。儘量不用寫死的值。

(2)避免陷在一個不理想的區間無法跳出。

 

5.收斂速度的提高

(1)根據不同的限速比賦予不同的初值。

(2)在一定條件下進行二分查找來減少搜索時間。

 

6.可調整的參數:

(1)閾值可容忍波動範圍:目前默認設爲0.8-1.3,擴大這個範圍可以增加收斂速度,減少可以增加精度,收斂速度可能會變慢。

(2)插值算法每輪最大插值個數:默認20,如果調得更小可以增加精度,增加收斂的概率,但同時會增加收斂過程的時間。

(3)達到目標閾值後容忍的連續偏離次數:默認3.如果調得更小可以增加精度,但收斂過程可能會更慢。

 

7. 限速能力

目前丟包率最高50%,可以把原始帶寬23M的http下載速度降到最低20K。這個幅度在實際應用中應該能滿足需求。

如果需要限速到更低可以調節最大丟包率到100%,這時算法會在100%和50%之間插值來逼近小於20K的帶寬。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章