在4月份舉行的Build大會上,微軟宣布了Azure Functions預覽版,這是一個根據需求運行代碼的服務。Azure Functions意味著微軟已經進入日益流行的、由Amazon、 Google、IBM等主導的事件驅動無服務器計算領域。
Azure Functions讓開發人員可以發布基于外部觸發執行的代碼,而不用考慮準備計算或存儲資源。這些函數——使用C#、JavaScript、Bash、F#、PHP、PowerShell或PHP編寫——通常表現為短期異步任務。在一篇有關預覽版發布的博文中,微軟將“數據處理”作為發布這類服務的一個重要原因。
數據無所不在。它在云端,在本地,并越來越多地擴展到聯網設備。組織正在努力發現那些數據的價值,要求他們的開發人員以高可擴展的解決方案作為回應,而方案的構建時間表被空前地壓縮。這些方案通常需要開發人員實現按需或定時的批處理任務,以協調事務、獲取和處理數據,或者實時響應事件。
開發人員可以以多種方式觸發Azure Functions,包括HTTP調用、修改Azure隊列或Blob存儲以及通過cron調度。微軟指出,支持HTTP讓Azure Functions成為軟件即服務應用發送的“網勾(webhook)”消息的理想接收者。
微軟為Azure Functions提供了兩種托管選項:傳統的“應用服務(App Service)”方案或新推出的“動態服務(Dynamic Service)”方案。這個選擇會影響到擴展性和成本。在應用服務方案中,Azure Function運行在專用的虛擬機上,Function可能會同其他運行在用戶賬戶下的應用共享服務器。如果選擇了動態服務方案,那么Azure Function會跨多個應用實例并行運行,而且這些實例可以根據使用情況自動縮放。在這個方案中,用戶只需為實例的執行時間付費,而應用服務方案的用戶需要為托管的虛擬機付費,不管使用情況如何。
開發人員可以從起始模板或者從頭開始創建這些單一用途的函數。微軟提供了一個基于Web的開發環境,并且還提供了Git端點,允許開發人員使用GitHub、Bitbucket、Visual Studio Team Services、 Dropbox等進行本地開發及持續集成。這個基于Web的IDE提供了特定于語言的語法格式化、代碼補全提示以及一些基本的測試工具。在函數的應用設置中,用戶可以指定Azure Functions可以使用的內存量(最大1536MB),是否應用用戶身份驗證以及如何暴露服務元數據。
基于像應用服務和WebJobs這樣的已有Azure服務,微軟用90天構建出了Azure Functions。按照微軟的說法,簡潔是關鍵。他們引入了一個名為“綁定(bindings)”的特性,實現了Azure Function代碼同數據源或目的地的分離。
借助Functions綁定,開發人員可以通過他們的Function很輕松地同其他數據源和服務進行交互,而不必考慮數據如何流入及流出一個Function。綁定讓類似向隊列添加一條消息或者獲取一個Blob的任務同向Function輸出變量傳遞一個JSON或者從Function輸入變量讀取一個Blob一樣簡單。使用這項功能,開發人員需要對他們與之交互的底層服務有一點了解,以便后續可以簡單地切換到一個不同的服務。
微軟并不是第一個引入無服務器計算模型的。雖然該服務聽上去與傳統的平臺即服務(PaaS)產品有點類似,但微軟聲稱,Azure Functions通過提供基于執行的計費和基于需要的實例縮放擴展了PaaS的概念。Azure Functions更像
Azure Functions在許多方面都不同于AWS Lambda,包括一個開源的運行時、更廣泛的語言支持及沒有執行時間限制。技術專家兼AWS Lambda用戶Tom Maiaroto在一篇博文中比較了這兩個服務,他認為,“Azure Functions的底層結構與Lambda有很大的不同”。
一個“應用服務”是一個容器或環境,可以運行一組Azure云函數。這與Lambda有很大的不同。實際上,這兩個服務是截然不同的。
Lambdas是單獨組織的,而ACF在邏輯上分組成“應用程序”。
...
Azure更像是[EC2 Container Service]Tasks和Lambda的混合。例如,你可以在應用服務上設置環境變量,然后在ACF中使用。AWS Lambda無法持久化環境變量,但ECS Tasks可以。
整個的容器架構不同。Lambdas會根據一個“冷請求(cold request)”準備一個全新的容器,并(從zip文件)部署代碼。后續請求可以受益于容器重用,處理速度更快。不過,你需要了解的是,它沒有提供持久化,而且,使用Node.js Lambdas時需要注意變量作用域,因為容器會被重用。
不過,ACF受冷/暖請求的影響較小。Azure仍會按需準備資源,但文件不會“凍結”到存儲在某個地方的zip文件中。它們在Azure的WebJobs上運行。
...
如果啟用,那么每個函數都會自動映射到一個HTTP端點。然而,使用Lambda,你必須分別配置API網關。API網關很好,但非常復雜耗時。此外,某些無服務器框架通過自動為Lambdas設置API來緩解這個痛點。微軟在UX方面得分了,因為你需要配置的東西少很多。
Azure Functions在預覽期間是免費的,但之后微軟會根據計算利用率和每百萬請求收費。UX已經在GitHub上開源,WebJobs SDK也是。接下來,微軟表示,他們將致力于支持更多的語言、本地開發選項及集成其他微軟服務,如Azure服務總線。
查看英文原文:Microsoft Gets into Serverless Apps with Azure Functions