Serverless典型应用

本文介绍当前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应用程序。

参考资料