1. serverless的前世今生
Serverless概念是近年来特别火的一个技术概念,这次借助2017年阿里云的第二届API大赛,来仔细一下盘点一下这个架构构建的应用场景,场景适合各行各业,对轻计算、高弹性、无状态等场景有诉求的用户都可以通过本文来普及一些基础概念,能对技术选型做一些有意义的指导就达到本文目的。
关于Serverless架构的前世今生,网上比较流行一张描述人类形态发展史的网图。从爬行猿人到蹲着的类猿人,再到直立人类,最后到使用工具的新兴人类。从四只脚爬行到直立行走,释放了双手,从释放双手到开始使用工具。
人类的进化每一次都伴随着生产效率的提升。同理,在整个IT计算的发展里程,也是逐步提高生产效率的里程,具体演进图如下所示:
从大型物理机到通过虚拟化技术把物理机虚拟成单个的VM资源,从虚拟化集群到把集群搬到云计算上只做简单运维,再到把每一个VM按照运行空间最小化切分成更细的Docker容器,再从Doceker容器变成干脆不用管理任何运行环境的Serverless服务,即仅仅需要编写核心代码即可。
代际的技术变革都是把资源切分得更细致,让运行效率变得更高,让硬件软件维护变得更加简单。
Serverless架构主要有以下特点:
实现了细粒度的计算资源分配。
不需要预先分配资源。
具备真正意义上的高度扩容和弹性。
按需使用,按需计费。
根据Serverless的这些通用特点,归纳出下面几种典型使用场景,供大家参考。
2. Serverless的典型应用有哪些?
2.1.
事件请求场景
定制图片
网店中的商品图片维护,根据商品陈列位置,要求需要动态切割成不同尺寸图片,或者打上不同水印,当店家把图片上传到 阿里云OSS上,会通过函数计算上定制的trigger来触发函数计算。根据计算规则,生成不同尺寸的图片,满足电商陈列使用,整个过程无需再搭建额外服务器,也无需网站美工干预。
物联网中的低频请求
物联网行业中,由于物联网设备传输数据量小,且往往是固定时间间隔进行数据传输,因此经常涉及低频请求场景。
例如:物联网应用程序每分钟仅运行一次,每次运行50ms,这意味着CPU的使用率为0.1%/小时,这也意味着其实有1000个相同的应用可以共享计算资源。而Serverless架构下,用户可以购买每分钟100ms的资源来满足计算需求,通过这种方式就能够有效解决效率问题,降低使用成本。
定制事件
用户注册时发邮件验证邮箱地址,同样通过定制的事件来触发后续的注册流程,而无需再配置额外的应用无服务器来处理后续的请求。
固定时间触发
事件触发固定时间触发,例如在夜间或者服务空闲时间来处理繁忙时候的交易数据,或者运行批量数据,来生成数据报表,通过Serverless方式,不用再额外购买利用率并不高的处理资源。
2.2.
流量突发场景
弹性扩展应对突发流量
移动互联网应用经常会面对突发流量场景。例如:移动应用的通常流量情况是QPS 20,但每隔5分钟会有一个持续10s的QPS 200流量(10倍于通常流量)。传统架构下,企业必须扩展QPS 200的硬件能力来应对业务高峰,即使高峰时间仅占整个运行时间的4%。
在Serverless架构下,您可以利用弹性扩展特性,快速构建新的计算能力来满足当前需求,当业务高峰后,资源能够自动释放,有效节省成本。
2.3.
处理大数据场景
由于安全审计问题,您需要从OSS(多个地域)过去一年的数据(1个小时一个文件)中找出特定关键字访问的日志,同时做聚合运算(计算出总值)。如果使用阿里云函数计算,您将高峰期每2小时的访问日志,或者低谷期每4小时的访问日志交给一个计算函数处理,并将处理结果存到RDS中。使用一个函数分派数据给另一个函数,使其执行成千上万个相同的实例。
这样会同时运行近千个计算函数(24 x 365 / 10),在不到一分钟的时间内完成整个工作。同样的事情交给ECS+计算脚本来做计算,单单为这些instance配置网络就让人头疼(不同地域无法走内网下载OSS文件):instance的数量可能已经超出了子网中剩余IP地址的数量(比如,您的VPC使用了24位掩码)。
3. 函数计算简介
下图是函数计算的一个开发者试用操作流程:
步骤1
开发者编写代码,目前支持的语言Java、NodeJS、Python等语言。
步骤2
把代码上传到函数计算上,上传的方式有通过API或者SDK上传,也可以通过控制台页面上传上传,还可以通过命令行工具Fcli上传。
步骤3
通过API&SDK来触发函数计算执行,同样也可以通过云产品的事件源来触发函数计算执行。
步骤4
函数计算在执行过程中,会根据用户请请求量动态扩容函数计算来保证请求峰值的执行,这个过程对用户是透明无感知的。
步骤5
函数执行结束后,可以通过账单来查看执行费用,根据函数的实际执行时间按量计费,收费粒度精确到100ms。
讲解完上面的流程后,下面会详细讲解3个Serverless的应用场景,通过案例分享能让您对Serverless这种架构有更清晰的认识。
函数计算具备的特点:
1、
无服务器架构
2、
自动维护软硬环境
3、
能弹性扩容执行并发
4、
通过事件来触发函数执行
5、
能打通多款产品
6、
按次计费
下面就基于函数计算这几种特点,来讲解在API大赛里,关于Serverless架构的典型案例
4. API大赛课题-云课堂详解
本次API大赛选题云课堂主要是依托阿里云的产品来构建的一个无服务器应用,是为每个学生登录后生成一个可以操作的运行环境,学生可以参加个性化考试或者启动教学,其中教学有两种方式,一种是在线视频、一种是在线实验室。这个云课堂汇集了多种在线功能,例如下面的一些典型功能如下:
个性化考试:考生登录系统后,可以在系统上做面试试题或者算法题考试,主要考察学生
获取的考题可以通过函数计算生成算法来选题,能记录考试的历次考试成绩,能根据考生成绩画出考生成绩曲线,可以通过阿里云QuickBI产品展示
在线教学-在线视频:学生通过在线点播已经录制好的视频文件,点播视频文件进行播放。
在线教学-在线实验室:学生通过在线实验室Dome实例编写代码,通过调用函数计算的SDK来运行代码,并把代码执行结果显示出来。
5. API大赛课题-共享电单车详解
近年来共享经济的概念深入人心,本次推出的选题共享电单车的实践方案主要是让开发者通过电单车开锁、骑行、计费、导航等几个功能来完成骑行的过程,这个过程,为了让场景更加丰富,可以通过阿里云市场来引入短信通知、获取当地的天气预报、空气质量以及穿衣指数等数据。骑行过程中,主要分为几个阶段来进行,输入骑行终点位置、判断电单车的电量、开锁、显示当前的天气和空气质量、骑行路径规划、骑行结束锁车、骑行计费终止等。
这个选题需要通过 API 串联阿里云的多款产品,这里选的产品例如:函数计算来做数据处理,API网关来做前端展示的接入,表格存储来存放电单车骑行过程中的数据,以及初始数据,日志服务可以存放整体行车路线的日志信息。
整体框架图可以参考:
点此“
阿里云第二届API应用创新大赛”查看详情,直接搜索群号11732346 或扫描下方二维码,先加入大赛交流钉钉群再说~