本文介绍当前serverless框架的典型使用场景,虽然serverless计算广泛使用,但它仍然相对较新。通常,当工作负载为以下情况时,应将serverless方法视为首选:
- 异步,并发,易于并行化为独立的工作单元
- 在扩展要求方面存在较大的差异性
- 无状态,短暂的,对瞬间冷启动时间没有重大需求
- 在业务需求变更方面具有高度灵活性,需要满足开发的敏捷性
让我们介绍一下基于serverless的典型应用,以下应用场景主要为aws跟azure,后续会 提供其他云的使用场景。
一、后端服务
AWS Lambda:可以使用AWS Lambda构建无服务器后端,以处理 Web、移动、物联网(IoT)和第3方API请求。
Web 应用程序后端
从队列中获取在线订单,并进行处理,生成的数据保存在数据库中。
场景分析:
- 需要通过Service Bus ,处理结果存储到Azure自家的Cosmos DB。
Aws Lambda应用
通过将AWS Lambda与其他AWS服务相结合,开发人员可以构建功能强大的Web应用程序,从而可自动扩缩,并跨多个数据中心运行,而无需在扩展、备份或多数据中心冗余方面执行任何管理工作。
实际案例:Bustle 使用 AWS Lambda 和 Amazon API Gateway 为其 Bustle iOS 应用程序和网站运行了一个无服务器后端。借助无服务器架构,Bustle无需管理基础设施,因此每位工程师都能够集中精力构建新功能并进行创新性研发工作。
场景分析:
- web请求通过REST走API Gateway进来,触发Lambda
- Lambda返回数据给请求
- 标准的对BaaS后端的请求
移动应用程序后端
Azure应用
通过使用手机银行支付午餐费用:垫付午餐费用的人通过移动应用请求付款,这将在其他同事的手机上触发通知。
场景分析:
- 跳过了Service Bus
- 同样处理结果存储进Cosmos DB
- 存Cosmos DB时再次触发其他函数
- 继续通过使用 Notifications Hub 发送通知
Aws Lambda应用
使用AWS Lambda 和Amazon API Gateway构建后端,以验证和处理API请求。Lambda能够提供丰富、个性化的应用程序体验。
场景分析:
- 移动应用程序更新状态,通过REST请求走API Gateway进来,触发Lambda
- Lambda处理并发起状态更新通知,push给Amazon SNS
IOT 后端
Aws Lambda应用
使用 AWS Lambda 构建无服务器后端,以处理 Web、移动、物联网 (IoT) 和第3方API 请求。
场景分析:
- 传感器发送数据给流数据处理平台
- 捕获传感器数据并流式传输传感器数据,触发Lambda
二、数据处理
Aws lambda:使用AWS Lambda 执行代码以响应数据更改、系统状态变化或用户操作等触发器。Lambda可以由S3、DynamoDB、Kinesis、SNS 和 CloudWatch 等 AWS 产品直接触发,也可以通过 AWS Step Functions 编排到工作流程中。您可借此构建各种实时的无服务器数据处理系统。
数据库更改或更改数据捕获
在此场景中,当从数据库插入,修改或删除数据时调用函数。在这种情况下,它的功能类似于传统的SQL触发器。其结果是执行一个异步逻辑,可以修改同一个数据库中的某些内容(例如记录到审计表),或者依次调用外部服务(例如发送电子邮件)或更新其他数据库,例如DB CDC(更改数据捕获)用例的情况。 由于业务需要和处理变更的服务分布的原因,这些用例的频率以及对原子性和一致性的需要可能不同。
例子包括:
- 审核对数据库的更改,或确保它们满足特定质量或分析标准以进行可接受的更改。
- 在输入数据时或之后不久自动将数据翻译为其他语言。
实时文件处理
Azure应用
数据以PDF文件形式安全上传。然后使用OCR检测分解和处理该数据,并将其添加到数据库以便查询。
场景分析:
- 触发来自Blob Storage
- function进行处理,转交给OCR处理的服务
- 再将结构化信息存储在数据库中
Aws Lambda应用
使用 Amazon S3 触发 AWS Lambda,以便在上传数据后立即对它们进行处理。例如,您可以使用 Lambda 实时创建缩略图、转换视频代码、建立文件索引、处理日志、验证内容以及聚合和筛选数据。
实际案例:某传媒利用 AWS Lambda 来调整图像大小,以便于在不同的设备(如台式机、平板电脑和智能手机)上查看。
场景分析:
- 相机拍照,图片上传,触发Lambda (同样是Blob Storage触发)
- 对图片进行处理如修改大小
- 但这里没有说处理之后的图片如何存储,应该也是类似的存储在s3中
实时流式处理
Azure应用
从大量云应用收集到大量遥测数据。近乎实时地处理该数据,并将其存储到DB中,供分析仪表板使用。
场景分析:
- 应用或者设备产生数据,作为遥测信息收集
- 函数处理遥测数据,将结果发送给 Cosmos DB
- 按照实际经验,这里的function应该会是多次流处理,不会简单的一个function
Aws Lambda应用
使用 AWS Lambda 和 Amazon Kinesis 处理实时流数据,从而跟踪应用程序活动、处理事务处理顺序、分析单击数据流、整理数据、生成指标、筛选日志、建立索引、分析社交媒体以及遥测和计量IoT设备数据。
实际案例:某社交软件可实时处理数十亿个数据点,并使用Lambda来处理存储在 S3 中或从 Kinesis 进行流式处理的历史和活动数据。
场景分析:
- 社交媒体数据实时上载,触发Lambda
- Lambda生成趋势数据,存储到 DynamoDb
- 趋势数据可以被立即查看
提取、转换、加载
Aws Lambda应用
使用 AWS Lambda 针对 DynamoDB 表中的每个数据更改执行数据验证、筛选、排序或其他转换,并将转换后的数据加载到其他数据存储。
实际案例:Zillow 使用 Lambda 和 Kinesis 实时跟踪移动指标子集。凭借 Kinesis 和 Lambda,我们得以在两周内开发和部署一套成本高效的解决方案。
场景分析:
- 订单操作更新数据库,触发Lambda
- Lambda进行转换,将数据存储到数据仓库
其他
计划任务的自动化
Azure应用
每 15 分钟对客户数据库执行一次分析,检查是否有重复条目,避免将多个通信发送给同一个客户。
场景分析:
- function定时调度,定期清理数据
批处理作业或计划任务: 每天只需几分钟就能以异步方式进行强大的并行计算,IO或网络访问的作业非常适合serverless。作业可以在以弹性方式运行时有效地消
费他们所需的资源,并且在不被使用的当天剩余时间内不会产生资源成本。
例子:
- 计划任务可以是每晚运行的备份作业
- 并行发送许多电子邮件的作业会扩展function实例
三、SaaS应用程序扩展
Azure应用
SaaS 解决方案通过 webhook(可通过 Functions 实现)提供扩展性,以自动执行某些工作流。
场景分析:
- 外部活动,通过web hook触发function
- function进行处理,或者通过事件继续触发其他function
持续集成管道
传统的CI管道包括一个构建从属主机池,它们处于空闲等待以便分派作业。Serverless是一种很好的模式,可以消除对预配置主机的需求并降低成本。构建作业由新代码提交或PR合并触发。 调用function来运行构建和测试用例,仅在所需的时间内执行,并且在未使用时不会产生成本。这降低了成本,并可通过自动扩展来减少瓶颈以满足需求。
业务逻辑
当与管理和协调函数一起部署时,在业务流程中执行一系列步骤的微服务工作负载的编排是serverless计算的另一个好用例。执行特定业务逻辑的function(例如订单请求和批准,股票交易处理等)可以与有状态管理器一起安排和协调。来自客户端门户的事件请求可以由这样的协调function提供服务,并传递给适当的serverless function。
例子包括:
交易台,处理股票市场交易并处理客户的交易订单和确认。协调器使用状态图管理交易。初始状态接受来自客户端门户的交易请求,并将请求传递给微服务function以解析请求并验证客户端。随后的状态根据买入或卖出交易指导工作流,验证基金余额,股票代码等,并向客户发送确认。在从客户端接收到确认请求事件时,后续状态调用管理交易执行的function,更新账户,并通知客户完成交易。
聊天机器人
与人类交互不一定需要毫秒级别的响应时间,并且在许多方面,稍微延迟让回复人类的机器人对话感觉更自然。因此,等待从冷启动加载函数的初始等待时间是可以接受的。当添加到Facebook,WhatsApp或Slack等流行的社交网络时,机器人可能还需要具有极高的可扩展性,因此在PaaS或IaaS模型中预先设置一个永远在线的守护程序,以预测突然或高峰需求,可能不会比采用serverless方法更加高效及较低的成本效益。
例子包括:
- 支持和销售机器人插入到大型社交媒体服务,如Facebook或其他高流量网站。
- 消息应用程序Wuu使用Google Cloud Functions使用户能够创建和共享在数小时或数秒内消失的内容。
- 另请参阅下面的HTTP REST API和Web应用程序。