写点什么

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:30774

评论

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

低代码开发平台:数字化转型的助推器

高端章鱼哥

软件开发 低代码 数字化

SiteSucker for mac(网站下载工具) v5.1.13完美激活版

mac

网站下载工具 苹果mac Windows软件 SiteSucker

探索Web前端技术的新趋势与发展

不在线第一只蜗牛

Web 前端技术 互联网+

村卫生室、诊所云HIS系统源码 支持医保功能

源码星辰

百度王颖:百度文库重构为“一站式AI内容创作平台”,成为内容创作新起点

新消费日报

汇聚数据库创新力量 打造千行万业数据基石,openGauss Summit 2023即将召开

彭飞

使用 Amazon CodeCatalyst 中的生成式 AI 助手 Amazon Q 提高开发人员的工作效率(预览版)

亚马逊云科技 (Amazon Web Services)

API re:Invent 生成式人工智能 Amazon Q Preview

Sam Altman 晒网友新年愿望清单;AI Pin 明年 3 月开始交付丨 RTE 开发者日报 Vol.112

声网

分享5个程序员必备的终端工具

伤感汤姆布利柏

前端 终端 低代码 JNPF

每日一题:LeetCode-662. 二叉树最大宽度

Geek_4z9ami

面试 算法 LeetCode 二叉树 BFS

AI工程化与低代码:加速人工智能应用开发的新趋势

EquatorCoco

人工智能 AI 低代码 人工智能技术

宁波银行:在「金融科技」引擎上,沉浸式提效减负

LigaAI

研发管理 IDEA LigaAI 研发协作 提效

HttpClient5升级笔记--API篇

FunTester

投资引路人:认知体系决定成败

少油少糖八分饱

投资 认知 能力圈 反人性 人性

inBuilder&openEuler,基于毕昇 JDK,提升大规模Java应用的启动性能

inBuilder低代码平台

低代码 openEuler Java.

喜报!酷克数据携手中移在线入选2023大数据“星河”数据库优秀案例

酷克数据HashData

海外云手机版-怎么从零开始进行TikTok营销?

Ogcloud

跨境电商 TikTok 外贸

空投 | Mint Blockchain 将于 2024 年 1 月 10 号启动 Mint Genesis NFT 空投活动

NFT Research

blockchain NFT\ 空投

互联网+建筑工地:技术革新引领建筑行业的未来

快乐非自愿限量之名

互联网 低代码 数字化 建筑行业

Tik Tok短时间内快速吸粉方法——海外云手机版

Ogcloud

跨境电商 TikTok 外贸

“双十一、二” 业务高峰如何扛住?韵达快递选择 TDengine

TDengine

tdengine 时序数据库 韵达

质量免费吗?

BY林子

软件质量 质量内建 缺陷预防

PostgreSQL 可观测性最佳实践

观测云

数据库 postgresql

怎么避免Tik Tok被限流?——海外云手机一键解决

Ogcloud

跨境电商 TikTok 外贸

称重驱动二次开发教程

EquatorCoco

技术 开发 系统 电子称重系统

技术人2023年终总结,大模型对小城市程序猿的深远影响|社区征文

百里丶落云

AI #大模型

推荐几款非常好用的软件,干货满满!

伤感汤姆布利柏

SSH远程直连Docker容器教程。

百度搜索:蓝易云

Docker Linux 运维 SSH 云服务器

5分钟攻略Spring-Retry框架实现经典重试场景

快乐非自愿限量之名

前端 spring-boot #框架

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