Serverless&Azure Functions

通过无服务器计算,开发者无需管理基础结构,从而可以更快构建应用程序。通过无服务器应用程序,将由云服务提供商自动预配、缩放和管理运行代码所需的基础结构。

要理解无服务器计算的定义,注意到服务器仍在运行代码很重要。服务器名称来源于这样一个事实:与基础结构预配和管理相关联的任务对开发者不可见。这种方式让开发者能够更多地专注于业务逻辑,向业务核心交付更多价值。无服务器计算可帮助团队提高生产力、更快将产品推向市场,并让组织可以更好地优化资源、保持专注于创新。

引用自Azure文档

以上文字引用自Azure,说的有点官方。说说我个人对Serverless的简单理解。所谓Serverless是相对于传统有应用的部署方案来说的。传统应用不管你是直接部署在主机或者容器化来部署,你的程序总是跑在一个完整的应用进程下。比如你只是想提供一个简单的A+C=C的Web Api,你往往需要启动一个完整的asp.net mvc项目或者sprintmvc项目来承载简单的代码。那么Serverless通过云服务把目标更加细化,通过它你可以只使用相关代码实现某个方法或函数,上传到云端后这个函数就可以跑了。这样子的话资源占用更加少,相对的资源付费也会更加有针对性,因为你无需为没用的资源所付费。Serverless可以说是对微服务的更加细化,使在云端运行的代码从application级别降低到了Function/method级别。

上面简单介绍了Serverless。而Azure的Serverless方案就是Azure Functions。

创建函数应用

Azure Function是个免费服务,在免费服务列表里找到它并点击创建。



给函数取个名称,发布选择“代码”。如果打算用.net来开发则运行时堆栈选择.NET Core版本选择3.1。跟其他资源一样区域选择东亚,因为它离你近。



因为Azure Function虽然是Serverless但是也些储存空间,所以需要配置存储账户。选择上次我们使用AzureBlob时候创建的存储账号。没有的话可以新建一个。

操作系统任意选择Linux或者Windows。

计划类型选择:消耗(无服务器)

Azure 函数提供1000000请求/月的免费额度

使用VSCode进行本地开发

在函数列表界面点击“本地开发”。会弹出本地开发指导。选择VSCode环境会出现VSCode的开发环境配置说明。



首先本地需要安装node跟npm。使用下面的命令自动安装Core Tools包:

npm install -g azure-functions-core-tools@3 --unsafe-perm true

注意:这个包还是很大的,由于网络的原因有可能拉不下来。如果长时间下不下来也可以直接搜索azure-functions-core-tools直接下载独立安装包。

使用npm安装完core tools后还有安装Azure Functions的VSCode插件。



打开VSCode插件菜单,搜索Azure Functions,找到Azure Functions插件后点击Install开始安装。这个插件一会就安装完了。

新建Function

我们按照完VSCode的插件后,切换到Azure Function菜单。



点击新建按钮会弹出Azure Function支持的触发器。触发器有很多有HttpTrigger,BlobTrigger,CosmosDbTrigger等等。这里选择最简单的HttpTriger触发器。接着会提示输入项目名称,输入名称后回车就可以生成本地项目了。

Function代码

我们简单演示下Azure Function,使用这个函数实现一个简单的两个数相加返回相加结果。

namespace Company.Function
{
public static class AzFnTest
{
[FunctionName("AzFnTest")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request."); string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody); int a = data.A;
int b = data.B; int c = a + b; return new OkObjectResult(c);
}
}
}

以C#为语言的Azure Function入口就是一个run方法。run方法的入参有2个,一个是HttpRequest,一个Ilogger。其中HttpRequest包含了http请求的信息,QueryString、body、headers等。这个类就是来自Microsoft.AspNetCore.Mvc命名空间。返回值是Task。那么本质上一个Function其实可以看做是标准MVC方案里的一个Action。只是缺乏了参数自动绑定。我们需要的参数都要从HttpRequest对象上提取。

上面的代码很简单,就是获取body内容反序列化成一个动态对象,获取参数A、B,然后相加得到C,通过OkObjectResult直接返回出去。

本地测试

在VSCode界面按F5启动调试。VSCode会启动一个本地实例,可以接受http请求。我们使用postman往这个地址post一个json数据过去。

{
"A" : 1 ,
"B" : 2
}



可以看到返回了结果3。

上传到Azure



在VSCode上点击上传按钮,会提示登录Azure。登录成功后会列出上面我们新建的Azure Function的资源。



选择azure-fn0,选中之后会开始上传,最后output窗口会提示成功。



回到portal网站刷新下,会看到我们的项目已经上传成功了。

运行函数

点击函数名称弹出明细界面。点击“获取函数URL”获取调用这个函数的真实URL。



有了这个地址我们就可以在全球范围内使用这个函数啦。让我们使用Postman再测试一下。



可以看到返回了正确的结果。

总结

以上我们使用C#代码实现了一个简单的Azure Functions并调用了它。Azure Functions还支持Java、Nodejs、Python等常用的编程语言。Azure Functions跟Azure生态紧密结合,除了支持HttpTrigger,还支持CosmosDb,Azure Blob,甚至是Iot边缘计算等场景。Azure Functions是Azure的Serverless解决方案,它具有无需基础结构管理、动态可伸缩性、加快上市、更高效地使用资源等优点,大家如果想体验Serverless可以尝试一下。

使用Azure Function玩转Serverless的更多相关文章

  1. 使用ML.NET和Azure Function进行机器学习 - 第1部分

    介绍 一提到机器学习,总是让人望而生畏.幸运的是,Azure正在想方设法让开发人员更容易进入机器学习.ML.NET是Microsoft Research专为.NET开发人员开发的机器学习框架,因此您可 ...

  2. 使用ML.NET和Azure Function进行机器学习 - 第2部分

    本文是<使用ML.NET和AzureFunction进行机器学习 - 第1部分>的续篇. 像机器一样识别鸢尾花 回顾第1部分,您将使用Visual Studio创建一个新的Azure Fu ...

  3. 创建Azure Function

    azure function的用途在于运行一些逻辑简单的执行逻辑,比如batch job,定时任务,webhook等等.1. 创建azure function创建完毕后,进入app service,选 ...

  4. 【Azure Application Insights】在Azure Function中启用Application Insights后,如何配置不输出某些日志到AI 的Trace中

    问题描述 基于.NET Core的Function App如果配置了Application Insights之后,每有一个函数被执行,则在Application Insights中的Logs中的tra ...

  5. 【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)

    问题描述 当需要在应用中有大量的出站连接时候,就会涉及到SNAT(源地址网络转换)耗尽的问题.而通过Azure App Service/Function的默认监控指标图表中,却没有可以直接查看到SNA ...

  6. 【Azure 应用服务】Azure Function集成虚拟网络,设置被同在虚拟网络中的Storage Account触发,遇见Function无法触发的问题

    一切为了安全,所有的云上资源如支持内网资源访问,则都可以加入虚拟网络 问题描述 使用Azure Function处理Storage Account中Blob 新增,更新,删除等情况.Storage A ...

  7. 【Azure 应用服务】Azure Function App 执行PowerShell指令[Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt]错误

    问题描述 使用PowerShell脚本执行获取Azure订阅列表的指令(Get-Azsubscription -TenantId $tenantID -DefaultProfile $cxt).在本地 ...

  8. 【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码逐步最终源端

    问题描述 在使用Azure Function App的SendGrid Binging功能,调用SendGrid服务器发送邮件功能时,有时候遇见间歇性,偶发性异常.在重新触发SendGrid部分的Fu ...

  9. 【Azure 应用服务】Azure Function HTTP 触发后, 230秒就超时。而其他方式触发的Function, 执行5分钟后也超时,如何调整超时时间?

    问题描述 Azure Function HTTP 触发后, 230秒就超时,而其他方式触发的Function, 执行5分钟后也超时,如何调整超时时间? 问题分析 查阅官方文档,对函数应用超时持续时间有 ...

随机推荐

  1. Locust性能测试3--参数化、数据依赖

    场景链路压测的时候通常都是按照用户实际使用流程进行压测,同接口自动化一样,一定会涉及到数据依赖的问题 1.举例 Django后台通常需要csrf验证,而一般csrftoken需要通过get接口获得 f ...

  2. Maven通解

      参考博文:通俗理解maven 该篇文章篇幅很长,大概的思路如下 maven的介绍,初步认识,获取jar包的三个关键属性 --> 介绍仓库(获取的jar包从何而来)-->用命令行管理ma ...

  3. Idea创建maven加载过慢解决方法

    添加标签:archetypeCataloginternal问题解决!

  4. 【平台开发】— 8.前端-从[项目管理]来看vue

    现在要来实现[项目管理]这个功能了. 想象一下页面,元素大概就是:列表页.查询框.新增按钮.编辑.mock入口按钮. 那先来实现列表和新建,也顺带着整理一下用到的vue相关指令知识. 一.后端 后端就 ...

  5. C. News Distribution(并查集)

    In some social network, there are nn users communicating with each other in mm groups of friends. Le ...

  6. uap设置gradle和jdk

  7. 再深入一点|binlog和relay-log到底长啥样?

    上一篇mysql面试的文章之后收到不少朋友的意见,希望深入讲讲复制.日志的格式这些,今天,我们就来深挖一下mysql的复制机制到底有哪一些,以及binlog和relay-log的结构到底是什么样子的. ...

  8. Webpack 打包优化之体积篇

    谈及如今欣欣向荣的前端圈,不仅有各类框架百花齐放,如Vue, React, Angular等等,就打包工具而言,发展也是如火如荼,百家争鸣:从早期的王者Browserify, Grunt,到后来赢得宝 ...

  9. 数字,字符串,逻辑比较在IF语句中的判断应用

    Shell  语言中的if条件 一.if的基本语法: if [ command ];then 符合该条件执行的语句 elif [ command ];then 符合该条件执行的语句 else 符合该条 ...

  10. Robotframework自动化1-Windows环境搭建

    前言: robotframework环境搭建-环境准备 1.python2,pip2 2.WxPython 3.Robot Framework 4.Robotframework-ride 5.RIDE ...