基于阿里云Serverless架构下函数计算的最新应用场景详解(一)
Serverless概念是近年来特别火的一个技术概念。基于这种架构能构建出很多应用场景,适用于各行各业。只要是对轻计算、高弹性、无状态等场景有诉求,您都可以通过本文来熟悉一些基础概念,并从相关场景中获得启发。
关于Serverless架构的前世今生,网上比较流行一张描述人类形态发展史的网图。从爬行猿人到蹲着的类猿人,再到直立人类,最后到使用工具的新兴人类。从四只脚爬行到直立行走,释放了双手,从释放双手到开始使用工具。
人类的进化每一次都伴随着生产效率的提升。同理,在整个IT计算的发展里程,也是逐步提高生产效率的里程,具体演进图如下所示:
从大型物理机到通过虚拟化技术把物理机虚拟成单个的VM资源,从虚拟化集群到把集群搬到云计算上只做简单运维,再到把每一个VM按照运行空间最小化切分成更细的Docker容器,再从Doceker容器变成干脆不用管理任何运行环境的Serverless服务,即仅仅需要编写核心代码即可。
代际的技术变革都是把资源切分得更细致,让运行效率变得更高,让硬件软件维护变得更加简单。IT技术架构的演进主要有以下几个特点:
1、硬件资源使用颗粒度变小
2、资源利用率越来越高
3、运维工作逐步减少
Serverless架构主要有以下特点:
1、实现了细粒度的计算资源分配。
2、不需要预先分配资源。
3、具备真正意义上的高度扩容和弹性。
4、按需使用,按需计费。
根据Serverless的这些通用特点,归纳出下面几种典型使用场景,供大家参考。
事件请求场景
定制图片
网店中的商品图片维护,根据商品陈列位置,要求需要动态切割成不同尺寸图片,或者打上不同水印,当店家把图片上传到阿里云OSS上,会通过函数计算上定制的trigger来触发函数计算。根据计算规则,生成不同尺寸的图片,满足电商陈列使用,整个过程无需再搭建额外服务器,也无需网站美工干预。
物联网中的低频请求
物联网行业中,由于物联网设备传输数据量小,且往往是固定时间间隔进行数据传输,因此经常涉及低频请求场景。
例如:物联网应用程序每分钟仅运行一次,每次运行50ms,这意味着CPU的使用率为0.1%/小时,这也意味着其实有1000个相同的应用可以共享计算资源。而Serverless架构下,用户可以购买每分钟100ms的资源来满足计算需求,通过这种方式就能够有效解决效率问题,降低使用成本。
定制事件
用户注册时发邮件验证邮箱地址,同样通过定制的事件来触发后续的注册流程,而无需再配置额外的应用无服务器来处理后续的请求。
固定时间触发
事件触发固定时间触发,例如在夜间或者服务空闲时间来处理繁忙时候的交易数据,或者运行批量数据,来生成数据报表,通过Serverless方式,不用再额外购买利用率并不高的处理资源。
流量突发场景
弹性扩展应对突发流量
移动互联网应用经常会面对突发流量场景。例如:移动应用的通常流量情况是QPS 20,但每隔5分钟会有一个持续10s的QPS 200流量(10倍于通常流量)。传统架构下,企业必须扩展QPS 200的硬件能力来应对业务高峰,即使高峰时间仅占整个运行时间的4%。
在Serverless架构下,您可以利用弹性扩展特性,快速构建新的计算能力来满足当前需求,当业务高峰后,资源能够自动释放,有效节省成本。
转码和流量扩容
视频直播某次专场活动,由于无法预估会有多少点播的观众视频接入,把转码和流量扩容这部分内容通过Function来处理,无需考虑并发和流量扩容。
处理大数据场景
由于安全审计问题,您需要从OSS(多个地域)过去一年的数据(1个小时一个文件)中找出特定关键字访问的日志,同时做聚合运算(计算出总值)。如果使用阿里云函数计算,您将高峰期每2小时的访问日志,或者低谷期每4小时的访问日志交给一个计算函数处理,并将处理结果存到RDS中。使用一个函数分派数据给另一个函数,使其执行成千上万个相同的实例。
这样会同时运行近千个计算函数(24 x 365 / 10),在不到一分钟的时间内完成整个工作。同样的事情交给ECS+计算脚本来做计算,单单为这些instance配置网络就让人头疼(不同地域无法走内网下载OSS文件):instance的数量可能已经超出了子网中剩余IP地址的数量(比如,您的VPC使用了24位掩码)。
下面结合阿里云的函数计算产品来讲解各个应用场景中架构以及如何解决的场景中的痛点。阿里云的函数计算是基于Serverless这种架构实现的一个全托管产品,用户只需要上传核心代码到函数计算,就可以通过事件源或者SDK&API来运行代码。函数计算会准备好运行环境,并根据请求峰值来动态扩容运行环境,函数计算是按照执行时间来计费,请求处理完成后,计费停止,对于有业务请求有明显高峰和低谷的应用来说,相对节省成本。
下图是函数计算的一个开发者试用操作流程:
步骤1:开发者编写代码,目前支持的语言Java、NodeJS、Python等语言。
步骤2:把代码上传到函数计算上,上传的方式有通过API或者SDK上传,也可以通过控制台页面上传上传,还可以通过命令行工具Fcli上传。
步骤3:通过API&SDK来触发函数计算执行,同样也可以通过云产品的事件源来触发函数计算执行。
步骤4:函数计算在执行过程中,会根据用户请请求量动态扩容函数计算来保证请求峰值的执行,这个过程对用户是透明无感知的。
步骤5:函数执行结束后,可以通过账单来查看执行费用,根据函数的实际执行时间按量计费,收费粒度精确到100ms。
讲解完上面的流程后,下面会详细讲解3个Serverless的应用场景,通过案例分享能让您对Serverless这种架构有更清晰的认识。
事件触发计算能力
场景描述:用户通过手机终端,Web应用,或者PC工具把各种文件包括图片、视频以及文本等上传到OSS(对象存储,下同)后,利用OSS的PutObject的事件可以触发函数计算对上传后的文件进行处理,目前比较典型的场景当用户把视频文件上传到OSS后,触发函数计算把对象的Meta信息获取并传输给核心算法库,核心算法库根据算法把相应的视频文件推送CDN源站,达到特定视频热加载的处理。另外一个场景,视频文件上传到OSS后也同时触发函数计算同步做多转码率的处理,并把处理后的视频文件存储到OSS中,完成轻量的数据处理。
在多媒体的处理场景中,经常会碰到海量文件上传到OSS后,还需要对文件进行进一步的加工,例如加水印、转码率、获取文件属性等操作,这个场景中,用户在处理的时候会遇到以下需要解决的技术难点:
1、 如何接收文件上传后的动作事件,通常的做法是定制消息通道来接收OSS事件通知,搭建一个运行环境,并编写相关的代码来处理事件通知。
2、如何高效的处理完海量上传的文件。
3、如何无缝的把多个云产品连接起来。
通过函数计算能比较方便解决以上几个技术难点,首先函数计算可以设置OSS的触发器来接收事件通知,在函数计算中编写业务代码来处理文件,并通过内网把文件传输到OSS中,整个流程简单易用可扩展。可以把核心代码部署到函数计算中,通过函数计算来并发处理事件通知。函数计算目前打通了多款产品的内部交互,通过控制台简单配置就可以高效的解决产品间连接问题。
事件触发场景常规做法:
1、设置消息通道接收事件,并编写业务代码。
2、购买服务器资源做后端数据处理。
3、设计一套多并发框架完成业务上传文件峰值的处理。
4、开通多个产品,并调用SDK代码来完成业务交互。
函数计算解法:
1、在控制台上配置事件源通知,编写业务代码。
2、代码写到函数计算里,不需要管理软硬件环境。
3、 业务高峰期函数计算会动态伸缩,无需管理。
4、内置打通多款产品,简单配置就可以无缝对接。