無服務器計算,即通常所說的 Serverless,已經成為當前云計算領域的熱門話題與趨勢技術。無服務器計算是一種契合于當下云原生生態的開發、運行模式。無服務器并非不依賴服務器,而是對開發者而言服務器被抽象為更精確的算力單元。加州大學伯克利分校在論文 A Berkeley View on Serverless Computing 中提出的關于 Serverless 的觀點——Serverless computing = FaaS + BaaS 被廣泛接受,而 FaaS (函數即服務) 是 Serverless 的核心。
自 AWS Lambda 面世后,各大云計算巨頭廠商紛紛投入 Serverless 戰場,爭相推出各自的 Serverless 或 FaaS 平臺。另一方面,開發者不希望被特定廠商綁定的意愿也讓開源的 Serverless 項目有了一席之地。如今 OpenFaaS(faas 倉庫 20.3k)、Kubeless(6.7k)、Fission(6.4k)、OpenWhisk(5.4k)、Knative(serving 倉庫 3.9k) 社區已經擁有大量的擁簇與開發者。
那么為什么 KubeSphere 社區要做一個自己的 FaaS 項目而不是直接集成現有的主流 Serverless 或 FaaS 框架?或者說現在的 Serverless 市場為什么還需要 OpenFunction ?
根據 CNCF 的云原生報告可以看出,Kubernetes 在容器編排技術領域擁有絕對的優勢,甚至可以將 Kubernetes 作為云原生的代名詞。云原生是目前備受矚目的技術潮流,該領域的創新非常活躍,陸續涌現出了眾多優秀的開源項目(比如 Serverless 領域的 KEDA、Knative 等),并且還將繼續引領技術趨勢。在 Kubernetes 宣布 1.20 版本將棄用 Docker、不再將其作為默認的容器運行時之后,盡管 Docker 仍然占據著容器運行時領域最大的份額,但對于云原生開發者來說,不得不開始著手順應這方面的變化。
與此同時,人們生活方式的變化不斷催生新的業務模式,5G、大數據、邊緣計算、AI 推理、圖數據庫等服務應運而生。這些應用場景不但擴大了 Serverless 的潛在市場,結合云原生的技術潮流也孵化出很多新的技術,如 Dapr、WebAssembly 等。如何突破現有項目的局限引入更新更強力的技術,如何抹平運行時之間的差異降低應用的開發成本,逐漸成為了開發者的新煩惱。
0xScope:Eureka Trading創始人被黑1500萬美元資產已轉入Tornado Cash:4月17日消息,據0xScope監測顯示,Eureka Trading創始人Kuan Sun2022年6月被黑的1500萬美元資產通過Uniswap、Curve與Sushi Swap交換成1935枚ETH、120枚WBTC與630萬枚DAI,并通過Tornado Cash進行轉移。Foresight News注,Kuan Sun發推稱,2022年6月因私鑰泄露被黑1500萬美元,到目前為止已經為黑客收集了一些IP和其他信息,但是我鼓勵所有加密成員和安全專家參與此案,并且非常樂意為有價值的幫助提供賞金。黑客地址為:0xA1ac23bE458E14AC0A0003DC1343D2AC575EA3b6。[2023/4/17 14:08:03]
OpenFunction開源項目鏈接:
https://github.com/OpenFunction/OpenFunction
OpenFunction 是 KubeSphere 社區發起的開源 FaaS 項目,目前的核心開發人員均來自 KubeSphere 團隊。KubeSphere 社區一直陸續收到社區用戶對 Serverless 或 FaaS 功能的需求,也注意到了社區開發者參與 Serverless 開發的興趣:
KubeSphere 是否有計劃集成 Knative ?我愿意參與開發!
KubeSphere 有 FaaS 方面的計劃嗎?是否可以集成 OpenFaaS ?
可否提供日志告警的功能?這個需求本質上是可自動伸縮的異步數據處理。
和云原生一樣,Serverless 是個不容錯失的賽道。僅僅集成現有的 Serverless 或 FaaS 項目還不足以體現 Serverless 這個領域的重要性,于是 KubeSphere 社區從 2020 年下半年開始對 Serverless 領域進行深度調研。經過一段時間的調研后,我們發現:
現有開源 FaaS 項目絕大多數啟動較早,大部分都在 Knative 出現前就已經存在了;
Knative 是一個非常杰出的 Serverless 平臺,但是 Knative Serving 僅僅能運行應用,不能運行函數,還不能稱之為 FaaS 平臺;
OpenAI:GPT-4在許多標準化測試中比人類表現得更好:金色財經報道,Open-AI剛剛公布大型語言模型的最新版本——GPT-4,該版本比以前的版本“更大”,這意味著其已經在更多的數據上進行了訓練,并且在模型文件中有更多的權重,這使得它的運行成本更高。OpenAI表示,新模型將產生更少的錯誤答案,更少地偏離談話軌道,更少地談論禁忌話題,甚至在許多標準化測試中比人類表現得更好。例如,GPT-4在模擬律師考試的成績在考生中排名前10%左右,在SAT閱讀考試中排名前7%左右,在SAT數學考試中排名前11%左右。 (CNBC)[2023/3/15 13:04:36]
Knative Eventing 也是非常優秀的事件管理框架,但是設計有些過于復雜,用戶用起來有一定門檻;
OpenFaaS 是比較流行的 FaaS 項目,但是技術棧有點老舊,依賴于 Prometheus 和 Alertmanager 進行 Autoscaling,在云原生領域并非最專業和敏捷的做法;
近年來云原生 Serverless 相關領域陸續涌現出了很多優秀的開源項目如 KEDA、 Dapr、 Cloud Native Buildpacks(CNB)、 Tekton、 Shipwright 等,為創建新一代開源 FaaS 平臺打下了基礎。
綜上所述,我們調研的結論就是:現有開源 Serverless 或 FaaS 平臺并不能滿足構建現代云原生 FaaS 平臺的要求,而云原生 Serverless 領域的最新進展卻為構建新一代 FaaS 平臺提供了可能。于是 KubeSphere 社區決定發起 OpenFunction 項目,其目標是構建新一代開源函數計算平臺。
截至 2021 年 8 月, OpenFunction 陸續發布了 4 個版本,在最新的 v0.3.1 版里 builder 和 serving 部分已經趨于穩定,并且發布了 OpenFunction 自己的事件驅動框架 OpenFunction Events。KubeSphere 社區將持續在 OpenFunction 進行投入,最新路線圖詳見 OpenFunction Roadmap (https://github.com/OpenFunction/OpenFunction/blob/main/docs/roadmap.md)。
目前青云全象低代碼平臺已經采用 OpenFunction 實現靈活的低代碼平臺插件機制;也有來自 Nebula 的社區用戶用 OpenFunction 實現了語音助手;有社區開發者為 OpenFunction 社區貢獻了 NodeJS 版的 Function Framework 和 Builder。隨著項目逐漸成熟,會有越來越多的社區用戶使用 OpenFunction,我們也期待有更多的社區開發者參與進來。
元宇宙游戲Neopets Metaverse完成400萬美元融資,Polygon Ventures等參投:1月19日消息,在線游戲Neopets推出的元宇宙游戲Neopets Metaverse完成400萬美元融資,Polygon Ventures、Blizzard Avalanche Ecosystem Fund、Hashkey Capital、IDG Capital和NetDragon Websoft等參投,所籌資金將用于進一步實現增長并提供身臨其境的游戲體驗,同時與投資者和更廣泛的GameFi社區合作。
據悉,Neopets Metaverse是一款基于原始Neopets經典游戲的P2E、社區驅動的虛擬寵物游戲。(美通社)[2023/1/19 11:20:35]
OpenFunction 是一個開源的函數即服務(FaaS)框架,和大多數同類產品一樣,旨在讓用戶專注于他們的業務邏輯,而不必擔心底層運行環境和基礎設施。如下圖所示函數生命周期中幾個重要的部分分別是: 函數框架(Functions framework)、函數構建 (Build)、函數服務 (Serving)和事件驅動框架 (Events Framework),下面我們將分別詳細闡述這幾個重要部分的設計及架構。
OpenFunction 函數生命周期示意圖
在 FaaS 框架中,怎樣將一段函數代碼轉換為可運行的應用是一個重要的環節。我們知道函數計算之所以降低了開發成本,正是因為函數框架(Functions framework)代替開發者完成了很多與業務無關的工作。不僅如此,函數框架還為開發者提供了應用運行環境中的上下文和語義明確的函數開發擴展庫(可以理解為 SDK)。
這部分的設計并不復雜,實現的難點在于如何做到上述的語義明確和功能強大。
我們調研了幾種主流的 FaaS 框架(平臺),發現大部分的項目選擇了封裝函數入參的做法,其意圖在于抽象輸入數據的處理方式,即無論請求是什么格式,都可以使用框架提供的函數擴展庫來獲取數據。在這些成熟的案例中,我們發現封裝入參的方式可以使函數在同一個框架內具有很高的靈活性和可擴展性。當函數的數據輸入源變更后,函數本身不需要再做對應的入參適配,從而降低了使用者的開發成本。
NFT交易市場OpenSea網站故障近16小時,已超官方原定修復時間:NFT(非同質化代幣)交易市場OpenSea在北京時間11月24日凌晨2:00左右發推稱,關于網站的停機問題表示抱歉,搜索索引出現了故障,并且備份損壞,所以無法恢復。正在重新編制索引數據(一切都是安全的),應該在大約12小時內恢復。多名推特用戶留言稱,出現賬戶資產顯示錯誤、遇到無法加載等問題。截至目前,距離該推文發布已過去近16個小時,OpenSea官網仍然顯示網站出現故障,因此并非所有單品都會展示在網站上,用戶資產在區塊鏈上仍然安全,預計很快就會恢復。[2020/11/24 21:58:33]
從這個角度看,封裝入參方式比不封裝(或自定義)入參方式具備更大的潛力。接受了這個設定之后,我們再來看看函數框架的本質。函數框架本質上可以歸納為以下三個作用:
將用戶提供的函數轉換成可以運行的應用;
將用戶函數封裝為一個標準的訪問地址,提供給輸入端;
將輸出端封裝為一個標準的訪問地址,提供給用戶函數。
如果你了解過 Dapr,你就會發現后面兩點和 Dapr 的工作原理幾乎一致。Dapr 是一種分布式應用運行時,它以一種優雅的方式簡化了開發者與中間件的交互。在 Kubernetes 中,Dapr 可以看作以 Sidecar 的方式實現了函數轉換的功能。那么是否能用 Dapr 作為 FaaS(Serverless)平臺中的 Functions framework?答案是肯定的。OpenFunction 正是基于 Dapr 提供了一套靈活的 functions framework 機制(其中包含了借鑒 Google functions-framework 處理 HTTP 函數的部分)實現了與各種復雜中間件的對接,并搭載兩種運行時——以 Knative serving 為基礎的同步函數運行時,和以 KEDA 結合 Dapr 為基礎的異步函數運行時 OpenFunctionAsync,以期實現對實際生產中大部分應用場景的覆蓋。
為了能讓這個函數框架真正運作起來,往往還需要借助一些函數范圍外的配置,用于定義函數和觸發器、數據源、數據目標之間的關聯關系。我們稱之為函數上下文(OpenFunction Context),理論上它通常具備以下內容:
使用者通用元數據,如用戶 ID、RequestID 等其他上下文信息;
動態 | ETC Cooperative執行董事譴責ECIP編輯Wei Tang濫用職權 并提議將其從ECIP編輯中剔除:ETC Cooperative執行董事Bob Summerwill近期宣布擴展對ECIP-0001提案的支持,提案中一些變化包括,剔除Rust開發者Wei Tang。Bob Summerwill指控稱,Wei Tang作為ECIP編輯者和ECIP-1000作者,多次濫用職權,威脅要軟分叉或是離開ETC生態系統。此外,由于在ECIP-1000的編輯器列表中使用soc1c的真實姓名代替了soc1c,ETC社區中還有聲音指責稱Wei Tang對社區另一位ECIP編輯soc1c人肉搜索。對此,Wei Tang于博客中解釋事件緣由,并回應稱,對于所涉及的提案要求作出更改等是出于避免ETC過于集中化的考慮。不過后期爭議實際轉移到了自己身上。同時Wei Tang表示并沒有所謂的人肉soc1c事實。因為此前合并編輯者列表時,soc1c本人已同意,且soc1c真實姓名在社區中廣為人知,且其本人也經常使用自己的真實姓名。據悉,該爭議事件起于ECBP-1076提案。由于覺得首次在ETC會議上提出并一次性接受ECBP-1076提案,以及ECIP編輯將ECBP-1065提案狀態更改為“活動”的做法不謹慎,因此Wei Tang要求進行更多討論,但遭soc1c拒絕(soc1c執行了撤銷審查),此后soc1c提交請求要求將Wei Tang從ECIP流程中剔除。此后,Aztlan硬叉過程中,又出現ECIP-1061和ECIP-1072的爭議(該爭議中也出現了“撤銷”操作)。Wei Tang認為,提案過程中soc1c的“撤銷”操作實際上是很大的集中化風險,并創建了新請求,認為“撤銷”操作違反流程,不應被當做規范。(AMBCrypto)[2020/1/26]
事件源的定義,如名稱、類型、服務地址、數據類型等;
觸發器的定義,如名稱、類型、觸發規則、觸發周期、執行方式等;
函數的定義,如名稱、監聽地址等;
提供自定義的 key-value 參數,如環境變量,以及用于適配不同的 Runtime 等。
OpenFunction 組件示意圖
我們通常會用 Build 來指代容器鏡像的打包,但實際上將源代碼打包成鏡像只是構建工作中的一個步驟,開發者還有諸如拉取代碼、代碼預處理、鏡像上傳等工作需要完成。由此我們將 Build 拆分為兩個主要的功能點,即制作容器鏡像與創建構建流水線。在調研了 Cloud Native Buildpacks(CNB)、Tekton、Shipwright 等開源項目后,我們最終設計了 OpenFunction Builder CRD,為用戶提供了一種可以自由選擇 Build 方案的 Build 框架。
Docker 被 Kubernetes 放棄作為默認的容器運行時后,我們在 Kubernetes 中制作容器鏡像還有多種選擇比如 Kaniko、Buildah、BuildKit 以及 Cloud Native Buildpacks(CNB)。其中前三者均依賴 Dockerfile 去制作容器鏡像,而 Cloud Native Buildpacks(CNB)是云原生領域最新涌現出來的新技術,它不依賴于 Dockerfile,而是能自動檢測要 build 的代碼,并生成符合 OCI 標準的容器鏡像,已經被 Google Cloud、IBM Cloud、Heroku、Pivotal 等公司采用。
OpenFunction 選擇 Cloud Native Buildpacks(CNB) 作為容器鏡像制作的默認選擇,陸續也會支持 Kaniko、Buildah、BuildKit 等方式。
Cloud Native Buildpacks(CNB) 的核心是 CNB Lifecycle,它負責將由應用源代碼到鏡像的構建步驟抽象出來,形成一套標準規范從而完成對整個過程的編排,并最終產出應用鏡像。這樣一來,開發者就可以將不同邏輯的最小構建單元 buildpack(可以理解為 Dockerfile 中的鏡像分層) 按自身的需求組合到一起,生成一個構建器(builder),再交由 CNB 處理鏡像的構建過程。
因為這是一套開源的標準,所以在 OpenFunction Builder 中開發者不但可以選擇 OpenFunction 自身的構建器(builder)來構建鏡像,還可以選擇任何一種符合 CNB Lifecycle 的構建器,如 Google buildpacks、Paketo buildpacks 等,這意味著使用者可以構建任何語言、類型的應用。
Build 的另一個需求——構建流水線,就需要借助 Tekton 這樣優秀的流水線工具作為支持。在最開始的版本中,OpenFunction 毫不猶豫地選擇 Tekton 來拆分構建環節的工作,為之前所談到的構建任務在 Tekton 中創建對應的 Task 及 Pipeline 等。
在對 Shipwright 的調研中我們發現 Shipwright 同樣由 Tekton 驅動,并且 Shipwright 將 Tekton 的設計理念帶入了鏡像構建過程,形成了非常云原生的鏡像構建框架,同時也支持使用 Kaniko、Buildah、BuildKit 以及 Cloud Native Buildpacks(CNB)構建鏡像,并可以通過指定 BuildStrategy 和 ClusterBuildStrategy 在上述四種鏡像構建方法之間進行切換。
于是我們在 v0.3.0 版本中將原有的 Tekton + Cloud Native Buildpacks 的構建方案切換成了 Shipwright。OpenFunction Builder 從設計上完美解決了如何在沒有 Dockerfile 的情況下制作容器鏡像的問題,并且具備了高度自由、云原生的構建器(構建方案)選擇機制。無論是使用現成的 Dockerfile 還是僅用一段源代碼,OpenFunction Builder 都可以將其構建為 Open Container Initiative(OCI)標準鏡像并上傳到指定的倉庫中。
函數服務 (Serving)指的是如何運行函數 / 應用,以及賦予函數 / 應用基于事件驅動或流量驅動的自動伸縮的能力(Autoscaling)。我們根據這兩個方面設計了負責運行函數 / 應用的 OpenFunction Serving CRD,并將函數分為同步函數和異步函數。同步函數是指客戶端發出請求后,必須等到函數執行完成并獲取函數運行結果后才返回;異步函數是指客戶端觸發函數后,無需等待函數運行結束即可返回。
在同步函數方面,Knative Serving 具備了非常出色的自動伸縮機制,OpenFunction 支持 Knative Serving 作為同步函數運行時,未來還將基于 KEDA http-add-on 開發 OpenFunctionSync 同步函數運行時。
在異步函數方面,我們結合 KEDA 和 Dapr 開發了 OpenFunctionAsync 異步函數運行時。Dapr 用于解耦函數對各種中間件的訪問;KEDA 提供了 ScaledObject 和 ScaledJob 兩種資源,用于根據實際事件源的監控指標自動進行工作負載副本數量的伸縮,它很好地彌補了 Knative Serving 在非 HTTP 驅動源場景中的不足。同時 KEDA 也在持續開發可以處理 HTTP 請求的 http-add-on 項目,這使得 OpenFunction 在后續的演進中具備了更多的選擇,OpenFunction 未來將集成 KEDA http-Add-on 實現不依賴 Knative Serving 的 OpenFunctionSync 運行時。
我們將上面的工作集合起來,即使用 OpenFunction Serving CRD 來管理控制函數運行的整個生命周期。Serving CRD 包含了使用者對函數類型、輸入、輸出端的定義,以及函數實例自動伸縮的定義。OpenFunction Controller 會按照這些定義,生成相應的 Knative Service、Dapr 和 KEDA 組件,其中 Knative Service 負責同步函數的運行與自動伸縮;KEDA 會負責異步函數的自動伸縮,而 Dapr 會負責異步函數對接外部輸入 / 輸出。展開來講, Dapr 會將外部的輸入通過 OpenFunction Context 傳遞給 Functions framework,進而傳遞給函數;函數執行完成會通過調用 Functions framework 中相應的函數將輸出通過 Dapr 輸出到外部。
OpenFunction 事件框架示意圖
除了核心的 FaaS 框架之外,OpenFunction 也設計了事件驅動框架以實現對異步函數的驅動。目前事件框架參考了 Argo Events 與 Knative Eventing 的部分設計,同時避免了引入類似 Knative Eventing 中過于復雜的設計;通過引入 Dapr 解耦了 EventBus 與底層具體 Message Broker 的綁定,進而利用 Dapr 的 binding 和 pubsub 分別對接事件源與 EventBus,以更優雅和可插拔的方式實現了類似 Argo Events 的架構,具備了對事件源的條件判斷、對事件的流轉控制等能力。
本質上來看,事件框架也是一個由事件驅動的工作負載,那么它本身可以是 Serverless 形式的工作負載嗎?可以用 OpenFunction 的異步函數來驅動嗎?其實 OpenFunction 社區已將該設計列入路線圖中,目前也已實現部分組件的自驅動能力。
我們從一些關于 Serverless 的報告中可以看出,Serverless 服務有著可觀的市場潛力,未來五年內也許就會達到千億級的市場規模。然而對于 Serverless 技術本身來說,仍有很多待解決的問題,如冷啟動、安全性、可觀測性等等。
OpenFunction 在發展的過程中非常看中趨勢中的技術,相信它們可以帶來活力與變革能力(也許 Wasm 會成為 OpenFunction 的下一個服務運行時)。將成熟的與新生的技術掰開揉碎和在一起,再穿插進獨立的設計與思考,或許就是 OpenFunction 解決上述問題的后發者優勢,當然也是 OpenFunction 當下面臨的挑戰。
期待感興趣的開發者加入 OpenFunction 社區。可以提出任何你對 OpenFunction 的疑問、設計提案與合作提議。
作者:
方闐 | OpenFunction Maintainer
霍秉杰 | OpenFunction 發起人
NFT市場分析師PlungeFather今發推特稱在過去24小時里,一個名為“Cool Cats”的銷售額正在快速上升,超越NBA Top Shot.
1900/1/1 0:00:00處在加速迭代中DeFi,正在重新定義金融的未來,不斷涌現的創新讓我們每天都處在萌新的狀態。但是我們似乎很久沒有聽到關于去中心化抵押借貸的變革了,它仿佛成為了一成不變的基礎設施.
1900/1/1 0:00:00DFINITY周報是由DfinityClub推出的內容版塊,匯聚近一周DFINITY及其生態應用相關的重要/熱點資訊.
1900/1/1 0:00:00傳統金融生態正快速浮現許多問題,包括缺乏透明性、覆蓋范圍有限、缺乏適應性的基礎設施架構,這些都已見怪不怪了,但一直沒有更好的替代系統;直到今天.
1900/1/1 0:00:00做一件有價值的事,一直做,時間會給回報。 ——羅輯思維 即使圈內人看這個行業,每天都充滿了創新。但對于圈外人而言,總認為這是一種圈內人的自嗨。甚至會覺得區塊鏈的創新并不帶來什么實際價值.
1900/1/1 0:00:00Coinhub錢包下載:https://www.coinhub.org/downloadCoinhub錢包使用指南:https://www.yuque.
1900/1/1 0:00:00