本文分享自天翼雲開發者社區《一種智能調度分佈式路徑計算解決方案》.作者:蔣輝
背景技術
傳統的CDN動態加載智能路由系統對用户動態請求,主要通過探測服務器主動發起週期性的探測請求,探測CDN中轉節點和源站的可用性及網絡性能,根據探測結果選擇最優的回源鏈路;
然而,在獲取到探測結果後,為了減少探測服務器的計算壓力,通常將探測和選路功能模塊分離在不同的服務器或服務器集羣完成,選路採用特殊的服務器(一般是BGP的高配機器)作為中央路徑計算服務器,探測服務器上報探測數據到中央路徑計算服務器,中央路徑計算服務器則根據上報的探測數據計算回源路徑,從中選擇最優的回源鏈路。
為了實現中央路徑計算的高可用,現有的中央路徑計算服務器架構有的是隻部署在某個地區的服務器集羣,這種方式無法滿足不同地區的探測服務器就近上報探測數據到同個地區的中央路徑計算服務器,從而可能造成上報探測數據延時大甚至失敗的問題,此外,一旦該地區的機房掉電或割接,則無法進行最優回源路徑的計算;有的是部署在多個不同地區,但採用主備架構,這種方式雖然能解決某個地區機房掉電的問題,但會導致備的中央路徑計算服務器大部分情況下都閒置,而主的中央路徑計算服務器卻處於高負載處理請求數據的狀態,這樣不僅浪費資源,無法均衡地分攤不同地區探測服務器上報探測數據的請求,後續也不方便對集羣進行擴容和更改。
鑑於此,本文將提供一種智能調度分佈式的路徑計算解決方案,它具有以下3個方面的特點:
1)實現不同地區的探測服務器上報探測數據的請求能夠優先就近調度到相同地區的中央路徑計算服務器集羣,只有當相同地區的中央路徑計算服務器集羣服務不可用時,才將探測服務器上報的探測數據請求調度到其他地區的中央路徑計算服務器集羣;
2)實現不同地區的探測服務器上報探測數據的請求均衡地分攤到不同地區的中央路徑計算服務器集羣,且同一時刻所有地區的中央路徑計算服務器集羣同時提供服務;
3)實現相同地區的探測服務器上報探測數據的請求在相同地區的中央路徑計算服務器集羣內部進行均衡地調度,並能及時剔除集羣內部服務異常的服務器;
技術方案
本文提出的智能調度分佈式的路徑計算解決方案,採用交換機OSPF的ECMP技術來實現中央路徑計算服務器集羣內部的負載均衡調度,同時基於dns智能調度實現跨地區集羣間的負載均衡,具體技術方案原理如下圖所示:

技術方案主要步驟如下:
1)每個中央路徑計算服務器集羣都分配一個對外接入的vip,為中央路徑計算系統分配提供服務的域名,dns解析能夠正常解析到中央路徑計算服務器集羣的vip;
2)A地區的探測服務器發起探測數據上報請求到中央路徑計算系統,通過dns智能解析將請求優先調度到與探測服務器相同A地區的中央路徑計算服務器集羣vip,實現探測數據上報請求的就近調度;
3)監控平台定時採集探測A、B等多個地區的中央路徑計算服務器集羣vip的心跳探測請求結果,dns智能調度平台獲取每個地區的中央路徑計算服務集羣的心跳探測結果,一旦發現就近調度的中央路徑計算服務集羣vip的心跳探測失敗,則dns智能調度切換到其他正常服務的中央路徑計算服務集羣;
下圖所示為監控平台定時採集的華東-衢州、華中-株洲、華北-和平3個地區的中央路徑計算服務器集羣vip的心跳探測請求結果,ccs_probe探測結果為1表示集羣服務正常,為0表示集羣服務異常。

4)請求到達A地區機房的交換機後,通過交換機的OSPF負載均衡技術(ECMP等價多路徑)發送組包來探測與後端真實中央路徑計算服務器的連通性,如果其中某條路徑出現故障時,由其它路徑代替完成轉發處理,實現路由冗餘備份功能;
5)集羣服務監控腳本定時監測中央路徑計算服務器服務是否正常(包括向中央路徑計算應用程序發送心跳探測是否正常、Redis應用程序端口是否監聽等),如果服務異常,則通過路由軟件Quagga修改交換機到該中央路徑計算服務器的路由不可達,這樣交換機負載均衡調度時不會再將請求調度到服務異常的中央路徑計算服務器;
6)中央路徑計算服務器集羣內部每台中央路徑計算服務器上部署的中央路徑計算應用程序負責接收探測服務器上報的探測數據,將探測數據存儲到本機的Redis中,集羣內部通過Redis應用程序實現不同中央路徑計算服務器之間探測數據的主從同步與備份;
為了方便Redis集羣部署,這裏採用腳本自動化的方式來實現,如下所示:
腳本執行步驟如下:
a)分別登陸不同地區機房的不同節點(這裏選擇A、B、C三個地區機房,每個機房3台機器為例),進行redis集羣配置部署,執行如下命令:
./cluster_redis_config.sh -p xxxxxxxxxxxxxxxxxxxxxx (需要指定redis秘鑰)
其中:cluster_redis_config.sh關鍵腳本如下:

b)分別在上述三個機房中選擇1台機器,進行redis集羣創建及master、slave的redis設置
A地區機房機器(其中1台)執行命令:./cluster_redis_build.sh -c 221.238.221.7, 221.238.221.8, 221.238.221.9
B地區機房機器(其中1台)執行命令:./cluster_redis_build.sh -c 202.106.245.4,202.106.245.5,202.106.245.6
C地區機房機器(其中1台)執行命令:./cluster_redis_build.sh -c 218.79.202.7,218. 79.202.8,218. 79.202.9
其中:cluster_redis_build.sh關鍵腳本如下:

7)探測服務器上報的探測數據經過智能調度和交換機負載均衡調度到同地區的中央路徑計算服務器集羣中的某台中央路徑計算服務器後,由其主動向其他地區的中央路徑計算服務器集羣vip發起上報探測數據請求,這樣所有地區的中央路徑計算服務器集羣都能獲取到相同的探測數據,實現跨集羣探測數據的同步;
本文提出的一種智能調度分佈式路徑計算解決方案,具有如下優勢:
1)能夠滿足不同地區的探測服務器上報探測數據的請求能夠優先就近調度到相同地區的中央路徑計算服務器集羣,只有當相同地區的中央路徑計算服務器集羣服務不可用時,才將探測服務器上報的探測數據請求調度到其他地區的中央路徑計算服務器集羣,這樣能夠提高上報探測數據的成功率,降低上報探測數據的請求延時;
2)實現中央路徑計算服務異地多活,即同一時刻所有地區的中央路徑計算服務器集羣同時提供服務,且能夠分攤不同地區的探測服務器的上報探測數據請求,降低單一中央路徑計算服務器集羣路徑計算壓力。此外,這種異地多活的分佈式中央路徑計算服務器集羣架構方便後續擴容及服務器更新,便於管理與維護;
3)採用交換機OSPF的ECMP技術來實現中央路徑計算服務器集羣內部的負載均衡調度,相比傳統的LVS+Keepalived負載均衡技術,節省了部署LVS及Keepalived軟件的服務器資源。