主從架構(gòu)服務(wù)器及其處理業(yè)務(wù)的方法和處理業(yè)務(wù)的系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種主從架構(gòu)服務(wù)器及其處理業(yè)務(wù)的方法 和處理業(yè)務(wù)的系統(tǒng)。
【背景技術(shù)】
[000引目前,很多服務(wù)器都有多核中央處理單元仰U),并支持對(duì)稱多處理(Symmetric Multi-Processing,SMP)架構(gòu)。為充分利用CPU資源,很多高性能服務(wù)器均采用主從架構(gòu), 主從架構(gòu)的示意圖如圖1所示,先由父進(jìn)程解析并加載配置文件、創(chuàng)建套接字并綁定監(jiān)聽 端口,然后創(chuàng)建出多個(gè)子進(jìn)程,每個(gè)子進(jìn)程分別繼承父進(jìn)程的資源。子進(jìn)程的個(gè)數(shù)和CPU的 核數(shù)相同,為避免子進(jìn)程在CPU之間遷移,還可W將子進(jìn)程和特定的CPU綁定。
[0003] 在主從架構(gòu)下,主進(jìn)程又可W稱為監(jiān)控進(jìn)程,子進(jìn)程又可W稱為工作進(jìn)程。每個(gè)子 進(jìn)程的作用完全相同,當(dāng)客戶端發(fā)起業(yè)務(wù)請(qǐng)求時(shí),子進(jìn)程通過競爭的方式來獲取該業(yè)務(wù)請(qǐng) 求的處理權(quán)。
[0004] W上主從架構(gòu)存在W下幾個(gè)問題:
[0005] (1)多個(gè)工作進(jìn)程同時(shí)監(jiān)聽同一個(gè)端口,當(dāng)有請(qǐng)求發(fā)往某個(gè)端口時(shí),多個(gè)工作進(jìn)程 會(huì)去競爭該請(qǐng)求的處理權(quán),而最終只有一個(gè)進(jìn)程才能競爭成功,送就引起棍群現(xiàn)象;
[0006] (2)在真實(shí)的生產(chǎn)環(huán)境,尤其是在虛擬機(jī)環(huán)境下,有些進(jìn)程競爭請(qǐng)求成功的概率高 于其他進(jìn)程,造成部分進(jìn)程接入大量請(qǐng)求而過度繁忙,其他進(jìn)程得不到請(qǐng)求而過度空閑,進(jìn) 程之間的負(fù)載不平衡,不能充分發(fā)揮SMP架構(gòu)的優(yōu)勢(shì);
[0007] (3)當(dāng)工作進(jìn)程存在狀態(tài)時(shí),即一些請(qǐng)求只有被特定的工作進(jìn)程接收才能被正確 處理,在送種情況下,如果送些請(qǐng)求被其他進(jìn)程接收,接收請(qǐng)求的進(jìn)程只能向其他進(jìn)程尋求 幫助,送樣會(huì)增加通信成本。例如,每個(gè)工作進(jìn)程單獨(dú)維護(hù)自己的緩存,緩存中存放了用戶 的個(gè)人信息,如果A用戶的個(gè)人信息在B進(jìn)程的緩存中,當(dāng)A發(fā)起的請(qǐng)求被C進(jìn)程接收,由 于C進(jìn)程沒有A用戶的個(gè)人信息,所W無法直接給A用戶一個(gè)正確的應(yīng)答。此時(shí)只能通過 進(jìn)程通信的方式向B進(jìn)程索取,送個(gè)行為既增加了進(jìn)程B和C的執(zhí)行復(fù)雜度,也增加了對(duì)A 請(qǐng)求的響應(yīng)時(shí)間;
[0008] (4)工作進(jìn)程的配置統(tǒng)一從父進(jìn)程繼承下來,配置都是一樣的,無法微調(diào);
[0009] (5)為解決驚群現(xiàn)象、負(fù)載不平衡和不必要的進(jìn)程間通信等問題,不可避免地引入 進(jìn)程鎖,多個(gè)進(jìn)程通過進(jìn)程鎖解決進(jìn)程間的同步和互斥問題,但進(jìn)程鎖的引入同樣會(huì)增加 進(jìn)程的執(zhí)行復(fù)雜度、降低服務(wù)器的性能。
【發(fā)明內(nèi)容】
[0010] 本申請(qǐng)旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。為此,本申請(qǐng)的 一個(gè)目的在于提出一種具有避免引起棍群現(xiàn)象的主從架構(gòu)服務(wù)器及其處理業(yè)務(wù)的方法和 處理業(yè)務(wù)的系統(tǒng)。
[0011] 根據(jù)本申請(qǐng)實(shí)施例的主從架構(gòu)服務(wù)器處理業(yè)務(wù)的方法,包括:主從架構(gòu)服務(wù)器的 父進(jìn)程解析并加載配置文件,配置文件中包含多個(gè)端口及與每個(gè)端口一一對(duì)應(yīng)的進(jìn)程編 號(hào);父進(jìn)程為創(chuàng)建的子進(jìn)程分配不同的進(jìn)程編號(hào);子進(jìn)程根據(jù)自己的進(jìn)程編號(hào)從父進(jìn)程繼 承對(duì)應(yīng)的資源,資源包括端口;W及子進(jìn)程監(jiān)聽對(duì)應(yīng)的端口W接收來自客戶端的業(yè)務(wù)請(qǐng)求, 并對(duì)業(yè)務(wù)請(qǐng)求進(jìn)行處理,然后向客戶端返回業(yè)務(wù)應(yīng)答。
[0012] 根據(jù)本申請(qǐng)實(shí)施例的主從架構(gòu)服務(wù)器處理業(yè)務(wù)的方法,通過讓不同的子進(jìn)程分別 監(jiān)聽不同端口的讀寫事件,可W保證一個(gè)端口下的業(yè)務(wù)請(qǐng)求完全交由一個(gè)子進(jìn)程處理,子 進(jìn)程間完全獨(dú)立不再相互競爭業(yè)務(wù)請(qǐng)求,從而避免發(fā)生棍群現(xiàn)象。
[0013]根據(jù)本申請(qǐng)實(shí)施例的主從架構(gòu)服務(wù)器,包括;解析加載模塊,用于主從架構(gòu)服務(wù)器 的父進(jìn)程解析并加載配置文件,配置文件中包含多個(gè)端口及與每個(gè)端口一一對(duì)應(yīng)的進(jìn)程編 號(hào);分配模塊,用于父進(jìn)程為創(chuàng)建的子進(jìn)程分配不同的進(jìn)程編號(hào);繼承模塊,用于子進(jìn)程根 據(jù)自己的進(jìn)程編號(hào)從父進(jìn)程繼承對(duì)應(yīng)的資源,資源包括端口;W及處理模塊,用于子進(jìn)程監(jiān) 聽對(duì)應(yīng)的端口W接收來自客戶端的業(yè)務(wù)請(qǐng)求,并對(duì)業(yè)務(wù)請(qǐng)求進(jìn)行處理,然后向客戶端返回 業(yè)務(wù)應(yīng)答。
[0014]根據(jù)本申請(qǐng)實(shí)施例的主從架構(gòu)服務(wù)器,父進(jìn)程通過解析加載模塊41解析并加載 配置文件,通過分配模塊為創(chuàng)建的子進(jìn)程分配不同的進(jìn)程編號(hào),子進(jìn)程通過繼承模塊從父 進(jìn)程繼承對(duì)應(yīng)的資源,通過處理模塊監(jiān)聽對(duì)應(yīng)的端口W接收來自客戶端的業(yè)務(wù)請(qǐng)求,并對(duì) 上述業(yè)務(wù)請(qǐng)求進(jìn)行處理,然后向上述客戶端返回業(yè)務(wù)應(yīng)答,使得多個(gè)子進(jìn)程監(jiān)聽自己的端 口,避免了棍群現(xiàn)象的發(fā)生,提高了業(yè)務(wù)處理效率。
[0015]根據(jù)本申請(qǐng)實(shí)施例的處理業(yè)務(wù)的系統(tǒng),包括上述主從架構(gòu)服務(wù)器和客戶端,其中:客戶端,用于根據(jù)獲取到的地址信息,向?qū)?yīng)的主從架構(gòu)服務(wù)器發(fā)送業(yè)務(wù)請(qǐng)求。
[0016]根據(jù)本申請(qǐng)實(shí)施例的處理業(yè)務(wù)的系統(tǒng),通過讓不同的子進(jìn)程分別監(jiān)聽不同端口的 讀寫事件,可W保證一個(gè)端口下的業(yè)務(wù)請(qǐng)求完全交由一個(gè)子進(jìn)程處理,子進(jìn)程間完全獨(dú)立 不再相互競爭業(yè)務(wù)請(qǐng)求,從而避免發(fā)生棍群現(xiàn)象。
【附圖說明】
[0017] 圖1是傳統(tǒng)主從架構(gòu)服務(wù)器中父子進(jìn)程的關(guān)系示意圖。
[0018] 圖2是根據(jù)本申請(qǐng)一個(gè)實(shí)施例的主從架構(gòu)服務(wù)器處理業(yè)務(wù)的方法的流程圖。
[0019] 圖3是根據(jù)本申請(qǐng)一個(gè)實(shí)施例的實(shí)現(xiàn)進(jìn)程間負(fù)載均衡的信令流程圖。
[0020] 圖4是根據(jù)本申請(qǐng)一個(gè)實(shí)施例的主從架構(gòu)服務(wù)器的結(jié)構(gòu)示意圖。
[0021] 圖5是根據(jù)本申請(qǐng)一個(gè)實(shí)施例的處理業(yè)務(wù)的系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0022] 下面詳細(xì)描述本申請(qǐng)的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終 相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附 圖描述的實(shí)施例是示例性的,旨在用于解釋本申請(qǐng),而不能理解為對(duì)本申請(qǐng)的限制。
[0023] 下面參考附圖描述本申請(qǐng)實(shí)施例的主從架構(gòu)服務(wù)器處理業(yè)務(wù)的方法、主從架構(gòu)服 務(wù)器和處理業(yè)務(wù)的系統(tǒng)。
[0024] 圖2是根據(jù)本申請(qǐng)一個(gè)實(shí)施例的主從架構(gòu)服務(wù)器處理業(yè)務(wù)的方法的流程圖,其 中,主從架構(gòu)服務(wù)器包括一個(gè)父進(jìn)程和至少一個(gè)子進(jìn)程,父進(jìn)程監(jiān)控子進(jìn)程的運(yùn)行狀態(tài),子 進(jìn)程負(fù)責(zé)處理實(shí)際業(yè)務(wù),通過開啟多個(gè)子進(jìn)程可W實(shí)現(xiàn)對(duì)SMP架構(gòu)下多核CPU的充分利用。 [00巧]如圖2所示,該主從架構(gòu)服務(wù)器處理業(yè)務(wù)的方法包括:
[0026] S201,主從架構(gòu)服務(wù)器的父進(jìn)程解析并加載配置文件,配置文件中包含多個(gè)端口 及與每個(gè)端口一一對(duì)應(yīng)的進(jìn)程編號(hào)。
[0027] 在該實(shí)施例中,配置文件可W包括很多配置信息,例如可W包括一一對(duì)應(yīng)的端口 及進(jìn)程編號(hào),如表1所示。
[002引表1端口及進(jìn)程編號(hào)的對(duì)應(yīng)關(guān)系
[0029]
[0030]另外,由于各端口的請(qǐng)求流量不盡相同,或者各子進(jìn)程的狀態(tài)存在差異性,導(dǎo)致各 子進(jìn)程間的配置參數(shù)需要微調(diào),因此,配置文件中還可W包括其他配置參數(shù),且該配置參數(shù) 具有多個(gè)值,每個(gè)值與一個(gè)進(jìn)程編號(hào)對(duì)應(yīng),即每個(gè)子進(jìn)程使用和自己進(jìn)程編號(hào)匹配的配置 參數(shù)值。
[0031] 例如,同時(shí)開啟了80和8080端口W提供兩種不同的業(yè)務(wù),假定向80端口發(fā)起的 業(yè)務(wù)請(qǐng)求數(shù)會(huì)超過向8080端口發(fā)起的業(yè)務(wù)請(qǐng)求數(shù),可W將為80端口提供服務(wù)的子進(jìn)程的 緩存空間設(shè)置得更大。為了實(shí)現(xiàn)送個(gè)功能,也可W為"緩存空間"送個(gè)配置參數(shù)指定對(duì)應(yīng)的 進(jìn)程編號(hào),即子進(jìn)程只采用和自己的進(jìn)程編號(hào)匹配的配置參數(shù)值。
[0032] 由此可見,通過有針對(duì)性地設(shè)置配置參數(shù),可W實(shí)現(xiàn)對(duì)不同子進(jìn)程的適配。
[0033] S202,父進(jìn)程為創(chuàng)建的子進(jìn)程分配不同的進(jìn)程編號(hào)。
[0034] 在該實(shí)施例中,父進(jìn)程維護(hù)了一個(gè)數(shù)組和一個(gè)全局變量,數(shù)組的長度等于子進(jìn)程 的個(gè)數(shù),全局變量的初始值為1。父進(jìn)程每新建一個(gè)子進(jìn)程,就從數(shù)組中順次取出第一個(gè)