写点什么

5 分钟 Serverless 实践丨构建无服务器的图片分类系统

  • 2019-10-21
  • 本文字数:1880 字

    阅读完需:约 6 分钟

5分钟Serverless实践丨构建无服务器的图片分类系统

在过去“5 分钟 Serverless 实践”系列文章中,我们介绍了如何构建无服务器 API 和 Web 应用,从本质上来说,它们都属于基于 APIG 触发器对外提供一个无服务器 API 的场景。现在本文将介绍一种新的设计模式:基于事件的实时数据处理。为了更形象地描述,我们以图片分类为例,先介绍通过 APIG 触发器如何构建一个图片分类的 Web 应用,再介绍通过 OBS 触发器如何构造一个实时的图片分类系统。

Serverless 优势

相比于传统的架构,无服务器架构具有如下优点:


  • 无需关注任何服务器,只需关注核心业务逻辑,提高开发和运维效率

  • 事件触发,灵活扩展

  • 函数运行随业务量弹性伸缩,按需付费,执行才计费,对于负载波峰波谷非常明显的场景可以减少大量成本

  • 通过简单的配置即可连通函数工作流和其它各云服务,甚至云服务和云服务

构建无服务器的图片分类 Web 应用

像以往的文章介绍的那样,serverless 很擅长构建一个 Web 应用,如下图,该系统会将用户上传的图片进行分类,并打上类别标签。



我们可以通过函数工作流服务来快速构建这个系统,并且完全无需关注服务器,且弹性伸缩运行、按需计费,如图:



创建函数,在函数中调用华为云图片分析服务的图片标签接口,给图片打标签分类。再为该函数配置一个 APIG 触发器,这样便可以对外提供一个图片分类的 API,最后部署前端页面到 OBS,托管为静态网站,从而构建出一个完整的图片分类的无服务器 Web 应用。页面调用 API,他会自动触发函数执行,而开发者编写的函数只需实现接收到图片之后如何处理图片的逻辑即可,最后将结果返回给页面。


接下来,我们将介绍如何完整地将此无服务器 Web 应用构建出来。

01 准备工作

进入华为云图片检测服务,申请开通图片检测服务的图片标签功能,成功申请后便可以调用图片标签接口了。

02 构建后端程序

进入函数工作流服务,选择模板“图片打标签 Web 后端”,创建函数。函数创建完成之后,为其配置具有 IAM 访问权限的委托,因为本函数代码中获取用户的 ak、sk 需要拥有访问 IAM 的权限。



创建成功后,API 的 URL 可以在函数详情页面的“触发器”栏看到:



至此,我们就成功地构建了一个无服务器的图片分类 API。

03 搭建前端页面

为了更方便地搭建前端页面,我们提供了对应的函数模板实现快速构建前端页面。选择模板“图片打标签 Web 前端”,创建函数,其中自定义数据 REST_API 中设置上一步创建的 API URL,创建完成后,函数详情页面的“触发器”栏中的 URL 就是页面的浏览器访问地址。


至此,我们就成功地构建了一个无服务器的图片分类 Web 应用。接下来,我们将介绍另一种场景。

构建事件触发的实时图片分类系统

本文接下来将具体介绍事件触发的实时数据处理场景,考虑下面场景,用户上传图片到 OBS 桶中,需要自动执行图片分类,并按照类别转储到另一个桶的不同目录下。比如下面这个例子,上传一张企鹅图片到一个桶,图片就会自动转储到另一个桶对应的 pengull、seabird、bird 目录下。



我们可以通过函数工作流服务来快速构建这个系统,并且完全无需关注服务器,且弹性伸缩运行、按需计费,如图:



创建函数,在函数中调用华为云图片分析服务的图片标签接口,给图片打标签分类。再为该函数配置一个 OBS 触发器,监控桶的 POST 事件,当向该桶上传一个文件时,便会自动触发函数执行,从而实现一个基于事件触发的无服务器系统。用户向桶中上传一张图片,它会自动触发函数执行,而开发者编写的函数只需实现从桶中下载图片并分类转储的逻辑即可。


接下来,我们将介绍如何完整地将此事件触发的图片分类系统构建出来。

01 准备工作

①申请开通图像识别服务“图像标签”功能



②进入对象存储服务(OBS)服务,创建两个桶,一个用于接收待分类的图片(source),一个用于存储分类后的图片(result),并将桶的“桶策略”设为公共读写。

02 创建函数

①进入函数工作流服务创建函数页面,选择“图片实时分类(按图片类型)”函数模板,该模板已为您提供本案例的代码。


②设置环境变量 result_bucket 为存储分类后图片的桶的名称(result)


③配置 OBS 触发器,桶选择接受待分类图片的桶(source),事件选择 post。当向桶中上传新图片时,会触发函数执行。


④点击创建,创建函数和触发器。


03 配置函数

①进入函数详情页面,进入“配置”标签,给函数设置一个具有访问 IAM 和 OBS 权限的委托,使函数能够获取到用户的 AK、SK,并访问 OBS 桶资源。


②保存配置

04 测试函数

①向接收待分类图片的桶(source)中上传一张图片


②查看存储分类结果的桶(result)中的文件,会发现图片存储到了对应类别的目录下。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


https://mp.weixin.qq.com/s/SY-dxodw22qknvgxA3pTpQ


2019-10-21 23:30810

评论

发布
暂无评论
发现更多内容

倒计时1天!龙蜥社区开源软件供应链及操作系统安全MeetUp即将在广州召开

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥meetup

Python脚本消费多个Kafka topic

不在线第一只蜗牛

Python kafka

人类级别语音 AI 路线图丨 Voice AI 学习笔记

声网

有哪些ppt一键生成软件?这6个AI不容错过!

职场工具箱

效率工具 职场 PPT 办公软件 AI生成PPT

超实用开源前端商城模板,助力电商项目飞速启航!免费直接可用!

恩爸编程

商城项目 商城源码 商城系统 开源商城项目 前端商城模版

探索OS升级迭代的兼容性和安全性!龙蜥社区走进中科方德MeetUp开始报名

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥meetup

Java 项目中对使用递归的理解分享

快乐非自愿限量之名

Java Python

ChatGPT 开启「眼睛」,实时摄像头对话来了;昆仑万维推出实时语音助手 Skyo丨 RTE 开发者日报

声网

HarmonyOS NEXT用户专属装扮免费体验!华为主题内容大焕新!

最新动态

鸿蒙NEXT开发案例:血型遗传计算

zhongcx

鸿蒙

选择ETL工具需要注意什么技术性问题?

RestCloud

数据分析 ETL 数据集成

LeetCode题解:2695. 包装数组,详细解释

Lee Chen

Apache IoTDB v1.3.3 发布|新增数据订阅,DataNode 主动监听并加载 TsFile 等功能

Apache IoTDB

赋能生态系统,Arm 打造全球最大 AI 开发者社区

新消费日报

HTTP 请求从未如此智能:探索 aiohttp 的自动重试新技能

LLLibra146

Python 爬虫 aiohttp 自动重试 aiohttp_retry

开放原子校源行(天津大学站) 即将启幕,龙蜥技术专家分享开源技术与实践

OpenAnolis小助手

操作系统 龙蜥社区

作为产品经理,如何分析和管理你的产品需求

易成研发中心

产品需求

LeetCode题解:2618. 检查是否是类的对象实例,迭代和递归

Lee Chen

【JIT/极态云】技术文档--组织架构简介

武汉万云网络科技有限公司

低代码

产品需求文档在迭代阶段怎样管理

易成研发中心

产品需求 产品需求文档

CSA GCR 2024 | 百度安全DDoS防护服务荣获安全磐石奖等多项殊荣

百度安全

软件测试丨全面解析 Allure 2 的安装与运用

测试人

软件测试

喜讯!云起无垠获“中国产业互联网发展联盟IDAC双奖”

云起无垠

如何设计实施 Git 工作流程以提升软件研发效能?

思码逸研发效能

git DevOps 编程语言 研发效能 研发效能管理

鸿蒙安全控件简介

龙儿筝

模型压缩理论简介及剪枝与稀疏化在 征程 5 上实践

地平线开发者

自动驾驶; 算法、

构建真实可靠指标平台:五大核心特征助力企业深度数智化

Aloudata

指标管理 指标平台 指标开发

香港 Web3 宣言两周年专访 HashKey Tokenisation 总经理 Anna Liu:探索代币化的未来

TechubNews

鸿蒙NEXT开发案例:简体繁体转换器

zhongcx

鸿蒙

LeetCode题解:2618. 检查是否是类的对象实例,使用instanceof

Lee Chen

5分钟Serverless实践丨构建无服务器的图片分类系统_文化 & 方法_李壮_InfoQ精选文章