![一種雙進(jìn)程間的全雙工通信及互保方法和系統(tǒng)與流程](https://img.xjishu.com/img/zl/2017/10/2501753582843.gif)
本發(fā)明涉及大型網(wǎng)絡(luò)通信服務(wù)系統(tǒng),主要是涉及一種雙進(jìn)程間的全雙工通信及互保的方法及系統(tǒng)。
背景技術(shù):由于互聯(lián)網(wǎng)的普及,各種網(wǎng)絡(luò)通信服務(wù)應(yīng)用不僅進(jìn)入到各類(lèi)企業(yè),也進(jìn)入到普通家庭,在這種形勢(shì)下,在工作和生活中依靠網(wǎng)絡(luò)通信服務(wù)的用戶(hù)數(shù)量有了極大的增長(zhǎng)。當(dāng)人們對(duì)網(wǎng)絡(luò)通信服務(wù)的依賴(lài)性越來(lái)越強(qiáng),那么對(duì)網(wǎng)絡(luò)通信服務(wù)系統(tǒng)的穩(wěn)定性、響應(yīng)能力、承壓能力以及不間斷365*24(zero-downtime)的服務(wù)特性也有了越來(lái)越高的要求。在商業(yè)模式、工作方式不斷發(fā)展的今天,人們需求不斷發(fā)生變化,軟件中的業(yè)務(wù)功能不斷變更,這些情況反映到網(wǎng)絡(luò)通信服務(wù)中,要求不斷升級(jí)網(wǎng)絡(luò)通信服務(wù)系統(tǒng),以提高應(yīng)對(duì)市場(chǎng)快速變化的能力。這種軟件和硬件的更新,不可避免地臨時(shí)中斷網(wǎng)絡(luò)通信服務(wù)。除此之外,還有不可預(yù)測(cè)的因素,導(dǎo)致軟件和硬件發(fā)生故障,造成通信服務(wù)的中斷,這些情況都給用戶(hù)正常工作帶來(lái)了不便,甚至影響到用戶(hù)業(yè)務(wù)的正常進(jìn)行。為了解決以上問(wèn)題,當(dāng)前通常采用以下幾種方法:1.采用雙機(jī)備份策略。2.采用集群,數(shù)據(jù)與應(yīng)用相互獨(dú)立的方式。3.采用人工干預(yù)的,避免高峰發(fā)布的方式,在凌晨或者深夜,用戶(hù)在線(xiàn)率較低的情況下,發(fā)布新的網(wǎng)絡(luò)通信服務(wù)系統(tǒng)。以上幾種方法,需要部分人工干預(yù),且增加硬件資源,造成硬件成本、人力成本、運(yùn)營(yíng)和維護(hù)成本的上升。并且在某種程度上會(huì)引起用戶(hù)體驗(yàn)的下降,對(duì)用戶(hù)業(yè)務(wù)造成或多或少的影響,從而導(dǎo)致整個(gè)網(wǎng)絡(luò)通信服務(wù)系統(tǒng)的用戶(hù)認(rèn)可度下降,甚至是影響其市場(chǎng)占有率。專(zhuān)利“總線(xiàn)式進(jìn)程間通信方法”(專(zhuān)利號(hào):CN02145481.7,公開(kāi)號(hào):CN1501277A),從多進(jìn)程間通信角度上提出了一種基于共享內(nèi)存的總線(xiàn)式進(jìn)程通信方式和方法,克服了以磁盤(pán)文件為媒介的進(jìn)程間數(shù)據(jù)交換方式對(duì)整個(gè)應(yīng)用系統(tǒng)數(shù)據(jù)交換速率整體提高所產(chǎn)生的瓶頸效應(yīng),該專(zhuān)利從共享內(nèi)存上開(kāi)辟多個(gè)槽位的方式,以保障進(jìn)程通信相互訪(fǎng)問(wèn)、互斥訪(fǎng)問(wèn)順利進(jìn)行,以及保證數(shù)據(jù)交換的及時(shí)性。但是該方法過(guò)于復(fù)雜,需要在各自進(jìn)程中,維護(hù)共享內(nèi)存槽位中的大量信號(hào)燈集合,同時(shí)過(guò)多的信號(hào)燈、互斥變量的進(jìn)程訪(fǎng)問(wèn),必然導(dǎo)致了整體訪(fǎng)問(wèn)速度的下降;另外,大量集合的鎖也是進(jìn)程間互斥訪(fǎng)問(wèn)性能的瓶頸所在,對(duì)于數(shù)據(jù)交換速度和交換能力,即使在數(shù)據(jù)交換槽位有空閑的情況下仍然需要大量的互斥判斷,這導(dǎo)致數(shù)據(jù)交換速度和交換能力難以提升。專(zhuān)利“一種多進(jìn)程間的通信方法”(授權(quán)公告號(hào):CN102147751B),該方法包括:首先嘗試打開(kāi)共享內(nèi)存,不能打開(kāi)則進(jìn)程創(chuàng)建共享內(nèi)存,在共享內(nèi)存的靜態(tài)區(qū)寫(xiě)入共享內(nèi)存信息,根據(jù)臨時(shí)服務(wù)進(jìn)程權(quán)限互斥獲得臨時(shí)服務(wù)進(jìn)程權(quán)限,將自身的地址及互斥寫(xiě)入動(dòng)態(tài)區(qū),等待其他進(jìn)程加入該多進(jìn)程通信系統(tǒng),如果能打開(kāi)則訪(fǎng)問(wèn)共享內(nèi)存的靜態(tài)區(qū),獲得共享內(nèi)存信息,根據(jù)動(dòng)態(tài)區(qū)的讀寫(xiě)互斥獲得動(dòng)態(tài)區(qū)的訪(fǎng)問(wèn)權(quán)限,從動(dòng)態(tài)區(qū)獲取臨時(shí)服務(wù)進(jìn)程的地址以及臨時(shí)服務(wù)進(jìn)程的互斥,然后釋放動(dòng)態(tài)區(qū)的訪(fǎng)問(wèn)權(quán)限,根據(jù)臨時(shí)服務(wù)進(jìn)程的地址和互斥實(shí)現(xiàn)與服務(wù)進(jìn)程的通信,進(jìn)而加入該多進(jìn)程通信系統(tǒng)。該專(zhuān)利方法使整個(gè)通信系統(tǒng)避免依賴(lài)某個(gè)固定的進(jìn)程,多個(gè)進(jìn)程之間的通信更加穩(wěn)定。但是該專(zhuān)利只是單單的解決了多個(gè)進(jìn)程通信間的穩(wěn)定問(wèn)題,并未考慮到由于各種情況下,對(duì)掛起進(jìn)程,甚至已經(jīng)死掉的進(jìn)程未做進(jìn)一步處理,比如重新拉起進(jìn)程,或者清除通信內(nèi)存空間等,從而難以保證整個(gè)網(wǎng)絡(luò)通信服務(wù)系統(tǒng)運(yùn)行的可靠性。
技術(shù)實(shí)現(xiàn)要素:針對(duì)上述問(wèn)題,本發(fā)明通過(guò)分離網(wǎng)絡(luò)通信服務(wù)系統(tǒng)中前端用戶(hù)相關(guān)的進(jìn)程和后端業(yè)務(wù)邏輯進(jìn)程,實(shí)現(xiàn)前后端進(jìn)程間的高速通信,并引入共享內(nèi)存訪(fǎng)問(wèn)引用計(jì)數(shù),實(shí)現(xiàn)全自動(dòng)化的進(jìn)程間相互保護(hù),以及自動(dòng)無(wú)錯(cuò)重啟。同時(shí)實(shí)現(xiàn)一種zero-downtime服務(wù)器機(jī)制,以便快速響應(yīng)服務(wù)器邏輯業(yè)務(wù)的快速發(fā)布,保障業(yè)務(wù)發(fā)布中不影響產(chǎn)品真正用戶(hù)使用,保障在新業(yè)務(wù)發(fā)布過(guò)程中,不出現(xiàn)網(wǎng)絡(luò)信息丟失。本發(fā)明公開(kāi)了一種雙進(jìn)程間的全雙工通信及互保方法及系統(tǒng),技術(shù)方案如下:一種雙進(jìn)程間的全雙工通信方法,包括:將網(wǎng)絡(luò)通信服務(wù)系統(tǒng)中前端進(jìn)程和后端進(jìn)程分離,使之在結(jié)構(gòu)上保持相互獨(dú)立。其中,所述前端進(jìn)程,指的是直接與用戶(hù)發(fā)生關(guān)系的應(yīng)用進(jìn)程,如負(fù)責(zé)用戶(hù)接入,接收用戶(hù)信息,以及通過(guò)網(wǎng)絡(luò)發(fā)送信息給用戶(hù)等;所述后端進(jìn)程,主要用于負(fù)責(zé)用戶(hù)信息處理,是復(fù)雜邏輯處理的進(jìn)程,如訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)、用戶(hù)信息轉(zhuǎn)發(fā)邏輯處理、以及服務(wù)器各種業(yè)務(wù)運(yùn)算等,是需要快速支持業(yè)務(wù)變更的應(yīng)用進(jìn)程。當(dāng)前端進(jìn)程和后端進(jìn)程啟動(dòng)后,它們通過(guò)對(duì)應(yīng)的組件訪(fǎng)問(wèn)共享內(nèi)存,進(jìn)行共享文件的初始化工作,完成數(shù)據(jù)通信通道的建立,為全雙工通信做好準(zhǔn)備。先啟動(dòng)的某端進(jìn)程按照事先配置的共享內(nèi)存文件名稱(chēng)在系統(tǒng)內(nèi)核創(chuàng)建共享內(nèi)存文件,后啟動(dòng)的對(duì)端進(jìn)程只需要打開(kāi)這些共享內(nèi)存文件進(jìn)行應(yīng)用,從而成功建立通信通道,前端進(jìn)程和后端進(jìn)程在通信過(guò)程中使用相同的共享內(nèi)存文件。其中所述某端進(jìn)程指的是前端進(jìn)程或者后端進(jìn)程,所述對(duì)端進(jìn)程指的是針對(duì)某端進(jìn)程而言的另一端進(jìn)程,如果某端進(jìn)程指的是前端進(jìn)程,那么對(duì)端進(jìn)程指的是后端進(jìn)程。其詳細(xì)步驟如下:1、當(dāng)某端進(jìn)程先啟動(dòng)時(shí),訪(fǎng)問(wèn)與其對(duì)應(yīng)的組件,同時(shí)把事先配置好的共享內(nèi)存文件名稱(chēng)傳遞給相應(yīng)的組件。2、對(duì)應(yīng)組件根據(jù)收到的共享內(nèi)存文件名稱(chēng),嘗試在內(nèi)核中打開(kāi)相應(yīng)的共享內(nèi)存文件,由于此進(jìn)程是先啟動(dòng)的,相應(yīng)的共享內(nèi)存文件還沒(méi)有創(chuàng)建,因此該組件不能打開(kāi)相應(yīng)的共享內(nèi)存文件。3、該組件在內(nèi)核中按照接收到的內(nèi)存共享文件名稱(chēng)來(lái)創(chuàng)建共享內(nèi)存文件。創(chuàng)建的共享內(nèi)存文件有4個(gè):前端至后端的參數(shù)文件,用于記錄前端進(jìn)程到后端進(jìn)程的參數(shù)信息,主要包括讀寫(xiě)鎖、讀寫(xiě)位置、引用計(jì)數(shù)、可讀信息量、開(kāi)辟的共享內(nèi)存空間大小。后端至前端的參數(shù)文件,用于記錄后端進(jìn)程到前端進(jìn)程的參數(shù)信息,主要包括讀寫(xiě)鎖、讀寫(xiě)位置、引用計(jì)數(shù)、可讀信息量、開(kāi)辟的共享內(nèi)存空間大小。前端至后端的數(shù)據(jù)文件,用于保存前端進(jìn)程到后端進(jìn)程進(jìn)行交換的數(shù)據(jù),按照格式“消息頭+消息實(shí)體”進(jìn)行存放。后端至前端的數(shù)據(jù)文件,用于保存后端進(jìn)程到前端進(jìn)程進(jìn)行交換的數(shù)據(jù),按照格式“消息頭+消息實(shí)體”進(jìn)行存放。4、成功創(chuàng)建后,把共享內(nèi)存文件注入到該組件的空間中,同時(shí)把對(duì)應(yīng)參數(shù)文件中的參數(shù)“引用計(jì)數(shù)”置為1。其中,參數(shù)“引用計(jì)數(shù)”為1時(shí),表示對(duì)應(yīng)進(jìn)程處于正常工作狀態(tài);參數(shù)“引用計(jì)數(shù)”為0時(shí),表示對(duì)應(yīng)進(jìn)程處于死亡狀態(tài)。5、對(duì)端進(jìn)程啟動(dòng),訪(fǎng)問(wèn)與該端進(jìn)程對(duì)應(yīng)的組件,同時(shí)把事先配置好的共享內(nèi)存文件名稱(chēng)傳遞給此組件。6、此組件根據(jù)收到的共享內(nèi)存文件名稱(chēng),嘗試在內(nèi)核中打開(kāi)相應(yīng)的共享內(nèi)存文件,因?yàn)樯鲜鲋邢葐?dòng)的某端進(jìn)程已經(jīng)創(chuàng)建好共享內(nèi)存文件,因此對(duì)端進(jìn)程將成功打開(kāi)具有相同名稱(chēng)的共享內(nèi)存文件。7、把共享內(nèi)存文件注入到對(duì)端進(jìn)程對(duì)應(yīng)組件的空間中,同時(shí)把相應(yīng)參數(shù)文件中的參數(shù)“引用計(jì)數(shù)”置為1。完成上述工作后,數(shù)據(jù)通信通道已經(jīng)成功建立,前端進(jìn)程和后端進(jìn)程采用全雙工方式進(jìn)行無(wú)干擾通信。當(dāng)前端進(jìn)程接收到用戶(hù)具體消息時(shí),需要交給后端進(jìn)程來(lái)進(jìn)行處理,則前端進(jìn)程通過(guò)對(duì)應(yīng)的組件來(lái)給后端進(jìn)程發(fā)送信息。在前端進(jìn)程對(duì)應(yīng)的組件發(fā)送信息時(shí),執(zhí)行調(diào)用put,put動(dòng)作可將前端進(jìn)程接收到的數(shù)據(jù)拷貝到前端至后端的數(shù)據(jù)文件中,并通知后端進(jìn)程對(duì)應(yīng)的組件,由后端進(jìn)程對(duì)應(yīng)的組件來(lái)讀取前端至后端的數(shù)據(jù)文件,使用get來(lái)獲取其中的數(shù)據(jù),并把數(shù)據(jù)返回給后端進(jìn)程去完成業(yè)務(wù)邏輯動(dòng)作。與此同時(shí),后端進(jìn)程對(duì)應(yīng)的組件可以無(wú)干擾地發(fā)送信息給前端進(jìn)程對(duì)應(yīng)的組件。后端進(jìn)程對(duì)應(yīng)的組件執(zhí)行調(diào)用put,將后端進(jìn)程處理后的數(shù)據(jù)拷貝到后端至前端的數(shù)據(jù)文件中,并通知前端進(jìn)程對(duì)應(yīng)的組件,由前端進(jìn)程對(duì)應(yīng)的組件來(lái)讀取后端至前端的數(shù)據(jù)文件,使用get來(lái)獲取其中的數(shù)據(jù),并返回給前端進(jìn)程去完成相應(yīng)的動(dòng)作。一種雙進(jìn)程間互保的方法,包括:根據(jù)共享內(nèi)存文件存在的相互獨(dú)立性,把參數(shù)“引用計(jì)數(shù)”引入到前端至后端的參數(shù)文件和后端至前端的參數(shù)文件中。其中,參數(shù)“引用計(jì)數(shù)”為1時(shí),表示對(duì)應(yīng)進(jìn)程處于正常工作狀態(tài);參數(shù)“引用計(jì)數(shù)”為0時(shí),表示對(duì)應(yīng)進(jìn)程處于死亡狀態(tài)。當(dāng)某端進(jìn)程處于死亡狀態(tài),那么該端進(jìn)程對(duì)應(yīng)的共享內(nèi)存參數(shù)文件中的參數(shù)“引用計(jì)數(shù)”自動(dòng)被置為0,而其對(duì)端進(jìn)程對(duì)應(yīng)的共享內(nèi)存參數(shù)文件中的參數(shù)“引用計(jì)數(shù)”不受影響,在正常工作狀態(tài)仍為1,對(duì)端進(jìn)程一直讀取該端進(jìn)程對(duì)應(yīng)的共享內(nèi)存參數(shù)文件中的參數(shù)“引用計(jì)數(shù)”,使得其對(duì)端進(jìn)程在自己生命周期內(nèi)能夠主動(dòng)地、及時(shí)知道該端進(jìn)程是否存活。如果發(fā)現(xiàn)該端進(jìn)程處于死亡狀態(tài),則發(fā)出告警,系統(tǒng)得到告警后,將進(jìn)行相應(yīng)的處理,重新啟動(dòng)該端進(jìn)程,保證了系統(tǒng)的正常運(yùn)行。其詳細(xì)步驟如下:1、某端進(jìn)程由于某種原因不能正常工作,處于死亡狀態(tài)。2、其對(duì)應(yīng)的組件獲得其死亡狀態(tài)的信號(hào),把該端進(jìn)程對(duì)應(yīng)的共享內(nèi)存參數(shù)文件中的參數(shù)“引用計(jì)數(shù)”由1改為0。3、其對(duì)端進(jìn)程的對(duì)應(yīng)組件從該端進(jìn)程的對(duì)應(yīng)的共享內(nèi)存參數(shù)文件中發(fā)現(xiàn)其中的“引用計(jì)數(shù)”為0。4、對(duì)端進(jìn)程的對(duì)應(yīng)組件把發(fā)現(xiàn)的參數(shù)“引用計(jì)數(shù)”為0的狀態(tài)信息傳送給后端進(jìn)程。5、后端進(jìn)程發(fā)出告警。6、系統(tǒng)得到告警后,將進(jìn)行相應(yīng)的處理,重新啟動(dòng)該端進(jìn)程,保證了系統(tǒng)的正常運(yùn)行。同時(shí),進(jìn)程處于死亡狀態(tài)時(shí),為了避免通信過(guò)程中信息丟失,結(jié)合內(nèi)存資源相對(duì)富余的情況,主動(dòng)進(jìn)行對(duì)應(yīng)的共享內(nèi)存數(shù)據(jù)文件的容量擴(kuò)充,在短時(shí)間內(nèi)增大通信數(shù)據(jù)的緩沖空間。詳細(xì)步驟如下:1、由于某端進(jìn)程發(fā)生死亡的情況,其對(duì)應(yīng)的共享內(nèi)存參數(shù)文件中的參數(shù)“引用計(jì)數(shù)”為置0。2、對(duì)端進(jìn)程通過(guò)get操作知道某端進(jìn)程已經(jīng)死亡。3、對(duì)端進(jìn)程執(zhí)行put操作,檢查共享內(nèi)存參數(shù)文件中的參數(shù)“交換通道剩余容量”的值。4、計(jì)算發(fā)現(xiàn)交換通道剩余容量不足,將向系統(tǒng)內(nèi)核處理器申請(qǐng)更大的對(duì)應(yīng)共享內(nèi)存數(shù)據(jù)文件。5、申請(qǐng)成功后,拷貝舊的對(duì)應(yīng)共享內(nèi)存數(shù)據(jù)文件中的數(shù)據(jù)到新的對(duì)應(yīng)共享內(nèi)存數(shù)據(jù)文件中。共享內(nèi)存數(shù)據(jù)文件自動(dòng)擴(kuò)充過(guò)程并非單向,是可逆的。在正常情況下,數(shù)據(jù)文件擴(kuò)充后,將增加緩沖數(shù)據(jù)的容量,避免數(shù)據(jù)的丟失,當(dāng)故障進(jìn)程修復(fù)后重新啟動(dòng),對(duì)應(yīng)組件會(huì)主動(dòng)偵測(cè)當(dāng)前對(duì)共享內(nèi)存數(shù)據(jù)文件容量使用情況,并在其容量使用較少時(shí),重新將已擴(kuò)充的共享內(nèi)存數(shù)據(jù)文件容量回調(diào)到初始化狀態(tài),使得內(nèi)存資源重新交給操作系統(tǒng)調(diào)度使用。一種雙進(jìn)程間的全雙工通信系統(tǒng),本系統(tǒng)包括前端進(jìn)程管理器、后端進(jìn)程管理器、前端組件單元、后端組件單元、系統(tǒng)內(nèi)核處理器、配置管理器、進(jìn)程故障處理器。前端進(jìn)程管理器、前端組件單元、系統(tǒng)內(nèi)核處理器、后端組件單元、后端進(jìn)程管理器順次連接,配置管理器與前端進(jìn)程管理器、后端進(jìn)程管理器連接,進(jìn)程故障處理器與前端進(jìn)程管理器、后端進(jìn)程管理器連接。前端進(jìn)程管理器,用于管理直接與用戶(hù)發(fā)生關(guān)系的應(yīng)用進(jìn)程,如負(fù)責(zé)用戶(hù)接入,接收用戶(hù)信息,和最終通過(guò)網(wǎng)絡(luò)發(fā)送信息給用戶(hù)等。前端組件單元,用于將前端進(jìn)程管理器發(fā)出的有關(guān)信息與系統(tǒng)內(nèi)核處理器的有關(guān)信息進(jìn)行數(shù)據(jù)傳遞和交互。系統(tǒng)內(nèi)核處理器,用于運(yùn)行進(jìn)程,并提供進(jìn)程間的通信手段。后端進(jìn)程管理器,用于管理負(fù)責(zé)信息處理、復(fù)雜邏輯處理的進(jìn)程,如訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)、用戶(hù)信息轉(zhuǎn)發(fā)邏輯處理、以及服務(wù)器各種業(yè)務(wù)運(yùn)算等。后端組件單元,用于將后端進(jìn)程管理器的有關(guān)信息與系統(tǒng)內(nèi)核處理器的有關(guān)信息進(jìn)行傳遞、交互。配置管理器,用于保存配置文件,在這個(gè)配置文件中包含有事先根據(jù)需要設(shè)置的共享內(nèi)存文件的名稱(chēng)。當(dāng)進(jìn)程啟動(dòng)后,前端進(jìn)程管理器或后端進(jìn)程管理器從配置管理器讀取配置文件,從而獲取共享內(nèi)存文件名稱(chēng),通過(guò)各自的組件,按照這個(gè)共享內(nèi)存文件名稱(chēng),創(chuàng)建或打開(kāi)相應(yīng)的共享內(nèi)存文件。進(jìn)程故障處理器,用于接收前端進(jìn)程管理器和后端進(jìn)程管理器的告警信號(hào),然后對(duì)死亡的進(jìn)程進(jìn)行處理,并重新啟動(dòng)進(jìn)程。本發(fā)明與現(xiàn)有技術(shù)相比,其顯著優(yōu)點(diǎn):(1)本發(fā)明將網(wǎng)絡(luò)通信進(jìn)程分離成前端進(jìn)程和后端進(jìn)程,相互之間不產(chǎn)生干擾,使得后臺(tái)的通信服務(wù)器能夠快速響應(yīng)支持業(yè)務(wù)變更,支持熱發(fā)布,實(shí)現(xiàn)平滑升級(jí),實(shí)現(xiàn)zero-downtime。(2)本發(fā)明中通過(guò)全雙工通信方式,建立網(wǎng)絡(luò)通信雙通道進(jìn)行數(shù)據(jù)交換,減少了多進(jìn)程對(duì)同一通道的頻繁訪(fǎng)問(wèn)導(dǎo)致頻繁加鎖的操作,減少鎖競(jìng)爭(zhēng),提高了數(shù)據(jù)交換的速度,同時(shí)也相對(duì)降低了數(shù)據(jù)交換的不安全性。(3)本發(fā)明采用先啟動(dòng)進(jìn)程先創(chuàng)建共享內(nèi)存文件,后啟動(dòng)進(jìn)程直接引用共享內(nèi)存文件的方式,弱化了單一進(jìn)程對(duì)共享內(nèi)存文件的控制。對(duì)于共享內(nèi)存文件來(lái)說(shuō),前端進(jìn)程和后端進(jìn)程處于平等地位,任一進(jìn)程存活的情況下,就可以輕松維護(hù)對(duì)應(yīng)的共享內(nèi)存區(qū)域,使得信息得以持續(xù)保存在共享內(nèi)存文件中。同時(shí)增加了引用計(jì)數(shù),實(shí)現(xiàn)了雙進(jìn)程之間相互保護(hù),增強(qiáng)了整個(gè)網(wǎng)絡(luò)通信系統(tǒng)的穩(wěn)定性。(4)本發(fā)明可以在某端進(jìn)程處于死亡狀態(tài)時(shí),能夠快速被檢測(cè)到,并通過(guò)快速擴(kuò)充通信通道的容量,實(shí)現(xiàn)對(duì)數(shù)據(jù)的高速緩存,最大程度上減少數(shù)據(jù)的丟失。(5)本發(fā)明通過(guò)共享內(nèi)存的方式,來(lái)實(shí)現(xiàn)前后端進(jìn)程分開(kāi)后的數(shù)據(jù)交換,不僅提高進(jìn)程之間數(shù)據(jù)交換速率和安全性,而且屏蔽了前后端功能分離帶來(lái)的網(wǎng)絡(luò)不穩(wěn)定性因素,節(jié)省了硬件資源。附圖說(shuō)明圖1本發(fā)明實(shí)施例的系統(tǒng)結(jié)構(gòu)圖。圖2本發(fā)明實(shí)施例的通信方法建立流程圖。圖3本發(fā)明實(shí)施例的信息交換通道建立流程圖。圖4本發(fā)明實(shí)施例的前后端進(jìn)程數(shù)據(jù)交換流程圖。圖5本發(fā)明實(shí)施例的對(duì)端進(jìn)程互保流程圖。圖6本發(fā)明實(shí)施例的共享內(nèi)存數(shù)據(jù)文件自動(dòng)擴(kuò)充流程圖。具體實(shí)施方式為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述。參閱圖1所示,本發(fā)明實(shí)施例的系統(tǒng)結(jié)構(gòu)圖,本系統(tǒng)包括前端進(jìn)程管理器101、前端組件單元102、系統(tǒng)內(nèi)核處理器103、后端組件單元104、后端進(jìn)程管理器105、配置管理器106、進(jìn)程故障處理器107。前端進(jìn)程管理器101、前端組件單元102、系統(tǒng)內(nèi)核處理器103、后端組件單元104、后端進(jìn)程管理器105順次連接,配置管理器106與前端進(jìn)程管理器101、后端進(jìn)程管理器105連接,進(jìn)程故障處理器107與前端進(jìn)程管理器101、后端進(jìn)程管理器105連接。前端進(jìn)程管理器101,用于管理直接與用戶(hù)發(fā)生關(guān)系的應(yīng)用進(jìn)程,如負(fù)責(zé)用戶(hù)接入,接收用戶(hù)信息,和最終通過(guò)網(wǎng)絡(luò)發(fā)送信息給用戶(hù)等。前端組件單元102,用于將前端進(jìn)程管理器101發(fā)出的有關(guān)信息與系統(tǒng)內(nèi)核處理器103的有關(guān)信息進(jìn)行數(shù)據(jù)傳遞和交互。系統(tǒng)內(nèi)核處理器103,通常運(yùn)行進(jìn)程,并提供進(jìn)程間的通信。后端進(jìn)程管理器105,用于管理負(fù)責(zé)信息處理、復(fù)雜邏輯處理的進(jìn)程,如訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)、用戶(hù)信息轉(zhuǎn)發(fā)邏輯處理、以及服務(wù)器各種業(yè)務(wù)運(yùn)算等。后端組件單元104,用于將后端進(jìn)程管理器105的有關(guān)信息與系統(tǒng)內(nèi)核處理器103的有關(guān)信息進(jìn)行傳遞、交互。配置管理器106,用于保存配置文件,在這個(gè)配置文件中包含有事先根據(jù)需要設(shè)置的共享內(nèi)存文件的名稱(chēng)。當(dāng)進(jìn)程啟動(dòng)后,前端進(jìn)程管理器101或后端進(jìn)程管理器105從配置管理器106從配置管理器讀取配置文件,從而獲取共享內(nèi)存文件名稱(chēng),通過(guò)各自的組件,按照這個(gè)共享內(nèi)存文件名稱(chēng),在系統(tǒng)內(nèi)核處理器103創(chuàng)建或打開(kāi)相應(yīng)的共享內(nèi)存文件。進(jìn)程故障處理器107,用于接收前端進(jìn)程管理器101和后端進(jìn)程管理器105的告警信號(hào),然后對(duì)死亡的進(jìn)程進(jìn)行處理,并重新啟動(dòng)進(jìn)程。例如收到前端進(jìn)程管理器101發(fā)來(lái)的告警信號(hào),說(shuō)明后端進(jìn)程被終止,進(jìn)程故障處理器107給后端進(jìn)程管理器105發(fā)送命令,處理死亡進(jìn)程,并重新啟動(dòng)該進(jìn)程。參閱圖2所示,本發(fā)明實(shí)施例的通信方法建立流程圖,包括:步驟201:將網(wǎng)絡(luò)通信服務(wù)系統(tǒng)中的前端進(jìn)程和后端進(jìn)程分離,使之在結(jié)構(gòu)上保持相互獨(dú)立,任一端進(jìn)程發(fā)生死亡,不會(huì)影響到對(duì)端進(jìn)程的正常工作。步驟202:某端進(jìn)程首先啟動(dòng)后,按照事先配置的共享內(nèi)存文件名稱(chēng)創(chuàng)建共享內(nèi)存文件,后啟動(dòng)的對(duì)端進(jìn)程打開(kāi)這些共享內(nèi)存文件,并進(jìn)行參數(shù)的初始化。步驟203:前后端進(jìn)程采用全雙工方式進(jìn)行通信,互不干擾。參閱圖3所示,本發(fā)明實(shí)施例的信息交換通道建立流程圖,在此假設(shè)前端進(jìn)程首先啟動(dòng),后端進(jìn)程在其后啟動(dòng),包括:步驟301:前端進(jìn)程管理器讀取配置管理器中的參數(shù),并把參數(shù)傳遞給前端組件單元,參數(shù)為共享內(nèi)存文件的名稱(chēng)。步驟302:前端組件單元根據(jù)收到的參數(shù),在系統(tǒng)內(nèi)核處理器中嘗試引用共享文件。步驟303:由于前端進(jìn)程是先啟動(dòng)的,在系統(tǒng)內(nèi)核處理器中還不存在與之相關(guān)的共享內(nèi)存文件,因此引用共享內(nèi)存文件失敗。步驟304:在系統(tǒng)內(nèi)核處理器中,創(chuàng)建4個(gè)共享內(nèi)存文件:metaA2B、metaB2A、shareQA2B、shareQB2A。這4個(gè)文件的作用如下:在metaA2B或者是metaB2A中包括如下表所示參數(shù):參數(shù)項(xiàng)作用和含義szNameshareQ名稱(chēng)szVersion版本信息shareqleftsize交換通道剩余容量大小shareqMsgSize交換通道中已有消息個(gè)數(shù)headpos交換通道頭部位置tailpos交換通道尾部位置mutex_lock通道讀寫(xiě)鎖cond_sq通道信號(hào)量ref_pid引用計(jì)數(shù)shareq_st交換通道的狀態(tài),如是否允許讀寫(xiě)等步驟305:共享內(nèi)存文件創(chuàng)建成功,把成功信息傳遞給前端組件單元。步驟306:把metaA2B中的參數(shù)“引用計(jì)數(shù)”設(shè)置為1。步驟307:前端組件把成功信息返回給前端進(jìn)程管理器。步驟308:后端進(jìn)程啟動(dòng),后端進(jìn)程管理器讀取配置管理器中的參數(shù),并把參數(shù)傳遞給后端組件單元,參數(shù)為共享內(nèi)存文件的名稱(chēng)。步驟309:后端組件單元根據(jù)收到的參數(shù),在系統(tǒng)內(nèi)核處理器中嘗試引用共享文件。步驟310:由于共享內(nèi)存文件已經(jīng)建立,共享內(nèi)存文件引用成功,把成功信息傳遞給后端組件單元。步驟311:初始化metaB2A中的參數(shù)。步驟312:metaB2A中的引用計(jì)數(shù)設(shè)置為1。步驟313:后端組件把成功信息返回給后端進(jìn)程管理器。參閱圖4所示,本發(fā)明實(shí)施例的前后端進(jìn)程數(shù)據(jù)交換流程,首先列出前端進(jìn)程向后端進(jìn)程傳送數(shù)據(jù)的流程,包括:步驟401:前端進(jìn)程管理器執(zhí)行put操作,前端進(jìn)程把用戶(hù)相關(guān)數(shù)據(jù)傳遞給前端組件單元。步驟402:前端組件單元獲取shareQA2B的寫(xiě)鎖。步驟403:前端組件單元把收到的用戶(hù)相關(guān)數(shù)據(jù)寫(xiě)入到shareQA2B中。步驟404:metaA2B中的參數(shù)“通道信號(hào)量”增加,并且該文件中參數(shù)“可讀數(shù)據(jù)個(gè)數(shù)”增加1。步驟405:metaA2B維護(hù)shareQA2B的信息。步驟406:put信息成功。步驟407:后端進(jìn)程管理器執(zhí)行g(shù)et操作。步驟408:后端組件單元等待metaA2B中參數(shù)“通道信號(hào)量”的增加。步驟409:后端組件單元獲取metaA2B的讀鎖。步驟410:后端組件讀取shareQA2B中的數(shù)據(jù)。步驟411:metaA2B中參數(shù)“可讀數(shù)據(jù)個(gè)數(shù)”減去1。步驟412:metaA2B維護(hù)shareQA2B的信息。步驟413:后端進(jìn)程管理器成功讀取前端進(jìn)程傳遞的用戶(hù)相關(guān)數(shù)據(jù)。由于采用全雙工通信方式,在前端進(jìn)程向后端進(jìn)程傳送數(shù)據(jù)的過(guò)程中,后端進(jìn)程同時(shí)可以不受干擾的正常向前端進(jìn)程傳送數(shù)據(jù),其步驟包括:步驟414:后端進(jìn)程管理器執(zhí)行put操作,后端進(jìn)程把業(yè)務(wù)處理相關(guān)數(shù)據(jù)傳遞給后端組件單元。步驟415:后端組件單元獲取shareQB2A的寫(xiě)鎖。步驟416:后端組件單元把收到的數(shù)據(jù)寫(xiě)入到shareQB2A中。步驟417:metaB2A中的參數(shù)“通道信號(hào)量”增加,并且參數(shù)“可讀數(shù)據(jù)個(gè)數(shù)”增加1。步驟418:metaB2A維護(hù)shareQB2A的信息。步驟419:put信息成功。步驟420:前端進(jìn)程管理器執(zhí)行g(shù)et操作。步驟421:前端組件單元等待metaB2A中參數(shù)“通道信號(hào)量”的增加。步驟422:獲取metaB2A的讀鎖。步驟423:前端組件讀取shareQB2A中的數(shù)據(jù)。步驟424:metaB2A中參數(shù)“可讀數(shù)據(jù)個(gè)數(shù)”減去1。步驟425:metaB2A維護(hù)shareQB2A的信息。步驟426:前端進(jìn)程管理器成功讀取后端進(jìn)程傳遞的數(shù)據(jù)。參閱圖5所示,本發(fā)明實(shí)施例的對(duì)端進(jìn)程互保流程,在此例中假設(shè)前端進(jìn)程處于死亡狀態(tài),那么進(jìn)程互保流程包括:步驟501:前端進(jìn)程發(fā)生死亡。步驟502:metaA2B中參數(shù)“通道信號(hào)量”的增加,同時(shí)參數(shù)“可讀數(shù)據(jù)個(gè)數(shù)”增加1。步驟503:metaA2B中參數(shù)“引用計(jì)數(shù)”置為0。步驟504:后端進(jìn)程管理器執(zhí)行了get操作。步驟505:后端組件單元等待metaA2B的信號(hào)量。步驟506:后端組件單元發(fā)現(xiàn)metaA2B的參數(shù)“通道信號(hào)量”的增加時(shí),獲取metaA2B的讀鎖。步驟507:后端組件單元發(fā)現(xiàn)metaA2B中參數(shù)“引用計(jì)數(shù)”為0。步驟508:get返回引用計(jì)數(shù)為0的信息給后端進(jìn)程管理器。步驟509:后端進(jìn)程管理器向進(jìn)程故障處理器發(fā)出告警信息。步驟510:進(jìn)程故障處理器收到告警信息,將對(duì)前端進(jìn)程進(jìn)行處理,重新啟動(dòng)前端進(jìn)程。進(jìn)程互保過(guò)程是可逆的,例如后端進(jìn)程發(fā)生死亡情況,相同過(guò)程實(shí)現(xiàn)前端進(jìn)程管理器對(duì)故障進(jìn)程處理器告警,實(shí)現(xiàn)進(jìn)程故障處理器將對(duì)后端進(jìn)程進(jìn)行處理,重新啟動(dòng)后端進(jìn)程。參閱圖6所示,本發(fā)明實(shí)施例的共享內(nèi)存數(shù)據(jù)文件自動(dòng)擴(kuò)充流程,在此例中假設(shè)后端進(jìn)程處于死亡狀態(tài),那么擴(kuò)充流程包括:步驟601:前端進(jìn)程管理器執(zhí)行g(shù)et操作。步驟602:由于后端進(jìn)程處于死亡狀態(tài),get返回的metaB2A中參數(shù)“引用計(jì)數(shù)”為0,前端進(jìn)程管理器從而知道后端進(jìn)程已經(jīng)死亡。步驟603:前端進(jìn)程管理器執(zhí)行put操作。步驟604:前端組件檢查metaA2B中參數(shù)“交換通道剩余容量”的值。步驟605:如果發(fā)現(xiàn)容量不足,將向系統(tǒng)內(nèi)核處理器申請(qǐng)更大的shareQA2B。步驟606:申請(qǐng)成功后,shareQA2B的容量將增加100M。步驟607:拷貝舊的shareQA2B中的數(shù)據(jù)到新的shareQA2B中。步驟608:put操作成功。共享內(nèi)存數(shù)據(jù)文件自動(dòng)擴(kuò)充過(guò)程并非單向,是可逆的,例如前端進(jìn)程發(fā)生意外死亡、退出的情況,相同過(guò)程實(shí)現(xiàn)后端進(jìn)程的共享內(nèi)存數(shù)據(jù)文件shareqB2A的容量擴(kuò)充。在正常情況下,應(yīng)用進(jìn)程發(fā)生擴(kuò)充后,將增加緩沖數(shù)據(jù)的容量,避免數(shù)據(jù)的丟失,當(dāng)故障排除后,進(jìn)程重新正常啟動(dòng)后,組件會(huì)主動(dòng)偵測(cè)當(dāng)前對(duì)共享內(nèi)存數(shù)據(jù)文件shareqA2B容量使用情況,并重新將shareqA2B容量回調(diào)到初始化狀態(tài),使得進(jìn)而使得內(nèi)存資源重新交給操作系統(tǒng)調(diào)度使用。本領(lǐng)域的開(kāi)發(fā)人員可以對(duì)本發(fā)明的實(shí)施例進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明實(shí)施例中的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同的范圍之內(nèi),則本發(fā)明中的實(shí)施例也包含這些改動(dòng)和變型在內(nèi)。