5分钟Serverless实践 | 构建无服务器图片鉴黄Web应用
Serverless是什么
Serverless中文译为“无服务器”,最早可以追溯到2012年Ken Fromm发表的《Why The Future Of Software And Apps Is Serverless》,他描述了一种场景,从用户自己维护的物理机,到IaaS,再到PaaS,计算模式的转变并不会停止,在云计算基础设施成熟的情况下应用程序可以不需要考虑服务器的存在,无服务器计算让开发者可以在不考虑服务器的情况下构建并运行应用程序和服务。
再到2016年,Mike Roberts在Martin Fowler的博客《Serverless Architectures》中,将Serverless架构分为Backend as a Service(BaaS)和Functions as a Service(FaaS)。
●BaaS也就是后端即服务,即应用架构由大量三方云服务和API来组织,使应用中关于服务器的逻辑和状态都由服务提供方来管理。比如典型的单页应用(SPA)和移动APP这些富客户端应用,前后端的交互主要以Rest API调用为主,只需要调用服务提供方的API即可完成相应的功能,比如身份验证、数据访问等。
●FaaS可以被称为函数即服务,开发者可以直接将服务侧业务逻辑代码部署、运行在第三方提供的无状态计算容器中,开发者只需编写业务代码即可,无需关注服务器,且代码的执行是由事件触发的。
一个Serverless的应用就是这样一个将BaaS和FaaS融合在一起的应用,用户关注于应用的业务逻辑代码,以函数为粒度将其运行在FaaS平台上,并和BaaS三方服务整合在一起,最后搭建一个完整的系统,整个过程完全无需关注服务器。
Serverless的优势
1.无需管理服务器
开发者只需关注应用的业务逻辑,而无需关注服务器的存在,降低业务接入门槛,快速上线,提高开发和运维效率。
2.灵活扩展、按需付费
据Gartner和麦肯锡统计,全球的服务器CPU平均利用率只有6%到12%,大量应用的资源利用率是非常低下的,特别是对于负载波峰波谷明显的应用。而Serverless可以根据负载弹性伸缩,并按需付费,根据实际运行消耗的资源计费,且业务是以函数的粒度运行的,可以充分利用碎片资源,极大地减小运作成本。
函数工作流FunctionGraph
上面简单介绍了Serverless架构以及其优点之后,我们再介绍一下华为云的函数工作流(FunctionGraph,FGS)。
函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩、免运维、高可靠的方式运行。通过函数工作流,开发者无需配置和管理服务器,只需关注业务逻辑,编写函数代码,以无服务器的方式构建应用,便能开发出一个弹性高可用的后端系统,并按实际运行消耗的资源计费。极大地提高了开发和运维效率,减小了运作成本。
构建无服务器图片鉴黄web应用
为了让大家对Serverless架构和函数工作流有更直观的了解,接下来我们将介绍如何通过函数工作流快速构建一个完整的无服务器的图片鉴黄Web应用,如下图,该应用接收用户上传的图片,并对图片进行分析,判断是否为色情图片。点击此处可免费体验Demo
试想,如果我们通过传统的模式开发此应用,需要如何开发?
即使是基于现在的云平台,我们也仍需要购买云服务器,关注其规格、镜像、网络等各指标的选型和运维,然后在开发过程中可能还需要考虑与其他云服务的集成使用问题,使代码中耦合大量非业务代码,并且服务器等资源也并非是按需的,可能会造成大量多余的费用。
现在我们可以通过函数工作流服务来快速构建这个系统,并且完全无需关注服务器,且按需运行,如图:
创建函数,在函数中调用华为云内容检测服务提供的图片鉴黄接口,实现图片鉴黄功能,并为该函数配置一个APIG触发器,对外提供图片鉴黄的API,从而构建出一个完整的图片鉴黄无服务器后端。然后将Web页面的静态资源部署在对象存储服务(OBS)中,用户可以直接从OBS访问前端页面。用户上传图片时,页面调用前面构建的图片鉴黄API,他会自动触发函数执行,而开发者编写的函数只需实现接收到图片之后如何处理图片的逻辑(调用内容检测服务服务)即可,最后将结果返回给前端页面。至此,我们就构建了一个完整的无服务器图片鉴黄Web应用。
现在,我们将介绍如何端到端地将此无服务器应用构建出来。
后端API搭建
进入函数工作流服务函数创建页面,选择图片鉴黄模板。该模板已经提供了本应用中函数的代码,按照代码注释中的指示创建函数之后,就成功搭建了本应用的后端系统,为函数所创建的APIG触发器会提供一个调用该后端函数的HTTP(s) API,供外部系统(如前端页面)调用。
创建成功后API的URL可以在函数详情页面的“触发器”栏看到:
前端页面搭建
前端的展示形式有很多,这里我们提供了一份前端代码包供大家学习参考,可以将此代码包部署到OBS上,快速构建一个单页Web应用(SPA)。然后调用上一步后端提供的接口,连通后端系统,完成整个无服务图片鉴黄Web应用的构建。
1.下载代码包并解压
2.为了让前端页面访问您的函数,需要配置页面Rest请求的URL。修改代码包里/functiongraph/assets/config/apis.json文件中checkImage的值,更改为上一步“后端API搭建”中创建的APIG触发器URL,即您的后端API的访问地址。
3.通过OBS托管前端页面。进入对象存储服务,创建一个OBS桶,将程序包文件逐个上传至该桶中。因为文件比较多,我们建议您下载 OBS Browser ,使用OBS Browser前,请先获取访问密钥。
4.启动网站。进入桶的静态网站托管界面,单击静态网站托管,配置桶的默认首页为index.html
配置完成后,您就已经成功搭建了本案例的前端系统。您可以通过obs提供的访问地址访问您的前端页面,检测图片时,页面会发送请求到您的函数。
总结
通过上面端到端构建一个完整的无服务器图片鉴黄Web应用,我们可以发现Serverless的架构具有如下优点:
1.无需关注任何服务器,只需关注核心业务逻辑,5分钟快速构建后端系统并上线,极大地提高了开发效率。
2.函数运行随业务量弹性伸缩,按需付费,当创建的函数没有执行时,不计费。
3.可以通过简单的配置连通函数工作流和其它云服务,甚至云服务和云服务,比如本例中只需创建一个APIG触发器便可完成API网关和函数工作流的连接,然后在函数中调用内容检测服务的鉴黄接口,那么函数就像一个粘合剂一样将两个云服务连接在一起。
5分钟Serverless实践 | 构建无服务器图片鉴黄Web应用的更多相关文章
- 5分钟构建无服务图片鉴黄web应用(基于FunctionGraph)
函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行.即使在一些复杂的web应用场景中,函数工作流也能发挥出令人 ...
- 5分钟Serverless实践 | 构建无服务器的敏感词过滤后端系统
前言 在上一篇“5分钟Serverless实践”系列文章中,我们介绍了什么是Serverless,以及如何构建一个无服务器的图片鉴黄Web应用,本文将延续这个话题,以敏感词过滤为例,介绍如何构建一个无 ...
- 5分钟搞定图片鉴黄web应用!
函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行.通过函数工作流,开发者无需配置和管理服务器,只需关注业务逻 ...
- 5分钟Serverless实践:构建无服务器的图片分类系统
前言 在过去“5分钟Serverless实践”系列文章中,我们介绍了如何构建无服务器API和Web应用,从本质上来说,它们都属于基于APIG触发器对外提供一个无服务器API的场景.现在本文将介绍一种新 ...
- 5分钟构建无服务器敏感词过滤后端系统(基于FunctionGraph)
摘要:开发者通过函数工作流,无需配置和管理服务器,以无服务器的方式构建应用,便能开发出一个弹性高可用的后端系统.托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行,极大地提高了开发和运维效率,减小 ...
- 专访阿里云 Serverless 负责人:无服务器不会让后端失业
2012 年,云基础设施服务提供商 Iron.io 的副总裁 Ken 谈到软件开发行业的未来,首次提出了 Serverless 的概念,为云中运行的应用程序描述了一种全新的系统体系架构.此后,以 AW ...
- shiro jwt 构建无状态分布式鉴权体系
一:JWT 1.令牌构造 JWT(json web token)是可在网络上传输的用于声明某种主张的令牌(token),以JSON 对象为载体的轻量级开放标准(RFC 7519). 一个JWT令牌的定 ...
- [转]Serverless实践
转载的,原文: https://www.cnblogs.com/middleware/p/9470533.html ------------------------------------------ ...
- 由浅入深SCF无服务器云函数实践
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:陈杰,腾讯云架构平台部技术专家 近年来,互联网服务从一开始的物理服务器托管,虚拟机,容器,发展到现在的云函数,逐步无服务器化,如下表所示. ...
随机推荐
- 联想 S5 Pro GT(L78091)免解锁BL 免rec 保数据 ROOT Magisk Xposed 救砖 ZUI5.0.047
>>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...
- Redis应用场景[分享]
Redis应用场景[分享] 1.取最新N个数据的操作2.排行榜应用 取TOPN操作3.需要精确设定过期时间的应用4.计数器应用(文章阅读数.评论数)5.Uniq操作,获取某段时间所有数据排重值6.实时 ...
- (转)版本管理工具介绍——SVN篇(一)
http://blog.csdn.net/yerenyuan_pku/article/details/72620101 SVN是何物 SVN是Subversion的简称,是一款集中式的开源版本控制系统 ...
- #NOIP前数学知识总结
我好菜啊…… 欧拉函数 欧拉函数φ(n),是小于n且和n互质的正整数(包括1)的个数. 性质: 1.对于质数n: φ(n)=n-1 2..对于n=pk φ(n)=(p-1)*pk-1 3.积性函数的性 ...
- ThinkPHP---案例1登录登出和添加部门
配置文件分3类:系统配置文件,分组配置文件,应用配置文件 ①系统配置文件ThinkPHP/Conf/convention.php: ②分组 / 模块 /平台配置文件Home/Conf/config.p ...
- C语言编辑编译及集成开发环境
C语言编辑编译及集成开发环境 编辑器 在不同的操作系统上使用不同的编辑器,保存源代码文件时,文件名应指出程序的功能扩展名应为.c. 编译器 编译器把源代码编译成机器语言的二进制指令即目标代码生成目标文 ...
- 08Java Server Pages 语法
Java Server Pages 语法 基础语法 注释 <!-- -->可以在客户端通过源代码看到:<%-- --%>在客户端通过查看源代码看不到. <!--浏 ...
- Gitlab forbidden
搭建使用了两年的gitlab 抽风了居然forbidden # vim /etc/gitlab/gitlab.rb gitlab_rails['rack_attack_git_basic_auth'] ...
- list查询棚舍面积的时候,所有棚舍面积的value都是一样的
解决办法 将pickingid在查list之前set到对象中,通过id来匹配查询 具体代码: FarmHouse farmHouse=new FarmHouse(); farmHouse.setPic ...
- webpack之webpack-dev-server 与 webpack-hot-server
最近在弄框架,用到了webpack打包,当然不可避免的遇到了开发实际问题.在实际开发中,我们不可能改一个文件,就去构建一次,于是想到了实时更新.查看webpack,看到了webpack-dev-ser ...