在过去“5分钟Serverless实践”系列文章中,咱们介绍了如何构建无服务器API和Web应用,从本质上来讲,它们都属于基于APIG触发器对外提供一个无服务器API的场景。如今本文将介绍一种新的设计模式:基于事件的实时数据处理。为了更形象地描述,咱们以图片分类为例,先介绍经过APIG触发器如何构建一个图片分类的Web应用,再介绍经过OBS触发器如何构造一个实时的图片分类系统。前端
相比于传统的架构,无服务器架构具备以下优势:编程
1. 无需关注任何服务器,只需关注核心业务逻辑,提升开发和运维效率;后端
2. 事件触发,灵活扩展;设计模式
3. 函数运行随业务量弹性伸缩,按需付费,执行才计费,对于负载波峰波谷很是明显的场景能够减小大量成本;浏览器
4. 经过简单的配置便可连通函数工做流和其它各云服务,甚至云服务和云服务;服务器
像以往的文章介绍的那样,serverless很擅长构建一个Web应用,以下图,该系统会将用户上传的图片进行分类,并打上类别标签。架构
咱们能够经过函数工做流服务来快速构建这个系统,而且彻底无需关注服务器,且弹性伸缩运行、按需计费,如图:less
建立函数,在函数中调用华为云图片分析服务的图片标签接口,给图片打标签分类。再为该函数配置一个APIG触发器,这样即可以对外提供一个图片分类的API,最后部署前端页面到OBS,托管为静态网站,从而构建出一个完整的图片分类的无服务器Web应用。页面调用API,他会自动触发函数执行,而开发者编写的函数只需实现接收到图片以后如何处理图片的逻辑便可,最后将结果返回给页面。运维
接下来,咱们将介绍如何完整地将此无服务器Web应用构建出来。ide
1. 准备工做
进入华为云图片检测服务,申请开通图片检测服务的图片标签功能,成功申请后即可以调用图片标签接口了。
2. 构建后端程序
进入函数工做流服务,选择模板“图片打标签Web后端”,建立函数。函数建立完成以后,为其配置具备IAM访问权限的委托,由于本函数代码中获取用户的ak、sk须要拥有访问IAM的权限。
建立成功后,API的URL能够在函数详情页面的“触发器”栏看到:
至此,咱们就成功地构建了一个无服务器的图片分类API。
3. 搭建前端页面
为了更方便地搭建前端页面,咱们提供了对应的函数模板实现快速构建前端页面。选择模板“图片打标签Web前端”,建立函数,其中自定义数据REST_API中设置上一步建立的API URL,建立完成后,函数详情页面的“触发器”栏中的URL就是页面的浏览器访问地址。
至此,咱们就成功地构建了一个无服务器的图片分类Web应用。接下来,咱们将介绍另外一种场景。
本文接下来将具体介绍事件触发的实时数据处理场景,考虑下面场景,用户上传图片到OBS桶中,须要自动执行图片分类,并按照类别转储到另外一个桶的不一样目录下。好比下面这个例子,上传一张企鹅图片到一个桶,图片就会自动转储到另外一个桶对应的penguins、seabird、bird目录下。
咱们能够经过函数工做流服务来快速构建这个系统,而且彻底无需关注服务器,且弹性伸缩运行、按需计费,如图:
建立函数,在函数中调用华为云图片分析服务的图片标签接口,给图片打标签分类。再为该函数配置一个OBS触发器,监控桶的POST事件,当向该桶上传一个文件时,便会自动触发函数执行,从而实现一个基于事件触发的无服务器系统。用户向桶中上传一张图片,它会自动触发函数执行,而开发者编写的函数只需实现从桶中下载图片并分类转储的逻辑便可。
接下来,咱们将介绍如何完整地将此事件触发的图片分类系统构建出来。
准备工做
1. 申请开通图像识别服务“图像标签”功能
2. 进入对象存储服务(OBS)服务,建立两个桶,一个用于接收待分类的图片(source),一个用于存储分类后的图片(result),并将桶的“桶策略”设为公共读写。
建立函数
1. 进入函数工做流服务建立函数页面,选择“图片实时分类(按图片类型)”函数模板,该模板已为您提供本案例的代码。
2. 设置环境变量result_bucket为存储分类后图片的桶的名称(result)
3. 配置OBS触发器,桶选择接受待分类图片的桶(source),事件选择post。当向桶中上传新图片时,会触发函数执行。
4. 点击建立,建立函数和触发器。
配置函数
1. 进入函数详情页面,进入“配置”标签,给函数设置一个具备访问IAM和OBS权限的委托,使函数可以获取到用户的AK、SK,并访问OBS桶资源。
2. 保存配置
测试函数
1. 向接收待分类图片的桶(source)中上传一张图片
2. 查看存储分类结果的桶(result)中的文件,会发现图片存储到了对应类别的目录下。
更多精彩:
函数工做流,0负担享受编程的乐趣