一個巧妙的負載均衡算法 :翹動你的大腦
現在的負載均衡技術,可以說是滿大街都是,但是我們基本都停留在了使用的階段上,并沒有真正深入去了解其核心。如果真的出現了問題,可
現在的負載均衡技術,可以說是滿大街都是,但是我們基本都停留在了使用的階段上,并沒有真正深入去了解其核心。如果真的出現了問題,可能就很難知道是什么原因導致了,只能去google,百度了。 因此,了解一些核心的東西,還是不錯的。
負載均衡大概流程就是,隨時收集各服務器信息或者各服務器主動上報信息,由配置主心進行保存,計算出權重,然后根據相應算法進行服務機器選擇。(當然了,這不是本文的重點,我也說得不一定對)
我要展示的是,一個根據權重進行機器選擇的一個巧妙算法,如下:
- int chooseOneRoute ( LB_SvrInfo * & pSvr )
- {
- double dblTotalWeight = 0.0;
- int i = 0;
- time_t curTime = time(NULL);
- //權重的計算方法是Late方法
- if ( curTime - calWeightTime >= CAL_WEIGHT_TIME_INTERVAL )
- {
- calculateWeight();
- }
- //先把各服務器權重加起來
- for ( i = 0; i < MAX_SERVER_NUM; i++ )
- {
- if ( !oServerInfo[i].isOkForRoute() ) continue;
- dblTotalWeight += oServerInfo[i].getWeight();
- }
- dblTotalWeight *= rand() / ( RAND_MAX + 1.0 );
- //做減法
- for ( i = 0; i < MAX_SERVER_NUM; i++ )
- {
- if ( !oServerInfo[i].isOkForRoute() ) continue;
- dblTotalWeight -= oServerInfo[i].getWeight();
- //找到對應服務器
- if ( dblTotalWeight < 0 ) break;
- }
- pSvr = &( oServerInfo[i] );
- return 0;
- }
分步解釋就是:
先計算得到各機器的權重值,保存起來;
按順序將各機器權重相加,相加之后就相當于各機器在總權重上占了各相應的一段比例;
取隨機數,得到一個0~1的隨機值,并乘以總權重,作為選中機器的標志;
再按順序減去各機器的權重,當減到選擇機器的權重范圍時,就得到了機器號,從而選定該機器。
算法示意圖如下:
服務器權重越高,在線段上占的長度越長,被隨機數選中的概率也越大。
剛開始的時候,我以為是哪個數學家搞出來的公式得到的呢,結果原理卻出奇的簡單,所以好的東西不一定是復雜的,或者說看起來牛逼的東西,不一定就很復雜,但是肯定是大多數人意想不到的。
責任編輯:售電衡衡
免責聲明:本文僅代表作者個人觀點,與本站無關。其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關內容。
我要收藏
個贊
-
碳中和戰略|趙英民副部長致辭全文
2020-10-19碳中和,碳排放,趙英民 -
兩部門:推廣不停電作業技術 減少停電時間和停電次數
2020-09-28獲得電力,供電可靠性,供電企業 -
國家發改委、國家能源局:推廣不停電作業技術 減少停電時間和停電次數
2020-09-28獲得電力,供電可靠性,供電企業
-
碳中和戰略|趙英民副部長致辭全文
2020-10-19碳中和,碳排放,趙英民 -
深度報告 | 基于分類監管與當量協同的碳市場框架設計方案
2020-07-21碳市場,碳排放,碳交易 -
碳市場讓重慶能源轉型與經濟發展并進
2020-07-21碳市場,碳排放,重慶
-
兩部門:推廣不停電作業技術 減少停電時間和停電次數
2020-09-28獲得電力,供電可靠性,供電企業 -
國家發改委、國家能源局:推廣不停電作業技術 減少停電時間和停電次數
2020-09-28獲得電力,供電可靠性,供電企業 -
2020年二季度福建省統調燃煤電廠節能減排信息披露
2020-07-21火電環保,燃煤電廠,超低排放
-
四川“專線供電”身陷違法困境
2019-12-16專線供電 -
我國能源替代規范法律問題研究(上)
2019-10-31能源替代規范法律 -
區域鏈結構對于數據中心有什么影響?這個影響是好是壞呢!