什么是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

.Net Core Serverless初体验的更多相关文章

  1. Consul在.Net Core中初体验

    Consul在.Net Core中初体验 简介 在阅读本文前我想您应该对微服务架构有一个基本的或者模糊的了解 Consul是一个服务管理软件,它其实有很多组件,包括服务发现配置共享键值对存储等 本文主 ...

  2. Serverless 初体验:快速开发与部署一个Hello World(Java版)

    昨天被阿里云的这个酷炫大屏吸引了! 我等85后开发者居然这么少!挺好奇到底什么鬼东西都是90.95后在玩?就深入看了一下. 这是一个关于Serverless的体验活动,Serverless在国内一直都 ...

  3. .Net Core SignalR 初体验

    前言 Asp.Net SignalR已经出来很久了,但是一直没有静下心来好好看看.昨天花了几个小时的时间看了下.首先借鉴了官方文档,如何搭建一个SignalR的Demo. 参考文章:https://d ...

  4. asp net core 跨平台初体验

    标: 在 ubuntu 16.04 上部署一个 asp.net core 站点,打开网站后显示一段文字.   安装 net core 运行环境:ubuntu 16.04 LTS 1.添加 apt 源 ...

  5. vscode 创建.net core项目初体验

    微软的virtual studio编辑器那是宇宙第一大编辑器,可惜就是太笨重,遇到性能差一些的电脑设备,简直无法快速的编辑项目. 而vs code编辑器轻便易用,想要编辑哪种项目,只需扩展插件就OK, ...

  6. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  7. Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

    Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...

  8. Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

    Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...

  9. .net core安装及初体验

    .net core安装及初体验 .net core 作为微软的新一代技术,在开发跨平台.微服务等方面有很大的优势,也更贴近现代的编码习惯.在2.0版发布很久以后,近期终于决定进行学习和体验. 安装 作 ...

随机推荐

  1. lightoj 1030-B - Discovering Gold (概率dp)

    题意:有一个直线的金矿,每个点有一定数量的金子:你从0开始,每次扔个骰子,扔出几点就走几步, 然后把那个点的金子拿走:如果扔出的骰子超出了金矿,就重新扔,知道你站在最后一个点:问拿走金 子的期望值是多 ...

  2. Ubuntu 18.04 安装 onedrive

    问题 在Ubuntu 18.04上安装Onedrive 问题背景 对于文档的同步,还是喜欢用Onedrive,主要因为Onedrive对文档的在线编辑支持很好. Onedrive初始免费容量5G,加上 ...

  3. Linux系统调用表(x86_64)

    内核版本 Linux 4.7 Note:64位系统中,不再使用int 0x80来进行系统调用,取而代之的是syscall指令 %rax System call %rdi %rsi %rdx %r10 ...

  4. Elasticsearch 顶尖高手(1)

    1.什么是搜索? 百度 = 搜索,这是不对的 垂直搜索(站内搜索) 互联网的搜索:电商网站,招聘网站,新闻网站,各种app IT系统的搜索:OA软件,办公自动化软件,会议管理,项目管理,员工管理 搜索 ...

  5. 为什么spark中只有ALS

    WRMF is like the classic rock of implicit matrix factorization. It may not be the trendiest, but it ...

  6. Docker Swarm从部署到基本操作

    关于Docker Swarm Docker Swarm由两部分组成: Docker集群:将一个或多个Docker节点组织起来,用户就能以集群的方式进行管理: 应用编排:有一套API用来部署和管理容器: ...

  7. javascript 中 typeof 和 instanceof 的区别

    在 javascript 中经常会用到 typeof 和 instanceof 来判断一个对象的类型,可能 typeof 用得多些,那来看看这两个之间的区别吧. typeof : typeof 是一个 ...

  8. 线上LVM磁盘挂载

    ESC云服务器磁盘扩容 日常运行中,容器服务所在目录由于container-log.image的增加需要占用大量的磁盘空间,所以对/var/lib/docker/目录进行扩容挂载LVM数据盘. 首先查 ...

  9. Swift从入门到精通第十一篇 - 初始化 初识

    初始化(学习笔记) 环境Xcode 11.0 beta4 swift 5.1 初始化 初始化是类.结构体.枚举生成实例的过程,为该类的每个存储属性设置初始值,有些在实例使用前的设置或初始化也可在此实现 ...

  10. Vector和Arrarlist的异同;Hashtanle和HashMap的异同

    Vector和ArrayList的异同 实现原理相同,功能相同,可以互用 主要区别: Vector线程安全,ArrayList重速度,轻安全,线程非安全. 长度需要增长时,Vector默认增长一倍,A ...