• .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

  • 相关阅读:
    CND库(Bootstrap 、React、Vue、Angular.js、JQuery)
    使用线性渐变实现滚动进度条
    设置鼠标光标样式
    百度地图API部分功能
    网页的三种布局(固定布局,流式布局,弹性布局)
    这一次带你彻底了解远程Cookie操作
    js获取各种高度和宽度
    点击按钮,回到页面顶部的5种写法
    Chrome默认字体大小
    CSS Grid 网格布局
  • 原文地址:https://www.cnblogs.com/Erik_Xu/p/11666872.html
Copyright © 2020-2023  润新知