与Serverless第一次亲密接触:你所不知道的UGC

Posted UCloud云计算

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了与Serverless第一次亲密接触:你所不知道的UGC相关的知识,希望对你有一定的参考价值。


作为一个新事物,Serverless 是一个架构上的概念,目前还没有公认的权威定义,字面理解就是“无服务器架构”。本文将介绍基于FaaS函数计算服务来实现的Serverless应用架构,也可以简单把Serverless 等同FaaS。在请求处理上,通过使用UCloud的Serverless产品——UGC来搭建服务,不仅测试效果显著,而且极大满足了需求。


Servrless概念

Serverless最初是用于描述依赖第三方服务实现对逻辑、状态进行管理的应用,典型案例是单页Web和移动APP这种富客户端应用,它们一般都使用基于云端的数据库(如Parse、Firebase)、认证服务(Auth0、AWS Cognito)等。这些第三方服务通常称为 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,以及国内 的LeanCloud,提供的功能大同小异,均为实时数据库、消息推送等。

BaaS的粒度介乎PaaS和FaaS, PaaS提供了应用运行环境,而BaaS将特定应用变成一个云服务。应用想实施Serverless架构,还需要自身服务代码来组合这些 BaaS服务,以满足业务逻辑,而且服务代码要通过FaaS来管理。

用下面两张图来说明两者区别,两图是实现一个广告点击行为数据处理,Click Processor为实际处理动作的服务。第一张图中,Click Processor是一个BaaS服务,进程常驻,每次都由这个进程处理;第二张图把它改造成Serverless架构,每次点击拉起一个进程执行一个函数,函数托管在FaaS服务中。

与Serverless第一次亲密接触:你所不知道的UGC

与 Serverless 的第一次接触

想象一下,你是一名 Web 开发工程师,你接到一个需求需要做一个单页面应用,上传一张图并在几秒后获得一张梵高风格化的图,像这样:

与Serverless第一次亲密接触:你所不知道的UGC

遇到这种情况,一般...嗯......先 Google 一下,找到了这个:

alexjc/neural-doodle

它的效果大概是这样:

与Serverless第一次亲密接触:你所不知道的UGC

先过一遍步骤:

1.浏览器发请求给服务端,body 是一张图片的二进制数据;

2.服务端从 body 中取出二进制数据,转成图片,调用 doodle.py 中的方法,转换风格存储之并返回存储位置;

3.浏览器按位置请求图片并展示之。

不过有几个问题,如果这个SPA出乎意料的受欢迎,导致接口负载过高该如何应对?是否要升级,加机器、加负载均衡?如果来了一个新需求或者简单的bugfix,是不是又涉及到批量更新节点,这还都是没有考虑日志、运维、监控等运营方面的工作量。

根据前面对Serverless的介绍,这个场景很适合用Serverless产品来解决,是一个典型的“无状态服务+计算”的自动扩展,这些问题交给Serverless服务提供方即可。下面选择UCloud的Serverless产品UGC来搭建该服务,并测试一下效果,看能否满足需求。

试用Serverless产品——UCloud UGC

UCloud通用计算(UCloud General Compute)是分布式大规模并行计算服务,可提供数万核级的并发计算能力,系统自动完成任务调度,并按实际使用量计费。UGC充分利用一个区域内的多个可用区计算资源,提供了基于云平台的跨可用区级别的高可用性、高安全性和高并发性。UGC可满足图片处理、机器学习、大数据处理、生物数据分析等领域的计算需求。

下图其中一个使用场景:

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

与Serverless第一次亲密接触:你所不知道的UGC

下面是这次搭建服务过程:

1. 创建私有仓库(WEB界面)

2. 登录镜像仓库(CLI)

3. 制作梵高风格转换镜像(CLI)(如果认真看文档,你会发现其实 alexjc/neural-doodle 是有直接提供镜像的^_^)

4. 上传镜像(CLI)

5. 查看镜像详情(WEB界面)

6. 告警模板配置(WEB界面)

7. 使用SDK提交任务(Python SDK)

8. 查看任务执行统计(WEB界面)

9. 查看监控(WEB界面)

以下是详细操作步骤:

  •  创建私有仓库

与Serverless第一次亲密接触:你所不知道的UGC

  • 下载梵高风格转换镜像

镜像介绍页面: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

  • 登录UCloud镜像仓库

docker login cn-bj2.ugchub.service.ucloud.cn

  • 上传镜像

将刚才下载的镜像上传到UCloud镜像仓库

docker push cn-bj2.ugchub.service.ucloud.cn/kevingao/neural-doodle:first

  •  查看镜像信息

与Serverless第一次亲密接触:你所不知道的UGC

  •  告警模板配置

目前包含“超时”与“失败”两个模板可以直接使用

与Serverless第一次亲密接触:你所不知道的UGC

  • 使用SDK提交风格转换任务

在Python SDK中配置自己账号的公私钥和Docker image 路径,然后使用Web后端调用,发布风格转换任务。

至此,风格转换接口就绪,使用相同方法搞定打水印的镜像,先使用脚本测试一下接口,然后通过UCloud UGC服务后台来查看执行的情况。

  • 查看任务执行统计

包含调用次数、成功率、结果、花费CPU时间等信息。

与Serverless第一次亲密接触:你所不知道的UGC

下面开始前端制作:

  • 前端交互

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

第一步:选择图片

与Serverless第一次亲密接触:你所不知道的UGC

第二步:上传图片(也可以直接使用UGC 对象存储功能)

与Serverless第一次亲密接触:你所不知道的UGC

第三步:输入要打的水印(镜像需要的参数)

与Serverless第一次亲密接触:你所不知道的UGC

第四步:返回结果展示

与Serverless第一次亲密接触:你所不知道的UGC

第五步:统计任务执行结果

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

先过一遍步骤:

1.计算能力自动扩展,处理一张照片与处理100张照片花费的时间一样;

2.高并发,UGC拥有多节点数万核的资源支持,可以轻松支持高并发请求。






点击“阅读原文”,了解更多UGC产品信息

以上是关于与Serverless第一次亲密接触:你所不知道的UGC的主要内容,如果未能解决你的问题,请参考以下文章

独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

独家对话阿里云函数计算负责人不瞋:你所不知道的Serverless

天猫淘宝省钱攻略!你所不知道的内部优惠

Android Context完全解析,你所不知道的Context的各种细节

你所不知道的良心网站第一弹

你所不知道的 CSS 负值技巧与细节