目录
概述
随着 IT 产业的不断发展,从业者一直在每个系统层级(从CPU到服务器)实现更高密度,以期最大限度地提高我们的系统输出效率。无服务器体系结构就可以同时满足这两种需求。借助这种体系结构,不仅可以最大限度地细化个人工作量以重点完成特定任务,还能最大限度地减少系统浪费。
从根本上讲,无服务器体系结构是云服务的下个革命,建立在 PaaS 基础之上,通过绑定移除了VM、应用程序框架和外部依赖关系,让开发者能够将重心仅放在实现业务逻辑的代码上。
Function as a Service(FaaS) 是Serverless 架构的核心,Azure平台通过提供诸如Azure Functions无服务器计算组件服务,通过Functions(一个事件驱动型无服务器计算平台,还可以解决复杂的业务流程问题)更加高效地进行开发。在本地构建和调试,而无需额外的设置,在云中大规模部署和操作,并使用触发器和绑定集成服务。
本文介绍Azure Functions的主要功能特点,结合系统运维中的具体场景,描述如何使用Azure Functions实现运维自动化功能
功能
Azure Functions 建立在 Azure App Service 和 WebJobs SDK 的基础之上,是一个多语言平台,通过各种语言(包括 JavaScript、C#、F#)和脚本选项(包括 Python、PHP、Bash、Batch 和PowerShell)创建函数。并且全部在易于使用、基于 Web 的界面中进行, 或者上传并触发使用你最喜爱的开发工具生成的预编译代码
Azure Functions 体系结构
优势
- 专注 -完全抽象服务器
开发人员可以只关注他们的代码,无需关注服务器管理、容量规划或可用性解决业
务问题,而非基础设施问题
- 效率 -即时、事件驱动的可扩展性
应用程序组件以几乎无限的可扩展性近乎实时地对事件和触发器做出反应,根据需
要使用计算资源:
- 可以有效地缩短上市时间
- 提供更好的服务稳定性
- 更好的开发和测试管理
- 减少浪费
- 灵活性 – 按使用付费
只按照使用的内容付费:计算通常根据函数调用计算,代码执行时间和使用内容来
收费
- 简化的启动体验
- 更轻松的实验
- 适合微服务
- 全托管服务
- 自动收缩和负载均衡
- 高可用和自动更新
- 备份和恢复
- 针对企业构建
- 混合环境支持
- 与企业ActiveDirectory集成
- 安全与合规
应用场景
- 与Azure生态的集成
Azure Functions与Azure平台上的其他服务实现无缝的衔接,与此同时还可以充分
利用Azure平台上的现有管理工具诸如Azure Application Insights,Azure Key
Vault, Azure Active Directory实现安全、监控等管理功能
- 基于计时器进行处理
Azure Functions 支持使用 CRON 作业语法基于计时器触发事件。例如,你可以执
行每15分钟运行一次并基于自定义业务逻辑清理数据库表的代码
- Azure 服务事件处理
Azure Functions 支持基于 Azure 服务中的活动触发事件。例如,可以执行读取
Azure Blob 存储容器中新发现的测试日志文件的无服务器代码,并将此信息转换为
Azure SQL 数据库表中的一行
- SaaS 事件处理
Azure Functions 支持基于 SaaS 服务中的活动触发事件。例如,当文件保存在
OneDrive 中时,将触发一个函数,该函数使用 Microsoft 图形 API 来修改电子表
格,同时创建额外的图表和计算的数据。
- 无服务器 Web 应用程序架构
Azure Functions 可为单页应用提供支持。该应用使用 WebHook URL 调用函数,
同时保存用户数据并确定要显示的数据。或者,你可以进行简单的自定义,例如,
通过调用函数并向其传递用户资料信息来更改广告目标
- 无服务器移动后端
移动后端可以只是一组使用 Webhook URL 从移动客户端调用的 HTTP API。例如,
移动应用程序可以捕获图像,然后调用 Azure 函数来获取上传到 Blob 存储所需的
访问令牌。第二个 Azure 函数在 blob 上传时触发,它将图像调整为便于移动访问
的大小
- 实时流式处理
例如,IoT 设备向 Azure 流分析发送消息,然后,后者调用 Azure 函数来转换该消
息。此函数处理数据,并在 Azure SQL 数据库中创建新记录。
自动化运维
利用Azure Functions的灵活特性助力自动化运维云端资源
- 使用Azure Functions定时清理Azure SQL数据库
场景需求:将原来部署在VM里的定时服务迁移到Azure Functions
执行的主要操作为定时处理Azure SQL数据库
- 创建运行AzureFunctions的存储账户
- 通过VisualStudio创建Azure Function 项目
- 选择定时触发
定时器的出发规则,参考如下链接:
- 输入执行代码
- usingSystem;
- usingAzure.WebJobs;
- usingAzure.WebJobs.Host;
- usingExtensions.Logging;
- usingData;
- usingData.SqlClient;
-
- namespaceFunctionAppForSql
- {
- public static class Function1
- {
- [FunctionName(“Function1”)]
- public static void Run([TimerTrigger(“0 */1 * * * *”)]TimerInfo myTimer, ILogger log)
- {
- LogInformation($”C# Timer trigger function executed at: {DateTime.Now}”);
-
- try
- {
- string strCon = @”your db connection string”;
- using (SqlConnection con = new SqlConnection(strCon))
- {
- Open();
- if (con.State == ConnectionState.Open)
- {
- string strCmd = “select * from Tables.Customer”;#获取数据
-
- SqlCommand com = new SqlCommand();
- Connection = con;
- CommandType = CommandType.Text;
- CommandText = strCmd;
- SqlDataReader dr = com.ExecuteReader();
-
- while (dr.Read())
- {
- LogInformation(dr[0].ToString() + “,”+ dr[1].ToString());
- ##增加对数据处理逻辑
- }
- Close();
-
-
- }
- Close();
- }
- }
- catch (Exception ex)
- {
-
- LogInformation(ex.Message);
- }
-
- }
- }
- }
- 添加对SqlClient的引用
- 配置防火墙,允许本地客户端调用访问
- 测试Function的执行
注:该测试脚本将数据库查询的数据进行打印,实际运维可以根据实际需要对数据进行处理
总结 – 向无服务器计算转变
无服务器计算代表对云计算以及生成云应用程序根本的转变。无服务器计算提供了一个完全抽象且可无限扩展的环境来执行代码,并提供了一种只根据代码执行次数付费的付款模型。无服务器计算可以被视为平台即服务 (PaaS) 的下个革命。它兑现了 PaaS 的承诺,即将应用程序基础结构与代码分离,并提供自动缩放功能。
无服务器的主要卖点是根据执行次数付费的定价模型(而不是根据代码托管时间付费)和即时无限缩放功能。无服务器计算提供了完全托管式的计算体验(没有管理任务)、即时无限缩放功能(没有缩放配置)和事件响应功能(实时处理)。
使用 Azure Functions 等无服务器计算的同时,还使用越来越多的完全托管式 Azure 或第三方服务,以生成有效的端到端无服务器解决方案,更加有效的提高运维效率。