專利名稱:一種基于cookie的負(fù)載均衡會(huì)話保持算法的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種網(wǎng)絡(luò)通訊技術(shù),具體地說是一種基于cookie的負(fù)載均衡會(huì)話 保持算法。
背景技術(shù):
Internet用戶劇烈增長和Internet流量爆炸式地增長。Internet的飛速發(fā) 展給網(wǎng)絡(luò)帶寬和服務(wù)器帶來巨大的挑戰(zhàn)。從網(wǎng)絡(luò)技術(shù)的發(fā)展來看,網(wǎng)絡(luò)帶寬的增 長遠(yuǎn)高于處理器速度和內(nèi)存訪問速度的增長,針對(duì)高可伸縮、高可用網(wǎng)絡(luò)服務(wù)的 需求,目前已經(jīng)給出了基于IP層和基于內(nèi)容請(qǐng)求分發(fā)的負(fù)載平衡調(diào)度解決方法, 并在Linux內(nèi)核中實(shí)現(xiàn)了這些方法,將一組服務(wù)器構(gòu)成一個(gè)實(shí)現(xiàn)可伸縮的、高可 用網(wǎng)絡(luò)服務(wù)的虛擬服務(wù)器。 一組服務(wù)器通過高速的局域網(wǎng)或者地理分布的廣域網(wǎng) 相互連接,在它們的前端有一個(gè)負(fù)載調(diào)度器(LoAd BAlAncer)。負(fù)載調(diào)度器能無 縫地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到真實(shí)服務(wù)器十.,從而使得服務(wù)器集群的結(jié)構(gòu)對(duì)客戶是透明 的,客戶訪問集群系統(tǒng)提供的網(wǎng)絡(luò)服務(wù)就像訪問一臺(tái)高性能、高可用的服務(wù)器一 樣。
但目前普遍釆用的源地址會(huì)話保持算法易導(dǎo)致負(fù)載不均衡的情況而產(chǎn)生的,岡 為現(xiàn)在有很多用戶為內(nèi)網(wǎng)用戶,他們利用同一個(gè)外部IP進(jìn)行與外界的聯(lián)系,所以 對(duì)外網(wǎng)的服務(wù)來說,如果根據(jù)源地址算法,這些客戶就是同一個(gè)客戶,負(fù)載均衡 器就會(huì)把這些用戶的請(qǐng)求發(fā)送到同一臺(tái)服務(wù)器,勢必會(huì)造成單臺(tái)服務(wù)器壓力過大。
隨著互聯(lián)網(wǎng)的發(fā)展cookie已經(jīng)用于很多的web服務(wù),服務(wù)器可以利用Cookies 包含信息的任意性來篩選并經(jīng)常性維護(hù)這些信息,以判斷在HTTP傳輸中的狀態(tài)。 Cookies最典型的應(yīng)用是判定注冊(cè)用戶是否已經(jīng)登錄網(wǎng)站,用戶可能會(huì)得到提示, 是否在下一次進(jìn)入此網(wǎng)站時(shí)保留用戶信息以便簡化登錄手續(xù),這些都是Cookies 的功用。
本發(fā)明是兩者的結(jié)合體,并且對(duì)他們賦予了新的功能。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于cookie的負(fù)載均衡會(huì)話保持算法。 本發(fā)明的目的算法是按以下方式實(shí)現(xiàn)的,利用cookie來保持負(fù)載均衡服務(wù)的 連續(xù)性,其工作過程是負(fù)載均衡器檢査請(qǐng)求是否包含有一個(gè)特殊的負(fù)載均衡用 cookie。如果找不到此cookie,通過一個(gè)分布式算法(例如輪詢、最小連接等) 選擇一個(gè)服務(wù)器, 一個(gè)負(fù)載均衡會(huì)話cookie被加入到返回的響應(yīng)中。當(dāng)瀏覽器得到此會(huì)話cookie,該cookie就會(huì)臨時(shí)保存中內(nèi)存里,在瀏覽器關(guān)閉后此cookie 將不復(fù)存在。在會(huì)話中瀏覽器會(huì)把此cookie加入到接下來的所有請(qǐng)求中,然后請(qǐng) 求被發(fā)送給負(fù)載均衡器。通過將相關(guān)服務(wù)器作為cookie值,負(fù)載均衡器那個(gè)判斷 哪個(gè)服務(wù)器將負(fù)責(zé)處理(一個(gè)瀏覽器會(huì)話中的)請(qǐng)求。
為了保證cookie的安全性,可以利用MD5對(duì)其進(jìn)行加密,并在cookie值中加 入源地址信息,保證cookie在傳輸中的安全性需要。
本發(fā)明的有益效果是可以避免大量內(nèi)網(wǎng)用戶利用一個(gè)外部IP地址訪問 服務(wù),從而導(dǎo)致全部的內(nèi)網(wǎng)用戶集中訪問一臺(tái)服務(wù)器的情況的發(fā)生,并且在 cookie失效后,基于cookie的負(fù)載均衡會(huì)話保持算法會(huì)為客戶端分配新的 cookie,以保證應(yīng)用的連續(xù)性。
附圖1為基于cookie的負(fù)載均衡會(huì)話保持算法工作流程圖。 5、實(shí)施方式
參照說明書附圖對(duì)本發(fā)明的算法作以下詳細(xì)地說明。
本發(fā)明的基于cookie的負(fù)載均衡會(huì)話保持算法,是基于cookie的負(fù)載均衡會(huì)
話保持算法的jAvA程序。具體程序如下
clAss CookieBAsedLoAdBAlAncerHAndler implements IHttpRequestHAndler, ILifeCycle {
privAtefinAlList〈InetSocketAddress〉servers= new ArrAyList<InetSocketAddress〉0: privAte int serverldx = 0: privAte HttpClient httpClient;
/承
* this clAss does not implement server monitoring or heAlthiness checks +/
Public CookieBAsedLoAdBAlAncerHAndler(InetSocketAddress. .. reAlServers) { servers. AddAll (ArrAys.AsList(reAlServers));
public void onlnitO {
httpClient 二 new HttpClient(); httpClient. setAutoHAndleCookies(fAlse);
public void onDestroy() throws IOException { httpClient.close 0;
public void onRequest(finAl IHttpExchAnge exchAnge) throws IOException { IHttpRequest request = exchAnge.getRequest0 : IHttpResponseHAndler respHdl 二 null; InetSocketAddress serverAddr = null; // check if the request contAins the LB—SLOT cookiecl : for (String cookieHeAder : request. getHeAderList ("Cookie〃)) { for (String cookie : cookieHeAder. split C)) { String[] kvp = cookie, split (c"="; if (kvp[O]. stArtsWith (〃LB—SL0T〃)) { int slot = Integer.pArseInt (kvp[l]); serverAddr = servers.get (slot); breAk cl:
// request does not contAins the LB—SLOT —〉 select A server if (serverAddr == null) {
finAl int slot = nextServerSlot0;
serverAddr = servers.get (slot);
respHdl = new IHttpResponseHAndler() { Execution(Execution. NONTHREADED)
public void onResponse(IHttpResponse response) throws IOException // set the LB_SU3T cookie
response.setHeAder(〃Set-Cookie", 〃LB—SU3T=〃 + slot +
〃;PAth:/〃);
exchAnge. send (response); Execution(Execution. NONTHREADED)
public void onException (IOException ioe) throws IOException { exchAnge. sendError (ioe);
} else {
respHdl = new IHttpResponseHAndlerO { @Execution(Execution. NONTHREADED)
public void onResponse(IHttpResponse response) throws IOException
exchAnge. send (response); @Execution(Execution. NONTHREADED)
public void onException(IOException ioe) throws IOException { exchAnge. sendError (ioe);
// updAte the Request-URL of the request URL url = request, getRequestUrl ();
URL newUrl = new URL(url. getProtocol0,serverAddr. getHostNAme (), serverAddr. getPort (), url. getFile());request, setRequestUrl(newUrl);
// proxy heAder hAndling (remove hop-by-hop heAders, ) //….
// forwArd the request httpClient. send(request, respHdl);
// get the next slot by using the using round—robin ApproAch privAte synchronized int nextServerSlot0 { serverldx++;
if (serverldx 〉= servers, size()) { serverldx = 0;
return serverldx;
clAss LoAdBAlAncer {
public stAtic void mAin(String[] Args) throws Exception {
InetSocketAddress[] srvs 二 new InetSocketAddress[] { new InetSocketAddressrsrvl 8030), new InetSocketAddress("srv2", 8030)};
CookieBAsedLoAdBAlAncerHAndler hdl = new
CookieBAsedLoAdBAlAncerHAndler(srvs);
HttpServer loAdBAlAncer = new HttpServer(8080, hdl);
loAdBAlAncer. run();
權(quán)利要求
1、一種基于cookie的負(fù)載均衡會(huì)話保持算法,其特征在于利用cookie來保持負(fù)載均衡服務(wù)的連續(xù)性,負(fù)載均衡器檢查請(qǐng)求是否包含有一個(gè)特殊的負(fù)載均衡用cookie,找不到此cookie,通過一個(gè)分布式算法,選擇一個(gè)服務(wù)器,一個(gè)負(fù)載均衡會(huì)話cookie被加入到返回的響應(yīng)中,當(dāng)瀏覽器得到此會(huì)話cookie,該cookie就會(huì)臨時(shí)保存中內(nèi)存里,在會(huì)話中,瀏覽器會(huì)把此cookie加入到接下來的所有請(qǐng)求中,然后請(qǐng)求被發(fā)送給負(fù)載均衡器,通過將相關(guān)服務(wù)器作為cookie值,負(fù)載均衡器選擇的那個(gè)服務(wù)器將負(fù)責(zé)處理瀏覽器會(huì)話中的請(qǐng)求。
2、 根據(jù)權(quán)利要求1所述的算法,其特征在于分布式算法包括輪詢、最小連接。
3、 根據(jù)權(quán)利要求l所述的方法,其特征在于在瀏覽器關(guān)閉后,cookie自動(dòng)消失。
4、 根據(jù)權(quán)利要求1所述的算法,其特征在于方法僅適用于HTTP服務(wù)。
5、 根據(jù)權(quán)利要求1所述的算法,其特征在于客戶端瀏覽器啟用cookie服務(wù)后 使用負(fù)載均衡會(huì)話cookie,客戶端瀏覽器禁用cookie服務(wù),則算法自動(dòng)改為其他 算法。
6、 根據(jù)權(quán)利要求1所述的算法,其特征在于cookie利用MD5對(duì)其進(jìn)行加密, 并在cookie值中加入源地址信息,保證cookie在傳輸中的安全性需要。
全文摘要
本發(fā)明涉及一種基于cookie的負(fù)載均衡會(huì)話保持算法,該算法針對(duì)目前普遍采用的源地址會(huì)話保持算法易導(dǎo)致負(fù)載不均衡的情況而產(chǎn)生的,基于cookie的負(fù)載均衡算法會(huì)給每一個(gè)遠(yuǎn)程訪問的客戶端分配一個(gè)cookie值,并設(shè)置cookie的有效期,避免了大量內(nèi)網(wǎng)用戶利用一個(gè)外部IP地址訪問服務(wù)而導(dǎo)致全部的內(nèi)網(wǎng)用戶集中訪問一臺(tái)服務(wù)器的情況的發(fā)生,并且在cookie失效后,基于cookie的負(fù)載均衡會(huì)話保持算法會(huì)為客戶端分配新的cookie,以保證應(yīng)用的連續(xù)性。
文檔編號(hào)H04L29/08GK101534321SQ20091001467
公開日2009年9月16日 申請(qǐng)日期2009年3月9日 優(yōu)先權(quán)日2009年3月9日
發(fā)明者苑鴻劍 申請(qǐng)人:浪潮電子信息產(chǎn)業(yè)股份有限公司