專利名稱:數據獲取方法和裝置的制作方法
技術領域:
本發(fā)明涉及基于PHP的TOB服務應用領域,具體而言,涉及一種數據獲取方法和裝置。
背景技術:
在互聯(lián)網應用不斷增加的環(huán)境下,WEB 2.0、云計算、物聯(lián)網等新概念將不斷催生 出新的產業(yè)和服務。而支撐這些新型產業(yè)和服務的技術體系中,隨著3G和移動互聯(lián)網技術 的興起,越來越多的WEB應用程序也選擇了 PHP作為主流的技術方案。從TIOBE發(fā)布2010年 6月發(fā)布的編程語言排行榜中,WEB應用程序開發(fā)語言中,基于java的應用程序約占18%, 排在第一位,而基于PHP的應用程序約占9%,排在第二位。由此也可以看出PHP的強勢。 另一方面,與基于java的應用比較,PHP主要適用于中小型TOB應用服務,大企業(yè)級的中大 型WEB應用方面,明顯弱于java。主要原因是由基于PHP語言服務本身的屬性決定了它不 適合應用于大型電子商務站點,而更適合一些小型的商業(yè)站點。為了提高TOB應用程序的性能,采用數據緩存是目前非常重要的一個手段。目前 基于PHP的TOB應用程序的緩存方案有兩類一類是PHP代碼緩存優(yōu)化方案,一類是數據緩 存優(yōu)化方案。一、代碼緩存優(yōu)化方案介紹PHP代碼緩存優(yōu)化方案,是針對PHP是解釋執(zhí)行的語言,每次執(zhí)行時,都需要解析 編譯,對于頻繁使用的頁面,如果能夠緩存起PHP的操作碼,這樣PHP后面執(zhí)行就不用解析 編譯了,可以直接調用PHP操作碼即可,從而達到提高效率的目的。這在方案不影響程序 的執(zhí)行邏輯,而只是在執(zhí)行效率上進行優(yōu)化,目前基于該方案的有許多成熟的技術,如APC, xcache,eAccelerator 等。二、數據緩存優(yōu)化方案介紹數據緩存方案,是針對程序執(zhí)行過程中經常需要反復使用一些數據,這些數據要 么是需要從數據庫中獲取,要么需要經過某些復雜運算獲取,總是數據獲取的過程比較占 用服務器的資源,或者效率不高。為了節(jié)省上述數據獲取的開銷,需要對這些數據進行緩 存,下次使用時,就直接從緩存中取得,而不必再訪問數據庫或者再進行運算。數據緩存方案又分為兩類,一類是文件緩存,另一類是內存緩存。文件緩存是將數據緩存在文件系統(tǒng)中,即第一次獲取到數據后,將數據保存到文 件系統(tǒng),以后再需要使用這些數據時,則從文件中取出即可。目前大部分的基于PHP的TOB 應用程序都是采用文件的方式進行數據緩存,包括PHP的會話數據。內存緩存與文件緩存相比,主要區(qū)別是把數據緩存在內存中,而不是放到文件系 統(tǒng)中,相比文件緩存,存取速度較快,但不能持久保存,即如果服務重啟時,內存緩存需要重 新從生成才能使用,而文件緩存則不需要。目前使用的PHP共享內存技術就是屬于內存緩 存的解決方案。三、目前緩存方案不能解決的問題
基于PHP的大型電子商務站點,或者說大型的WEB應用的場景,通常處理的數據量 大,為了提高服務器的性能,都會進行服務器端的數據緩存,因此對于PHP代碼緩存優(yōu)化, 在一定的程序上可以提高服務器性能,但對于主要以數據緩存為需求的場景,代碼緩存是 解決不了這一問題。而目前基于數據緩存的方案,不管是數據緩存在文件系統(tǒng),還是緩存在 系統(tǒng)內存中,我們發(fā)現(xiàn),其本質都是要將數據序列化成字符串的方式保存下來,下次使用的 時候再將保存的字符串解析成原來的數據結構,以供應用程序使用。簡言之,目前的數據緩 存方案是不能直接緩存結構化的數據。PHP是Siare-Nothing Architecture,每次對HTTP請求的處理都是獨立的,不共 享任何數據,即如果我們需要在兩次請求共享數據,只有采取數據緩存的方式進行。對于大 型的WEB服務應用場景,通常緩存的數據量都是非常大的。而對于大數據量的數據緩存,我 們經過分析發(fā)現(xiàn),把字符串數據塊從內存讀取轉換成結構化的數據,還是從文件系統(tǒng)讀取 再轉換成結構化的數據,主要的時間開銷不是在數據讀取這一塊,90%的開銷是發(fā)生在數 據從字符串轉化成結構化的對象這段時間,也就是說緩存的數據重建結構化對象的花銷占 了主要的部分。而目前的數據緩存方案對這一情況還沒有可行的解決方案,這也是基于PHP 語言的WEB應用程序不能支持大規(guī)模企業(yè)應用的一個原因。因此,需要一種新的方案,來解決數據緩存占用的開銷過大的問題,以保證數據讀 取的效率。
發(fā)明內容
本發(fā)明所要解決的技術問題在于,提供需要一種新的方案,來解決數據緩存占用 的開銷過大的問題,以保證數據讀取的效率。有鑒于此,本發(fā)明提供一種數據獲取方法,包括步驟102,從前端進程取得會話 請求,并確認所述會話請求對應的數據,其中,所述數據預緩存在內存中;步驟104,判斷是 否存在空閑的服務進程;步驟106,如果不存在所述空閑的服務進程,則創(chuàng)建服務進程,用 以從所述內存中取得所述數據,并返回給所述前端進程以響應所述會話請求;步驟108,如 果存在所述空閑的服務進程,調用所述空閑的服務進程中的任一個服務進程,從所述內存 中取得所述數據,并返回給所述前端進程以響應所述會話請求。通過該技術方案,通過服務 進程保存數據,避免了大量的對字符串數據進行結構化處理的過程,減少了資源的消耗。在上述技術方案中,優(yōu)選地,在所述步驟108中,在無法調用所述空閑的服務進程 時,由所述前端進程從文件系統(tǒng)中取得所述數據,以響應所述會話請求。在上述技術方案中,優(yōu)選地,在所述步驟102中,還從所述前端進程取得新會話請 求,所述新會話請求對應的數據不在所述內存中;在所述步驟106中,還創(chuàng)建服務進程,用 以從文件系統(tǒng)取得所述新會話請求對應的數據,返回給所述前端進程,同時將所述新會話 請求對應的數據存儲到內存中;在所述步驟108中,還調用所述空閑的服務進程中的任一 個服務進程,用以從文件系統(tǒng)取得所述新會話請求對應的數據,返回給所述前端進程,同時 將所述新會話請求對應的數據存儲到內存中。在上述技術方案中,優(yōu)選地,在所述步驟102中,從所述前端進程先后取得多個會 話請求,且所述多個會話請求對應的數據、會話均相同時,在所述步驟106中,調用同一服 務進程取得所述數據,以響應所述多個會話請求。
在上述技術方案中,優(yōu)選地,在每個服務進程被調用預定次數后,消除所述每個服 務進程。本發(fā)明還提供一種數據獲取裝置,包括請求獲取模塊,從前端進程取得會話請 求,并確認所述會話請求對應的數據,其中,所述數據預緩存在內存中;判斷模塊,判斷是否 存在空閑的服務進程;進程調度模塊,如果不存在所述空閑的服務進程,則通過服務進程模 塊創(chuàng)建服務進程,用以從所述內存中取得所述數據,并返回給所述前端進程以響應所述會 話請求,以及如果存在所述空閑的服務進程,調用所述空閑的服務進程中的任一個服務進 程,從所述內存中取得所述數據,并返回給所述前端進程以響應所述會話請求;所述服務進 程模塊,提供服務進程。通過該技術方案,通過服務進程保存數據,避免了大量的對字符串 數據進行結構化處理的過程,減少了資源的消耗。在上述技術方案中,優(yōu)選地,還包括異常處理模塊,在無法調用所述空閑的服務 進程時,由所述前端進程從文件系統(tǒng)中取得所述數據,以響應所述會話請求。在上述技術方案中,優(yōu)選地,所述請求獲取模塊還從所述前端進程取得新會話請 求,所述新會話請求對應的數據不在所述內存中;所述進程調度模塊還在不存在所述空閑 的服務進程時,創(chuàng)建服務進程,用以從文件系統(tǒng)取得所述新會話請求對應的數據,返回給所 述前端進程,同時將所述新會話請求對應的數據存儲到內存中,以及還在存在所述空閑的 服務進程時,調用所述空閑的服務進程中的任一個服務進程,用以從文件系統(tǒng)取得所述新 會話請求對應的數據,返回給所述前端進程,同時將所述新會話請求對應的數據存儲到內 存中。在上述技術方案中,優(yōu)選地,在所述請求獲取模塊從所述前端進程先后取得多個 會話請求,且所述多個會話請求對應的數據、會話均相同時,所述進程調度模塊調用同一服 務進程取得所述數據,以響應所述多個會話請求。在上述技術方案中,優(yōu)選地,在每個服務進程被調用預定次數后,所述服務進程模 塊消除所述每個服務進程。根據本發(fā)明的技術方案,可以實現(xiàn)一種數據獲取方法和裝置,通過服務進程將結 構化的數據保存,以便讀取,避免了反復對緩存數據進行結構化處理的過程,減少了資源的浪費。
圖1是根據本發(fā)明的一個實施例的數據獲取方法的流程圖;圖2是根據本發(fā)明的一個實施例的數據獲取裝置的框圖;圖3是根據本發(fā)明的一個實施例的數據獲取方法的原理示意圖。
具體實施例方式為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點,下面結合附圖和具體實 施方式對本發(fā)明進行進一步的詳細描述。在下面的描述中闡述了很多具體細節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可 以采用其他不同于在此描述的其他方式來實施,因此,本發(fā)明并不限于下面公開的具體實 施例的限制。
圖1是根據本發(fā)明的一個實施例的數據獲取方法的流程圖。如圖1所示,本發(fā)明提供一種數據獲取方法,包括步驟102,從前端進程取得會話 請求,并確認所述會話請求對應的數據,其中,所述數據預緩存在內存中;步驟104,判斷是 否存在空閑的服務進程;步驟106,如果不存在所述空閑的服務進程,則創(chuàng)建服務進程,用 以從所述內存中取得所述數據,并返回給所述前端進程以響應所述會話請求;步驟108,如 果存在所述空閑的服務進程,調用所述空閑的服務進程中的任一個服務進程,從所述內存 中取得所述數據,并返回給所述前端進程以響應所述會話請求。通過該技術方案,通過服務 進程保存數據,避免了大量的對字符串數據進行結構化處理的過程,減少了資源的消耗。在上述技術方案中,在所述步驟108中,在無法調用所述空閑的服務進程時,由所 述前端進程從文件系統(tǒng)中取得所述數據,以響應所述會話請求。在上述技術方案中,在所述步驟102中,還從所述前端進程取得新會話請求,所述 新會話請求對應的數據不在所述內存中;在所述步驟106中,還創(chuàng)建服務進程,用以從文件 系統(tǒng)取得所述新會話請求對應的數據,返回給所述前端進程,同時將所述新會話請求對應 的數據存儲到內存中;在所述步驟108中,還調用所述空閑的服務進程中的任一個服務進 程,用以從文件系統(tǒng)取得所述新會話請求對應的數據,返回給所述前端進程,同時將所述新 會話請求對應的數據存儲到內存中。在上述技術方案中,在所述步驟102中,從所述前端進程先后取得多個會話請求, 且所述多個會話請求對應的數據、會話均相同時,在所述步驟106中,調用同一服務進程取 得所述數據,以響應所述多個會話請求。在上述技術方案中,在每個服務進程被調用預定次數后,消除所述每個服務進程。圖2是根據本發(fā)明的一個實施例的數據獲取裝置的框圖。如圖2所示,本發(fā)明還提供一種數據獲取裝置200,包括請求獲取模塊202,從前 端進程取得會話請求,并確認所述會話請求對應的數據,其中,所述數據預緩存在內存中; 判斷模塊204,判斷是否存在空閑的服務進程;進程調度模塊206,如果不存在所述空閑的 服務進程,則通過服務進程模塊208創(chuàng)建服務進程,用以從所述內存中取得所述數據,并返 回給所述前端進程以響應所述會話請求,以及如果存在所述空閑的服務進程,調用所述空 閑的服務進程中的任一個服務進程,從所述內存中取得所述數據,并返回給所述前端進程 以響應所述會話請求;所述服務進程模塊208,提供服務進程。通過該技術方案,通過服務 進程保存數據,避免了大量的對字符串數據進行結構化處理的過程,減少了資源的消耗。在上述技術方案中,還包括異常處理模塊210,在無法調用所述空閑的服務進程 時,由所述前端進程從文件系統(tǒng)中取得所述數據,以響應所述會話請求。在上述技術方案中,所述請求獲取模塊202還從所述前端進程取得新會話請求, 所述新會話請求對應的數據不在所述內存中;所述進程調度模塊208還在不存在所述空閑 的服務進程時,創(chuàng)建服務進程,用以從文件系統(tǒng)取得所述新會話請求對應的數據,返回給所 述前端進程,同時將所述新會話請求對應的數據存儲到內存中,以及還在存在所述空閑的 服務進程時,調用所述空閑的服務進程中的任一個服務進程,用以從文件系統(tǒng)取得所述新 會話請求對應的數據,返回給所述前端進程,同時將所述新會話請求對應的數據存儲到內 存中。在上述技術方案中,在所述請求獲取模塊202從所述前端進程先后取得多個會話請求,且所述多個會話請求對應的數據、會話均相同時,所述進程調度模塊206調用同一服 務進程取得所述數據,以響應所述多個會話請求。在上述技術方案中,在每個服務進程被調用預定次數后,所述服務進程模塊208 消除所述每個服務進程。圖3是根據本發(fā)明的一個實施例的數據獲取方法的原理示意圖。如圖3所示,傳統(tǒng)的PHP構成的BS應用程序,由以下組成瀏覽器、Wffff服務、PHP 進程和文件系統(tǒng)構成。瀏覽器做為用戶交互的客戶端,主要是進行頁面展示及提供交互操 作,常用的瀏覽器如IE,F(xiàn)irefOX,0pera等都是實現(xiàn)這一功能。Wffff服務和PHP進程構成了 服務器端的應用,通常的WWW服務程序有APACHE或者IIS,PHP作為服務器端執(zhí)行的程序, 為WWW服務提供業(yè)務處理的能力,文件系統(tǒng)則起到數據緩存的作用。對于傳統(tǒng)的應用模式,參與角色只有客戶端(瀏覽器)、Wffff服務程序(PHP進程) 和文件系統(tǒng)。瀏覽器接收用戶的操作請求,然后將其傳遞給WWW服務程序,WWW服務程序再 調用PHP進程,請PHP進程處理請求,進行步驟302和步驟304的動作,恢復緩存數據并處 理請求,最后將處理結果再返回到WWW服務程序,Wffff服務程序再返回給客戶端。這一周期 即實現(xiàn)一個完整的服務請求過程。因此傳統(tǒng)的PHP應用模式,只涉及瀏覽器、Wffff服務、PHP進程和文件系統(tǒng)四個角 色。所有的PHP請求都是由一個PHP進程處理完成,并將結果返回。PHP進程每次調用都需 要從文件系統(tǒng)中恢復數據緩存。本實施例的技術方案的主要目的是為了減小恢復緩存部分的時間開銷,因此在傳 統(tǒng)的角色的基礎上,通過本發(fā)明的技術方案實現(xiàn)PHP服務進程和進程調度程序兩個角色。當用戶從瀏覽器發(fā)出請求后,一樣會到WWW(PHP)服務器端,但這時WWW(PHP)服務 程序并不進行步驟302的恢復數據緩存和步驟304處理請求的操作,直接將請求轉發(fā)給進 程調度程序,進程調度程序在進行PHP服務進程調度,只在服務進程第一次創(chuàng)建時,才進行 步驟306,數據緩存的恢復,然后進行步驟310,由PHP服務進程處理客戶端請求,之后再將 處理結果返回給進程調度程序,進程調度程序再將結果返回到WWW(PHP)服務,最后送回到 客戶端。PHP服務進程進行一次服務后,不會退出,因此創(chuàng)建時恢復的緩存數據仍然以結構 會對象的形式保存在進程中(內存中)。當下一次PHP請求到來時,該PHP服務進程便可以 直接處理PHP請求,進行步驟308,恢復會話數據,不再進行恢復緩存數據的操作,從而達到 提高效率的目的。雖然進行進程調度以及需要同步會話環(huán)境,也需要浪費一些開銷,但這些 開銷與大數據量緩存的字符串反序列化成結構化對象的時間開銷相比,還是微不足道的。本實施例中的技術方案的核心是進程調度的設計,需要注意的地方在于一、穩(wěn)定性異常處理機制當發(fā)生異常時,前端PHP進程依然可以采用非PHP進 程服務模式完成該次請求。即前端的PHP進程等待調度程序響應,如果進程調度過程中出 現(xiàn)異常,則前端的PHP進程會按照傳統(tǒng)的模式處理服務請求。服務請求排隊機制當所有的PHP服務進程忙時,進程調度中必須實現(xiàn)排隊機制, 即使用隊列順序進行服務處理。限制服務進程的服務次數當一個服務進程完成一定次數的服務時,能夠自動退 出,以便釋放內存,防止異常。
建立服務超時機制當出現(xiàn)異常,或者排隊時間過長來不及處理時,需要設置超時 機制,防止異常情況無響應。二、安全性會話合法性檢查在每次執(zhí)行任務時,首先要檢查當前用戶的狀態(tài)是 否登錄,防止非常的用戶調用PHP服務進程處理業(yè)務。日志機制記錄操作日志,方便調試跟蹤問題。三、數據同步數據更新同步當關鍵數據更新時,建立緩存數據更新的同步信 號,即保存PHP服務進程中的緩存數據不過期,始終保持最新狀態(tài)。用戶運行環(huán)境同步服務進程在開始一個服務時,必須要恢復當前會話的數據環(huán)
^Mi ο四、效率優(yōu)化優(yōu)化服務進程分配當一個會話請求需要進程調度時,優(yōu)先選擇進 程池中前一次服務的會話ID與本次會話ID相同的服務進程,以達到同一會話的請求盡量 在一個服務進程中處理,以便最大限度的使用緩存數據。使用PHP服務進程后,也要求PHP程序設計時需要符合服務模式運行的特點特點1 代碼可重復執(zhí)行;特點2 系統(tǒng)級對象可以緩存共享使用(整個服務進程中不釋放);特點3 請求服務數據環(huán)境(所有的GET,POST, COOKIE, SESSION變量及部分用到 的SERVER變量)可恢復(每次執(zhí)行請求時恢復該請求的環(huán)境變量)。根據本發(fā)明的技術方案,可以實現(xiàn)一種數據獲取方法和裝置,通過服務進程將結 構化的數據保存,以便讀取,避免了反復對緩存數據進行結構化處理的過程,減少了資源的 浪費。以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技 術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內,所作的任何修 改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。
權利要求
1.一種數據獲取方法,其特征在于,包括步驟102,從前端進程取得會話請求,并確認所述會話請求對應的數據,其中,所述數據 預緩存在內存中;步驟104,判斷是否存在空閑的服務進程;步驟106,如果不存在所述空閑的服務進程,則創(chuàng)建服務進程,用以從所述內存中取得 所述數據,并返回給所述前端進程以響應所述會話請求;步驟108,如果存在所述空閑的服務進程,調用所述空閑的服務進程中的任一個服務進 程,從所述內存中取得所述數據,并返回給所述前端進程以響應所述會話請求。
2.根據權利要求1所述的數據獲取方法,其特征在于,在所述步驟108中,在無法調用 所述空閑的服務進程時,由所述前端進程從文件系統(tǒng)中取得所述數據,以響應所述會話請 求。
3.根據權利要求1所述的數據獲取方法,其特征在于,在所述步驟102中,還從所述前 端進程取得新會話請求,所述新會話請求對應的數據不在所述內存中;在所述步驟106中,還創(chuàng)建服務進程,用以從文件系統(tǒng)取得所述新會話請求對應的數 據,返回給所述前端進程,同時將所述新會話請求對應的數據存儲到內存中;在所述步驟108中,還調用所述空閑的服務進程中的任一個服務進程,用以從文件系 統(tǒng)取得所述新會話請求對應的數據,返回給所述前端進程,同時將所述新會話請求對應的 數據存儲到內存中。
4.根據權利要求1所述的數據獲取方法,其特征在于,在所述步驟102中,從所述前端 進程先后取得多個會話請求,且所述多個會話請求對應的數據、會話均相同;在所述步驟106中,調用同一服務進程取得所述數據,以響應所述多個會話請求。
5.根據權利要求1至4中任一項所述的數據獲取方法,其特征在于,在每個服務進程被 調用預定次數后,消除所述每個服務進程。
6.一種數據獲取裝置,其特征在于,包括請求獲取模塊,從前端進程取得會話請求,并確認所述會話請求對應的數據,其中,所 述數據預緩存在內存中;判斷模塊,判斷是否存在空閑的服務進程;進程調度模塊,如果不存在所述空閑的服務進程,則通過服務進程模塊創(chuàng)建服務進程, 用以從所述內存中取得所述數據,并返回給所述前端進程以響應所述會話請求,以及如果存在所述空閑的服務進程,調用所述空閑的服務進程中的任一個服務進程,從所 述內存中取得所述數據,并返回給所述前端進程以響應所述會話請求;所述服務進程模塊,提供服務進程。
7.根據權利要求6所述的數據獲取裝置,其特征在于,還包括異常處理模塊,在無法調用所述空閑的服務進程時,由所述前端進程從文件系統(tǒng)中取 得所述數據,以響應所述會話請求。
8.根據權利要求6所述的數據獲取裝置,其特征在于,所述請求獲取模塊還從所述前 端進程取得新會話請求,所述新會話請求對應的數據不在所述內存中;所述進程調度模塊還在不存在所述空閑的服務進程時,創(chuàng)建服務進程,用以從文件系 統(tǒng)取得所述新會話請求對應的數據,返回給所述前端進程,同時將所述新會話請求對應的數據存儲到內存中,以及還在存在所述空閑的服務進程時,調用所述空閑的服務進程中的任一個服務進程,用 以從文件系統(tǒng)取得所述新會話請求對應的數據,返回給所述前端進程,同時將所述新會話 請求對應的數據存儲到內存中。
9.根據權利要求6所述的數據獲取裝置,其特征在于,在所述請求獲取模塊從所述前 端進程先后取得多個會話請求,且所述多個會話請求對應的數據、會話均相同時,所述進程 調度模塊調用同一服務進程取得所述數據,以響應所述多個會話請求。
10.根據權利要求6至9中任一項所述的數據獲取裝置,其特征在于,在每個服務進程 被調用預定次數后,所述服務進程模塊消除所述每個服務進程。
全文摘要
本發(fā)明提供一種數據獲取方法,包括步驟102,從前端進程取得會話請求,并確認會話請求對應的數據,其中,所述數據預緩存在內存中;步驟104,判斷是否存在空閑的服務進程;步驟106,如果不存在所述空閑的服務進程,則創(chuàng)建服務進程,用以從所述內存中取得所述數據,并返回給所述前端進程以響應所述會話請求;步驟108,如果存在所述空閑的服務進程,調用所述空閑的服務進程中的任一個服務進程,從所述內存中取得所述數據,并返回給所述前端進程以響應所述會話請求。本發(fā)明還提供一種數據獲取裝置。通過本發(fā)明,通過服務進程保存數據,避免了大量的對字符串數據進行結構化處理的過程,減少了資源的消耗。
文檔編號H04L29/08GK102088485SQ201010616430
公開日2011年6月8日 申請日期2010年12月30日 優(yōu)先權日2010年12月30日
發(fā)明者蔣宗良 申請人:用友軟件股份有限公司