跳到內容

使用比特幣交易資料開始使用 Knative Eventing

發佈於:2020-06-22 ,  修訂於:2024-01-17

使用比特幣交易資料開始使用 Knative Eventing

作者:Johana Saladas,IBM 的軟體工程師

我一直在探索 Knative Eventing,這是一個系統,可透過使用事件產生器事件消費者輕鬆部署雲原生事件處理生態系統。這個演示的大部分工作都是在 0.11 版本中完成的,我也在 0.13 版本中運行過,現在它也可以在 0.15 版本上運行。

此演示在第一次 Knative 社群聚會上展示過,因此您也可以在此處觀看影片版本:{{< youtube sGi_LuAaaT0 >}}

我組合了一個簡單的演示,以探索事件驅動架構的一些主要優勢,例如

  • 基於推送的訊息傳遞。
  • 生產者和消費者的解耦。
  • 在資料移動時套用業務邏輯。
  • 用於資料科學的即時事件串流 — 毫秒級決策,例如欺詐偵測。

在這篇文章中,我將向您展示如何使用一些基本的 Knative 事件處理組件(代理觸發器生產者消費者)啟動並運行一個事件處理範例情境。這個演示展示了即時串流事件、串流內轉換和基於推送的前端實際應用。您可以使用它作為基礎並繼續構建,進一步探索可能實現的功能。

此情境使用比特幣交易事件作為事件串流的範例。事件將透過 UI 前端即時顯示,並根據其總交易價值由另一個服務分類為大小。

在下圖中,您可以看到我們將部署的計畫。

Diagram of this example Knative Eventing scenario

這裡有一個 GitHub 儲存庫來配合這個演示 這裡。所有個別服務的原始程式碼都可在 GitHub 儲存庫中取得。如果您想使用 Docker Hub 中預先建置的映像,那麼您只需要 yaml 目錄中的檔案。

步驟 1:建立命名空間並建立代理

kubectl apply -f 001-namespace.yaml

第一步是部署 001-namespace.yaml,它會建立一個 Kubernetes 命名空間,並自動新增標籤 knative-eventing-injection=enabled。這會建立一個 Knative Eventing 代理

代理是事件從事件來源或生產者發送到這裡的地方。它可能以訊息傳遞通道作為後盾,預設情況下是在記憶體中,但也可以是其他東西(例如 Kafka 通道)。從這裡,感興趣的服務可以取用這些事件。

步驟 2:部署比特幣事件來源

kubectl apply -f 010-deployment.yaml
我們的事件來源是一個應用程式,它從 blockchain.info websocket 取得(未確認的比特幣交易)訊息,然後建立新的 CloudEvent。 這是我們的事件生產者,它產生其他服務可能或可能不感興趣訂閱的事件。

在我們的案例中,我們使用 sink 變數告訴它我們希望將事件發送到哪裡。sink 作為環境變數傳遞到部署中,在本例中,它是我們的代理位址。若要取得代理 URL,您可以使用下列命令

kubectl get broker -n knative-eventing-websocket-source
一旦您部署了事件來源,您可以透過取得記錄來驗證它是否正在運行
kubectl —namespace knative-eventing-websocket-source logs -l app=wseventsource — tail=100 -f

步驟 3:訂閱事件顯示以接收比特幣事件

kubectl apply -f 040-trigger.yaml

觸發器提供一個篩選器,選擇符合特定屬性的事件以傳遞到指定的服務。此情境指定了三個觸發器。您不需要為了設定觸發器而先部署訂閱服務。

步驟 4:部署我們的取用服務

在我們的情境中,我們有多個消費者。這些是對事件感興趣(或不感興趣)的服務。我們有三個取用服務

  • event-display — 訂閱來自 “wss://ws.blockchain.info/inv” 的事件的 Kubernetes 部署。此服務會接收這些事件,然後透過 UI 前端即時顯示它們。此服務是一個 Kubernetes 服務。
    kubectl apply -f 050-kubernetesdeploy.yaml
    kubectl apply -f 060-kubernetesservice.yaml
    

一旦您部署此服務,您可以使用網頁瀏覽器前往 localhost:31234,您應該會看到比特幣交易事件在 UI 中即時呈現: 您應該會看到此 UI 即時更新

  • 分類器 — 訂閱來自 “wss://ws.blockchain.info/inv” 的事件。此服務會接收事件,然後分類每個交易值。在應用程式程式碼中,會使用新的類型來源建立新的 CloudEvent。這些新事件會重新發送到 Knative 事件處理生態系統中。

邏輯已保持簡單,並且只有兩個大小類別:。它代表串流內轉換或建模應用程式的範例,這些轉換或建模應用程式可能正在發生,作為資料科學或 ML 過程的一部分。這種架構可用於欺詐偵測、異常偵測和其他速度至關重要的決策。

kubectl apply -f 031-classifier-service.yaml

  • test-display — 訂閱來自類型來源 ‘分類器’ 的事件的 Knative 服務。
    kubectl apply -f 030-test-display-service.yaml
    

此服務訂閱包含交易大小的事件,以便我們在查看日誌時能看到這些資訊。

kubectl logs -l serving.knative.dev/service=test-display -c user-container — tail=100 -n knative-eventing-websocket-source -f
Our test-display service consumes the size reply that is emitted by the classifier

延伸閱讀

試試看這個範例,並在 推特上告訴我 你的使用心得!

如果你想了解更多,可以查看 Knative 文件中的其他範例。「Knative 食譜」是另一個學習 Knative Serving 和 Eventing 的絕佳資源。

我們使用分析和 Cookie 來了解網站流量。您使用我們網站的資訊會與 Google 分享以達到該目的。了解更多。