.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/AliyunServerless


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM