APP下载

函数计算研究与应用场景分析

2019-09-09

广东通信技术 2019年8期
关键词:触发器标杆开发者

1 引言

云计算的核心理念是资源复用和灵活调度,从物理机发展到虚拟机到容器,都是资源粒度不断细化、管理调度不断优化的过程,2014年AWS推出Lambda云服务,其提出的函数计算为核心的Serverless架构(无服务器架构)更加体现了这一理念。随后各个云计算提供商纷纷推出函数计算云服务,例如微软推出Azure Function,2017年4月,阿里云推出Function Compute,腾讯云推出无服务器云函数。函数计算从2017年开始以大热姿态占据云计算领域的视野,成为2017年增长最快的云服务[1]。

函数计算是一种云服务运行环境,开发者不再需要预配置与管理后端服务器,只需要聚焦核心业务,为应用编写一段代码,将代码上传至函数计算云服务中,函数计算服务会根据代码运行情况自动进行弹性伸缩,灵活扩展,代码运行结束,函数计算会自动释放云资源。对用户而言,无需关心基础设施层的构建与维护,提高服务部署效率。函数计算按需使用按需付费,大幅降低成本。业界认为,使用函数计算,云的费用可减少10%至90%[2]。有研究报告指出,函数计算的市场规模将从2016年的18.8亿美元增长至2021年的77.2亿美元,复合年增长率为32.7%[3]。

因此,需要对函数计算业界标杆及工作原理进行研究,并且对函数计算的特点及应用场景进行分析,才能将函数计算运用在最合适的业务与应用中,最大程度地提高云资源使用效率与减少成本费用。

2 业界标杆函数计算分析

2.1 AWS Lambda

AWS Lambda可以为任何类型的应用程序或后端服务运行代码,开发者无需预配置或管理服务器。AWS Lambda按需执行代码并自动缩放,如图1所示。

图1 AWS Lambda原理示意图

AWS Lambda的主要由事件源、事件源映射、函数计算三部分组成。事件源指发布事件的云服务或者自定义程序。函数指处理事件的自定义代码。事件源映射把事件源与函数关联起来,当事件发生时自动触发相应函数。事件源可以来自AWS服务或者自定义应用程序,来自AWS服务事件源分为非基于流的事件源与基于流的事件源[4],如表1所示。

表1 AWS Lambda支持的事件源

AWS Lambda的应用场景主要有数据处理与后端两大块。数据处理包括实时文件处理、实时数据流处理与提取、转换、加载。实时文件处理例如上传数据到S3,触发Lambda进行创建图片处理、视频处理、文件处理、日志处理以及收集与处理数据;实时数据流处理例如使用Kinesis接收实时数据流,触发Lambda进行监控应用程序、整理与分析数据、生成指标、处理日志、以及接收处理IoT 数据;提取、转换、加载例如DynamoDB的数据变化触发Lambda进行筛选、排序等处理,并把转换的数据加载至存储桶。用Lambda构建后端包括IoT后端、移动后端、Web后端与第三方API请求,用以构建个性化、强大的应用程序,而同时开发者不需要再关注可扩展性与冗余备份的工作。

2.2 阿里云函数计算

开发者编写应用和服务,并上传至函数计算中,函数触发运行,按需动态扩容,按量计费,如图2所示。

图2 阿里云函数计算原理示意图

阿里云函数计算由四大主要元素组成:服务、函数、事件以及触发器。使用函数计算时,首先,在服务内创建函数,服务是函数计算的最小单位,但每个服务有规定最大函数运行数量,当应用比较复杂时,可分解为多个服务,以微服务形式构建。第二,创建函数,把应用部署到函数中。第三,配置触发器,触发器统一管理各个事件源。当事件源中有事件发生时,如果满足触发器定义的规则时,事件触发函数运行。事件源可以是对象存储 OSS,日志服务,API 网关,定时器(Timer)和 HTTP 请求等。在触发器中可配置事件触发函数的方式。阿里云函数计算支持两种触发器,如表2所示。最后,查看执行日志与服务监控。

表2 阿里云函数计算支持的触发器

阿里云函数计算的应用场景包括事件请求、流量突发和大数据处理。事件请求场景包括图片与事件定制、物联网中的低频请求、计划事件触发。

2.3 Azure Function

Azure Function主要由触发器、函数计算与绑定(输入与输出)三个元素构成,如图3所示。

图3 Azure Function原理示意图

在Azure中,触发器定义函数运行的触发方式。输入与输出绑定是提供Azure Function连接到其他服务的声明性方式,可以省去对Azure Function需要使用到的服务详细信息进行硬编码,有利于Azure Function与其他服务进行关联与集成。每个函数有且只有一个触发器,每个函数可以绑定多个输入和多个输出。触发器是必须具备的,绑定输入输出则是可选的。

Azure Function的触发器与输入输出绑定支持如表3所示[5]:

表3 Azure Function支持的触发器与绑定(输入与输出)

注:带星号的表示试验性,不受支持,未来可能被弃用。

Azure Function的缩放和托管分为两种模式,一种是应用服务模式,一种是消耗量模式。在使用Azure Function之前需要选定缩放和托管模式。应用服务模式为传统云计算的资源管理模式,需预配置处理能力,消耗量模式为无服务架构模式,系统自动缩放自动弹性分配资源。应用服务模式在专用VM上运行,当运行时间超过允许函数执行的最长时间(10分钟)或预期函数会接近持续运行,采用应用服务模式会更节省成本与提高效率。

Azure Function的应用场景,包括Web应用程序后端,移动应用程序后端,实时文件处理,实时流失处理,计划任务的自动化,扩展SaaS应用程序等。

2.4 腾讯云无服务器云函数

腾讯云无服务器云函数主要由事件源与函数计算两个核心组件组成,如图4所示。

图4 腾讯云无服务器云函数原理示意图

腾讯云无服务器云函数也是事件驱动特征,事件源产生事件,去触发云函数处理事件,而触发器则是维护事件源与函数的对应与关联关系。云函数的事件源可以是腾讯云自身的云服务,也可以是用户自定义程序,如表4所示。

表4 腾讯云无服务器云函数支持的事件源

腾讯云无服务器云函数的应用场景,包括API 服务、文件处理及通知、消息转存、业务流转、AI 推理。

3 函数计算原理分析

3.1 工作原理分析

函数计算是一种事件驱动型服务,通过上一章节的业界标杆分析,可以归纳出,函数计算服务的原理抽象出来,一般包含事件源,函数计算以及定义与管理事件源如何触发函数计算的规则,如图5所示。

开发者编写函数代码上传至函数计算,以及配置好函数触发规则。当事件源有事件发生时,便会按照配置好的函数触发规则自动触发函数,函数计算会根据业务运行的波峰波谷情况,自动进行弹性伸缩。

图5 业界标杆函数计算原理示意图

触发规则管理根据事件源类型或各个云提供商的规定放在函数计算或放在事件源内。每个云计算提供商的函数计算都有会规定允许触发函数计算的事件源/触发器,梳理为如表5所示。

表5 业界标杆函数计算事件源归纳表

从表5可以看出,四家业界标杆函数计算的事件源均支持网络与内容分发、存储、数据分析与定时事件,其中3家标杆函数计算均支持的事件源覆盖IoT、数据库、消息队列等集成服务, AWS Lambda与腾讯云无服务器云函数均支持用户自定义事件源。AWS lambda支持的事件源最多,还支持管理与机器学习事件源。

从上述标杆分析也可看出,4家标杆函数计算的应用场景均涵盖实时数据处理与后端服务等。

3.2 启动原理

无服务架构下的函数计算启动主要与容器启动策略有关。开发者首先需要把自定义代码上传至云存储里,当事件源发布事件时,代码包从云存储中下载到函数计算运行环境中,按需触发。函数计算启动流程如图6所示。

图6 函数计算启动示意图

函数被事件触发时,函数计算根据开发者的设置启动容器(即执行环境)。容器的创建和删除操作直接由函数计算管理,并没有开放给开发者。函数代码执行后,函数计算会冻结容器至少数分钟,预期用于另一次函数调用。如果函数计算服务在再次调用函数时选择重用容器,则解冻容器供重用,即使用Warm容器,Warm容器中会保持用户代码的一些初始化状态可以直接重用,例如一些数据库连接等,所以使用Warm容器会获得更快的代码运行时间,延迟小,节省成本。但函数计算并非始终重用容器,可能会根据策略或其他因素仅创建新容器而非重用现有容器,即使用Cold容器。

3.3 优势

传统的云计算也能进行灵活的弹性伸缩,那么使用函数计算的架构与传统云计算相比有什么区别和优势呢?在传统云计算中,开发者除了需要编写应用的代码外,还需要管理云主机、操作系统接入控制及补丁,还需关心CPU数量、内存大小、IP地址等[6];为应对业务量的波峰波谷变化,还必须提前预配置弹性伸缩负载均衡等策略。而为了节省成本以及资源配置最优化,开发者或运维人员必须在业务运行过程中根据实际情况不断调整弹性伸缩负载均衡等策略,以避免闲时资源太多。这个过程耗费大量人力成本与时间成本,而资源配置却未必能时刻达到最优。而使用函数计算后,开发者只需要编写应用代码上传至函数计算,一旦有事件源发布,函数计算便会自动触发,根据代码自动按需对底层资源进行弹性伸缩灵活扩展,底层资源的弹性扩展对开发者来说是屏蔽的,缩减了开发者大量运维工作,大幅降低人力成本与时间成本。当函数运行完毕时,所使用的云资源会自动释放,不存在闲时资源,对开发者而言降低应用扩展成本,对云提供商而言,削峰填谷,提高云资源利用率,可以卖出更多的云资源。

4 函数计算应用场景分析

4.1 适合函数计算的应用特点分析

适合使用函数计算的业务与应用都可以通过函数计算较好地解决成本、效率、联通问题。这些业务与应用一般具有以下特点,第一,业务具有波峰波谷变化。第二,业务运行具有事件触发特征。第三,应用需要关联多种云服务。第四,应用数据更新大,一台服务器的处理能力已不能满足,开发者需要考虑如何配置负载均衡来应对处理请求。第五,应用版本迭代速度快,业务开发、部署、升级、扩容要求高[7]。第六,一些低频的、维护性的后台任务等。

然而,函数计算的特点使其并不适合所有的应用,第一,若业务波峰波谷不明显,则使用函数计算并不能大幅节约成本,因为无法体现函数计算自动伸缩按需使用按需付费的优势。第二,耦合性强的业务不适合使用函数计算。因为函数计算如果使用本地状态,会有很多严格限制,需要假设任何进程间或者主机状态对子进程都不可见,包括RAM和写到本地盘上的状态,从一个部署单元看,函数计算是无状态的。这一点对应用架构影响很大。第三,一些大型应用程序不容易拆分搬上函数计算架构。因为函数计算一般会限制每个函数允许运行多长时间[7],如果超出就被强行退出,例如目前AWS Lambda函数允许最多运行5分钟,Azure Function是10分钟。某些长时间运行的任务如果转到函数计算架构,就需要重新设计,需要多创建几个不同函数协调器。而在传统架构中,只需有一个就可以。第四,函数计算的冷热容器启动策略,会造成应用启动延迟10 ms到2分钟[8],不适合对延时要求比较高的业务[9],最好进行场景测试。对延时要求比较高的业务,建议采用容器架构比较合适[10]。

4.2 典型应用场景

根据上述应用特点分析,适合函数计算的典型应用场景主要有四大类,第一,事件触发类场景,例如定制图片,定制事件,IoT中的低频请求,音频转换文字处理,自动程序消息传递,基于定时器处理/定时器任务,日志处理,SaaS事件处理,批量任务。第二,流量突发类场景[11],例如弹性扩展应对突发流量,转码和流量扩容,多媒体(视频、图片等)数据备份,图片上传、裁剪、分享等。处理大数据类场景,例如数据驱动后续分发,实时文件处理,实时数据流处理,数据库数据提取、转换、加载。第四,后端类场景,例如Web应用程序、IoT后端、移动后端、人工触发。

5 运营商函数计算应用建议

云计算成为基础设施已是共识,运营商在近几年的云计算布局中也占了一席之地,而函数计算对云提供商与用户是一种具有双赢价值的云服务,因此运营商可考虑将函数计算作为开拓云计算新市场和巩固旧市场的战略部署。

在函数计算功能规划上,可参照业界标杆设计为事件源、函数计算与触发函数规则三部分组成。函数计算是事件驱动型服务,因此事件源的支持种类也很重要,可选取至少三家业界标杆均支持的事件源作为第一阶段实现目标,包括IoT、网络与内容分发、存储、数据库、定时事件;机器学习与自定义事件源等可作为远期目标。

物联网设备数量巨大及其所产生的数据量巨大,具有大量的数据收集与分析需求,且很多物联网设备协议都是事件驱动,并且物联网在边缘上的应用通常都是轻量级,适合使用逻辑抽象粒度更小的函数计算进行部署。而运营商在物联网连接上有天然优势,可以考虑将物联网应用场景作为函数计算的试点部署应用场景,可以选择一些对延时要求不高的低频的物联网应用场景,例如智能抄表类、智能监控类、智能广告、物品跟踪、建筑损耗、智慧养殖、金融POS、自动售货机等。

6 结束语

云计算发展的初始阶段是基础设施的云化,当基础设施云化到一定程度后,用户便开始寻求使用云计算的更省钱和更高效之道,更聚焦于业务层面的创新。本文对函数计算业界标杆产品、工作原理、适合函数计算的应用特点进行研究,以及对函数计算典型应用场景进行梳理,有利于用户更好的了解函数计算,在合适的应用场景中匹配函数计算架构,发挥函数计算架构节约成本、提高效率的巨大价值。

猜你喜欢

触发器标杆开发者
哨兵“后退一步,走”,树立“守规矩”鲜活标杆
北京城建:从标杆到引领,兴胜公司在跨越
网络小说标杆作品2019
超越自我,全新一代宋再树10万级SUV价值标杆
使用触发器,强化安全性
“85后”高学历男性成为APP开发新生主力军
16%游戏开发者看好VR
栝楼产业开发者谢献忠
几种常见触发器工作方式的讨论
触发器逻辑功能转换的两种方法