QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

评论

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

YesPMP:引领未来众包协作的智能革新

知者如C

Vulkan内存模型+管理

江湖修行

移动端 OpenGL ES 渲染 vulkan

对话在行人|中亿丰(上):基于数智化中台推动业财融合

用友BIP

2023全球商业创新大会 对话在行人

新材料生产工厂MES系统选型指南

万界星空科技

MES系统

用友全球化数智运营解决方案:构建企业出海竞争力

用友BIP

中企出海 升级数智底座

缓存你用对了吗?喜马拉雅缓存使用军规

喜马拉雅技术团队

redis 缓存 喜马拉雅 使用规范 xcache

Sermant类隔离架构:解决JavaAgent场景类冲突的实践

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号9月PK榜

效率提升与智能化的新机遇

百度开发者中心

人工智能 大数据 文心一言

探索GameFi局势:利用代币经济学应对可持续发展挑战

区块链软件开发推广运营

交易所开发 数字藏品开发 dapp开发 区块链开发 NFT开发

打造全球司库新范式,用友践行产融数智化转型之洞见

用友BIP

全球司库

未来人工智能的璀璨星辰

百度开发者中心

人工智能 生成式AI 文心一言

Python程序设计实例 | 条形码图片识别

TiAmo

Python 条形码识别 条形码

海量小文件传输对于企业选用文件传输软件的重要意义

镭速

文件传输 海量小文件传输

使用Pyarmor保护Python脚本不被反向工程

高端章鱼哥

Python pyarmor

从4个特点为你解密华为云媒体网络底座AND

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号9月PK榜

人工智能新范式,重新定义生产力

百度开发者中心

人工智能 生成式AI 文心一言

不一样的 AGI 黑客松!Founder Park x Zilliz x 智谱 AI 联合发起!

Zilliz

大模型 Zilliz AGI 向量数据库

武林立志传:龙吟剑 mac攻略(武侠角色扮演游戏)中文移植版

mac

角色扮演游戏 Windows软件 苹果mac游戏 武林立志传 龙吟剑

小米 AR 运动主机「15 分钟消耗一碗米饭」;互联网行业平均薪资降至 3 万档丨RTE开发者日报 Vol.45

声网

GreptimeDB 使用指南 | 3 分钟快速下载启动时序数据库

Greptime 格睿科技

数据库 时序数据库 Greptime GreptimeDB

软件测试/测试开发丨Python 深拷贝与浅拷贝

测试人

Python 软件测试 自动化测试 深拷贝 浅拷贝

“连理”升空 OpenHarmony开启国产卫星系统星辰大海

最新动态

昇腾实践丨ATC模型转换动态shape问题案例

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号9月PK榜

聊聊低代码的全栈开发能力

高端章鱼哥

低代码 应用开发 全栈开发

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