《畢小紅-Knative Eventing系統應用實踐(GOTC上海會場)(31頁).pdf》由會員分享,可在線閱讀,更多相關《畢小紅-Knative Eventing系統應用實踐(GOTC上海會場)(31頁).pdf(31頁珍藏版)》請在三個皮匠報告上搜索。
1、開源云原生計算時代論壇專場 畢小紅 2021年7月10日本期議題:Knative Eventing系統應用實踐自我介紹畢小紅:中移(蘇州)軟件技術有限公司軟件開發工程師目前主要負責移動云函數計算的研發,容器服務監控研發。2341Knative簡要介紹Knative Eventing實現原理Knative Eventing事件傳遞機制Eventing在移動云函數計算的應用實踐目錄Knative簡介The Knative project provides a set of Kubernetes components that introduce event-driven and serverles
2、s capabilities for Kubernetes clusters.Knative Eventing簡介如何實現事件生產和消費者相互獨立?CloudEvents!標準數據格式CloudEventsCloudEvents:是一種以通用方式描述事件數據的規范,該規范旨在簡化跨服務、跨平臺事件的聲明和交互。specversion:1.0,type:com.github.pull.create,source:https:/xx/xxx,subject:123,id:A234-1234-1234,time:2021-04-05T17:31:00Z,comexampleextension1:va
3、lue,comexampleothervalue:5,datacontenttype:text/xml,data:ID屬性:事件id;Source屬性:標示事件發生的上下文;Type屬性:該屬性包含一個描述事件類型的值,描述與源事件相關的事件類型;Specversion屬性:CloudEvents規范的版本;Datacontenttype屬性:數據類型的內容,例如:“application/json”格式、“application/xml”格式;Dataschema屬性:指明事件數據所遵循的統一資源標識;Subject屬性:事件主題;Time屬性:事件發生的時間戳。Knative Eventi
4、ng系統實現原理Eventing功能架構 事件生產者:產生事件的系統;事件適配器:數據處理的實體,將外部事件數據接入轉化為CloudEvents格式,并將消息傳入事件平臺中;事件傳遞:Eventing系統中實現了多種消息轉發機制,主要包括直接轉發,通道訂閱模式和Broker/Trigger消息傳遞模式,復雜模式;事件消費者:接受事件的一方,如Knative服務或核心Kubernetes服務。實現通用接口:可尋址對象,能夠接收和通過 HTTP 傳遞到其status.address.url 地址的事件;可調用對象,能夠接收通過 HTTP 傳遞的事件并轉換事件,在 HTTP 響應中返回 0 或 1
5、個新事件。Knative Eventing系統實現原理預定義的事件源:ContainerSource:實例化一個容器,通過該容器產生事件 ApiserverSource:每次創建或更新 Kubernetes 資源時,ApiserverSource 都會觸發一個新事件 GitHubSource:GitHub 操作觸發一個新事件 CronJobSource:通過 CronJob 產生事件 KafkaSource:接收 Kafka 事件并觸發一個新事件 RabbitMQ:將RabbitMQ消息帶入Knative SinkBinding:使用Kubernetes提供的資源(例如,Deployment,
6、Job,DaemonSet,StatefulSet)作事件源事件源:把事件生產者接入knative事件平臺中,并把事件傳送給消費者事件源主要功能:接收事件將事件轉化為CloudEvents格式將事件發送出去Knative Eventing系統實現原理Knative Eventing自定義的資源類型 Channel:實現事件的轉發和持久存儲,支持不同的技術如Kafka channel;Subscription:事件訂閱者,即事件轉發的目的地;Parallel:事件同時轉發給多個訂閱者的一種機制;Sequence:事件依次經過多個訂閱者的一種機制;Broker:可以接受事件、并把事件轉發到訂閱者;
7、Trigger:對某種事件的訂閱;ContainerSource:實例化一個容器,通過該容器產生事件;Knative Eventing系統實現原理Knative Eventing組件Eventing-controllerEventing-webhookMt-broker-controllerBroker-ingressBroker-filterImc-controllerImc-dispatcherkafka-ch-controllerkafka-webhookkafka-ch-dispatcherKnative Eventing系統Knative Eventing系統實現原理Broker/T
8、rigger創建實例說明apiVersion:eventing.knative.dev/v1 kind:Broker metadata:annotations:eventing.knative.dev/broker.class:MTChannelBasedBroker name:onest-broker namespace:b4be0.0ad spec:config:apiVersion:v1 kind:ConfigMap name:config-br-kafka-channel namespace:knative-eventing apiVersion:eventing.knative.de
9、v/v1 kind:Trigger metadata:name:test-trigger namespace:b4be0.0ad spec:broker:onest-broker filter:attributes:type:dev.knative.sources.ping subscriber:ref:apiVersion:serving.knative.dev/v1 kind:Service name:my-service apiVersion:sources.knative.dev/v1kind:ContainerSourcemetadata:name:onest-source name
10、space:b4be0.0adspec:template:spec:containers:-image:receive_adapter:v0.1 name:receive-adapter sink:ref:apiVersion:eventing.knative.dev/v1 kind:Broker name:onest-brokerKnative Eventing系統實現原理Knative Eventing ingress轉發事件Knative Eventing系統實現原理Knative Eventing dispatcher轉發事件Knative Eventing系統實現原理Knative
11、Eventing filter轉發事件Eventing系統消息傳遞機制直接轉發01Broker/Trigger消息傳遞模式03并行轉發05通道訂閱模式02序列轉發04Eventing系統消息傳遞機制直接轉發事件從源直接傳遞到單個服務,該服務必須是可尋址端點,包括Knative服務或核心Kubernetes服務。在這種情況下,如果目標服務不可用,則源負責重試或排隊事件。如PingSource等自定義資源。Eventing系統消息傳遞機制通道訂閱模式Channel是事件生產者與事件消費者的中間層,它從事件源收集事件并分發給事件訂閱者。Subscription對象指定一個事件消費者對事件的訂閱,通過
12、Subscription來指定需要分發給哪些消費者。通道和訂閱模式無法過濾消息。Eventing系統消息傳遞機制Broker/Trigger消息傳遞模式 引入Broker和Trigger的目的,是為了搭建一個黑盒子,將具體的實現隱藏起來;Broker如同事件桶,接入各種不同的事件,這些事件通過不同的屬性來過濾;Trigger描述了一個過濾器,只有通過了過濾器選擇的事件,才可以被發送給消費者。Eventing系統消息傳遞機制Broker/Trigger原理Eventing系統消息傳遞機制Sequence Sequence 提供一種定義調用功能有序列表的方法,每個Step都可以修改,過濾或創建新的
13、事件。序列在后臺創建Channels和Subscriptions。Sequence Spec 包括 3 個部分:l steps:在 step 中定義了按照順序執行的服務,每個服務會對應創建 Subscription;l channelTemplate:指定了使用具體的那個 Channel;l reply:(可選)定義了將最后一個 step 服務結果轉發到的目標服務。apiVersion:messaging.knative.dev/v1alpha1kind:Sequencemetadata:name:testspec:channelTemplate:apiVersion:messaging.kn
14、ative.dev/v1alpha1 kind:InMemoryChannel steps:-ref:apiVersion:serving.knative.dev/v1alpha1 kind:Service name:test reply:kind:Broker apiVersion:eventing.knative.dev/v1alpha1 name:testEventing系統消息傳遞機制Sequencel 無返回事件處理l 有返回事件處理l 級聯 Sequencel 與Broker/Trigger模型結合使用Eventing系統消息傳遞機制Parallel Parallel CRD提供了
15、一種定義分支列表的方法,每個分支都接收相同CloudEvent。每個分支都包含一個過濾函數。Parallel Spec 包括 3 個部分:l branches:定義了過濾器和訂閱者的列表l channelTemplate:指定了使用具體的Channel;l reply:(可選)定義當分支沒有自己的結果時,將每個分支的處理結果發送到該處。apiVersion:flows.knative.dev/v1kind:Parallelmetadata:name:me-odd-even-parallelspec:channelTemplate:apiVersion:messaging.knative.dev
16、/v1 kind:InMemoryChannel branches:-filter:uri:http:/me-even-odd-switcher.default.svc.cluster.local/0 subscriber:ref:apiVersion:serving.knative.dev/v1 kind:Service name:me-even-transformer -filter:uri:http:/me-even-odd-switcher.default.svc.cluster.local/1 subscriber:ref:apiVersion:serving.knative.dev
17、/v1 kind:Service name:me-odd-transformer reply:ref:apiVersion:serving.knative.dev/v1 kind:Service name:me-event-displayEventing系統消息傳遞機制Parallel 首先為 Parallel 創建一個全局的 Channel。然后為每一個實例創建一個過濾 Channel;在每個分支中做了如下處理:-為全局的 Channel創建一個 Subscription,訂閱條件為filter信息,并且把 reply 響應發送給當前示例中的過濾 Channel;-為過濾 Channel 創
18、建一個 Subscription,將訂閱信息發送給每個示例的 Reply。如果當前示例中沒有設置Reply,則發送的全局Reply。Eventing在移動云函數計算應用實踐移動云函數計算的應用實踐移動云函數計算的應用實踐移動云函數計算技術架構移動云函數計算的應用實踐移動云函數計算應用移動云服務AI 接口API 網關 消息隊列.對象存儲云數據庫終端 用戶 Http RedisOnest .API GW Timer調用代碼依賴IDE開發者Fun函數計算FunFunFunFunFunFunFunRedis 云緩存.移動云函數計算的應用實踐移動云函數計算對象存儲觸發器FunFunFunFun云函數 S
19、FC后端服務API.OnestMysql上傳事件 刪除事件 文件上傳文件刪除事件通知 日志分析 圖片存儲視頻存儲日志存儲對象存儲 客戶端上傳/刪除圖片/視頻 等文件時,會在對象存儲產生上傳/刪除事件,該事件可以轉發到云函數,觸發函數運行具體的業務邏輯。在移動云函數中,可以基于不同 的編程語言(Python/NodeJS/PHP/JAVA/GO),撰寫自定義業務邏輯,如文件解壓,日志分析等。在移動云函數中,調用云上的其他服務,如事件通知,可以把自定義事件投遞到某個數據庫,或將對象傳到對象存儲。移動云函數計算的應用實踐移動云函數計算對象存儲觸發器實現原理移動云函數計算的應用實踐移動云函數計算http觸發器實踐FunFunFunFun云函數 SFCHTTP 觸發器 文件上傳查看文件列表 解壓文件下載 圖片存儲視頻存儲壓縮文件和彩云 客戶端上傳和彩云盤壓縮文件。在云函數中,文件解壓。使用函數計算的 HTTP 觸發器,用戶只需要編寫函數處理單個請求。當 TPS 升高時,函數計算會自動擴容計算資源執行多個函數實例處理請求。移動云函數計算的應用實踐移動云函數計算圖片處理實踐THANKS