簡體   English   中英

Drools 的水平可擴展性

[英]Horizontal Scalability with Drools

知道流口水在 memory 數據中起作用。 在對規則、事實類型等執行 CRUD 操作時,有沒有辦法在不同的 drools 實例上水平分布以提高性能? 我想這些實例需要以某種方式相互同步,因此它們在 memory 中都具有相同的數據或以某種方式共享知識庫。 我對 drools 有點陌生,正在嘗試研究一種在雲環境 (gcp) 上移動單體的方法,以便它可以利用負載平衡、擴展等。想知道 drools 本身是否有任何功能支持這一點,或者如果有任何方法可以自己實施,請提前感謝有關此事的任何信息/文檔/用例。

目前我還沒有嘗試過這樣做的方法,但我的目標是通過使用自動縮放或支持我的應用程序的多個實例來提高性能和可用性。

我不確定您在 Drools 上執行何種“增刪改查”(或如何執行)。 但是,如果您只想部署新規則(例如),那么這與將任何數據或應用程序更改推送到分布式系統中的部署是相同的——要么您的節點逐漸更新,因此在升級過程中您有一些混合新舊邏輯/代碼; 或者您使用新邏輯/代碼部署新實例,然后將流量轉移到您的新實例並遠離舊實例——要么一次性全部轉移,要么以受控的藍/綠(或類似)方式進行。

如果你想拆分一個整體,我認為對你來說最好的方法是考慮 Kogito [1] 和微服務架構。 使用微服務,您甚至可以考慮使用 Function 作為服務方法 - 具有小型不可變服務實例,這些實例只是執行和處置。 Kogito 主要針對 Quarkus 平台,但也有一些 Spring Boot 示例。 還有可用的 OpenShift 運算符。

至於共享工作 memory,KIE 社區中有一個名為 HACEP [2] 的項目。 不幸的是,現在已經棄用了,我們正在研究其他解決方案來使工作 memory 持續存在。

[1] https://kogito.kie.org/ [2] https://github.com/kiegroup/openshift-drools-hacep

術語“ 入口點”與我們在工作 Memory 中有多個分區這一事實有關,您可以選擇要插入的分區。 如果您可以組織您的業務邏輯以使用不同的入口點,您可以安全地並行處理不同機器上的“邏輯分區”。 乍一看,drools 入口點為您提供了類似於 Oracle 中的表分區的內容,這意味着相同的選項。

如果可以(從業務角度)“按客戶端”分區,請使用具有粘性會話的負載均衡器在此處輸入圖像描述

你的問題看起來更像是一個架構問題。 首先,我將了解 Drools 提供的Kie Execution Server組件,該組件可幫助您根據 Drools 規則集創建微服務決策。

Kie Execution Server (由客戶端以無狀態模式使用)可以嵌入不同的 pod/instances/servers 中以確保水平可擴展性。

正如@RoddyoftheFrozenPeas 所提到的,您將面臨的問題之一是在托管您的服務的 kieserver 的“集群”上同時熱部署新規則集。

這必須使用適當的 devops 策略來處理。

最好

伊曼紐爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM