成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

終于有人把Knative講明白了

云計算 云原生
Knative一個很重要的目標就是制定云原生、跨平臺的Serverless編排標準。Knative是通過整合容器構建(或者函數)、工作負載管理(和動態擴縮)以及事件模型來實現Serverless標準的。

其基本信息如表2-2所示。

▼表2-2 Knative基本信息

Knative一個很重要的目標就是制定云原生、跨平臺的Serverless編排標準。Knative是通過整合容器構建(或者函數)、工作負載管理(和動態擴縮)以及事件模型來實現Serverless標準的。Knative社區的主要貢獻者有Google、Pivotal、IBM、Red Hat。CloudFoundry、OpenShift這些PaaS提供商都在積極地參與Knative的建設。

1.工作原理

如圖2-14所示,Knative是建立在Kubernetes和Istio平臺之上的,使用了Kubernetes提供的容器管理組件(deployment、replicaset和pod等),以及Istio提供的網絡管理組件(ingress、LB、dynamic route等)。

Knative中有兩個重要的組件,分別是為其提供流量的Serving(服務)組件以及確保應用程序能夠輕松地生產和消費事件的Event(事件)組件。

其中,Serving組件基于負載自動伸縮,包括在沒有負載時縮減到零,允許使用者為多個修訂版本應用創建流量策略,從而通過URL輕松路由到目標應用程序;而Event組件的作用是使生產和消費事件變得容易,允許操作人員使用自己選擇的消息傳遞層。

除了Serving和Event組件之外,Build也是Kantive的組件之一。其提供“運行至完成”的顯示功能,這對創建CI/CD工作流程很有用,通過靈活的插件化的構建系統將用戶源代碼構建成容器。

目前,其已經支持多個構建系統,比如Google的Kaniko,它無須運行Docker Daemon就可以在Kubernetes集群上構建容器鏡像。Serving使用它將源存儲庫轉換為包含應用程序的容器鏡像。

在諸多Serverless開源項目中,Knative的優勢也是較為明顯的。一方面,Knative以Kubernetes為底層框架,與Kubernetes生態結合得更緊密。無論是云上Kubernetes服務還是自建Kubernetes集群,都能通過安裝Knative插件快速地搭建Serverless平臺。

另一方面,Knative聯合CNCF,把所有事件標準化為CloudEvent,提供事件的跨平臺運行,同時讓函數和具體的調用方法解耦。在彈性層面,Knative可以監控應用的請求,并自動擴縮容,借助于Istio(Ambassador、Gloo等)支持藍綠發布、回滾的功能,方便應用發布。

同時,Knative支持日志的收集、查找和分析,并支持VAmetrics數據展示、調用關系跟蹤等。

Knative工作原理如圖2-14所示。

▲圖2-14 Knative工作原理

2.功能與策略

(1)Serving(服務)

Serving模塊定義了一組特定的對象,包括Revision(修訂版本)、Configuration(配置)、Route(路由)和Service(服務)。Knative通過Kubernetes CRD(自定義資源)的方式實現這些Kubernetes對象。所有Serving組件對象間的關系可以參考圖2-15。

▲圖2-15 Serving組件對象間的關系

Knative Serving始于Configuration。使用者在Configuration中為部署容器定義所需的狀態。最小化Configuration至少包括一個配置名稱和一個要部署容器鏡像的引用。

在Knative中,定義的引用為Revision。Revision代表一個不變的、某一時刻的代碼和Configuration的快照。每個Revision引用一個特定的容器鏡像和運行它所需要的特定對象(例如環境變量和卷)。然而,使用者不必顯式創建Revision。Revision是不變的,它們從不會被改變和刪除。

相反,當使用者修改Configuration的時候,Knative會創建一個Revision。這使得一個Configuration既可以反映工作負載的當前狀態,也可以用于維護一個歷史的Revision列表。

Knative中的Route提供了一種將流量路由到正在運行的代碼的機制。它將一個HTTP可尋址端點映射到一個或者多個Revision。Configuration本身并不定義Route。

(2)彈性伸縮

Serverless架構的一個關鍵原則是可以按需擴容,以滿足需要和節省資源。Serverless負載應當可以一直縮容至零。這意味著如果沒有請求進入,則不會運行容器實例。如圖2-16所示,Knative使用兩個關鍵組件實現該功能。它將Autoscaler和Activator實現為集群中的Pod。

▲圖2-16 Knative彈性伸縮原理簡圖

用戶可以看到它們伴隨其他Serving組件一起運行在knative-serving命名空間中。Autoscaler收集達到Revision并發請求數量的有關信息。為了做到這一點,它在Revision Pod內運行一個名為queue-proxy的容器。該Pod中也運行用戶提供的鏡像。

queue-proxy檢測該Revision上觀察到的并發量,然后每隔一秒將此數據發送到Autoscaler。Autoscaler每隔兩秒對這些指標進行評估,并基于評估的結果增加或者減少Revision部署的規模。默認情況下,Autoscaler嘗試維持每Pod每秒平均接收100個并發請求。這些并發目標和平均并發窗口均可以變化。

Autoscaler也可以利用Kubernetes HPA(Horizontal Pod Autoscaler)來替代該默認配置。這將基于CPU使用率實現自動伸縮,但不支持縮容至零。這些設定都能夠通過Revision元數據注解(Annotation)定制。

Autoscaler采用的伸縮算法針對兩個獨立的時間間隔計算所有數據點的平均值。它維護兩個時間窗,分別是60秒和6秒。Autoscaler以兩種模式運作:Stable Mode(穩定模式)和Panic Mode(恐慌模式)。在穩定模式下,它使用60秒時間窗的平均值決定如何伸縮部署以滿足期望的并發量。

如果6秒時間窗的平均并發量兩次達到期望目標,Autoscaler轉換為恐慌模式并使用6秒時間窗。這讓它更加快捷地響應瞬間流量的增長。它也僅僅在恐慌模式下擴容以防止Pod數量快速波動。如果超過60秒沒有發生擴容,Autoscaler會轉換回穩定模式。

(3)Build(構建)

Knative的Serving(服務)組件是解決如何從容器到URL的,而Build組件是解決如何從源代碼到容器的。Build資源允許用戶定義如何編譯代碼和構建容器。這確保了在將代碼發送到容器鏡像庫之前以一種一致的方式編譯和打包代碼。下面介紹一些新的組件。

  • Build:驅動構建過程的自定義Kubernetes資源。在定義構建時,用戶需要定義如何

獲取源代碼以及如何創建容器鏡像來運行代碼。

  • Build Template:封裝可重復構建步驟以及允許對構建進行參數化的模板。
  • Service Account:允許對私有資源(如Git倉庫或容器鏡像庫)進行身份驗證。

(4)Event(事件)

到目前為止,向應用程序發送基本的HTTP請求是一種有效使用Knative函數的方式。無服務器的松耦合特性同時也適用于事件驅動架構。也就是說,可能在文件上傳到FTP服務器時需要調用一個函數;或者任何時間發生一筆物品銷售時需要調用一個函數來處理支付和庫存更新的操作。

與其讓應用程序或函數考慮監聽事件的邏輯,不如當那些被關注的事件發生時,讓Knative去處理并通知我們。

自己實現這些功能則需要做很多工作并要編寫實現特定功能的代碼。幸運的是,Knative提供了一個抽象層使消費事件處理變得更容易。

Knative直接提供了一個“事件”,而不需要編寫特定的代碼來選擇消息代理。當事件發生時,應用程序無須關心它來自哪里或發到哪里,只需要知道事件發生了即可。如圖2-17所示,為實現這一目標,Knative引入了三個新的概念:Source(源)、Channel(通道)和Subscription(訂閱)。

  • Source(源):事件的來源,用于定義事件在何處生成以及如何將事件傳遞給關注對象的方式。
  • Channel(通道):通道處理緩沖和持久性,即使該服務已被關閉,也可確保將事件傳遞到預期的服務。另外,通道是代碼和底層消息傳遞解決方案之間的一個抽象層。這意味著可以像Kafka和RabbitMQ一樣在某些服務之間進行消息交換,但在這兩種情況下都不需要編寫特定的實現代碼。
  • Subscription(訂閱):將事件源發送到通道,并準備好處理它們的服務,但目前沒有辦法獲取從通道發送到服務的事件。為此,Knative設計了訂閱功能。訂閱是通道和服務之間的紐帶,指示Knative如何在整個系統中管理事件。

▲圖2-17 Knative事件處理模型簡圖

Knative中的服務不關心事件和請求是如何獲取的。它可以獲取來自入口網關的HTTP請求,也可以獲取從通道發送來的事件。無論通過何種方式獲取,服務僅接收HTTP請求。這是Knative中一個重要的解耦方式。它確保將代碼編寫到架構中,而不是在底層創建訂閱、通道向服務發送事件。

關于作者:劉宇(花名:江昱),國防科技大學電子信息專業博士,阿里云Serverless產品體驗側負責人,從事Serverless相關的工作多年,負責阿里云函數計算(FC)、Serverless工作流(FNF)等產品的體驗工作,有豐富的實踐經驗。阿里云戰略級開源項目Serverless Devs發起人和負責人,Serverless Framework、Kubevela等開源項目貢獻者,社區項目Anycodes在線編程負責人。

本文摘編自《Serverless工程實踐:從入門到進階》,經出版方授權發布。

責任編輯:武曉燕 來源: 大數據DT
相關推薦

2021-10-09 00:02:04

DevOps敏捷開發

2021-06-13 12:03:46

SaaS軟件即服務

2021-06-29 11:21:41

數據安全網絡安全黑客

2022-07-31 20:29:28

日志系統

2020-11-30 08:34:44

大數據數據分析技術

2022-01-05 18:27:44

數據挖掘工具

2021-03-03 21:31:24

量化投資利潤

2021-02-14 00:21:37

區塊鏈數字貨幣金融

2022-04-22 11:26:55

數據管理架構

2022-04-12 18:29:41

元數據系統架構

2021-10-17 20:38:30

微服務內存組件

2021-12-03 18:25:56

數據指標本質

2021-03-25 11:24:25

爬蟲技術開發

2020-11-03 07:04:39

云計算公有云私有云

2022-04-27 18:25:02

數據采集維度

2021-10-12 18:31:40

流量運營前端

2021-09-02 12:30:22

自動駕駛人工智能技術

2021-04-12 07:36:15

Scrapy爬蟲框架

2022-02-15 09:04:44

機器學習人工智能監督學習

2022-04-18 07:37:30

數據信息知識
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色免费三级 | 日本不卡一区二区三区 | 中文字幕精品一区二区三区在线 | 国产精品久久 | 中文字幕福利视频 | 一级片成人 | 国产91在线 | 中日 | 欧美视频一级 | 色综合久久伊人 | 国产黄视频在线播放 | 精品国产综合 | 性做久久久久久免费观看欧美 | 日韩欧美一区二区三区在线播放 | 91精品国产一区二区三区 | 久草视频网站 | 亚洲精品一区二区另类图片 | 黄色香蕉视频在线观看 | 欧美成人a∨高清免费观看 91伊人 | 中文字幕av网站 | 日韩欧美高清 | 国产精品久久久久久婷婷天堂 | 本道综合精品 | 国产精品久久久久久久久久久免费看 | 午夜精品久久久久久久星辰影院 | 日日摸夜夜添夜夜添精品视频 | 伊人久操| 中文字幕欧美日韩 | 日韩视频一区在线观看 | 天天射美女 | 精品日韩在线 | 涩涩片影院 | 日韩美av| 91福利在线导航 | 狠狠色综合久久丁香婷婷 | 毛片韩国 | 亚洲精品欧美 | 成人免费观看男女羞羞视频 | 欧美一级免费看 | 国产精品精品视频一区二区三区 | 日韩av在线一区二区三区 | 亚洲精品66 |