Serverless架构是近年来迅速兴起的一个技术概念。基于这种架构能构建出多种应用场景,适用于各行各业。只要是对轻计算、高弹性、无状态等场景有诉求,您都可以通过本文来熟悉一些基础概念,并从相关场景中获得启发。
关于Serverless架构的演进,网上比较流行用一张人类形态发展史图进行说明。从爬行猿人到蹲着的类猿人,再到直立人类,最后到使用工具的新兴人类。人类的每一次进化都伴随着生产效率的提升。同理,整个IT计算的发展历程,也是一个逐步提高生产效率的历程,具体演进图如下所示:
在这个发展历程中有以下几个渐进的里程碑事件:
因此,这个发展历程也是一场IT架构的演进,期间经历了一系列代际的技术变革,把资源切分得更细,让运行效率更高,让硬件软件维护更简单。IT架构的演进主要有以下几个特点:
Serverless架构主要有以下特点:
根据Serverless的这些通用特点,归纳出下面几种典型使用场景,供大家参考。
事件请求场景
流量突发场景
处理大数据场景
由于安全审计问题,您需要从OSS(多个地域)过去一年的数据(1 个小时一个文件)中找出特定关键字访问的日志,同时做聚合运算(计算出总值)。如果使用阿里云函数计算,您将高峰期每 2 小时的访问日志,或者低谷期每 4 小时的访问日志交给一个计算函数处理,并将处理结果存到RDS中。使用一个函数分派数据给另一个函数,使其执行成千上万个相同的实例。
这样会同时运行近千个计算函数(24 x 365 / 10),在不到一分钟的时间内完成整个工作。同样的事情交给ECS+计算脚本来做计算,单单为这些instance配置网络就让人头疼(不同地域无法走内网下载OSS文件):instance的数量可能已经超出了子网中剩余IP地址的数量(比如,您的VPC使用了24位掩码)。
下面结合阿里云的函数计算产品来讲解各个应用场景中地架构以及如何解决场景中的痛点。阿里云的函数计算是基于Serverless这种架构实现的一个全托管产品,用户只需要上传核心代码到函数计算,就可以通过事件源或者SDK&API来运行代码。函数计算会准备好运行环境,并根据请求峰值来动态扩容运行环境。函数计算是按照执行时间来计费,请求处理完成后,计费停止,对于有业务请求有明显高峰和低谷的应用来说,相对节省成本。下图是函数计算的一个开发者试用操作流程:
讲解完上面的流程后,下面会详细讲解3个Serverless的应用场景,通过案例分享能让您对Serverless这种架构有更清晰的认识。
场景描述
用户通过手机终端、Web应用、或者PC工具把各种文件包括图片、视频以及文本等上传到OSS(对象存储,下同)后,利用OSS的PutObject事件可以触发函数计算对上传后的文件进行处理。
典型场景
当用户把视频文件上传到OSS后,触发函数计算把对象的Meta信息获取并传输给核心算法库,核心算法库根据算法把相应的视频文件推送CDN源站,达到特定视频热加载的处理。另外一个场景,视频文件上传到OSS后也同时触发函数计算同步做多转码率的处理,并把处理后的视频文件存储到OSS中,完成轻量的数据处理。
在多媒体的处理场景中,经常会碰到海量文件上传到OSS后,还需要对文件进行进一步的加工,例如加水印、转码率、获取文件属性等操作,这个场景中,用户在处理的时候会遇到以下需要解决的技术难点:
通过函数计算能比较方便解决以上几个技术难点:
事件触发场景常规做法:
函数计算解法:
场景描述
直播间的客户端把主播和连麦观众的音视频采集发送给函数计算做混流服务,函数计算把数据汇集后交给混流服务进行合成,并把合成画面视频流推送给CDN,终端观众实时拉取直播流,能实时看到混流合成画面。
视频直播应用场景中,有一种场景视频直播的多人连麦,主播可以同时和多个工作进行连麦,把多个观众或者好友画面接入,并把画面合成到一个场景中,供给更多观看直播的观众观看。这个场景中,有几个技术难度需要关注:
综合以上几个特点,可以通过Serverless这种架构来完美地解决以上痛点。
函数计算作为连麦观众和主播接入的实时音频和视频转发集群,当并发量过来时,函数计算自动扩容多个执行环境来处理实时数据流;当业务高峰期过去后,会适度缩减资源使用。代码管理部署在云端,代码迭代可以随时进行修改和维护,无需再多管理一套软件运行环境。
视频直播场景常规做法:
函数计算解法:
整个架构图分成 2 部分内容:
在智能设备状态处理的场景中,同样也会碰到几个核心技术问题要解决。当海量设备把状态发送到IoT平台后,如何设计一套高效非轮询的技术框架来处理设备状态数据;如何把处理后的数据高效透传其他产品,例如写数据库或者推送给移动端。
IoT设备状态场景常规做法:
函数计算解法:
通过 2 种方式的对比,能看出函数计算的解法更具备通用性,可以大量减少维护工作。
客户通过派单平台选着某种商家提供的服务,可能是餐饮、商品、或者服务。派单平台通知最近的骑手到最近的商家拿到服务并派送到客户手里。一个简单的流程图如下:
流程详解:
这个派单场景中,要解决几个棘手的技术:
通过技术选型转化成阿里云产品的解决方案后,函数计算结合其他产品比较完美地解决上述问题,解决方案如下图所示:
流程详解:
这个方案中,函数计算可以完成动态扩容问题,API网关可以解决鉴权和安全访问问题,函数计算打通了多款产品,可以无缝使用其他资源和内容。所有处理后的数据可以存放到表格存储数据库中,所有日志都可以直接加载到日志服务为后续数据报表服务。
共享派单系统常规做法:
函数计算解法:
通过上面几个场景的详解,大致可以得出这样的结论:通过事件触发场景;有业务访问高峰和低谷的场景,迭代次数较多,需要快速打通多款产品场景;通过函数计算能完美地解决成本、效率、联通等问题。
函数计算 | 自建计算环境 | |
---|---|---|
维护性 | 内置打通API网关,OSS,Table Store、IoThub、Log Service、Message Service、Datahub等产品,只需要简单配置。沙箱执行环境,无需配置。自动伸缩和负载均衡。触发条件简单,入口多。 | 多款产品链接需要自己编写代码来实现,有技术门槛。自建物理环境,需要配置运行环境,消耗人力物力。需要自行搭建伸缩机制和负载均衡,耗时较多。 |
可靠性 | 代码和配置存放在OSS中,自动多重冗余备份。 | 受限于硬件可靠性,易出问题,一旦出现运行环境或者数据损坏,容易出现不可逆转的数据丢失。人工数据恢复困难、耗时、耗力。 |
成本 | 按执行付费,在业务请求波谷期费用低廉。上行流量免费无需运维人员和托管费用阿里云产品内部传输无费用同比计算能力,成本节省1/3 | 业务请求的波峰需要资源扩容,波谷的时候资源浪费。需要专人维护运行环境和硬件资源,人力成本较高。产品之间联通如果走公网,需要额外支付流量费用。 |
安全 | 沙箱运行在阿里云企业级别安全环境里。多用户运行是服务器级别隔离机制。提供多种服务授权和子主账号。 | 需要另外购买清洗和黑洞设备需要单独实现安全访问机制。 |
函数计算虽然适用于很多场景,但也不是覆盖全部应用场景的万金油。例如某些业务在一天中没有明显的请求波峰波谷,请求相对平缓,那么使用函数计算成本不见得会节省多少。
Serverless框架作为新兴的技术,目前相应的支持开发工具较少,整体框架还在探索中。另外,函数计算的执行环境是不记录状态的,有些耦合性较强的应用也不太适合用Serverless这种框架。受限于资源大小分配,一些大型的应用程序也不太容易能拆分搬上来。