Serverless 入门课
蒲松洋(秦粤)
前百度国际化前端组组长
16754 人已学习
新⼈⾸单¥29
Serverless 入门课
15
15
1.0x
00:00/00:00
登录|注册

02 | 原理:通过一个案例,理解FaaS的运行逻辑

你好,我是秦粤。上一讲我们介绍了什么是 Serverless,从概念的角度我们已经对 Serverless 有了一个深入的了解;那从应用角度来看,Serverless 对于开发者究竟有什么魔力呢?这一讲,我准备通过快速部署纯 FaaS 的 Serverless 应用,给你讲一讲 FaaS 应用背后的运行原理。
为了让你更好地体验 Serverless 带来的变革,这节课我们以 Serverless 版本的"Hello World"实操例子进行展示。鉴于我的熟悉程度,我选择了阿里云,当然,你也可以选择你熟悉的云服务商(我在专栏的最后一课还会讲到如何解除云服务商的限制,混合使用多云运营商服务等等)。
另外,需要注意的是,如果你是跟着我一步步实操练习的,那么开通云服务可能会产生少量费用,遇到充值提示你要自行考虑一下。当然,如果你不着急体验,我觉得看我的视频演示也已经足够了。
00:00 / 00:00
    1.0x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00
    我们从上面的演示也看到了,会用 Serverless 这个目标我觉得不难实现,但这不是我们这节课的终极目的。今天我就想带着你打开这个 FaaS "Hello World"应用的引擎盖,来看看它内部到底是如何运行的。为什么要急着给你讲原理呢?因为如果你不理解原理的话,后面在应用 Serverless 化的时候就无从下手了。
    确认放弃笔记?
    放弃后所记笔记将不保留。
    新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
    批量公开的笔记不会为你同步至部落
    公开
    同步至部落
    取消
    完成
    0/2000
    荧光笔
    直线
    曲线
    笔记
    复制
    AI
    • 深入了解
    • 翻译
      • 英语
      • 中文简体
      • 中文繁体
      • 法语
      • 德语
      • 日语
      • 韩语
      • 俄语
      • 西班牙语
      • 阿拉伯语
    • 解释
    • 总结

    FaaS极速启动的原理及其与传统应用部署方式的区别是本文的重点。文章通过具体案例和详细解释,帮助读者深入理解了FaaS的运行原理。首先介绍了Serverless的概念,然后通过快速部署纯FaaS的Serverless应用展示了FaaS应用背后的运行原理。文章从FaaS是如何运行的角度出发,对Serverless的运行逻辑进行了详细解释。作者指出,FaaS并没有改变应用运行的逻辑,只是通过技术手段屏蔽了复杂性,将全链路的模型简化了。具体来说,FaaS应用将构建代码的运行环境、负载均衡和反向代理、上传代码和启动应用等步骤抽象为函数服务、HTTP函数触发器和函数代码。文章还介绍了FaaS应用的调用链路,并对FaaS与应用托管PaaS平台的区别进行了比较。最后,作者引入了冷启动的概念,解释了FaaS如何实现极速启动。整体而言,本文通过具体案例和详细解释,帮助读者深入理解了FaaS的运行原理和其与传统应用部署方式的区别。 FaaS的冷启动时间短的主要原因是FaaS在设计上牺牲了用户的可控性和应用场景,来简化代码模型,并且通过分层结构进一步提升资源的利用率。

    仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
    《Serverless 入门课》
    新⼈⾸单¥29
    立即购买
    登录 后留言

    全部留言(29)

    • 最新
    • 精选
    • 程序员二师兄
      采用留言式学习法学习本专栏,小结: 1、Serverless 是对服务端运维体系的极端抽象。 2、关于 Faas 三层结构非常形象的描述,容器是操作系统,Runtime 是播放器,代码是小电影。 3、容器、Runtime 和函数实例的关系,一旦容器和 Runtime 启动后,就会维持一段时间,这段时间内函数实例可以直接处理用户数据请求。当一段时间内没有用户请求时,则会销毁函数实例,这样子可以达到缩容为 0。这里举手提个小问题,文章中提到的一段时间通常是多久呢? 今天把作业完成了再来留言 ~~

      作者回复: 阿里云是15分钟,AWS是5分钟,腾讯云还不清楚这个数据。知道的同学,可以帮忙回复一下。

      2020-04-20
      3
      9
    • 老师有个疑问,一个函数实例就会启动启动一个 runtime 吗? 会不会出现一个 runtime 运行多个函数实例? 每个函数实例都初始化一个runtime 会不会浪费资源? 还有在新建函数的时候都会有个函数运行内存,这个是一个runtime 限制的内存吗? 如果超过这个内存限制会怎么样的?

      作者回复: 好问题,说明你在认真学习。 每个函数实例对应一个runtime。runtime运行多个函数实例是可以的,就是常驻进程模型,我们下节课会讲到。每个函数初始化一个runtime不会浪费资源,如果函数执行完就销毁,就是用完即毁型,我们下节课会讲到。 函数运行的内存,是容器层的限制,不是runtime。如果内存超过了内存限制,会报内存溢出的错误。

      2020-04-20
      8
    • 张英杰
      目前发展来说,是不是更适合一些个人项目?

      作者回复: 整个应用部署上FaaS的话,一些个人项目比较合适。在大型项目中,可以利用FaaS的特性,处理部分事件驱动的场景。

      2020-04-24
      2
      6
    • 北天魔狼
      老师:我最近在做即时通讯,faas可以创建websocket数据类应用吗

      作者回复: 据我所知还不行,主要是需要等HTTP 触发器支持才行。而且要维持WS的长链接,估计后续也很难支持(因为影响FaaS资源的快速释放)。这种场景可以用容器即服务CaaS自己处理。

      2020-05-02
      4
      4
    • 麦乐
      老师您好,如何解决这个 "F" 不够纯函数的问题?FaaS 里面的函数理论上应该尽可能以函数式编程的思想去编写,那就意味着,函数本身是无状态的,但是业务逻辑是有状态的。比如,用户鉴权,如果只用一个函数去完成这样的逻辑,那这个函数与业务就强耦合了。怎么让这个函数与业务解耦呢? 第二个问题是怎么实现像 Koa 中间件那样的场景呢?是一个 函数实例 调用另一个 函数实例吗?

      作者回复: 后面的课程会讲到,状态要放到BaaS中。FaaS虽然叫函数即服务,实际使用也可以部署整个应用,不过有体积大小限制。拆解成一堆函数也有调用成本,所以通常是需要折中。中间件的用法是一样的,你可以通过npm安装,在代码中require使用。

      2020-06-20
      3
    • Monday
      “云服务商可以预热大量的容器实例,将物理服务器的计算资源碎片化。Runtime 的实例适用性较低,可以少量预热” Runtime实例适用性较低,指的是语言的多样性和单个语言的多版本?

      作者回复: 这里指约束性,越靠近应用实例约束性越高,适用性就会越低。runtime里面包含了具体的语言版本,系统lib,定制的依赖库等等。

      2020-12-25
      2
    • lyonger
      请问下老师,serverless当前只支持http类型的触发器是吧?

      作者回复: 不是的,serverless支持的触发器很多,不过每个云服务商提供的不一样。除了HTTP触发器,基本的OSS触发器,MQ触发器,DB触发器都有。

      2020-05-05
      3
      2
    • 郭嵩阳
      老师能不能说一下如果是java服务的流程应该是怎样启动的,还有就是FaaS如果调用的是java的服务 这个java的微服务是否应该是先部署的

      作者回复: Java FaaS的启动流程是一样的,拉取你的Java代码构建docker镜像。调用Java的时候则从镜像启动。不过有些云厂商可能会用JVM黑科技,加速。Java做微服务,往往受限于FaaS的runtime,适用FaaS的场景比较少。因此微服务还是推荐CaaS。我课程后面的专栏会讲到后端应用BaaS化,介绍FaaS的runtime限制如何通过CaaS打破。

      2020-04-20
      2
    • 寻云
      “一旦容器 &Runtime 启动后,就会维持一段时间,这段时间内……数据请求。当一段时间内没有用户请求事件发生(各个云服务商维持实例的时间和策略不同),则会销毁这个函数实例。” 请问老师,函数应用实例具体会在什么时候(或者说多少时间无访问后)被缩容释放?各个主流云平台具体是多少?

      作者回复: 阿里云是1分钟~5分钟无请求。AWS是5分钟。腾讯云1分钟~30分钟。

      2020-04-20
      5
      2
    • 吴小智
      runtime 是一个进程吗?

      作者回复: runtime是进程的上下文,node.js的话你可以理解为就是require加载进内容的依赖模块。

      2020-04-20
      2
      2
    收起评论
    显示
    设置
    留言
    29
    收藏
    沉浸
    阅读
    分享
    手机端
    快捷键
    回顶部