日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Openshift源中的高可用性Drools无状态服务

發布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Openshift源中的高可用性Drools无状态服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嗨,大家好! 在這篇博客文章中,我想舉一個簡單的例子,展示使用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和端口,并向所有客戶通知這些
  • 同一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源中的高可用性Drools无状态服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。