Serverless&Azure Functions
通過無服務器計算,開發者無需管理基礎結構,從而可以更快構建應用程式,通過無服務器應用程式,將由云服務提供商自動預配、縮放和管理運行代碼所需的基礎結構,
要理解無服務器計算的定義,注意到服務器仍在運行代碼很重要,服務器名稱來源于這樣一個事實:與基礎結構預配和管理相關聯的任務對開發者不可見,這種方式讓開發者能夠更多地專注于業務邏輯,向業務核心交付更多價值,無服務器計算可幫助團隊提高生產力、更快將產品推向市場,并讓組織可以更好地優化資源、保持專注于創新,
參考自Azure檔案
以上文字參考自Azure,說的有點官方,說說我個人對Serverless的簡單理解,所謂Serverless是相對于傳統有應用的部署方案來說的,傳統應用不管你是直接部署在主機或者容器化來部署,你的程式總是跑在一個完整的應用行程下,比如你只是想提供一個簡單的A+C=C的Web Api,你往往需要啟動一個完整的asp.net mvc專案或者sprintmvc專案來承載簡單的代碼,那么Serverless通過云服務把目標更加細化,通過它你可以只使用相關代碼實作某個方法或函式,上傳到云端后這個函式就可以跑了,這樣子的話資源占用更加少,相對的資源付費也會更加有針對性,因為你無需為沒用的資源所付費,Serverless可以說是對微服務的更加細化,使在云端運行的代碼從application級別降低到了Function/method級別,
上面簡單介紹了Serverless,而Azure的Serverless方案就是Azure Functions,
創建函式應用
Azure Function是個免費服務,在免費服務串列里找到它并點擊創建,

給函式取個名稱,發布選擇“代碼”,如果打算用.net來開發則運行時堆疊選擇.NET Core版本選擇3.1,跟其他資源一樣區域選擇東亞,因為它離你近,

因為Azure Function雖然是Serverless但是也些儲存空間,所以需要配置存盤賬戶,選擇上次我們使用AzureBlob時候創建的存盤賬號,沒有的話可以新建一個,
作業系統任意選擇Linux或者Windows,
計劃型別選擇:消耗(無服務器)
Azure 函式提供1000000請求/月的免費額度
使用VSCode進行本地開發
在函式串列界面點擊“本地開發”,會彈出本地開發指導,選擇VSCode環境會出現VSCode的開發環境配置說明,

首先本地需要安裝node跟npm,使用下面的命令自動安裝Core Tools包:
npm install -g azure-functions-core-tools@3 --unsafe-perm true
注意:這個包還是很大的,由于網路的原因有可能拉不下來,如果長時間下不下來也可以直接搜索azure-functions-core-tools直接下載獨立安裝包,
使用npm安裝完core tools后還有安裝Azure Functions的VSCode插件,

打開VSCode插件選單,搜索Azure Functions,找到Azure Functions插件后點擊Install開始安裝,這個插件一會就安裝完了,
新建Function
我們按照完VSCode的插件后,切換到Azure Function選單,

點擊新建按鈕會彈出Azure Function支持的觸發器,觸發器有很多有HttpTrigger,BlobTrigger,CosmosDbTrigger等等,這里選擇最簡單的HttpTriger觸發器,接著會提示輸入專案名稱,輸入名稱后回車就可以生成本地專案了,
Function代碼
我們簡單演示下Azure Function,使用這個函式實作一個簡單的兩個數相加回傳相加結果,
namespace Company.Function
{
public static class AzFnTest
{
[FunctionName("AzFnTest")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = https://www.cnblogs.com/kklldog/p/JsonConvert.DeserializeObject(requestBody);
int a = data.A;
int b = data.B;
int c = a + b;
return new OkObjectResult(c);
}
}
}
以C#為語言的Azure Function入口就是一個run方法,run方法的入參有2個,一個是HttpRequest,一個Ilogger,其中HttpRequest包含了http請求的資訊,QueryString、body、headers等,這個類就是來自Microsoft.AspNetCore.Mvc命名空間,回傳值是Task
上面的代碼很簡單,就是獲取body內容反序列化成一個動態物件,獲取引數A、B,然后相加得到C,通過OkObjectResult直接回傳出去,
本地測驗
在VSCode界面按F5啟動除錯,VSCode會啟動一個本地實體,可以接受http請求,我們使用postman往這個地址post一個json資料過去,
{
"A" : 1 ,
"B" : 2
}

可以看到回傳了結果3,
上傳到Azure

在VSCode上點擊上傳按鈕,會提示登錄Azure,登錄成功后會列出上面我們新建的Azure Function的資源,

選擇azure-fn0,選中之后會開始上傳,最后output視窗會提示成功,

回到portal網站重繪下,會看到我們的專案已經上傳成功了,
運行函式
點擊函式名稱彈出明細界面,點擊“獲取函式URL”獲取呼叫這個函式的真實URL,

有了這個地址我們就可以在全球范圍內使用這個函式啦,讓我們使用Postman再測驗一下,

可以看到回傳了正確的結果,
總結
以上我們使用C#代碼實作了一個簡單的Azure Functions并呼叫了它,Azure Functions還支持Java、Nodejs、Python等常用的編程語言,Azure Functions跟Azure生態緊密結合,除了支持HttpTrigger,還支持CosmosDb,Azure Blob,甚至是Iot邊緣計算等場景,Azure Functions是Azure的Serverless解決方案,它具有無需基礎結構管理、動態可伸縮性、加快上市、更高效地使用資源等優點,大家如果想體驗Serverless可以嘗試一下,
關注我的公眾號一起玩轉技術

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/135503.html
標籤:其他
上一篇:Docker的基本命令
下一篇:NumPy解釋線性代數
