多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別是涉及一種多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法和系統(tǒng)。
【背景技術(shù)】
[0002]當(dāng)設(shè)備中有多個(gè)進(jìn)程/線程在等待同一資源時(shí),每當(dāng)資源可用,所有的進(jìn)程/線程都來競爭資源,但只有一個(gè)進(jìn)程才能獲得資源,對(duì)其余進(jìn)程而言,造成了性能的損耗,即為驚群問題。進(jìn)程越多,驚群的影響也就越大。在多進(jìn)程并發(fā)接收連接的服務(wù)器時(shí),需要盡可能消除驚群問題帶來的性能損耗,傳統(tǒng)的方式是例如Nginx等服務(wù)器通過鎖實(shí)現(xiàn)當(dāng)前只有一個(gè)進(jìn)程來接收連接的方法,如圖1所示,各個(gè)進(jìn)程共享了一個(gè)全局的互斥鎖,在服務(wù)器初始化完畢,進(jìn)程開始競爭該互斥鎖,而持有互斥鎖的進(jìn)程才可以監(jiān)聽新連接,內(nèi)核通過Epoll通知新連接的到來,在連接建立后該進(jìn)程釋放掉鎖,其它進(jìn)程在競爭互斥鎖時(shí)才能有機(jī)會(huì)持有互斥鎖。當(dāng)前進(jìn)程是否能繼續(xù)參與競爭鎖,必須判斷其連接數(shù)是否超過限額,若超過,則標(biāo)記無權(quán)繼續(xù)競爭鎖而不能接收新連接,其只能處理已連接的數(shù)據(jù)收發(fā)等業(yè)務(wù)邏輯,等連接檢查邏輯發(fā)現(xiàn)釋放連接到低于限額時(shí),重新參與競爭而獲得新連接,若未超過,則進(jìn)程在處理完本次業(yè)務(wù)邏輯后,繼續(xù)參與競爭接收新連接。
[0003]然而,采用傳統(tǒng)的方式,因多個(gè)進(jìn)程總是競爭鎖以獲得新連接,特別是在多核服務(wù)器下,進(jìn)程數(shù)配置較多,則競爭失敗的概率增大,導(dǎo)致存在較大的性能損耗,且進(jìn)程通過競爭鎖隨機(jī)獲得新連接,但在處理完各連接數(shù)據(jù)后,進(jìn)程可能釋放該連接也可能一直保持該連接,導(dǎo)致連接數(shù)會(huì)隨著持續(xù)運(yùn)行而不均,進(jìn)程連接不均則負(fù)載不均,CPU(CentralProcessing Unit,中央處理器)需要更頻繁的調(diào)度,會(huì)額外增加中斷和切換,導(dǎo)致性能的損耗。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對(duì)傳統(tǒng)的方式因采用鎖和連接數(shù)不均導(dǎo)致性能損耗的問題,提供一種多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法,能均勻配置連接數(shù),降低性能損耗。
[0005]此外,還有必要提供一種多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接系統(tǒng),能均勻配置連接數(shù),降低性能損耗。
[0006]—種多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法,包括以下步驟:
[0007]按照配置的組數(shù)及總進(jìn)程數(shù)對(duì)進(jìn)程進(jìn)行分組得到每組的進(jìn)程數(shù);
[0008]根據(jù)每組的進(jìn)程數(shù)獲取每組進(jìn)程中連接數(shù)最少的進(jìn)程;
[0009]將所述每組進(jìn)程中連接數(shù)最少的進(jìn)程標(biāo)記為可接收新連接的進(jìn)程;
[0010]獲取新連接;
[0011 ]將所述標(biāo)記為可接收新連接的進(jìn)程與所述新連接建立連接;
[0012]增加本進(jìn)程的連接數(shù),并將所述本進(jìn)程標(biāo)記為不可接收新連接。
[0013]—種多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接系統(tǒng),包括:
[0014]分組模塊,用于按照配置的組數(shù)及總進(jìn)程數(shù)對(duì)進(jìn)程進(jìn)行分組得到每組的進(jìn)程數(shù);
[0015]第一獲取模塊,用于根據(jù)每組的進(jìn)程數(shù)獲取每組進(jìn)程中連接數(shù)最少的進(jìn)程;
[0016]標(biāo)記模塊,用于將所述每組進(jìn)程中連接數(shù)最少的進(jìn)程標(biāo)記為可接收新連接的進(jìn)程;
[0017]第二獲取模塊,用于獲取新連接;
[0018]建立模塊,用于將所述標(biāo)記為可接收新連接的進(jìn)程與所述新連接建立連接;
[0019]計(jì)數(shù)模塊,用于增加本進(jìn)程的連接數(shù);
[0020]所述標(biāo)記模塊還用于將所述本進(jìn)程標(biāo)記為不可接收新連接。
[0021]上述多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法和系統(tǒng),將設(shè)備的進(jìn)程分成多個(gè)組,每次獲取每組進(jìn)程中連接數(shù)最少的進(jìn)程,并將該連接數(shù)最少的進(jìn)程標(biāo)記為可接收新連接的進(jìn)程,獲取到新連接后,將可接收新連接的進(jìn)程與新連接建立連接,并將該可接收新連接的進(jìn)程標(biāo)記為不可接收新連接的進(jìn)程,實(shí)現(xiàn)了各組內(nèi)進(jìn)程不存在驚群影響,且每次選擇連接數(shù)最少的進(jìn)程作為可接收新連接的進(jìn)程,能均勻配置各進(jìn)程的連接數(shù),降低性能損耗,不會(huì)因進(jìn)程連接不均引起負(fù)載不均而導(dǎo)致處理器頻繁的調(diào)度額外增加中斷和上下文的切換。
【附圖說明】
[0022]圖1為傳統(tǒng)的Nginx進(jìn)程的連接均衡示意圖;
[0023]圖2為一個(gè)實(shí)施例中多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法的應(yīng)用環(huán)境示意圖;
[0024]圖3為一個(gè)實(shí)施例中多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法的流程圖;
[°°25]圖4為傳統(tǒng)的Nginx對(duì)新連接的處理示意圖;
[0026]圖5為本發(fā)明的多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法對(duì)新連接的處理示意圖;
[0027]圖6為另一個(gè)實(shí)施例中多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法的流程圖;
[0028]圖7為一個(gè)實(shí)施例中多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接系統(tǒng)的結(jié)構(gòu)框圖;
[0029]圖8為另一個(gè)實(shí)施例中多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接系統(tǒng)的結(jié)構(gòu)框圖;
[0030]圖9為另一個(gè)實(shí)施例中多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接系統(tǒng)的結(jié)構(gòu)框圖;
[0031]圖10為另一個(gè)實(shí)施例中多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接系統(tǒng)的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0032]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0033]可以理解,本發(fā)明所使用的術(shù)語“第一”、“第二”等可在本文中用于描述各種元件,但這些元件不受這些術(shù)語限制。這些術(shù)語僅用于將第一個(gè)元件與另一個(gè)元件區(qū)分。舉例來說,在不脫離本發(fā)明的范圍的情況下,可以將第一客戶端稱為第二客戶端,且類似地,可將第二客戶端稱為第一客戶端。第一客戶端和第二客戶端兩者都是客戶端,但其不是同一客戶端。
[0034]圖2為一個(gè)實(shí)施例中多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法的應(yīng)用環(huán)境示意圖。如圖2所示,以設(shè)備為服務(wù)器為例,該應(yīng)用環(huán)境包括服務(wù)器210和至少一個(gè)客戶端220。服務(wù)器210與客戶端220通過網(wǎng)絡(luò)進(jìn)行連接。
[0035]客戶端220可為多個(gè),采用客戶端220a、客戶端220b、客戶端220c表示等??蛻舳?20可為手機(jī)、平板電腦、臺(tái)式計(jì)算機(jī)、個(gè)人數(shù)字助理、穿戴式設(shè)備等。
[0036]服務(wù)器210可包括硬件和運(yùn)行于硬件上的操作系統(tǒng)和應(yīng)用程序。硬件可包括網(wǎng)卡、處理器(一個(gè)或多個(gè))和存儲(chǔ)器等。處理器為多個(gè),采用處理器1、處理器2等表示。
[0037]操作系統(tǒng)可為Linux、1S、Windows等。本實(shí)施例中,操作系統(tǒng)采用的是Linux操作系統(tǒng)。
[0038]服務(wù)器210上運(yùn)行多個(gè)進(jìn)程如Pl、P2、……、Pn,采用主進(jìn)程配置綁定某一個(gè)系統(tǒng)端口,其余各進(jìn)程通過該端口,在新連接到來通知后,同多個(gè)客戶端220建立連接以處理多個(gè)業(yè)務(wù)請(qǐng)求。服務(wù)器210通過TCP(Transmiss1n Control Protocol,傳輸控制協(xié)議)協(xié)議等與客戶端220進(jìn)行通信。
[0039]服務(wù)器210按照配置的組數(shù)及總進(jìn)程數(shù)對(duì)進(jìn)程進(jìn)行分組得到每組的進(jìn)程數(shù),并對(duì)每組進(jìn)程中每個(gè)進(jìn)程分別進(jìn)行標(biāo)號(hào),獲取每組進(jìn)程中連接數(shù)小于連接數(shù)閾值、連接數(shù)最少且最早建立連接的進(jìn)程,將該進(jìn)程標(biāo)記為可接收新連接的進(jìn)程,如此每次都篩選出連接數(shù)最少的進(jìn)程,能夠均衡各進(jìn)程的連接數(shù),從而降低由于進(jìn)程負(fù)載不均導(dǎo)致的處理器頻繁調(diào)度下的中斷和上下文切換的性能損耗。且每個(gè)分組同時(shí)最多只有一個(gè)進(jìn)程可以接收連接,組內(nèi)不存在驚群問題。多個(gè)分組的每個(gè)分組都有一個(gè)進(jìn)程可以接收連接,即多個(gè)進(jìn)程并發(fā)接收連接,相比于單個(gè)進(jìn)程,提高了對(duì)新連接的響應(yīng)速度。
[0040]此外,在其他實(shí)施例中,設(shè)備可為有多個(gè)進(jìn)程,需要連接多個(gè)其他設(shè)備的設(shè)備。
[0041]圖3為一個(gè)實(shí)施例中多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法的流程圖。如圖3所示,一種多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法,包括以下步驟:
[0042]步驟302,按照配置的組數(shù)及總進(jìn)程數(shù)對(duì)進(jìn)程進(jìn)行分組得到每組的進(jìn)程數(shù)。
[0043]具體地,組數(shù)和總進(jìn)程數(shù)可根據(jù)設(shè)備的處理能力及業(yè)務(wù)邏輯繁忙、阻塞情況進(jìn)行確定。通常,組數(shù)應(yīng)該盡可能少,以最大程序降低驚群的影響。但在業(yè)務(wù)邏輯繁忙、阻塞處理多時(shí),根據(jù)情況提高分組的組數(shù),提高對(duì)連接的響應(yīng)速度。
[0044]總進(jìn)程數(shù)為N,組數(shù)為M,則每組的進(jìn)程數(shù)為K = N/M。
[0045]步驟304,根據(jù)每組的進(jìn)程數(shù)獲取每組進(jìn)程中連接數(shù)最少的進(jìn)程。
[0046]具體地,獲取每組進(jìn)程中各個(gè)進(jìn)程的連接數(shù),再比較各個(gè)進(jìn)程的連接數(shù),得到連接數(shù)最少的進(jìn)程。
[0047]步驟306,將該每組進(jìn)程中連接數(shù)最少的進(jìn)程標(biāo)記為可接收新連接的進(jìn)程。
[0048]具體地,將各組進(jìn)程中連接數(shù)最少的進(jìn)程標(biāo)記為可接收新連接的進(jìn)程,方便新連接到來時(shí),進(jìn)行接收新連接,避免組內(nèi)進(jìn)程競爭。標(biāo)記可采用任意方式,如采用“I”標(biāo)記為可接收新連接等,不限于此。
[0049]步驟308,獲取新連接。
[0050]步驟310,將該標(biāo)記為可接收新連接的進(jìn)程與該新連接建立連接,且增加本進(jìn)程的連接數(shù),并將該本進(jìn)程標(biāo)記為不可接收新連接,再執(zhí)行步驟304。
[0051]具體地,標(biāo)記為可接收新連接的進(jìn)程與該新連接建立連接后,本進(jìn)程的連接數(shù)增加I。將該本進(jìn)程標(biāo)記為不可接收新連接,開始在本進(jìn)程所在組內(nèi)再獲取連接數(shù)最少的進(jìn)程。
[0052]上述多進(jìn)程設(shè)備的網(wǎng)絡(luò)連接方法,將設(shè)備的進(jìn)程分成多個(gè)組,每次獲取每組進(jìn)