Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深入浅出FaaS的两种进程模型

深入浅出FaaS的两种进程模型

原创
作者头像
码农架构
修改于 2020-10-12 06:40:16
修改于 2020-10-12 06:40:16
1K0
举报
文章被收录于专栏:码农架构码农架构

上一篇我们通过一个 Node.js 纯 FaaS 的 Serverless 应用,给你介绍了 Serverless 引擎盖下的运作机制,总结来说,FaaS 依赖分层调度和极速冷启动的特性,在无事件时它居然可以缩容到 0,就像我们的声控灯一样,有人的时候它可以亮起来,没人的时候,又可以自动关了

听完了原理,我估计你肯定会问,FaaS 这么好,但是它的应用场景是什么呢?今天我们就来一起看下。不过,想要理解 FaaS 的应用场景,我们就需要先理解 FaaS 的进程模型,这也是除了冷启动之后的另外一个重要概念

FaaS 进程模型

FaaS 的冷启动过程,我们知道容器和 Runtime 准备阶段都是由云服务商负责的,我们只需要关注具体的函数执行就可以了。而函数执行在 FaaS 里是由“函数服务”负责的,当函数触发器通知“事件”到来时,函数服务就会根据情况创建函数实例,然后执行函数。当函数执行完之后,函数实例也随之结束自己的使命,FaaS 应用缩容到 0,然后开始进入节能模式

其实这里会有一些疑问:函数执行完之后实例能否不结束,让它继续等待下一次函数被调用呢?这样省去了每次都要冷启动的时间,响应时间不就可以更快了吗?

是的,本身 FaaS 也考虑到了这种情况,所以从运行函数实例的进程角度来看,就有两种模型。我也画了张图,方便你理解。

  • 用完即毁型:函数实例准备好后,执行完函数就直接结束。这是 FaaS 最纯正的用法。
  • 常驻进程型:函数实例准备好后,执行完函数不结束,而是返回继续等待下一次函数被调用。这里需要注意,即使 FaaS 是常驻进程型,如果一段时间没有事件触发,函数实例还是会被云服务商销毁

这两个模型其实也对应两种不同的应用场景。举个例子,比如你要把我们一起在Servless群中的“待办任务”应用部署上线,还记得小程吧,他完成了第一个版本,他用 Express.js框架开发的 MVC 架构,View 层他采用流行的 React,并且使用了 Ant Design Pro React 组件库,Model 数据库采用 MongoDB。小程的第一个版本,就是一个典型的传统 Web 服务。

从可控性和改造成本角度来看 Web 服务,服务端部署方案最适合的还是托管平台 PaaS 或者自己搭服务跑在 IaaS 上。正如我上一讲所说,使用 FaaS 就必须在 FaaS 的条件限制内使用,最佳的做法应该是一开始就选用 FaaS 开发。

但是小程的运气比较好,我们查了一下文档,发现 FaaS 的 Node.js 的 Runtime 是支持 Express 的,所以我们只需少量修改,小程的第一个版本就可以使用 FaaS 的常驻进程方案部署。

这里我要做个对比。在之前,假设没有 FaaS,我们要将应用部署到托管平台 PaaS 上;启动 Web 服务时,主进程初始化连接 MongoDB,初始化完成后,持续监听服务器的 80 端口,直到监听端口的句柄关闭或主进程接收到终止信号;当 80 端口和客户端建立完 TCP 链接,有 HTTP 请求过来,服务器就会将请求转发给 Web 服务的主进程,这时主进程会创建一个子进程来处理这个请求。

这里我要做个对比。在之前,假设没有 FaaS,我们要将应用部署到托管平台 PaaS 上;启动 Web 服务时,主进程初始化连接 MongoDB,初始化完成后,持续监听服务器的 80 端口,直到监听端口的句柄关闭或主进程接收到终止信号;当 80 端口和客户端建立完 TCP 链接,有 HTTP 请求过来,服务器就会将请求转发给 Web 服务的主进程,这时主进程会创建一个子进程来处理这个请求

而在 FaaS 常驻进程型模式下,首先我们要改造一下代码,Node.js 的 Server 对象采用 FaaS Runtime 提供的 Server 对象;然后我们把监听端口改为监听 HTTP 事件;启动 Web 服务时,主进程初始化连接 MongoDB,初始化完成后,持续监听 HTTP 事件,直到被云服务商控制的父进程关闭回收

当 HTTP 事件发生时,我们的 Web 服务主进程跟之前一样,创建一个子进程来处理这个请求事件。主进程就如我们上图中绘制的那个蓝色的圆点,当 HTTP 事件发生时,它创建的子进程就是蓝色弧形箭头,当子进程处理完后就会被主进程回收

在我看来,常驻进程型就是为了传统 MVC 架构部署上 FaaS 专门设计的。数据库也可以使用原来的 DB 连接方式,不过这样做会增加冷启动的时间(我特意在图中用曲线代表时间增加),从而导致第一次请求长延迟甚至失败。比较适合的做法是我们前面所说的中,讲 Serverless 架构时说的,数据持久化采用 BaaS 服务

那么我们能否用用完即毁型来部署小程的这个 MVC 架构的 Web 服务呢?可以,但是我不推荐你这样做,因为用完即毁型对传统 MVC 改造的成本太大。

说到这里,我们再将上面对比两个模型的示意图镜头再拉远一点,加上 HTTP 触发器看看。其实从另外一个角度看,触发器就是一个常驻进程型模型一直在等待,只不过这个触发器是由云服务商处理罢了。

这里我再啰嗦强调下,还是我们上一讲说的,FaaS 只是做了极端抽象,云服务商通过技术手段帮助开发者屏蔽了细节,让他们尽量只关注代码本身。

所以,在用完即毁型中,我们只要将 MVC 的 Control 层部署到函数执行就可以了。这也意味着我们要将我们的 MVC 架构的 Control 函数一个个拆解出来部署,一个 HTTP 请求对应一个 Control 函数;Control 函数实例启动时连接 MongoDB,一个请求处理完后直接结束。你如果要提升 Control 函数的冷启动时间,Model 层同样要考虑 BaaS 化改造。这里你听着可能有点陌生,没关系,后面我会通过代码给你演示,你到时候再理解也不迟。

现在,理解了两种类型,我们再来看看 FaaS 是怎么收费的,以及常驻型进程这种模式是不是官方会多收费。云服务商 FaaS 函数服务的收费标准各不相同,但他们都会提供一定的免费额度。我给你归纳下 FaaS 的收费标准,主要有两个维度:调用函数次数和函数耗时。

  • 调用函数次数,函数每次被事件触发,计数器加一。例如我们 Hello World 例子的 index.js 文件的 handler 函数,它每调用一次,计数就加一。这种模式因为不占资源,所以资源利用率高、收费低
  • 函数耗时,说的是函数执行的运行时长,它的计算单位是 CU-S,也就是 CPU 运行了多少秒。

例如我们上面“待办任务”改造的常驻进程型和用完即毁型,多数情况下其实他们两个的函数耗时是一样的。这里可能有些绕,需要给你解释一下。

常驻进程型改造后主要占用的是内存,而 FaaS 收费的是 CPU 计算时间,也就是说常驻进程的模式并不会持续收费。但常驻型应用的冷启动时间会增加,所以我们要尽量避免冷启动,避免冷启动通常又需要做一些额外的工作,比如定时触发一下实例或者购买预留实例,这地方就会增加额外的费用了。这样听起来,是不是觉得常驻进程型改造 MVC 应用用起来很别扭?是的,我们前面也说了,常驻进程模式就是为了传统 MVC 架构部署上 FaaS 专门设计的,算是一种权宜之计吧。

用完即毁型改造后,同样冷启动时间会增加,但是冷启动时间是云服务商负责的。我们 Control 函数的执行时间,和 MVC 部署在 FaaS 中 Control 的执行时间是一样的。每个请求都增加了冷启动时间,响应时间会更长一些,但我们不用考虑额外的成本。那学到这儿,相信你也可以感觉到了,用完即毁型也不太适合传统 MVC 架构的改造,也是一种权宜之计,但这是 FaaS 最纯正的用法,肯定还是有它的用武之地的。

  • 通过一个Serverless案例,理解FaaS的运行逻辑

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文讲透 Serverless 到底是什么
上图是 MVC 架构的 Web 应用部署之后的典型情况。上图中的整个蓝色部分就是服务端的边界,它是负责应用或代码的线上运维。而 Serverless 要解决的问题的边界就是服务端的边界,也就是服务端运维。
syy
2021/02/02
1.3K0
深入浅出FaaS应用场景之数据编排
通过上一篇深入浅出FaaS的两种进程模型了解到FaaS 的进程模型有两种:常驻进程型和用完即毁型。常驻进程型是为了适应传统 MVC 架构设计的,它看起来并不自然;如果你从现在开始玩 FaaS 的话,我当然首选推荐用完即毁型,它可以最大限度发挥 FaaS 的优势!
码农架构
2020/10/26
1.6K0
深入浅出FaaS应用场景之数据编排
《深入浅出Node.js》-玩转进程
Node 基于 V8 引擎构建,采用单线程模型,所有的 JavaScript 将会运行在单个进程的单个线程上,它带来的好处是:没有多线程中常见的锁以及线程同步的问题,操作系统在调度时也能减少上下文切换,提高 CPU 使用率。但是如今 CPU 基本均是多核的,真正的服务器往往还有多个 CPU,一个 Node 进程只能利用一个核,这带来硬件资源的浪费。另外,Node 运行在单线程之上,一个单线程抛出异常而没有被捕获,将会导致进程的崩溃。
李振
2021/11/26
8590
《深入浅出Node.js》-玩转进程
通通透透看无服务器计算:由来、场景和问题
云计算涌现出很多改变传统IT架构和运维方式的新技术,比如虚拟机、容器、微服务,无论这些技术应用在哪些场景,降低成本、提升效率是云服务永恒的主题。过去十年来,我们已经把应用和环境中很多通用的部分变成了服务。Serverless的出现,带来了跨越式变革。Serverless把主机管理、操作系统管理、资源分配、扩容,甚至是应用逻辑的全部组件都外包出去,把它们看作某种形式的商品——厂商提供服务,我们掏钱购买。过去是“构建一个框架运行在一台服务器上,对多个事件进行响应”,Serverless则变为“构建或使用一个微服务或微功能来响应一个事件”,做到当访问时,调入相关资源开始运行,运行完成后,卸载所有开销,真正做到按需按次计费。这是云计算向纵深发展的一种自然而然的过程。 Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署。它与传统架构的不同之处在于,完全由第三方管理,由事件触发,存在于无状态(Stateless)、暂存(可能只存在于一次调用的过程中)计算容器内。构建无服务器应用程序意味着开发者可以专注在产品代码上,而无须管理和操作云端或本地的服务器或运行时。Serverless真正做到了部署应用无需涉及基础设施的建设,自动构建、部署和启动服务。 国内外的各大云厂商 Amazon、微软、Google、IBM、阿里云、腾讯云、华为云相继推出Serverless产品,Serverless也从概念、愿景逐步走向落地,在各企业、公司应用开来。
孙杰
2019/10/29
2.1K0
通通透透看无服务器计算:由来、场景和问题
FAAS 调研笔记
功能即服务 (FAAS) 是一类云计算服务,它提供了一个平台,允许客户开发、运行和管理应用程序功能,而无需构建和维护通常与开发和启动应用程序相关的基础设施的复杂性。构建遵循此模型的应用程序是实现“无服务器”体系结构的一种方式,通常在构建微服务应用程序时使用。
Meng小羽
2023/02/16
2.1K0
云原生:什么是 FaaS ?
FaaS,Function as a Service,"功能即服务"(也译作“函数即服务”),是一种在无状态容器中运行的事件驱动型计算执行模型,这些功能将利用服务来管理服务器端逻辑和状态。
一个会写诗的程序员
2020/11/03
4.1K0
最经典的两种软件架构模式
那么,在软件研发领域,最经典的两种架构设计模式,即微内核架构模式和 Pipe-Filter 架构模式,下面我们就来聊一聊这两种架构模式。
有赞coder
2020/08/24
1K0
最经典的两种软件架构模式
美团是如何解决落地Serverless的五大难题的?
近年来,在容器、Kubernetes、云原生等技术推动下,Serverless 技术也迎来了迅速发展,国内各大厂都在积极建设 Serverless 相关产品,美团也于 2019 年初开始了 Serverless 平台的建设。Serverless 平台的建设挑战较多,例如技术选型、冷启动优化、高可用保障、容器稳定性提升、研发体系建设等。
深度学习与Python
2022/06/11
8710
美团是如何解决落地Serverless的五大难题的?
看懂 Serverless,这一篇就够了
云计算涌现出很多改变传统IT架构和运维方式的新技术,比如虚拟机、容器、微服务,无论这些技术应用在哪些场景,降低成本、提升效率是云服务永恒的主题。
全栈程序员站长
2022/09/06
1.5K0
看懂 Serverless,这一篇就够了
深入浅出NodeJS随记 (四)
最近在研读书籍 深入浅出nodejs , 随手写下的一些笔记, 和大家分享~ 如有错误,欢迎指正~
邱邱邱邱yf
2021/12/10
4230
15年了,我们到底怎样才能用好 Serverless
作者 | 冯嘉,华为云中间件首席专家、PaaS 云原生中间件团队负责人 编辑 | 褚杏娟   编者按:无论是云厂商还是应用企业,在谈到云计算时都不约而同提到了 Serverless。有的已经已经在核心业务上应用 Serverless;有的已经接受了 Serverless 的稳定性和效率,开始小试牛刀;但还有很多企业在观望,或者想要应用但不知道从哪里开始。 虽然已经发展十多年,经过多次迭代,但再次成为业内热议对象意味着 Serverless 已经发展到一定阶段,业内有了更多成果可以分享。在这篇文章中,作
深度学习与Python
2023/04/14
3210
15年了,我们到底怎样才能用好 Serverless
微博视频处理系统的云原生之路
大家好,我是来自微博视频平台的黄阳全,今天分享的主题是微博视频处理系统云原生之路。
LiveVideoStack
2022/02/11
1.4K0
微博视频处理系统的云原生之路
从开发运维发展史看到底什么是Serverless?
在个人PC启动一个端口,浏览器访问即可调试代码,但要将应用部署到互联网,还需运维。
JavaEdge
2021/02/23
4060
从开发运维发展史看到底什么是Serverless?
周维跃:Serverless 云函数架构精解
5月25日,云+社区技术沙龙-互联网架构成功举办。本期沙龙特邀请腾讯的技术专家分享关于技术架构、落地实践案例、无服务器云函数架构、海量存储系统架构等话题,从技术角度看架构发展,为开发者们带来丰富的实践经验内容,深度揭秘技术架构。下面是周维跃老师关于云函数架构的解析和函数冷启动的优化经验的分享。
腾讯云开发者社区技术沙龙
2019/06/03
10.8K0
周维跃:Serverless 云函数架构精解
从 MVC 到 FaaS —— 如何开发企业级 FaaS 应用
这是我在腾讯云 Hello, Serverless 沙龙的演讲内容,转自简单心理技术团队博客。
朱峰
2019/04/26
1.6K0
从 MVC 到 FaaS —— 如何开发企业级 FaaS 应用
Serverless安全研究 — Serverless概述
在“云”的概念还没有产生之前,开发者购买物理机,并在其上部署应用程序,企业将购买的机器放置数据中心,其网络、安全配置均需要专业的技术人员管理,在这种高成本运营模式下,虚拟化技术应运而生。
绿盟科技研究通讯
2020/09/08
2.3K0
[深入浅出LB]手把手带你实现一个负载均衡器
负载均衡,含义就是根据一定算法将负载(工作任务)进行平衡,分摊到多个操作单元上运行、执行,常见的为Web服务器、企业核心应用服务器和其他主要任务服务器等,从而协同完成工作任务。负载均衡在原有的网络结构上提供了一种透明且有效的的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性,同时承受住更大的并发量级。
前端LeBron
2021/12/08
2.1K0
[深入浅出LB]手把手带你实现一个负载均衡器
云函数 SCF 支持容器镜像交付 - 赋能应用 Serverless 化
01. FaaS 产品与容器生态的结合 容器镜像已成为云原生时代标准的交付物,并且有其强大的生态来解决 CICD、存储、编排等实际需求。云函数 SCF 从设计之初即是基于云原生架构的 FaaS 产品,同时也是 Serverless 思想的最佳产品化体现之一。在 Runtime 层支持自定义容器镜像后,意味着产品形态整体向容器化生态迈出了第一步。 一方面,解决函数运行时的环境依赖问题,给予用户更大的自由发挥空间;另一方面,产品形态层面的呈现使得用户无需受困于 Kubernetes 集群管理、安全维护、
腾讯云serverless团队
2021/06/03
1.7K0
【Web技术】244-Serverless掀起新的前端技术变革
最近关于 Serverless 的讨论越来越多。看似与前端关系不大的 Serverless,其实早已和前端有了渊源,并且将对前端开发模式产生变革性的影响。本文来自阿里云前端工程师蒋航在 QCon 北京 2019 的分享,他从前端开发模式的演进、基于 Serverless 的前端开发案例以及 Serverless 开发最佳实践等方面,与大家探讨 Serverless 中的前端开发模式。
pingan8787
2019/07/25
1K0
【Web技术】244-Serverless掀起新的前端技术变革
这是你所了解的FaaS 么?——无服务计算的10个思考
如今,云计算特别是基础设施即服务(Infrastructure-as-a-Service,IaaS)已经成为广泛采用的系统架构,并且可以根据需要提供虚拟机。企业越来越多地采用云计算的一个主要因素是其现收现付模式,客户只需为从云计算提供商那里租用的资源支付费用,并且有能力在没有预先成本的情况下获得所需的尽可能多的资源。
半吊子全栈工匠
2021/07/14
1.3K0
推荐阅读
相关推荐
一文讲透 Serverless 到底是什么
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档