openshift_Openshift源中的高可用性Drools无状态服务
openshift
嗨,大家好! 在這篇博客文章中,我想舉一個簡單的示例,展示使用Openshift 3(Docker和Kubernetes)擴展我們的Drools Stateless服務有多么容易。 我將展示如何通過按需提供新實例來擴展我們的服務,以及如何使用循環策略通過Kubernetes平衡這些實例的負載。
我們的Drools無狀態服務
首先,我們需要一個無狀態的Kie Session進行游戲。 在這些簡單的示例中,我創建了一個食品推薦服務,以演示您可以使用這種方法建立什么樣的情景。 所有源代碼都可以在github上托管的Drools Workshop存儲庫中找到: https : //github.com/Salaboy/drools-workshop/tree/master/drools-openshift-example
在這個項目中,您將找到4個模塊:
- drools-food-model:我們的業務模型,包括領域類,例如成分,三明治,沙拉等
- drools-food-kjar:我們的業務知識,在這里,我們有一組規則來描述如何完成食品推薦。
- drools-food-services:使用Wildfly群,我將展示封裝規則引擎的特定于域的服務。 這里提供了一組休息服務,以便我們的客戶可以進行交互。
- drools-controller:通過使用Kubernetes Java API,我們可以根據需要向Openshift環境以編程方式提供我們的食品推薦服務的新實例。
我們的工作單位將是Drools-Food-Services項目,該項目公開REST端點與我們的無狀態會話進行交互。
您可以看一下非常簡單的服務端點: https : //github.com/Salaboy/drools-workshop/blob/master/drools-openshift-example/drools-food-services/src/main/java/ org / drools / workshop / food / endpoint / api / FoodRecommendationService.java
還要注意,還有另一個服務可以為我們提供有關服務運行位置的基本信息: https : //github.com/Salaboy/drools-workshop/blob/master/drools-openshift-example/drools-food-services/ src / main / java / org / drools / workshop / food / endpoint / api / NodeStatsService.java
稍后,我們將調用此服務以確切知道該服務的哪個實例正在答復我們的客戶。
該示例的規則很簡單,并且操作不多,如果您想學習Drools,我建議您創建更多有意義的完整規則并與我分享,以便我們改進示例;)您可以看一下這些規則此處: https : //github.com/Salaboy/drools-workshop/blob/master/drools-openshift-example/drools-food-kjar/src/main/resources/rules.drl
如您所料:男孩三明治和女孩沙拉:)
您需要了解的關于我們服務的最后一件重要的事情是服務端點如何挑選規則。 我正在使用Drools CDI擴展名@Inject一個KieContainer,該問題使用KIE-CI模塊來解決,這在我以前的文章中已有解釋。
- https://github.com/Salaboy/drools-workshop/blob/master/drools-openshift-example/drools-food-services/src/main/java/org/drools/workshop/food/endpoint/impl/FoodRecommendationServiceImpl。 java#L33
我們將把這個項目捆綁到一個Docker Image中,該鏡像可以根據需要/啟動多次。 如果您已經安裝在您的本地環境中的碼頭工人客戶端,您可以通過觀察它在舉辦的salaboy / Drools的食品服務形象開始這種食物推薦服務hub.docker.com/salaboy
通過啟動Docker映像甚至不知道內部正在運行什么,我們立即注意到以下優點:
- 除了Docker外,我們不需要安裝Java或任何其他工具
- 我們無需進行任何配置即可運行Rest Service
- 由于映像托管在hub.docker.com中,我們甚至不需要在本地構建任何內容
- 我們可以在任何操作系統上運行
同時,我們注意到以下缺點:
- 我們需要知道我們的服務在哪個IP和端口中被Docker公開
- 如果我們運行多個映像,則需要跟蹤所有IP和端口,并通知所有客戶有關這些IP和端口的信息。
- 同一docker映像實例的不同實例之間沒有內置的負載平衡方式
為了解決Openshift的這些缺點,更具體地說,Kubernetes可以拯救我們!
在Openshift中配置我們的服務
如前所述,如果我們只是開始創建服務的新Docker Image實例,我們很快就會發現我們的客戶將需要知道我們正在運行多少個實例以及如何聯系每個實例。 這顯然是不好的,因此,我們需要一個中間層來處理此問題。 Kubernetes為我們提供了這一抽象和供應層,這使我們能夠創建POD的多個實例(在docker映像之上的抽象)并為其配置Replication Controllers和Services 。
Replication Controller的概念提供了一種方法,該方法可以定義在給定時間應運行多少個實例來運行我們的服務。 復制控制器負責確保如果我們至少需要運行3個實例,則這些實例將一直運行。 如果這些實例之一死亡,則復制控制器將自動為我們生成一個。
Kubernetes中的服務解決了了解所有Docker實例詳細信息的問題。 服務使我們能夠為客戶提供一個立面,以便與我們的Pod實例進行交互。 服務層還允許我們定義策略(稱為會話親和力),以定義如何在服務后平衡Pod實例的負載。 有內置策略:ClientIP和Round Robin。
因此,我們現在需要做的事情,我們需要安裝Openshift Origin(v3)和我們的項目Drools Controller,該項目將與Kubernetes REST端點進行交互以提供Pod,復制器控制器和服務。
對于Openshift安裝,我建議您按照此處描述的步驟進行操作: https : //github.com/openshift/origin/blob/master/CONTRIBUTING.adoc
我在筆記本電腦上的上一個鏈接中介紹了Vagrant選項(第二個選項)。
最后,可以找到一個非常簡單的示例,說明如何使用Kubernetes API在這種情況下將我們的drools-food-services供應到Openshift中。
請注意,我們在運行時定義了所有內容,這確實很棒,因為我們可以從頭開始或修改現有的服務,復制控制器和Pod。
您可以看一下drools-controller項目。 其中顯示了我們如何創建指向Docker映像并定義1個副本的復制控制器(默認情況下會創建一個副本)。
- https://github.com/Salaboy/drools-workshop/blob/master/drools-openshift-example/drools-food-controller/src/main/java/org/drools/workshop/drools/food/controller/Main。Java
如果您登錄Openshift Console,您將能夠使用Replication Controller和我們Pod的一個副本看到新創建的服務。 通過使用UI(或API,更改Main類),我們可以根據需要提供更多副本。 Kubernetes服務將確保在不同的Pod實例之間實現負載平衡。
瞧! 我們的服務副本已啟動并正在運行!
現在,如果通過對映射的Kubernetes服務端口執行GET來訪問NodeStat服務,您將獲得正在響應該請求的Pod。 如果您多次執行請求,您應該能夠看到循環策略正在實施。
wget http://localhost:9999/api/node {"node":"drools-controller-8tmby","version":"version 1"} wget http://localhost:9999/api/node {"node":"drools-controller-k9gym","version":"version 1"} wget http://localhost:9999/api/node {"node":"drools-controller-pzqlu","version":"version 1"} wget http://localhost:9999/api/node {"node":"drools-controller-8tmby","version":"version 1"}以相同的方式,您可以與這3個Pod中的每一個Statless會話進行交互。 在這種情況下,您實際上不需要知道哪個Pod在回答您的請求,您只需要由他們中的任何一個來完成工作即可。
加起來
通過利用Openshift起源基礎架構,我們通過不重新發明Kubernetes和Docker等工具中已經存在的機制來簡化架構。 在接下來的文章中,我將介紹使用此基礎結構的其他一些不錯的優點,例如匯總來升級我們的服務版本,增加安全性和Api管理。
如果您對此方法有疑問,請分享您的想法。
翻譯自: https://www.javacodegeeks.com/2016/03/high-availability-drools-stateless-service-openshift-origin.html
openshift
總結
以上是生活随笔為你收集整理的openshift_Openshift源中的高可用性Drools无状态服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javafx阴影_JavaFX技巧来节省
- 下一篇: 备案说要扣车什么意思(备案说要扣车)