与Serverless 的第一次亲密接触

Servrless概念

Serverless 是一个架构上的概念,从字面上理解就是无服务器架构。Serverless最初是用于描述依赖第三方服务实现对逻辑和状态进行管理的应用,典型的例子是单页 Web 和移动 App 这种富客户端应用,他们一般都使用基于云端的数据库(例如Parse、Firebase),认证服务(Auth0、AWS congnito)等。这些第三方服务通常称为 BaaS(Backend as a Service) 。

Serverless 的第二种含义,是用来描述这样一种应用架构:除了使用第三方 BaaS 服务外,一部分服务端逻辑仍然由应用的研发人员实现,但是跟传统架构不同在于,这部分服务端代码运行于无状态的容器中,可以由事件触发,短暂的,完全被第三方管理。

业界对 Serverless 的热议,大部分集中第二种,因为第二种形式代码托管代表技术更新,以 FaaS(Function as a Service) 而闻名。根据第二种场景,有一个最新的定义是:Serverless 架构是基于互联网的系统,其中应用开发不使用常规的服务进程。相反,它们仅依赖于第三方服务(例如 AWS Lambda 服务),客户端逻辑和服务托管远程过程调用的组合。后面叙述都是基于第二种定义来进行,也就是基于 FaaS 函数计算服务来实现的 Serverless 应用架构,在这个定义上可以简单把 Serverless 等同 FaaS。

Serverless 和 PaaS的关系

FaaS 与 PaaS的概念在某些方面有许多相似的地方。人们甚至认为 FaaS 就是另一种形式的 PaaS,但是 Intent Media 的工程副总裁 Mike Roberts 提出一个微妙的差别:

大部分PaaS应用无法针对每个请求启动和停止整个应用程序,而 FaaS 平台生来就是为了实现这样的目的。

AWS 云架构战略副总裁 Adrian Cockcroft 曾经针对两者的界定给出了一个简单的方法:

如果你的PaaS 能够有效地在20毫秒内启动实例并运行半秒,那么就可以称之为 Serverless”。

我理解两个人的意思,都是认为传统的 PaaS 和 FaaS 的抽象层次不一样,PaaS 是对整个应用的抽象,FaaS 是对应用逻辑的单位(函数)的抽象。举例来说,PaaS 不是针对每个请求来拉起一个服务,它是常驻的服务,而 FaaS 是根据每个请求来拉起一个容器来执行,属于更细粒度的拆分。也就是:PaaS 托管的是整个应用,而 FaaS 托管应用的某个碎片化的逻辑代码,从资源使用率和成本角度更具优势。

Serverless 和 BaaS 的关系

BaaS 和 Serverless 的区别主要在于:BaaS 是一般是第三方提供的后端服务,例如 AWS 提供的Congito就是典型的 BaaS 服务,业界比较成功的 BaaS 服务几乎都是为移动开发的后端云服务,例如 Facebook 的 Parese、Google 的 Firebase、国内 LeandCloud,提供的功能大同小异,都是实时数据库,消息推送等等。

BaaS 的粒度介乎 PaaS 和 FaaS,PaaS 是提供了应用运行环境,而是BaaS将特定应用变成一个云服务。而应用想实施 Serverless 架构,还是需要自己的服务代码来组合这些 BaaS 服务来满足自己的业务逻辑,而且服务代码要通过 FaaS 来管理。用两张图说明两者区别,两个图是都是实现一个广告点击行为数据处理,Click Processor 是实际处理动作的服务。第一张图 Click Processor 是一个 BaaS 服务,进程常驻,每次都由这个进程处理。第二张图把它改造成 Serverless 架构,每次点击拉起一个进程执行一个函数,函数托管在 FaaS 服务中。
这里写图片描述
图一
这里写图片描述
图二

与 Serverless 的第一次接触

想象一下,你是一名 Web 开发工程师,你接到一个需求需要做一个单页面应用,上传一张图并在几秒后获得一张梵高风格化的图,像这样:
这里写图片描述
遇到这种情况,一般先 Google 一下,找到了这个:

alexjc/neural-doodle

它的效果大概是这样:

这里写图片描述

先过一遍步骤:

  1. 浏览器发请求给服务端,body 是一张图片的二进制数据;
  2. 服务端从 body 中取出二进制数据,转成图片,调用 doodle.py 中的方法,转换风格存储之并返回存储位置;
  3. 浏览器按位置请求图片并展示之。

但是有几个问题,如果这个 SPA 出乎意料的受欢迎,接口负载过高呢?是不是要升级,加机器,加负载均衡?如果来了一个新需求或者简单的 bugfix,是不是又涉及到批量更新节点,这还是没有考虑日志,运维,监控等运营方面的工作量。根据前面对Serverless的介绍,这个场景很适合用Serverless产品来解决,这是一个典型的无状态服务+计算的自动扩展,这些问题交给Serverless服务提供方即可。下面我选择UCloud的Serverless产品UGC来搭建这个服务,并测试一下效果,看是否能满足我的需求。

试用 Serverless

本文以UCloud通用计算(UCloud General Compute)为例来介绍。UGC可满足图片处理、机器学习、大数据处理、生物数据分析等领域的计算需求。

下图是其中一个使用场景:

UCloud基于UGC的高效并行计算能力搭建的对象存储(UFile)图片处理服务,得以轻松支持用户每天千万级别的图片处理请求,满足用户对高时效的需求。

这里写图片描述

很适合我们本次梵高风格化图片的需求。下面是我这次搭建服务过程:

  1. 创建私有仓库(WEB界面)
  2. 登录镜像仓库(cli)
  3. 制作梵高风格转换镜像(cli)(如果你认真看文档,你会发现其实 alexjc/neural-doodle 其实是有直接提供镜像的,^_^)
  4. 上传镜像(cli)
  5. 查看镜像详情(WEB界面)
  6. 告警模板配置(WEB界面)
  7. 使用 SDK 提交任务(Python SDK)
  8. 查看任务执行统计WEB界面)
  9. 查看监控(WEB界面)

下面是详细的操作步骤:

  • 创建私有仓库
    这里写图片描述
  • 下载梵高风格转换镜像
    镜像介绍页面:https://hub.docker.com/r/alexjc/neural-doodle/
    我们直接从 docker 官方下载它:
    docker pull alexjc/neural-doodle

  • 修改镜像名称

    docker tag alexjc/neural-doodle cn-bj2.ugchub.service.ucloud.cn/kevingao/neural-doodle:first
  • 登录镜像仓库
    docker login cn-bj2.ugchub.service.ucloud.cn

  • 上传镜像
    将我们刚才下载的镜像上传到UCloud镜像仓库
    docker push cn-bj2.ugchub.service.ucloud.cn/kevingao/neural-doodle:first

  • 查看镜像信息
    这里写图片描述
  • 告警模板配置

目前包含超时与失败两个模板可以直接使用
这里写图片描述

  • 使用SDK提交风格转换任务
    在Python SDK中配置自己账号的公私钥和docker image 路径,然后使用 Web后端调用,发布风格转换任务。至此我们风格转换接口就就绪了,使用相同的方法搞定打水印的镜像,我们先使用脚本测试一下接口,然后通过UGC服务后台来查看执行的情况
  • 查看任务执行统计
    这里写图片描述
    包含调用次数、成功率、结果、花费CPU时间等信息

下面我们就要开始前端的制作了

前端交互

Web App有两个功能,打水印和梵高风格转换,它们的交互基本是一致的,这里我截图打水印的页面来做演示:

  • 第一步:选择图片
    这里写图片描述
  • 第二步:上传图片 (也可以直接使用UGC 对象存储功能)

这里写图片描述
- 第三步:输入要打的水印(镜像需要的参数)

这里写图片描述
- 第四步:返回结果展示

这里写图片描述
- 第五步:统计任务执行结果
这里写图片描述

如上文所见,这个简单的Web APP完成了『图片梵高风格化』和『图片打水印』两个功能,这里它体现了两大优点:

  1. 计算能力自动扩展,处理一张照片与处理100张照片的时间花费是一样的;
  2. 高并发,UGC拥有多节点数万核的资源支持可以轻松支持高并发的请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse把tomcant用到一个项目里_聊一个镜头工艺里容易被忽略,但很重要的项目...

在不改换门庭的情况下,一颗镜头一般都会伴随大家使用很长一段时间,也相信大多数人都遇到过剐蹭镜头前组的情况,这时候最容易引发的担忧就是“伤着镀膜了么?会不会影响成像效果?”其实换个角度来看,这个问题…

华为手机怎么看图片属性_华为手机怎么才能息屏显示时间?操作方法很简单,看完涨知识了...

现如今大家几乎都是手机不离身,甚至有些朋友机不离手。所以已经比较少人,会因为看时间而佩戴手表了,毕竟只要按下电源键就可以看时间了。其实现在的很多手机,不用亮屏也能看时间,下面我们就一起来看看是如何设置的吧。…

开源神器,无需一行代码就能搞定机器学习,不会数学也能上手

对于机器学习和数据科学的初学者来说,最大的挑战之一是需要同时学习太多知识,特别是如果你不知道如何编码。你需要快速地适应线性代数、统计以及其他数学概念,并学习如何编码它们,对于新用户来说,这可能会有点难以承受…

OpenStack不行了吗?悉尼峰会,OpenStack的白城反击战?

作者:李开,九州云99Cloud联合创始人&副总裁。 11月悉尼的春天忽然变得阴冷潮湿,和第一天抵达时候的风和日丽大相径庭,海风推动着飘忽的乌云,有点电影《魔戒》里黑暗军团压境的味道。 由于早上不小心睡过了头&…

档案盒正面标签制作_错题本科学制作方法、正确使用方式及窍门

错题本的作用不用多说,重点是如何制作错题本以及正确使用方法。小编整理了以下制作错图集的正确步骤,希望对大家有用。一、制作错题本的简单步骤步骤1:把所有的练习册和试卷找出来;分学科按学期顺序整理;以学年或学期为单位装订在一起&#x…

android触摸效果,Android UI实现单行文本水平触摸滑动效果

本文实例为大家分享了单行文本水平触摸滑动效果,通过EditText实现TextView单行长文本水平滑动效果。下一篇再为大家介绍 多行文本折叠展开效果,自定义布局View实现多行文本折叠和展开。1.初衷最近做应用的时候有用到TextView单行长文本,当文本…

机器人爱因斯坦、索菲亚对话人类:“人类必须自我修复”

人工智能的发展速度真的太快了,就在不久前机器人“索菲亚”获得沙特阿拉伯获得了公民身份之后,机器人版的爱因斯坦教授也登上了历史的舞台。 机器人版的爱因斯坦教授是由汉森机器人(Hanson Robotics)公司制造的,这家机器人制造商制造的另外一…

hook控制浏览器的方法_Java-Hook技术-入门实践+反射、动态代理、热修复再看看

延续之前的MonkeyLei:Android-模块化、组件化、插件化、热修复-插件化-起个头,我们复习下里面的关于反射和动态代理点的知识。然后尝试简单了解下Hook...看之前文章,记得多复习下反射代理,比如使用这些....:public cla…

vscode 头文件包含问题_使用clangd替代c/c++配置vscode c++项目

背景:最近从Clion切换到了vscode来进行代码开发,发现vscode自带的c/c插件除了能够使用debug功能,其余代码补全,跳转等功能都和基于clangd的clion有较大差距,经常出现匹配不上或者跳转不准确的问题,在这背景…

微服务拆分需要考虑的必要因素与坚持原则

前言:创业公司往往因为有限的时间和投入,把系统所有的功能都聚集在一起。随着业务的不断发展,技术人员开始不断地对架构进行解耦和拆分。微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,或者在做微服…

data后缀文件解码_Java语法进阶13-文件、IO流

FileFile是文件和目录路径名的抽象表示形式,即File类是文件或目录的路径,而不是文件本身,因此File类不能直接访问文件内容本身,如果需要访问文件内容本身,则需要使用输入/输出流。File类的对象用来表示文件和文件夹的对…

中小型互联网公司微服务实践-经验和教训

上次写了一篇文章叫Spring Cloud在国内中小型公司能用起来吗?介绍了Spring Cloud是否能在中小公司使用起来,这篇文章是它的姊妹篇。其实我们在这条路上已经走了一年多,从16年初到现在。在使用Spring Cloud之前我们对微服务实践是没有太多的体会和经验的…

对于机器学习,到底该选择哪种编程语言

开发者到底应该学习哪种编程语言才能获得机器学习或数据科学这类工作呢?这是一个非常重要的问题。我们在许多论坛上都有讨论过。现在,我可以提供我自己的答案并解释原因,但我们先看一些数据。毕竟,这是机器学习者和数据科学家应该…

android如何适配平板,适用于平板电脑、大屏设备和可折叠设备的自适应布局

将应用支持扩展到更大屏幕的设备(例如平板电脑、可折叠设备和 Chrome 操作系统设备)是扩大您的覆盖面和互动度的绝佳方式。平板电脑的增长率比去年同期 (YOY) 大幅增长了 30%,Chrome 操作系统设备比去年同期增长了 92%。我们还发现,用户使用平板电脑的时…

对于机器学习,到底该选择哪种编程语言?

开发者到底应该学习哪种编程语言才能获得机器学习或数据科学这类工作呢?这是一个非常重要的问题。我们在许多论坛上都讨论过这个问题。今天,我将给出我自己的答案并解释其中原因,但我们首先看一些数据。毕竟,这是机器学习者和数据…

置顶图片代码加链接html,css图片怎么加链接?

css可以通过在图片前加标签实现为图片加链接,语法:。使用此方法引入图片即可为图片添加链接。设定图片超链接,用css样式来实现,其实就是给这个图片的块添加超链接,我们可以通过在这个块的前面添加一个a标签来实现&…

linux上修改html,linux进程名修改

如何修改 Linux 中的进程名在编写网络服务器程序时,为了响应客户端的请CSS布局HTML小编今天和大家分享,我们经常需要新建进程来处理业务流程;而且又是为了关闭某个非法请CSS布局HTML小编今天和大家分享或者关闭长连接的客户端,这时…

AI 崛起,科学家的天下,程序员的谢幕

一边,在移动互联网时代掉队的微软迅速组织起来了一个万人的 AI 团队。 另一边,Facebook、Google 在对各个技术公司进行买买买,为了在 AI 时代的探索中铺好路。 多年前「深蓝」下国际象棋时,所有人都觉得人工智能还是遥不可及的学…

lammps计算聚合物例子_LAMMPS模拟聚合物结构,非晶态聚合物变形行为的模拟,纳米线变形模拟,单轴张力模拟,晶格参数计算...

推荐一个网站,上面有LAMMPS模拟聚合物结构,非晶态聚合物变形行为的模拟,纳米线变形模拟,单轴张力模拟,晶格参数计算的lammps脚本,如下面是晶格参数计算的lammps脚本,具体网址是:LAMMPS Inputs Archives - LAMMPS Tube​lammpstube…

jenkins 手动执行_Jenkins Git client插件命令执行漏洞(CVE201910392)

0x00 漏洞描述Jenkins发布了官方安全公告:https://jenkins.io/security/advisory/2019-09-12/,Git客户端插件中的系统命令执行漏洞。Git客户端插件接受用户指定的值作为调用的参数,git ls-remote以验证指定URL处是否存在Git存储库。这是以允许具有Job/Co…