林楠

摘 ?要:IPv4地址資源不足,共享IP一般采用NAT、代理、反向代理等方式,在客戶端數量較多的情況下,一般要考慮負載均衡與冗余的情況。文章介紹一種通過定期輪詢動態生成PAC腳本,從而達到數臺代理服務器的負載均衡與冗余的程序設計,具有低成本、操作簡單的特點。
關鍵詞:CSharp;PAC腳本;代理服務器;負載均衡;冗余
中圖分類號:TP393.06 ? ? 文獻標識碼:A ? ? ?文章編號:1006-8937(2015)06-0070-02
目前,IPv4的地址資源嚴重告急,在日常工作生活中,家庭或企業一般只能通過一個或幾個互聯網IP地址進行接入,其內部網絡如需同時訪問互聯網,一般使用路由器的NAT(Network Address Translation網絡地址轉換)功能或代理服務器來實現私網對互聯網的訪問。但是當內部網絡計算機數量過多時,NAT會極大的影響整臺路由器的性能,單代理服務器也會因負載過大而經常宕機。此時,我們一般采用以下幾種方式來解決這個問題:
①使用防火墻的NAT功能來替代路由器的NAT功能,防火墻的NAT功能是由硬件實現,性能遠超路由器,可以支持大數量級的NAT。
②使用多臺代理服務器實現負載均衡。將用戶請求隨機發送到不同的代理服務器,以實現負載均衡。
基于成本等因素考慮,我們選擇方案2,通過部署多臺代理服務器,并在客戶端使用自動代理PAC腳本來實現代理服務器的負載均衡。
1 ?PAC腳本應用
自動代理腳本(Proxy auto-config Script),簡稱PAC腳本。一個PAC文件就是一個Javascript腳本,可放置在服務器上,通過遠程WEB訪問,客戶端只需要在代理的使用自動檢測腳本中輸入PAC腳本的WEB地址,就可以使用該腳本,當代理服務器發生變化時,只需維護Web服務器上的PAC腳本,無需更改客戶端配置,方便后期維護,減輕運維成本與負擔。
PAC腳本包含一個FindProxyForURL函數,IE通過傳入兩個參數url(訪問地址的完整URL)與host(訪問地址的主機名)來判斷是直接訪問,還是通過函數返回的代理服務器地址與端口來訪問。
PAC腳本可以通過取隨機數輕松實現負載均衡,但是當其中一臺服務器宕機時,腳本依舊有可能返回該服務器,從而導致客戶端訪問異常。于是我們考慮可以編寫一個程序,運行在存放PAC腳本的WEB服務器,通過定時對各代理服務器進行輪詢,根據代理服務器狀態變化,重寫PAC腳本。
2 ?程序總體設計
程序基于C#的Winform編寫,分為兩個模塊。
2.1 ?監控模塊
程序設置一個timer定時器,定期對各代理服務器進行輪詢,根據輪詢結果決定是否重寫PAC腳本,并顯示輪詢結果,方便巡檢查看。輪詢采用TcpClinet.Connect方法來測試代理服務器是否正常工作,如圖1所示。
2.2 ?配置模塊
可對代理服務器地址、端口、輪詢間隔、PAC文件存放路徑與文件名等參數進行配置。配置文件采用XML格式保存,如圖2所示。
3 ?技術實現
3.1 ?連接測試
如直接使用TcpClient.Connect連接測試端口,當服務器不連通或端口未打開時,需要很長時間才能返回結果,捕獲So-
cketException異常。這里希望可以設定一個較短的時間獲取結果,超時則判斷連接失敗。
這里使用了ConnectorState.Completed.WaitOne(int millise-
condsTimeout,bool exitContext)函數,在millisecondsTimeout內未響應,則返回錯誤,退出線程。
3.2 ?文件寫入
FileStream對象表示在磁盤或網絡路徑上指向文件的流。這個類提供了在文件中讀寫字節的方法,經常使用StreamRea-
der或StreamWriter執行這些功能。FileMode.Create表示當文件不存在時直接創建文件,而文件已存在時刪除該文件,然后創建新文件。
3.3 ?XML讀寫
可擴展標記語言,簡稱XML,輕量級的數據存儲文件,規范統一,易于閱讀、擴展,可被幾乎所有的語言所支持。
程序使用XmlDocument來讀取XML文件。XML文件可視為由聲明(Declare),元素(Element),屬性(Attribute),文本(Text)等構成的一個樹。第一個結點為根結點,每個結點均可以有自己的子結點。可以通過一系列屬性或方法得到這個結點的值或其它一些屬性。
3.4 ?功能控制
當監控未開始時,可以重新加載代理服務器,但不能手動輪詢。當開始監控時,可以手動輪詢,但不可以重新加載代理服務器。
4 ?后期功能擴展
后期可考慮對以下功能進行擴展,也可以根據實際需求,開發新的功能。
4.1 ?日志與備份
將輪詢結果、文件生成、更改配置等操作記錄在日志中備查,并在生成新的PAC文件與配置前,對原文件進行備份。
4.2 ?服 ?務
將程序安裝為服務,可在WEB服務器啟動時自動運行。設置為只運行一個實例,避免不同用戶登錄重復運行,造成資源浪費。
4.3 ?異常提醒
運維人員可以根據輪詢顯示結果及時發現故障。可考慮以發送短信等方式進行實時提醒,縮短故障發現周期,提高可靠性。
5 ?結 ?語
本文提供一種思路,使用自動代理腳本PAC實現代理服務器的負載均衡,再編寫一個程序,通過定時輪詢檢測代理服務器的狀態,根據狀態變化,動態生成PAC文件,實現代理服務器的冗余,低成本地解決代理服務器的負載均衡與冗余。
參考文獻:
[1] 董文江,胡軼,李健玲,等.PAC腳本在文獻代理數據庫中的應用[J].甘肅科技,2006,(9).