Serverless作为一种微服务是一种概念,Serverless允许你提供代码或可执行程序提交给云厂商的解析服务(如阿里云的FunctionComputer等),由解析服务来为你执行它们,而你无需自己管理服务器、配置环境、Web环境等。这就是所谓的执行即服务execution-as-a-service,这样的一种概念听起来非常吸引人,实际上也可以算是一场革命,引用一张经典图轨迹图,让大家看看整个IT运维运行的发展轨迹,如下图:
图解:犹如我们从爬行动物猩猩一样,最初靠两只手和两只脚慢慢的挪动,到逐步站立走稳,到最后解放双手直立行走成为真正的人,这种演变过程犹如整个IT发展的过程,首先经过笨重的物理机--》虚拟化--》云计算--》容器--》微服务整个演变,这样的演变,开发者变得更加纯粹、自由、更加轻量。开发者开始无需关注硬件资源,无需考虑多线程,无需考虑扩容,无需考虑流量瞬间峰值的未雨绸缪,极大解放研发生产力,专注做自己擅长的事情(Coding),我甚至觉得,未来的开发者或许就剩下前端开发而无了后端开发。
哪么Serverless到底特点都在哪里,适用那些业务场景?
其特点:
1、细粒度的计算资源分配
2、不需要预先分配资源
3、真正意义上的高度扩容和弹性
4、按需使用,按需计费。
根据Serverless的这些通用特点,我归纳出几种典型使用场景,供大家参考。
事件请求场景
A、网店中的商品图片维护,根据商品陈列位置,要求需要动态切割成不同尺寸图片,或者打上不同水印,当店家把图片上传到阿里云OSS上,会通过Function computer上定制的trigger来触发函数计算,根据计算规则,生成不同尺寸的图片,满足电商陈列使用,整个过程无需再搭建额外服务器,也无需网站美工干预。
B、物联网行业中,由于物联网设备传输数据量小,且往往是固定时间间隔进行数据传输,因此经常涉及低频请求场景。例如:物联网应用程序每分钟仅运行一次,每次运行50ms,这意味着CPU的使用率为0.1%/小时,这也意味着其实有1000个相同的应用可以共享计算资源。而Serverless架构下,用户可以购买每分钟100ms的资源来满足计算需求,通过这种方式就能够有效解决效率问题,降低使用成本。
C、用户注册时发邮件验证邮箱地址,同样通过定制的事件来触发后续的注册流程,而无需再配置额外的应用无服务器来处理后续的请求。
事件触发固定时间触发,例如在夜间或者服务空闲时间来处理繁忙时候的交易数据,或者跑批量数据,来生成数据报表,通过serverless方式,不用再额外购买利用率并不高的处理资源。
流量突发场景
A、移动互联网应用经常会面对突发流量场景,例如:移动应用的通常流量情况是QPS 20,但每隔五分钟会有一个持续10s的QPS 200流量(10倍于通常流量),传统架构下企业必须扩展QPS 200的硬件能力来应对业务高峰,即使高峰时间仅占整个运行时间的4%;而在Serverless架构下,用户可以利用弹性扩展特性,快速构建新的计算能力来满足当前需求,当业务高峰后,资源能够自动释放,有效节省成本。
B、视频直播某次专场活动,由于无法预估会有多少点播的观众视频接入,把转码和流量扩容这部分内容通过Function来处理,无需考虑并发和流量扩容。
处理大数据场景
A、由于安全审计问题,你需要从存放在OSS(多个region)里过去一年的数据拿出来(1个小时一个文件),你需要从中找出特定关键字访问的日志,同时做聚合运算(计算出总值)。如果使用阿里云Function Compute。你可以把访问高峰期每两小时的日志,或者访问低谷期每四小时的日志交给一个计算函数处理,处理结果存入RDS,使用一个函数分派数据给另一个函数,使其执行成千上万个相同的实例。这样会同时运行近千个计算函数(24 x 365 / 10),在不到一分钟的时间内完成整个工作。同样的事情交给ECS+计算脚本来做计算,单单为这些instance配置网络就让人头疼(不同region无法走内网下载OSS文件):instance的数量可能已经超出了子网中剩余IP地址的数量(比如,你的VPC使用了24位掩码)。
以上三个场景,都是非常典型的Serverless场景。
下面我结合阿里云的Function Compute这个产品来完成一个简单场景的设置,阿里云的Function Compute目前主要组成部分有这几大块:
1、Service定义: 服务是资源管理的基本单位 ,可以授权管理等,简单理解为空间或者java中的包名。
2、Event定义: 任何能够触发函数执行的事情称之为事件 ,一个Event中可以触发多个Tigger来执行函数
3、Trigger定义: 用户通过触发器定义和管理事件的生成方式, 触发直接对应的执行函数。
4、Function定义:真正执行的执行函数, 函数是调度和运行的基本单位。
5、Project 和log Store 定义:主要是存储执行日志,整体配置稍微复杂,但是日志方便后续追踪和调试程序。
阿里云执行函数可以通过两种方式来执行,可以在控制台上配置好service,even,trigger和书写Function后执行即可看到结果,还可以通过命令行工具Fcli工具来执行函数,目前阿里云支持的脚本语言仅限于Nodejs,听说很快要推出python版本。
Fcli界面如下:
从控制台界面上看,都是很常用命名方式,可以通过config来配置account_id,access_key_id和 access_key_secret等,每一个命令行都给了相对详细的帮助,可以通过-help来查看。
Fcli的使用整体流程:
1、用户先授权,要填写accout_id,access_id,access_key,如果设置失败,还需要重新用config进行重置,或者删除.fcli下的配置文件
2、 创建service
3、创建project,store
4、授权grant service(4步骤,包括role,policy name,log project,log store)
5、进入service空间,开始写function程序。
6、执行Function程序即可看到结果
一个科学计算的例子
明白上面概念后,我来简单实现一个计算一个随机数的例子,通过控制台进行配置:
1、配置Service,见图:
2、配置Trigger,见图:
3、编写Function(函数执行时间最长300秒),见图:
代码段:
'use strict';
console.log('Loading function');
exports.handler = (event, context, callback) => {
var min_nmu = 1000;
var max_nmu = 10000;
var generatedNumber = Math.floor(Math.random() * max_nmu) + min_nmu;
callback(null, generatedNumber);
};
4、查看执行结果:配置Project+Store,略微复杂,后续使用方便,注意这块内容是收费的,费用较低。配置完成后,点击执行看看执行结果:
现状:
目前Function compute和OSS产品能无缝集成,后续阿里云推出API Gateway可以完美地连接到任何其他的云产品,也非常容易构建出控制流量、安全认证、标准化的WEB服务等,后续阿里云还承诺再推出Python、Java等执行环境。