.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
.Net Core Serverless初体验的更多相关文章
- Consul在.Net Core中初体验
Consul在.Net Core中初体验 简介 在阅读本文前我想您应该对微服务架构有一个基本的或者模糊的了解 Consul是一个服务管理软件,它其实有很多组件,包括服务发现配置共享键值对存储等 本文主 ...
- Serverless 初体验:快速开发与部署一个Hello World(Java版)
昨天被阿里云的这个酷炫大屏吸引了! 我等85后开发者居然这么少!挺好奇到底什么鬼东西都是90.95后在玩?就深入看了一下. 这是一个关于Serverless的体验活动,Serverless在国内一直都 ...
- .Net Core SignalR 初体验
前言 Asp.Net SignalR已经出来很久了,但是一直没有静下心来好好看看.昨天花了几个小时的时间看了下.首先借鉴了官方文档,如何搭建一个SignalR的Demo. 参考文章:https://d ...
- asp net core 跨平台初体验
标: 在 ubuntu 16.04 上部署一个 asp.net core 站点,打开网站后显示一段文字. 安装 net core 运行环境:ubuntu 16.04 LTS 1.添加 apt 源 ...
- vscode 创建.net core项目初体验
微软的virtual studio编辑器那是宇宙第一大编辑器,可惜就是太笨重,遇到性能差一些的电脑设备,简直无法快速的编辑项目. 而vs code编辑器轻便易用,想要编辑哪种项目,只需扩展插件就OK, ...
- ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...
- Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验
Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...
- Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验
Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...
- .net core安装及初体验
.net core安装及初体验 .net core 作为微软的新一代技术,在开发跨平台.微服务等方面有很大的优势,也更贴近现代的编码习惯.在2.0版发布很久以后,近期终于决定进行学习和体验. 安装 作 ...
随机推荐
- 【1】KNN(K-nearest neighbors algorithm)
基本原理 KNN算法又叫最近邻居法,是一种非常简单易于掌握的分类算法. 其基本原理是,存在一个已知标签的数据集合,也就是训练样本集. 这个样本集中的每一个数据所属的分类都是已知的. 当一个没有标签的新 ...
- Spring Boot2 系列教程(三)理解 Spring Boot 项目中的 parent
前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent> <groupId ...
- Git使用(二)版本库创建及文件修改
一.创建版本库 1.安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 安装完成后,还需要最后一步设置,在命令行输入: $ gi ...
- Cannot create PoolableConnectionFactory (null, message from server: "Host 'admin-PC' is not allowed to connect to this MySQL server")
1.别人在用自己的tomcat访问我留的查询接口时,出现Cannot create PoolableConnectionFactory (null, message from server: &qu ...
- 手写RPC框架指北另送贴心注释代码一套
Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的.所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架. 完整代码以及 ...
- android 百度地图入门01 (史上最详没有之一)
最近一直和百度地图打交道,写几篇博客记录一下吧,目前最新版是4.0的 ,之前我用的是3.7的, 就以4.0的为例说一下最基本的配置流程吧. 一.准备工作 1.申请一个百度地图开发者账户--地址:htt ...
- android 之下拉刷新
一.概述 Android 下拉刷新几乎是每个应用都必带的功能, 并且现在下拉刷新第三方库也越来越多了,很方便就能实现该功能, 下面我介绍一下 自己常用的几个方法. 二.例子 第一种方式:就是集成Lis ...
- java8 新特性精心整理(全)
前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特 ...
- 指尖前端重构(React)技术调研分析
摘要:重构前的技术文档调研与分析,包括技术选型为什么选择react,应用过程中的注意事项等. 一.为什么选择React React是当前前端应用最广泛的框架.三大SPA框架 Angular.React ...
- 使Flask的url支持正则表达式以及一个api小demo
from flask import Flask from flask import jsonify from flask import request from werkzeug.routing im ...