一種Linux系統(tǒng)上的多進程服務(wù)器程序的會話保持方法
【專利摘要】本發(fā)明公開了一種Linux系統(tǒng)上的多進程服務(wù)器程序的會話保持方法,該方法包括:調(diào)整Linux內(nèi)核的RESUEPORT哈希算法使同一客戶端的請求由同一個服務(wù)進程處理;使每個網(wǎng)絡(luò)服務(wù)器進程采用多進程方式運行,且每個網(wǎng)絡(luò)服務(wù)器進程分別創(chuàng)建監(jiān)聽socket;對每個網(wǎng)絡(luò)服務(wù)器進程設(shè)置監(jiān)聽socket的RESUEPORT選項;采用多進程方式啟動網(wǎng)絡(luò)服務(wù)器進程。本發(fā)明采用多進程方式運行該服務(wù)器程序,該程序能做到會話保持;單進程服務(wù)器程序或者不支持會話保持的多進程服務(wù)器程序都很方便的應(yīng)用本發(fā)明。
【專利說明】一種Linux系統(tǒng)上的多進程服務(wù)器程序的會話保持方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機網(wǎng)絡(luò)技術(shù),尤其涉及Linux系統(tǒng)上的多進程服務(wù)器程序的會話保持方法。
【背景技術(shù)】
[0002]會話保持,在一次會話中(如一次網(wǎng)上購物),客戶端需要多次訪問服務(wù)器,服務(wù)器識別這些網(wǎng)絡(luò)連接屬于同一個會話。從開發(fā)者的角度看,同一個會話的連接是交由同一個服務(wù)器進程處理的;通常同一個會話的客戶端IP相同,所以只要做到同一個客戶端IP的連接交由同一個服務(wù)器進程處理,就能做到會話保持。
[0003]多核處理器在一顆處理器上有多個處理器核,每個處理器核上都能運行程序。在多核處理器上提高程序性能的一種方法是并行化,即讓單進程程序能夠多進程或多線程運行。
[0004]端口重用機制。socket設(shè)置REUSEPORT (端口重用)選項,使得多個進程可同時綁定同一個IP和端口,客戶端請求根據(jù)(源IP,源端口,目的IP,目的端口等)哈希到達服務(wù)器進程,消除了 acc印t (接收)驚群問題,提高了系統(tǒng)效率。圖I所示REUSEPORT的實例圖,4個進程綁定相同的IP和端口對客戶端外提供服務(wù)。
[0005]典型的多進程網(wǎng)絡(luò)服務(wù)器模型如下所述:
[0006]模型一。進程P創(chuàng)建服務(wù)器socket,然后創(chuàng)建若干子進程CO,Cb-Cn,所有進程調(diào)用accept等待客戶端請求的到來??蛻舳苏埱蟮竭_哪個進程是不確定的,這些進程需要競爭,會發(fā)生驚群現(xiàn)象,影響系統(tǒng)性能。本模型如圖2所示。
[0007]模型二。進程PO,Pl…Pn分別創(chuàng)建服務(wù)器socket,設(shè)置socket的REUSEPORT選項,所有進程調(diào)用accept等待客戶端請求的到來??蛻舳苏埱髸鶕?jù)RESUEPORT機制中的算法交給一個進程,所以這些進程無需競爭請求。本模型如圖I所示。
[0008]上述兩種模型均不能保證會話保持,即同一個源IP的客戶的請求不能全部交由同一個進程處理,而是由各進程以不確定的方式得到。所以當(dāng)服務(wù)器程序需要會話保持功能的時候,只能用單進程模式運行,不能充分利用多核處理的處理能力;否則需要使用復(fù)雜的機制確保多進程服務(wù)器的會話保持功能。
[0009]還有一些網(wǎng)絡(luò)服務(wù)器程序(如hapiOxy)能夠在多進程模式下運行,但客戶端的請求交由哪個進程處理是不確定的,這就導(dǎo)致該網(wǎng)絡(luò)服務(wù)器程序在多進程模式下不能做到會話保持,以至于在需要啟用會話保持時,這些網(wǎng)絡(luò)服務(wù)器程序只能運行在單進程模式下,不同充分發(fā)揮多核處理器的優(yōu)勢,降低了系統(tǒng)的處理能力。
【發(fā)明內(nèi)容】
[0010]為解決上述技術(shù)問題,本發(fā)明的目的是提供一種Linux系統(tǒng)上的多進程服務(wù)器程序會話保持方法。
[0011]本發(fā)明的目的通過以下的技術(shù)方案來實現(xiàn):
[0012]一種Linux系統(tǒng)上的多進程服務(wù)器程序會話保持方法,該方法包括:
[0013]調(diào)整Linux內(nèi)核的RESUEPORT哈希算法使同一客戶端的請求由同一個服務(wù)進程處理;
[0014]使每個網(wǎng)絡(luò)服務(wù)器進程采用多進程方式運行,且每個網(wǎng)絡(luò)服務(wù)器進程分別創(chuàng)建監(jiān)聽 socket ;
[0015]對每個網(wǎng)絡(luò)服務(wù)器進程設(shè)置監(jiān)聽socket的RESUEPORT選項;
[0016]采用多進程方式啟動網(wǎng)絡(luò)服務(wù)器進程。
[0017]與現(xiàn)有技術(shù)相比,本發(fā)明的一個或多個實施例可以具有如下優(yōu)點:
[0018]單進程網(wǎng)絡(luò)服務(wù)器程序可以快速轉(zhuǎn)化為支持會話保持的多進程網(wǎng)絡(luò)服務(wù)器程序,從而在多核平臺上提高網(wǎng)絡(luò)服務(wù)器程序的處理能力;
[0019]不支持會話保持功能的多進程網(wǎng)絡(luò)服務(wù)器程序可以快速轉(zhuǎn)化為支持會話保持的多進程網(wǎng)絡(luò)服務(wù)器程序,從而在多核平臺上提高網(wǎng)絡(luò)服務(wù)器程序的處理能力;
[0020]網(wǎng)絡(luò)服務(wù)器程序支持多進程模式和會話保持功能,從而在多核平臺上提高網(wǎng)絡(luò)服務(wù)程序的處理能力。
【專利附圖】
【附圖說明】
[0021]圖1是現(xiàn)有技術(shù)提供的REUSEPORT實例、多進程網(wǎng)絡(luò)服務(wù)器模型二結(jié)構(gòu)示意圖;
[0022]圖2是現(xiàn)有技術(shù)提供的多進程網(wǎng)絡(luò)服務(wù)器模型一的結(jié)構(gòu)示意圖;
[0023]圖3是本發(fā)明提供的方法流程圖;
[0024]圖4是本發(fā)明建立連接時的結(jié)構(gòu)示意圖。
【具體實施方式】
[0025]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合實施例及附圖對本發(fā)明作進一步詳細的描述。
[0026]如圖3所示,為Linux系統(tǒng)上的多進程服務(wù)器程序會話保持方法,該方法包括:
[0027]步驟10調(diào)整Linux內(nèi)核的RESUEPORT哈希算法使同一客戶端的請求由同一個服務(wù)進程處理;
[0028]將原來哈希算法的哈希修改為哈希源IP、目的IP和目的端口,這樣就使得同一個源IP的請求會交由同一個進程處理。
[0029]步驟20使每個網(wǎng)絡(luò)服務(wù)器進程采用多進程方式運行,且每個網(wǎng)絡(luò)服務(wù)器進程分別創(chuàng)建監(jiān)聽socket ;
[0030]步驟30對每個網(wǎng)絡(luò)服務(wù)器進程設(shè)置監(jiān)聽socket的RESUEPORT選項;
[0031]網(wǎng)絡(luò)服務(wù)器的監(jiān)聽網(wǎng)絡(luò)請求的socket調(diào)用setsockoptO函數(shù),設(shè)置REUSEPORT選項,該socket就啟用了 REUSEPORT功能。
[0032]步驟40采用多進程方式啟動網(wǎng)絡(luò)服務(wù)器進程。
[0033]一個進程創(chuàng)建若干子進程,每個子進程分別創(chuàng)建監(jiān)聽服務(wù)的socket,并且按照上述步驟30設(shè)置該socket的REUSEPORT選項,然后按照常規(guī)步驟綁定監(jiān)聽的IP和端口,調(diào)用accept等待客戶端連接。
[0034]建立連接時的處理情況,如圖4所示,客戶端A的第一次請求根據(jù)哈希算法交由進程PO處理,客戶端B的第一次請求根據(jù)哈希算法交由進程P2處理,后續(xù)的請求根據(jù)哈希算法交由相同的進程處理,保證了會話保持。
[0035]雖然本發(fā)明所揭露的實施方式如上,但所述的內(nèi)容只是為了便于理解本發(fā)明而采用的實施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬【技術(shù)領(lǐng)域】內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實施的形式上及細節(jié)上作任何的修改與變化,但本發(fā)明的專利保護范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。
【權(quán)利要求】
1.一種Linux系統(tǒng)上的多進程服務(wù)器程序的會話保持方法,其特征在于,所述方法包括: 調(diào)整Linux內(nèi)核的RESUEPORT哈希算法使同一客戶端的請求由同一個服務(wù)進程處理;使每個網(wǎng)絡(luò)服務(wù)器進程采用多進程方式運行,且每個網(wǎng)絡(luò)服務(wù)器進程分別創(chuàng)建監(jiān)聽socket ; 對每個網(wǎng)絡(luò)服務(wù)器進程設(shè)置監(jiān)聽socket的RESUEPORT選項; 采用多進程方式啟動網(wǎng)絡(luò)服務(wù)器進程。
2.如權(quán)利要求1所述的Linux系統(tǒng)上的多進程服務(wù)器程序的會話保持方法,其特征在于,多進程網(wǎng)絡(luò)服務(wù)器程序可會話保持。
3.如權(quán)利要求1所述的Linux系統(tǒng)上的多進程服務(wù)器程序的會話保持方法,其特征在于,所述客戶端的請求按照源IP、目的IP、目的端口三元組哈希到一個服務(wù)器進程。
【文檔編號】G06F9/54GK104503853SQ201410825974
【公開日】2015年4月8日 申請日期:2014年12月25日 優(yōu)先權(quán)日:2014年12月25日
【發(fā)明者】高明, 張廣龍, 彭建章 申請人:般固(北京)科技股份有限公司