新聞中心
引言:如今在無服務器(serverless)領域出現(xiàn)了一個新的超級英雄--nuclio。本文通過介紹它開源的功能,向您展示它如何幫助開發(fā)者使用各種高性能的無服務器化函數(shù)。

或許我們已經(jīng)習慣了這么一種所謂的“平衡”:如果某樣東西就像無服務器那樣抽象且易用,那么它很可能是比較緩慢和不靈活的。否則的話,我們不得不放棄高性能和易用性,來滿足某些獨特的應用需求。但是如今,nuclio的無服務器功能函數(shù),卻能讓我們在不干擾既有架構的情況下快速地創(chuàng)建和運行代碼。nuclio不但在運行速度上比裸機(bare-metal)代碼要快,而且具有廣泛的應用范圍。它不僅在調試上較為簡單,更為重要的是它可以運行在任何地方。
前一段時間,iguazio(譯者注:這是一家數(shù)據(jù)分析的服務提供商,專注于敏捷云和實時企業(yè)數(shù)據(jù)的分析)需要在它的實時數(shù)據(jù)平臺上運用某種方法來增加自身的彈性和臨時數(shù)據(jù)的處理能力,因此我們?yōu)樗_發(fā)了一個高速FaaS層(譯者注:Functions as a Service的簡稱)。我們通過在上一版所積累的經(jīng)驗,建立了一個獨特的開源的無服務器平臺,我們稱之為nuclio。它的特點如下:
- 能交付出實時性能和***的并發(fā)量
- 實現(xiàn)簡單的調試、回歸測試和多版本的CI/CD(譯者注:持續(xù)集成和持續(xù)交付)管道
- 支持可植入的數(shù)據(jù)和各種通用API的事件源
- 可在低功耗設備、筆記本電腦、私有云和公共云之間進行移植
nuclio的架構
nuclio的核心部件是功能函數(shù)處理器(由GO所編寫,譯者注:Go語言是谷歌2009發(fā)布的第二款開源編程語言)。該處理器通過抽象的接口進行工作,它是函數(shù)的“操作系統(tǒng)”,提供對事件、數(shù)據(jù)、日志等方面的訪問。相同的功能代碼能夠被多種可植入的事件源(目前支持HTTP、Kinesis、Kafka、RabbitMQ、MQTT、NATS、iguazio的 V3IO和多種模擬器)所提供。
一個由數(shù)據(jù)綁定的接口會去訪問各種外部的數(shù)據(jù)(如:對象、文件、數(shù)據(jù)庫和各種數(shù)據(jù)流),并且負責所有的數(shù)據(jù)連接、安全性以及緩存的各個方面。我們可以編寫一個函數(shù),來使用到本地的各種文件,或通過HTTP去訪問遠程的數(shù)據(jù),或是極快地橫向擴展數(shù)據(jù)庫和基于TCP的數(shù)據(jù)流,或者在不修改代碼的情況下實現(xiàn)RDMA(譯者注:Remote Direct Memory Access的縮寫)。
nuclio處理器是實時的。訪問nuclio “操作系統(tǒng)(OS)”的事件和數(shù)據(jù)是由并行觸發(fā)、零拷貝、智能內存/線程重用以及非阻斷IO式來實現(xiàn)的。編寫你自己的裸機函數(shù)可能會比在nuclio處理器的“生態(tài)系統(tǒng)”中運行它要慢一些。單個nuclio函數(shù)處理器可以每秒運行400000次函數(shù)調用(使用的是一個簡單的GO函數(shù)),而在響應上只有0.1ms的延遲。這個指標比大多數(shù)無服務器化/FaaS的解決方案要快100倍?;贕O的處理器通過低延遲的共享內存去聯(lián)絡其他語言的運行,從而訪問并獲悉上下文環(huán)境轉換時的清理,以及各種進程的啟動開銷。
Nuclio當前支持四種應用模式:同步、異步、流式和批量/交互式作業(yè)。它動態(tài)地在進程(the dealer)之間分配事件、數(shù)據(jù)流和作業(yè)任務。這些使得無服務器適用于那些包含厚重的后端和各種分析任務在內的,新的工作負荷。
nuclio關注便攜性和可重用性:
- 可工作在低功率設備、Docker、Kubernetes以及使用nuclio SDK的IDE內
- 在部署時將事件/數(shù)據(jù)源映射到不同函數(shù)或版本/標簽上
- 日志和統(tǒng)計數(shù)據(jù)可以被發(fā)往多種目標類型,或者發(fā)送到IDE屏幕上
- 各個功能函數(shù)的鏡像被存儲在一個共享庫里,并被推到多個集群/設備上
nuclio的便攜性體現(xiàn)在允許用戶在他們的筆記本上使用SDK或Docker來測試并調試各種函數(shù)。然后用戶將它們傳送并運行在不同的云端Kubernetes集群上,或者將它們推送到多個物聯(lián)網(wǎng)設備的端點上。nuclio還簡化了回歸測試和診斷過程:各個函數(shù)從模擬事件處接收到反饋之后,將它們的輸出寫入結構化的日志文件,以便與預期的結果做對比。預計將來升級到beta版后,它們還能實現(xiàn)自動化的傳遞。
nuclio的60秒快速入門
如果您要部署一個完整的Kubernetes集群或一套服務是不需要特別進行上手學習的。您只需要用Docker的一體化(all-in-one)版本來啟動nuclio并進行測試便可。請您跟隨如下的Linux命令進行輸入(假設Docker已被安裝完成):
- docker run -p 8070:8070 -v /var/run/docker.sock:/var/run/docker.sock nuclio/playground
然后,您可以打開瀏覽器,輸入地址HTTP://
nuclio的工場附帶了一些內置的示例,它們詮釋了如何通過行內注釋或預定義事件來編寫函數(shù)、使用日志和添加相關的包套件。
如果您想要上手學習的話,可以從下拉列表中選擇一個示例,對它進行編輯和重命名,然后予以推送式的部署。各種編譯錯誤會在日志中顯示出來,以方便您進一步進行修復,并重新部署。一旦完成之后,您就可以使用調用(invoke)標簽手動生成事件,從而對函數(shù)進行測試。通過使用日志級別的篩選器,你還能修改日志的復雜程度和問題調試的粒度。需要注意的是:在后臺,nuclio會根據(jù)你的函數(shù)去生成各種Docker的容器或Kubernetes的相關部署。
您既可以使用自己喜歡的IDE去開發(fā)nuclio的各種功能函數(shù),也可以導入或克隆現(xiàn)有的nuclio SDK,同時您還可以參照它們自帶的README或一些示例。您要想了解更多信息,請參看nuclio在Github上的文檔(https://github.com/nuclio/nuclio/blob/master/README.md)。我們在那里重溫了nuclio的架構,并且提供了有關使用和CLI(譯者注:command line interface)方面的細節(jié)。當然您也能在那里得到nuclio社區(qū)的幫助。
目前,nuclio仍處于開發(fā)階段,它支持Golang和Python語言,而它的Java和Node.js版本也即將被推出。請和我們一起加快對它的新功能開發(fā)吧,記得為它點贊。
【原標題】 nuclio: The New Serverless Superhero,作者: Yaron Haviv
網(wǎng)頁題目:nuclio:新的無服務器化超級英雄
分享鏈接:http://www.fisionsoft.com.cn/article/ccesehd.html


咨詢
建站咨詢
