2013-12-14 27 views
3

我有一個Java服務器,其中有一個通用操作,它在內部滿足多個功能。服務器端用於服務器功能編排的輕量級規則引擎

服務器調用期間執行一個或多個函數取決於哪個客戶端正在調用以及客戶端正在傳遞什麼參數。基於客戶端的參數(通常是參數類型的客戶,國家,產品類型等)

由於目前我們已成立的服務器的一部分的if/else塊,以確定這一點,但任何改變

Server在內部執行的功能編排在這需要代碼更改和發佈。

我打算改變這一點,並使用非常輕的規則引擎,我可以通過規則傳遞參數集和編排功能(或從那裏敲除)。

最重要的要求是,這個規則引擎可以在沒有任何代碼釋放的情況下(通過一些用戶界面)配置(像存儲在緩存中的規則)。另外,我的服務器每天需要數以百萬計的請求,它的響應速度必須非常快,我無法承受每個HIT的DB命中或繁重的規則引擎。

我的想法之一是引入特徵矩陣(使用一些數據結構)並將其發佈到緩存中,並且每個服務器HIT都會首先檢查這個矩陣並確定需要完成的請求,我可以更改特徵矩陣配置通過一些用戶界面,新配置將發佈到ASAP緩存,下一個服務器請求將使用新的配置。

任何想法或建議的實施?

回答

1

您可以使用Prolog作爲規則引擎:存在許多輕量級實現。

當然這些並不總是快如閃電,但可能不夠快你,特別是如果規則小心寫。

然後您可以緩存結果。

如果你有一個通常的一堆參數,可以將這一堆物體作爲一個對象,根據參數的內容提供一個散列函數,並用作散列映射的關鍵字。要保持緩存的大小合理,請爲密鑰實現一個LRU列表。

+0

真的很喜歡你的第二種方法,將完全適合我的用例,接受! – Rushik

+0

@Rushik我手邊有一個非常類似的問題,很高興收到您的反饋意見,告訴您如何解決您的問題 – hershey92