1. 程式人生 > >數人云|史上最全,35個平臺、框架、資料庫細說什麼是Serverless

數人云|史上最全,35個平臺、框架、資料庫細說什麼是Serverless

數人云:Serverless,這個新興的技術正在逐步深入開發領域,它為應用提供大量基礎設施,減少開發人員的部署問題,同時它還能解決敏捷開發中,交付具有預算約束的可伸縮應用的問題。

本文將概述Serverless的發展歷史、基本概念、應用、框架和優點。

爺爺,啥是虛擬機器?

準備好如何回答這個問題吧,沒準幾十年後就得在飯桌上回答兒孫們,因為未來的開發人員可能永遠都不需要啟動例項,也不需要去碰大型伺服器。

(回憶臉)虛擬機器呀,就是一切開始的地方,一旦任何人在一臺獨特又普通的物理機上執行多個作業系統,就如同打開了一扇新世界的大門。

又過了一段時間,如同亞馬遜這些老牌公司,開啟了雲端計算的革命,在任何地方用一張信用卡即可用它們提供的幾近無限的虛擬機器,啥?你娃說還不夠?後來又出現一頭鯨魚,那是容器的黃金時代,最開始的幾年是挺難的,因為人們得花一些時間才能真正理解這個概念,然後,然後就是Serverless了……

那些孩子們可不會聽這些老掉牙的嘮叨,他們都去玩虛擬現實遊戲去了,獨留你在那裡長吁短嘆不斷追憶。

功能即服務

FaaS是理解Serverless的基礎概念,其定義為——

程式碼是在事件驅動的、短暫的和無狀態的環境中執行,完全由第三方託管,本文會介紹一些AWS jargons及服務以方便閱讀和理解。

  • 程式碼:雖然它還是那個程式碼,但仍有細微的差別,必須將所有需要的東西打包,如:External Libraries、ZIP檔案,另外功能應該有一個被稱之為處理程式的執行入口點。

  • 事件驅動:在FaaS中,每件事都會觸發某種行為,舉例說明,調整上傳圖片的大小,不需要寫程式碼對它進行接收、儲存、重新調整大小再次儲存,可以觸發一些程式碼,每次將新檔案發到S3儲存庫時,都會對影象進行調整。還有各種事件:資料庫中插入行,觀察日誌流、在佇列中獲取新訊息、甚至HTTP請求等。

  • 短暫的環境:FaaS在每次呼叫功能時,就會構建一個全新的環境,呼叫處理完成後即銷燬,雖然有點悲劇,但並非沒有道理:第一次執行非活躍的功能是有延遲的被稱之為冷啟動,若過多呼叫功能,環境可能會進行多個執行,消除冷啟動後,不會產生這個問題,另外還有成本:只按執行時間付費。

  • 無狀態:在功能呼叫之間沒有任何狀態,不能在本地或記憶體中儲存資訊,處理請求的所有上下關係必須保證每次執行時可用。

  • 完全由第三方託管:無需管理伺服器,截止目前,大多數Serverless廠商都提供了完整的維護服務,雖然無需搭建基礎設施,但弊端是被廠商控制和鎖定。

    Serverless只需整合外部服務以及開發它們之間的介面,無需擔憂伺服器方面的管理,這也正是用事件驅動架構的關鍵,這段程式碼應該自己寫還是交給第三方?某個部分能否被一個事件觸發?功能是否具有正確執行所需的上下關係等等,這些問題必須要經過大量的思考和迭代實踐。

Serverless平臺

本文中,收集了一些公司、產品、工具以及Serverless典型的框架。可以看到這個行業隨著時間的推移呈指數增長。所以從下圖開始,將公司分為幾個類別:

AWS Lambda

Lambda是AWS Serverless 推出的一個事件驅動平臺,執行程式碼以響應事件和自動管理程式碼所需的計算資源。

IBM Bluemix OpenWhisk

IBM OpenWhisk是一個分散式的、事件驅動的計算服務。OpenWhisk執行應用程式邏輯,以應對事件或直接通過HTTP呼叫網路或移動應用。

Google Cloud Functions

Google Cloud Functions是一個輕量級的、基於事件的非同步計算解決方案,允許開發人員構建小型專用功能響應雲事件,不需要管理伺服器或執行時的環境。

Azure Functions

Azure Functions是一項PaaS服務,使用者無需為峰值用量做準備或者為傳統的維護操作擔憂。通過多種語言(例如 JavaScript、C# 和 F#)以及指令碼選項(例如 Python、PHP、Bash、Batch 和 PowerShell)建立功能;一切都在基於 Web 的易用介面中實現。

Webtask

Webtask是簡單、輕量級、安全的方式獨立執行的後端程式碼,可有效減少後端需求。支援可擴充套件性,通過多租戶系統的自定義程式碼,是安全可靠的解決方案。

Serverless開源框架

LeverOS
一個開源雲平臺,簡化了複雜的基礎設施和微服務框架,功能強大,便於開發人員後期開發。

Funktion(Fabric8 / RedHat)
為Kubernetes實現了基於事件的Lambda樣式程式設計模型。Funktion的一個子集被稱為RedHat“fabric8.io”。

Fission.io

Kubernetes Serverless框架,專注於開發者的生產力的提高。

OpenLambda

OpenLambda是Apache Serverless專案,基於Linux容器。OpenLambda的目標之一是探索Serverless計算的新方法。經過嘗試發現OpenLambda還為時過早,不得不做一些修改和調整工作。

Iron.io

Iron.io開發了一個框架,用於事件驅動的計算和執行Serverless應用,近期已經開源。專注於交付呼叫API實現負載均衡和訊息佇列的靈活性,確定在何處部署現有的內部安全流程作業處理。

Kubeless (By Bitnami)

Kubernetes原生的Serverless Framework。

Openwhisk (By IBM)

IBM OpenWhisk執行應用程式邏輯,以應對事件或直接通過HTTP呼叫網路或移動應用。OpenWhisk是開源專案,管理(服務)版本稱為IBM Bluemix。

Serverless框架/庫

Serverless Inc

Serverless框架,允許部署自動伸縮,pay-per-execution、事件驅動的功能,不受限於公有云、私有云、混合雲。Serverless Inc目前支援AWS Lambda,Apache OpenWhisk,微軟Azure,擴充套件以支援其他雲提供商。

Stdlib

作為FaaS庫StdLib提供了一種簡單的方法來建立、分發和發現Web服務。

SPARTA

SPARTA轉換一個二進位制檔案註冊lambda函式進入一組獨立可尋的AWS Lambda功能。此外,SPARTA微服務作者提供一個機會來滿足其他要求,比如在AWS執行自定義,額外的基礎設施需求,監控和報警資訊。

Stackhut (nstack)

StackHut將程式碼轉變成雲API。編寫業務邏輯,而不管理伺服器邏輯,Python和JavaScript在雲中轉化為可伸縮的API,方便任意整合。

Gestalt (Galactic Fog)

Gestalt是一組微服務框架,可以幫助公司構建面向未來的雲原生應用。框架由三個主要的元資料層組成,負責跟蹤和管理所有IT資源,基礎架構層是一個可插入的容器和Lambda管理引擎,整合層是一套現成的微服務,旨在解決最常見的企業整合問題。

Effe

用來構建Serverless的開源架構,可執行在單個Lambda的功能上。

APEX

Apex可以輕鬆地構建、部署和管理AWS Lambda功能。通過節點可使用由AWS Lambda(如Golang)所不支援的語言,js shim注入到構建中,為測試功能、回滾部署、檢視度量、跟蹤日誌、連線到構建系統以及更多的功能提供了各種工作流相關工具。

Distribyte

Distribyte的目標是引入Serverless的優勢,允許應用程式在計算呼叫之間無縫地儲存資料,並將資料新增到Mix Unlocks中,也可以在現有的Serverless的範圍之外使用。

Serverless API 框架

Multicolour

REST API生成器,目標是為公司節省90%的成本和開發API的時間,連線功能非常強大,即使是Node.JS生態系統中最成熟的框架也無法匹敵。

Deployd

通過提供滿足複雜應用程式需求的重要功能,使構建API變得簡單。

Kong

可擴充套件的開源API層(API閘道器,或API中介軟體)。可以在任何RESTful API上執行,通過外掛擴充套件,這些外掛提供了核心平臺之外的額外功能和服務。

TYK

一個快速、可擴充套件和開源API閘道器,提供了一個API管理平臺,有API閘道器、API分析和API管理儀表板。

API Umbrella

位於API之前的代理,可以無縫地新增諸如API Key、速率限制和對任何API的分析等功能。

Fusio

開放原始碼的API管理平臺,可以幫助構建和管理REST API。提供了所有工具快速構建不同資料來源的API,同時可以自定義建立響應。

Kappa

命令列工具,可以讓AWS Lambda更容易部署、更新和測試功能。開發Lambda功能有很多步驟,Kappa在試圖解決這個問題。

Zappa

可以輕鬆地讓所有的Python WSGI應用在AWS Lambda + API閘道器上構建和部署,將其看作Python應用的“Serverless”Web託管。這意味著無限擴充套件、零宕機、零維護、以及當前部署成本的一小部分。

Zapier

Zapier的自定義程式碼操作允許擴充套件Zapier的平臺,使用Web上最常用的普遍的程式語言:Javascript做任何事情,執行程式碼響應Zapier支援的任何觸發。

Stamplay

一個基於API的開發平臺,授權Web開發人員在記錄的時間內構建和釋出全功能且基於雲的Web應用。

Serverless 資料庫

FireBase

Firebase是一個移動平臺,可以幫助快速開發高質量的應用,擴大使用者群,提高收益,它由互補的功能組成,方便根據需要進行混合匹配。

FaunaDB

一個分散式、多租戶、多模型的資料庫系統,具有強大的查詢語言。

當然,還有 Amazon DynamoDB,Google Cloud Spanner,Microsoft Azure’s CosmosDB 和其它Serverless資料庫。

Serverless 監控工具

IOpipe

高保真的度量和監控服務,允許在Amazon Lambda功能中,更好的檢視的日常維護和開發Serverless應用程式。

Dashbird

Dashbird用來檢視AWS Lambda的功能。可以清楚地看到伺服器棧上發生的事件。該平臺提供自動化的監控、日誌和呼叫資料等服務。

Serverless 安全工具

Snyk

在Serverless環境中,Snyk可以幫助理解和保護依賴項,從查詢、修復和監控節點中已知漏洞的工具開始。

Serverless 的優點

  • 成本:目前Serverless最大的優勢是可以降低成本,例如,在功能執行時,只需要支付從AWS中傳輸的資料,每100萬次請求大約需要0.20美元,因為它是按需付費的,此外,伺服器維護管理的費用也被降低到接近0的水平。

  • 交付時間:在整合和低成本的支撐下,交付到市場的速度快了許多倍。

  • 無限的規模:Serverless在任何時間都可以處理任何數量的請求,自動伸縮內建到架構中,無需計劃和設定,不過一定要注意的是DDOS攻擊。

  • 打包和部署:不再有分層的Dockerfile和入口,Lambda只需要一個包含程式碼以及庫的ZIP檔案即可,部署也是如此。

總結

在將Serverless應用到生產環境之前,不能照搬方法,還需根據自身的實際情況做一些改變,同時還需要一個團隊,願意去面對快速發展的事物,用一些時間去學習鑽研和實踐測試。不管怎樣,已知的一些大公司如:Netflix、Localytics、VidRoll和Square Enix等公司都已應用了Serverless,這是未來的發展趨勢,正逐步進入到各個行業領域當中。

歡迎加小數微信:xiaoshu062討論更多serverless內容!