前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022年你还不会serverless?看看这篇保姆级教程(上)

2022年你还不会serverless?看看这篇保姆级教程(上)

原创
作者头像
程序员poetry
发布2022-01-07 16:05:26
3.4K1
发布2022-01-07 16:05:26
举报

本篇主要介绍serverless架构优缺点应用场景

什么是Serverless

图片
图片
图片
图片
  • Serverless又名无服务器,所谓无服务器并非是说不需要依赖和依靠服务器等资源,而是开发者再也不用过多考虑服务器的问题,可以更专注在产品代码上。
  • Serverless是一种软件系统架构的思想和方法,它不是软件框架、类库或者工具。它与传统架构的不同之处在于,完全由第三方管理,由事件触发,存在于无状态(Stateless)、 暂存(可能只存在于一次调用的过程中)计算容器内。构建无服务器应用程序意味着开发者可以专注在产品代码上,而无须管理和操作云端或本地的服务器或运行时(运行时通俗的讲 就是运行环境,比如 nodejs环境,java 环境,php 环境)。Serverless 真正做到了部署应用 无需涉及基础设施的建设,自动构建、部署和启动服务。
  • 第一种:狭义 Serverless(最常见)= Serverless computing 架构 = FaaS 架构 = Trigger(事件驱动)+ FaaS(函数即服务)+ BaaS(后端即服务,持久化或第三方服务)= FaaS + BaaS
  • 第二种:广义 Serverless = 服务端免运维 = 具备 Serverless 特性的云服务
图片
图片
  • FAAS:函数及服务,通俗来说就是我们可以写一个函数,在该函数内执行业务逻辑,函数由fas平台运行
  • BAAS:后端及服务,通常指云服务,该云服务常指中间件服务

整体架构十分简单明了, 用 FC 替代了 Web 服务器,但是换来的是免运维,弹性扩容,按需付费等一系列优点

目前,Serverless 的应用场景广泛,大部分传统业务均可以在 Serverless 云函数上完美支持

Serverless要解决什么

前端和后端分离后,彼此独立,这样就导致前端需要关注一些后端关注的问题,如下

图片
图片

作为一个前端,确实大多数人对于服务端的环境,部署基础设施等等东西并不了解。但是现在前端是独立的部署,前端必然面临这些东西。这就是serverless要解决的问题。

传统服务器架构 VS Serverless架构

传统开发模式

图片
图片

新型的serverless开发模式

图片
图片

正常来说,用户开发 Server 端服务,常常面临开发效率,运维成本高,机器资源弹性伸缩等痛点,而使用 Serverless 架构可以很好的解决上述问题。下面是传统架构和 Serverless 架构的对比:

  • 云函数计算是一个事件驱动的全托管计算服务。
  • 通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。
  • 函数计算会为您准备好计算资源,以弹性、可靠的方式运行您的代码,并提供日志查询,性能监控,报警等功能。
  • 借助于函数计算,您可以快速构建任何类型的应用和服务,无需管理和运维。

使用Serverless优缺点

优势

  1. 无运维:我们不需要购买服务器,直接可进行
  2. 资源分配: 在 Serverless 架构中,你不用关心应用运行的资源(比如服务配置、磁盘大小)只提供一份代码就行。
  3. 计费方式: 在Serverless 架构中,计费方式按实际使用量计费(比如函数调用次数、运 行时长),不按传统的执行代码所需的资源计费(比如固定 CPU)。计费粒度也精确到了毫 秒级,而不是传统的小时级别。个别云厂商推出了每个月的免费额度,比如腾讯云提供了每 个月 40 万 GBs 的资源使用额度和 100 万次调用次数的免费额度。中小企业的网站访问量不 是特别大的话完全可以免费使用

  1. 弹性伸缩:Serverless 架构的弹性伸缩更自动化、更精确,可以快速根据业务并发扩容更 多的实例,甚至允许缩容到零实例状态来实现零费用,对用户来说是完全无感知的。而传统 架构对服务器(虚拟机)进行扩容,虚拟机的启动速度也比较慢,需要几分钟甚至更久。

不足

当然了 ServerLess 是很诱人,但却不是万能的,有些场景还是不适合的。

  • ServerLess 不仅仅是一门技术也是一种理念和微服务一样,很多老系统不能直接上 ServerLess,得相应的进行升级和拆解才能更好的适应 ServerLess,这是一个门槛。
  • 同时 ServerLess 针对开发语言的可定制性和可开放性,ServerLess 会选择处于稳定版的语言且更新具有一定的滞后性,特别是 Node.JS 这样的版本更新帝,最新稳定版是10,但是提供的却是8。同时如果对语言有底层的修改而无法通过 Plugin 实现同样也无法适应相关场景。
  • 不适合长时间的进行计算处理的场景,ServerLess 是产生计算后按时间计费的,适合那些触发类短时间计算的,如果有长时间进行计算的场景就不适合。

Serverless 的技术特点

事件驱动

  • 云函数的运行,是由事件驱动起来的,在有事件到来时,云函数会启动运行
  • Serverless 应用不会类似于原有的「监听 - 处理」类型的应用一直在线,而是按需启动
  • 事件的定义可以很丰富,一次 http 请求,一个文件上传,一次数据库条目修改,一条消息发送,都可以定义为事件

单事件处理

图片
图片

自动弹性伸缩

图片
图片

无状态开发

图片
图片

Serverless 是如何工作的

Serverless 应用本质上是由一个个 FaaS 函数组成的,Serverless 应用的每一次运行,其实是单个或多个函数的运行,所以 Serverelss 的运行原理,本质上就是函数的运行原理

函数调用链路:事件驱动函数执行

对于 FaaS 函数来说,一方面可以通过事件来触发执行,另一方面也可以直接调用 API 来执行。FaaS 平台都提供了执行函数的 API。

图片
图片

函数调用方式 :同步调用与异步调用

  • 函数支持同步调用和异步调用,这正是 FaaS 函数的两种调用方式。
  • 同步调用指的是客户端发起调用后,需要等到函数执行完毕并得到执行结果。FaaS 平台收到同步调用后,会立即为函数分配运行环境并执行函数。
图片
图片
  • 而异步调用是指客户端发起调用后,FaaS 会将事件放在内部队列中而不是立即执行。
  • 异步调用时,FaaS 会直接返回,不需要等待函数执行完毕。这意味着异步调用无法直接获取返回结果,所以它适用于运行时间比较长的场景。
  • 对于函数计算来说,定时触发器就是异步调用的。此外,OSS 触发器、MNS 消息触发器也是异步的。
图片
图片

函数生命周期:冷启动与热启动

  • 在 FaaS 平台中,函数默认是不运行的,也不会分配任何资源。甚至 FaaS 中都不会保存函数代码。
  • 只有当 FaaS 接收到触发器的事件后,才会启动并运行函数。
  • 整个函数的运行过程可以分为四个阶段:下载代码、启动容器、初始化运行环境、运行代码
图片
图片
  • 下载代码:FaaS 平台本身不会存储代码,而是将代码放在对象存储中,需要执行函数的时候,再从对象存储中将函数代码下载下来并解压,因此 FaaS 平台一般都会对代码包的大小进行限制,通常代码包不能超过 50MB。
  • 启动容器:代码下载完成后,FaaS 会根据函数的配置,启动对应容器,FaaS 使用容器进行资源隔离。
  • 初始化运行环境:分析代码依赖、执行用户初始化逻辑、初始化入口函数之外的代码等。
  • 运行代码:调用入口函数执行代码。

当函数第一次执行时,会经过完整的四个步骤,前三个过程统称为“冷启动”,最后一步称为 “热启动”。

  • 整个冷启动流程耗时可能达到百毫秒级别。
  • 函数运行完毕后,运行环境会保留一段时间,可能 2 ~ 5 分钟,这和具体云厂商有关。
  • 如果这段时间内函数需要再次执行,则 FaaS 平台就会使用上一次的运行环境,这就是“执行上下文重用”,函数的这个启动过程也叫“热启动”。
  • “热启动” 的耗时就完全是启动函数的耗时了。
  • 当一段时间内没有请求时,函数运行环境就会被释放,直到下一次事件到来,再重新从冷启动开始初始化

下面是一个函数的请求示意图,其中 “请求1” “请求3” 是冷启动,“请求2” 是热启动。

图片
图片
  • 函数执行完毕后销毁运行环境,虽然对首次函数执行的性能有损耗,但极大提高了资源利用效率,只有需要执行代码的时候才初始化环境、消耗硬件资源。
  • 并且如果你的应用请求量比较大,则大部分时候函数的执行可能都是热启动。
  • 从函数运行的生命周期中你可以发现,如果函数每分钟都执行,则函数几乎都是热启动的,也就是会重复使用之前的执行上下文

Serverless 使用场景

图片
图片

发送通知

诸如 PUSH Notification、邮件通知接口、短信,这一类服务来说,他们都需要基础设施来搭建。并且,他们对实时性的要求相对没有那么高。即使在时间上晚来几秒钟,用户还是能接受的。在我们所见到的短信发送的例子里,一般都会假设用户能在 60 秒内收到短信。因此,在这种时间 1s 的误差,用户也不会恼火的。

轻量级 API

Serverless 特别适合于,轻量级快速变化地 API。其实,我一直没有想到一个合适的例子。在我的假想里,一个 AutoSuggest 的 API 可能就是这样的 API,但是这种 API 在有些时候,往往会伴随着相当复杂的业务。于是,便想举一个 Featrue Toggle 的例子,尽管有一些不合适。但是,可能是最有价值的部分。

物联网

当我们谈及物联网的时候,我们会讨论事件触发、传输协议、海量数据(数据存储、数据分析)。而有了 Serverless,那么再多的数据,处理起来也是相当容易的一件事。对于一个物联网应用的服务端来说,系统需要收集来自各个地方的数据,并创建一个个 pipeline 来处理、过滤、转换这些数据,并将数据存储到数据库中。对于硬件开发人员来说,对接不同的硬件,本身就是一种挑战。而直接使用诸如 AWS IoT 这样国,可以在某种程度上,帮助我们更好地开发出写服务端连接的应用。

数据统计分析等

数据统计本身只需要很少的计算量,但是生成图表,则可以定期生成。在接收数据的时候,我们不需要考虑任何延时带来的问题。50~200 ms 的延时,并不会对我们的系统造成什么影响。

serverless的厂家

链接地址

  • 亚马逊 AWS Lambda (https://aws.amazon.com/cn/lambda)
  • 谷歌 Google Cloud Functions (https://cloud.google.com/functions)
  • 微软 Microsoft Azure (https://www.azure.cn/)
  • 腾讯云 云函数 SCF(Serverless Cloud Function) (https://cloud.tencent.com/product/scf)

我们此次选择腾讯云的缘故

  • 微信小程序的云开发就是基于腾讯云,选择腾讯云更方便和小程序对接
  • 腾讯云在 serverless 方面相比其他厂商支持更好一些
  • 腾讯云和 serverless 合作在腾讯云中集成了 serverless Framework用我们喜欢的框架开发 serverless 应用。也可以让我们快速部署老项目。
  • 腾讯云价格更便宜

我是程序员小月,更多干货在公号「前端进阶之旅」

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Serverless
  • Serverless要解决什么
  • 传统服务器架构 VS Serverless架构
  • 使用Serverless优缺点
  • Serverless 的技术特点
  • Serverless 是如何工作的
  • Serverless 使用场景
  • serverless的厂家
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档