.Net Core Serverless初體驗
什麼是Serverless
Serverless 是一個當今軟體世界中比較新的話題。它並沒有一個普遍公認的權威定義,每個人每個企業對它的解釋可能都有不同,而 Serverless 正是在這種情況下不斷髮發展的。但是就算如此,有一些 Serverless 的特徵還是被廣泛認可的:
- 服務端的主機和程序完全由供應商管理
- 可以根據負載進行自動伸縮
- 按照精確的使用情況來計費,就像水和電一樣。(效用計算)
引用掘金,原文地址:https://juejin.im/post/5c68fdbfe51d4539a569f259
Serverless演進
在這個發展歷程中有以下幾個漸進的里程碑事件:
- 通過虛擬化技術將大型物理機虛擬成單個的VM資源。
- 將虛擬化叢集搬到雲端計算平臺上,只做簡單運維。
- 把每一個VM按照執行空間最小化的原則切分成更細的Docker容器。
- 基於Docker容器構建不用管理任何執行環境、僅需編寫核心程式碼的Serverless架構。
引用阿里雲,原文地址:https://help.aliyun.com/knowledge_detail/65565.html?spm=a2c4g.11186631.2.1.4f811bbeDYGmvp
阿里雲Serverless - 函式計算
函式計算是事件驅動的全託管計算服務。使用函式計算,您無需採購與管理伺服器等基礎設施,只需編寫並上傳程式碼。函式計算為您準備好計算資源,彈性地可靠地執行任務,並提供日誌查詢、效能監控和報警等功能。
藉助函式計算,您可以快速構建任何型別的應用和服務,並且只需為任務實際消耗的資源付費。
引用阿里雲,原文地址:https://help.aliyun.com/document_detail/52895.html?spm=a2c4g.11186623.6.541.23dc641aB3U3K0
編寫.Net Core程式碼
1. 新建一個.net core控制檯程式,這裡命名為AliyunServerless。
2. 引用阿里雲提供的函式計算元件Aliyun.Serverless.Core
Install-Package Aliyun.Serverless.Core
3. 按照函式計算的要求編寫.Net Core的類與函式,這裡用兩個類與函式
a. 列印執行日誌
/// <summary> /// 列印執行日誌 /// </summary> public class LogHandler { public void Handle(Stream input, IFcContext context) { ILogger logger = context.Logger; logger.LogInformation($"Handle request: {context.RequestId}"); } }
b. 列印伺服器IP
/// <summary> /// 列印伺服器IP /// </summary> public class IpHandler { public void Handle(Stream input, IFcContext context) { ILogger logger = context.Logger; var ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); logger.LogInformation($"Handle request: {context.RequestId}"); foreach (var ipAddress in ipHostInfo.AddressList) { logger.LogInformation($"IP Address:{ipAddress}"); } } }
說明:
詳情可參考原文地址:https://help.aliyun.com/document_detail/112379.html?spm=a2c4g.11174283.6.567.206852120XSx37
4. 釋出程式並打包成zip
dotnet publish -c Release
配置阿里雲函式計算
1. 費用說明及免費額度
2. 選擇函式執行的地區
參考入口地址:https://fc.console.aliyun.com/fc/overview/cn-shenzhen
3. 建立服務及函式
a. 建立函式
b. 選擇“事件函式”,然後“下一步”
c. 配置函式資訊
其中:
“所在服務”是分組,根據需要填寫即可。
“函式名稱”是名稱,根據需要填寫即可。
“執行環境”選擇dotnetcore2.1。
“函式入口”要按規定填寫,模板是{程式集}::{名稱空間}.{類名}::{函式名},這裡是:AliyunServerless::AliyunServerless.LogHandler::Handle
“函式執行記憶體”,函式執行需要的記憶體。
“超時時間”,函式執行不能超過設定的時間。
d. 執行函式
點選“執行”,可以看到執行摘要(執行時間、使用記憶體、執行狀態等)及執行結果:
e. 建立觸發器
這裡用的是“定時觸發器”,支援Cron表示式,排程最高頻率為1分鐘,暫不支援秒級排程;除了“定時觸發器”,還有以下的觸發器型別:
有興趣的朋友可以自行研究。
配完觸發器以後,函式就會被定時觸發,由於這裡是列印日誌,需要配置日誌才能看到,本文沒配置日誌,就不演示觸發效果了。
擴充套件測試
按照建立函式的步驟,建立“列印伺服器IP”函式,執行並進行跟蹤,結果如下:
1. 多次執行(5次不同的RequestId),伺服器IP沒變(都為21.0.3.3),說明分配到同一臺伺服器上
2. 重新上傳程式包,伺服器IP會變,但同一個軟體包伺服器IP不變
a. 第一次重新上傳:
b. 第二次重新上傳:
3. 我選擇的執行地區是“華南1(深圳)”,但是伺服器IP是美國IP;因為無伺服器資訊,該結論僅供參考
4. 呼叫統計會非實時(正常現象),大部分業務月免費額度應該足夠使用
原始碼地址
https://github.com/ErikXu/AliyunServer