專利名稱:遠程調用管理方法
技術領域:
本發(fā)明涉及電數字處理領域,特別涉及遠程調用管理方法。
技術背景廣域網上,客戶端與服務端的多次遠程方法調用即多次網絡通訊。多次 網絡通訊存在延時和丟包的問題,導致客戶端用戶操作的響應時間長而且不穩(wěn)定。部署在廣域網上的大型分布式軟件系統(tǒng), 一般分為客戶端、服務端、數 據庫三層,業(yè)務數據一般存儲在數據庫中。客戶端為了讀取業(yè)務數據,需要 與服務端進行遠程方法調用,服務端再與數據庫通訊,從中獲取業(yè)務數據后, 再進行若干處理,返回給客戶端。客戶端與服務端的多次遠程方法調用,都 是多次廣域網上的網絡通訊,會受到網絡延時及數據丟包問題的影響。客戶 端任意用戶操作的響應時間,除了少量客戶端邏輯運行時間外,主要是由多 次遠程方法調用的網絡通訊時間構成的,通訊次數越多,數據量越大,受延 時和丟包問題的影響就越大,總的響應時間就越不穩(wěn)定。發(fā)明內容本發(fā)明目的在于提供一種遠程調用管理方法。本發(fā)明提供一種遠程調用管理方法,客戶端通過客戶端存根向服務端對 象發(fā)出遠程調用,客戶端存根代理攔截客戶端發(fā)給客戶端存根的遠程調用的步驟;客戶端存根代理分析遠程調用的步驟;對于遠程調用是寫方法的,客 戶端存根代理遠程調用寫方法,對服務端進行寫操作的步驟;對于遠程調用 是讀方法的,客戶端存根代理向客戶端緩存進行讀操作,獲取讀方法返回結 果的步驟。優(yōu)選地,上述客戶端存根代理對客戶端存根進行代理,遠程方法調用時, 使用客戶端存根通過遠程代理自動攔截方法調用,找到服務端對象,調用其 方法。優(yōu)選地,上述客戶端緩存存儲服務端不常變化的業(yè)務數據,供客戶端存 才艮4戈理讀取。優(yōu)選地,上述客戶端存根代理分析遠程調用包括判斷遠程調用方法為與客戶端緩存相關的方法或與客戶端緩存不相關的方法的步驟。優(yōu)選地,對于與客戶端緩存相關的方法,判斷方法是讀方法或寫方法; 對于與客戶端緩存不相關的方法,對服務端遠程調用方法,返回結果。優(yōu)選地,對于遠程調用是寫方法的,客戶端存根代理遠程調用寫方法, 對服務端進行寫操作的步驟,還包括客戶端緩存清空緩存的業(yè)務數據的步驟。 優(yōu)選地,上述遠程調用管理方法還包括對客戶端緩存中保存的業(yè)務數據 更新的步驟。上述對客戶端緩存中保存的業(yè)務數據更新的步驟包括對于遠程調用是讀方法的,客戶端存根代理向客戶端緩存進行讀操作后, 客戶端存根代理把讀方法返回的結果放入客戶端緩存的步驟。優(yōu)選地,上述遠程調用管理方法還包括根據服務端對象,將客戶端緩 存劃分為至少 一緩存區(qū),分別緩存至少 一類型的服務端對象。優(yōu)選地,上述遠程調用管理方法還包括預設客戶端緩存的內存上限的 步驟;判斷客戶端緩存是否達到預設的內存上限,若達到預設的內存上限則 刪除部分或全部已緩存業(yè)務凄t據的步驟。本發(fā)明提供的遠程調用管理方法通過客戶端緩存機制,減少了網絡通訊 的次數和數據量,進而減少了用戶操作的等待時間;降低了服務端負載及數 據庫負載,從而使服務端和數據庫可以為更多客戶端服務,增加了伸縮性。本發(fā)明的客戶端緩存機制,對具體的客戶端業(yè)務邏輯是透明的。也就是說, 遠程方法調用發(fā)起者,不需要建立緩存機制和管理緩存。通過對緩存區(qū)的分 區(qū)管理和方法讀寫意圖的管理,確??蛻舳司彺媾c服務端的數據一致性。
圖l是本發(fā)明第一實施例的邏輯結構圖; 圖2是本發(fā)明第一實施例的工作流程示意圖; 圖3是本發(fā)明第二實施例的工作流程示意圖; 圖4是本發(fā)明第二實施例的動態(tài)代理遠程調用攔截算法圖。 本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結合實施例,參照附圖做進一步 說明。
具體實施方式
參照圖l,示出本發(fā)明第一實施例的邏輯結構圖。現(xiàn)有實現(xiàn)遠程調用的結 構包括客戶端存根、服務端框架和服務端對象,客戶端存根通過服務端框架 調用服務端對象。本實施例提出客戶端存根代理和客戶端緩存,對客戶端存根再次代理,實現(xiàn)了對遠程方法調用的本地緩存。本實施例對于業(yè)務數據按變化頻率分為如下兩大類 經常變化這類業(yè)務數據不適合做客戶端緩存,例如單據; 不常變化這類業(yè)務數據適合做客戶端緩存,例如系統(tǒng)參數和基礎資料。 上述業(yè)務數據類型是經常變化還是不常變化的,可以通過緩存配置文件進行 區(qū)別。上述緩存配置文件是一個xml文件,包含所有需要被緩存的業(yè)務實體。 例如緩存配置文件中〈entity name="Person" bostype="80EF7DED" isCache="true" descriptioi^"人員"/〉,說明"人員,,是一種不常變化的業(yè) 務數據,可以用于客戶端緩存。本實施例上述對不常變化的數據進行客戶端緩存,以減少客戶端與服務 端的網絡通訊。本實施例的客戶端緩存具有可由用戶配置的內存上限值,可4艮據遠程對 象的類型,劃分為多個緩存區(qū)(Cache Region),例如期間、公司、客戶、供 應商等等多個緩存區(qū)。某個類型的遠程對象是否參與客戶端緩存,可以在運 行期由配置文件指定。各個模塊也可分別維護自己的客戶端緩存,但這樣開 發(fā)工作量較大而且算法可能不一致,不便于統(tǒng)一管理、控制緩存的總上限。而客戶端存根代理是基于存根,對存根進行代理。其中存根(Stub)是 客戶端對象,是服務端對象的遠程代理,在遠程方法調用中,可以把遠程對 象像本地對象一樣使用。遠程方法調用時,系統(tǒng)使用存根通過遠程代理自動 攔截方法調用,找到服務端遠程對象并調用它的方法。本實施例將所有的遠程調用方法,分為與客戶端緩存相關的方法和不相 關的方法。,于于相關的方法,本實施例又劃分為讀方法和寫方法,讀方法是 從服務端讀取數據并緩存的方法,寫方法是向服務端修改數據的方法。上述 方法是否與緩存相關及其具體的讀寫意圖可以通過緩存配置文件進行區(qū)別。 侈'H口, 緩存酉己置文4牛中〈method name="getPrimaryPosition" type="read" isCache="false" region-"" scene="" description-"暫無描述信息"/>, 其中"getPrimaryPosition"方法的參凄t type取值為"read", "i兌明該方法是 讀方法,參數isCache取值為"false",說明該方法是緩存不相關的,即不需 要通過客戶端緩存,應直接遠程調用方法的。本實施例的工作流程如圖2所示步驟SI 01,客戶端存根代理攔截遠程方法調用;步驟SIO,客戶端存根代理判斷遠程方法調用是否為緩存相關,如果是緩 存相關則進行步驟S 103,否則進行步驟S 106;步驟S103,客戶端存根代理判斷遠程方法調用是讀方法還是寫方法,如果遠程方法調用是寫方法,則進行步驟S104,如果遠程方法調用是讀方法, 則進行步驟S105;步驟S104,客戶端存根代理遠程調用一次寫方法,然后進行步驟S106; 步驟S105,客戶端存根代理嘗試從客戶端緩存獲取方法返回結果,然后 進行步驟S106;步驟S106,遠程調用方法返回。上述流程只進行客戶端緩存,但不更新緩存,這樣只能通過客戶端的重 新登錄來保證客戶端緩存和服務端的數據一致性,對于用戶的操作非常不方 便。為了防止業(yè)務數據變化后造成的不一致問題,本實施例可增加適當的緩 存更新機制,以方便用戶,保證業(yè)務數據的一致性。在上一實施例基礎上,本發(fā)明提出對于不常變化的業(yè)務數據還可頻率分 為^口下兩類不常變化,但每隔一段時間會變化這類業(yè)務數據適合做客戶端緩存,但是需要有緩存的更新機制,例如基礎資料;基本不變這類業(yè)務數據適合做客戶端緩存,例如系統(tǒng)參數。業(yè)務數據是基本不變還是不常變化但每隔一段時間會變化的,可以通過 繼承體系及配置文件進行區(qū)別。對于這兩類業(yè)務數據,本實施例提出改進的 遠程調用管理方法,通過建立適當的緩存更新機制,防止業(yè)務數據變化后造 成的不一致問題。同時采用最近最少使用算法(LRU, Least Recently Used) 管理客戶端緩存上限,避免客戶端緩存占用過多內存。本實施例的客戶端緩存,具有緩存更新機制,客戶端緩存的內存上限可 由用戶配置或預設,并采用最近最少4吏用算法管理總內存。根據遠程對象的 類型,劃分為多個緩存區(qū)(Cache Region),例如期間、公司、客戶、供應商 等等多個緩存區(qū)。某個類型的遠程對象是否參與客戶端緩存,可以在運行期 由配置文件指定。本實施例將所有遠程調用方法分為與客戶端緩存相關的方法和不相關的 方法。相關的方法又劃分為讀方法和寫方法,劃分規(guī)則與上一實施例類似。結合如圖4所示的動態(tài)代理的遠程調用攔截算法,和如圖3所示的工作 流程示意圖,本實施例的工作流程包括步驟S201 ,客戶端存根代理攔截遠程方法調用;步驟S202,客戶端存根代理判斷遠程方法調用是否為緩存相關,如果是 緩存相關則進行步驟S2 03,否則進行步驟S214;果遠程方法調用是寫方法,則進行步驟S204,如果遠程方法調用是讀方法, 則進行步驟S206;步驟S204,客戶端存#^代理遠程調用一次寫方法,然后進行步驟S205; 步驟S205,客戶端緩存清空對應類型的緩存區(qū),然后進行步驟S214; 步驟S206,客戶端存根代理嘗試從客戶端緩存獲取方法返回結果,然后 進行步驟S207;步驟S207,如果從客戶端緩存獲取方法返回結果成功,即緩存命中,則 進行步驟S208,否則進行步驟S209;步驟S208,客戶端存根代理將客戶端緩存中的方法返回結果復制一份, 然后進行步驟S214;步驟S209,客戶端存根代理遠程調用一次讀方法,進行步驟S210;步驟S210,客戶端存根代理把方法返回結果放入客戶端緩存;步驟S211,根據最近最少使用算法管理客戶端緩存;步驟S212,判斷客戶端緩存是否達到預設的內存上限,如果達到則進行 步驟S213,否則進行步驟S214;步驟S213,選#^部分或全部已緩存數據,將其刪除。步驟S214,遠程調用方法返回。需要說明一點,本實施例在執(zhí)行寫方法后,清除同類型的整個緩存區(qū),而 不是清空緩存區(qū)中具體方法的緩存。這是由于本實施例的客戶端緩存存儲的 不是對象數據庫,而是存儲方法返回結果??蛻舳司彺娲鎯Φ膶ο蟛粌H包含 對象或對象集合,也可能包含相關方法返回的Boolean, Integer等類型數據。 任意一個寫方法執(zhí)行后,無法精確地判斷某類型緩存區(qū)中某個方法的返回值 是否與服務端一致與否。所以,只能清除整個類型緩存區(qū)了。本實施例通過對遠程方法調用的存根進行動態(tài)代理,將不經常變化的業(yè) 務數據緩存在本地Java虛擬機(JVM)堆內存中,非第一次訪問時直接從本 地緩存讀取,從而減少網絡通訊次數及數據量,本實施例對具體的業(yè)務邏輯 而言是透明的。同時,對本地的客戶端緩存也根據遠程對象類型進行分區(qū)管 理,并通過最近最少使用算法保證客戶端緩存總大小不超過用戶預設的內存 上限。以上所述僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍, 凡是利用本發(fā)明說明書及附圖內容所作的等效結構或等效流程變換,或直接 或間接運用在其他相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內。
權利要求
1.一種遠程調用管理方法,所述客戶端通過客戶端存根向服務端對象發(fā)出遠程調用,其特征在于客戶端存根代理攔截客戶端發(fā)給客戶端存根的遠程調用的步驟;客戶端存根代理分析遠程調用的步驟;對于遠程調用是寫方法的,客戶端存根代理遠程調用寫方法,對服務端進行寫操作的步驟;對于遠程調用是讀方法的,客戶端存根代理向客戶端緩存進行讀操作,獲取讀方法返回結果的步驟。
2. 根據權利要求1所述的遠程調用管理方法,其特征在于,所述客戶端 存根代理對客戶端存根進行代理,遠程方法調用時,使用客戶端存根通過遠 程代理自動攔截方法調用,找到服務端對象,調用其方法。
3. 根據權利要求1所述的遠程調用管理方法,其特征在于,所述客戶端 緩存存儲服務端不常變化的業(yè)務數據,供所述客戶端存根代理讀取。
4. 根據權利要求3所述的遠程調用管理方法,其特征在于,所述客戶端 存根代理分析遠程調用包括判斷遠程調用方法為與客戶端緩存相關的方法或與客戶端緩存不相關的 方法的步驟。
5. 根據權利要求4所述的遠程調用管理方法,其特征在于,對于所述與 客戶端緩存相關的方法,判斷所述方法是讀方法或寫方法;對于所述與客戶 端緩存不相關的方法,對服務端遠程調用所述方法,返回結果。
6. 根據權利要求1至5任意一項所述的遠程調用管理方法,其特征在于, 所述對于遠程調用是寫方法的,客戶端存根代理遠程調用寫方法,對服務端 進行寫操作的步驟,還包括客戶端緩存清空緩存的業(yè)務數據的步驟。
7. 根據權利要求1至5任意一項所述的遠程調用管理方法,其特征在于, 還包括對客戶端緩存中保存的業(yè)務數據更新的步驟。
8. 根據權利要求7所述的遠程調用管理方法,其特征在于,所述對客戶端緩存中保存的業(yè)務數據更新的步驟包括對于遠程調用是讀方法的,客戶端存根代理向客戶端緩存進行讀操作后, 客戶端存根代理把讀方法返回的結果放入客戶端緩存的步驟。
9. 根據權利要求1至5任意一項所述的遠程調用管理方法,其特征在于, 還包括根據所述服務端對象,將所述客戶端緩存劃分為至少一緩存區(qū),分別緩 存至少一類型的服務端對象。
10. 根據權利要求1至5任意一項所述的遠程調用管理方法,其特征在于, 還包括預設客戶端緩存的內存上限的步驟;判斷客戶端緩存是否達到預設的內存上限,若達到預設的內存上限則刪 除部分或全部已緩存業(yè)務數據的步驟。
全文摘要
本發(fā)明提供一種遠程調用管理方法,客戶端通過客戶端存根向服務端對象發(fā)出遠程調用,客戶端存根代理攔截客戶端發(fā)給客戶端存根的遠程調用的步驟;客戶端存根代理分析遠程調用的步驟;對于遠程調用是寫方法的,客戶端存根代理遠程調用寫方法,對服務端進行寫操作的步驟;對于遠程調用是讀方法的,客戶端存根代理向客戶端緩存進行讀操作,獲取讀方法返回結果的步驟。本發(fā)明減少了網絡通訊的次數和數據量,進而減少了用戶操作的等待時間;降低了服務端負載及數據庫負載,從而使服務端和數據庫可以為更多客戶端服務,增加了伸縮性。本發(fā)明的客戶端緩存機制,對具體的客戶端業(yè)務邏輯是透明的。
文檔編號H04L12/54GK101217449SQ20081000270
公開日2008年7月9日 申請日期2008年1月9日 優(yōu)先權日2008年1月9日
發(fā)明者璐 彭, 慷 殷 申請人:金蝶軟件(中國)有限公司