Serverless是什么
乔文飞 Lv8

是什么

  • 广义上来说
    是构建和运行软件时不需要关心服务器的一种架构思想。虽然 Serverless 翻译过来是 “无服务器”,但这并不代表着应用运行不需要服务器,而是开发者不需要关心服务器。而基于 Serverless 思想实现的软件架构就是 Serverless 架构。

  • 狭义上说
    狭义的 Serverless 是 FaaSBaaS 的组合。

    • FaaS(Function as a Service):
      1. FaaS本质上是一个函数运行平台,函数运行时,你对底层的服务器是无感知的,FaaS 产品会负责资源的调度和运维,这是它的特点之一,不用运维
      2. FaaS 中的函数也不是持续运行的,而是通过事件进行触发,比如 HTTP 事件、消息事件等,产生事件的源头叫触发器,FaaS 平台会集成这些触发器,我们直接用就行,这是 FaaS 的第二个特点,事件驱动
      3. FaaS 的第三个特点是按量付费。 FaaS 产品的收费方式,都是按照函数执行次数和执行时消耗的 CPU、内存等资源进行计费的。
      4. FaaS 在运行函数的时候,会根据并发量自动生成多个函数实例,并且并发理论是没有上限的,这是它的第四个特点,弹性伸缩
      • FaaS 每次执行函数时,都会初始化一个新的运行环境,然后从头开始执行整个代码,而不是只执行其中的 handler 方法。执行完毕后,运行环境就会被释放。这样每次函数执行,都是新的运行环境,自然不同函数之间就无法共用 pv 这个变量了。FaaS 的另一个特点,无状态
    • BaaS(Backend as a Service)
      为了解决分布式中的状态共享问题
      BaaS 本质上就是把后端功能封装起来,以接口的形式提供服务。

  • 基于 FaaS 和 BaaS 的架构,是一种计算和存储分离的架构。 计算由 FaaS 负责,存储由 BaaS 负责,计算和存储也被分开部署和收费。这使应用的存储不再是应用本身的一部分,而是演变成了独立的云服务,降低了数据丢失的风险。而应用本身也变成了无状态的应用,更容易进行调度和扩缩容。

基于 FaaS 和 BaaS ,你的应用就实现了自动弹性伸缩、按量付费、不用关心服务器,这正是 Serverless 架构的必要因素。所以说狭义的 Serverless 是 FaaS 和 BaaS 的组合。

与其他架构的区别

  • PaaS
    PaaS (平台即服务)是云计算虚拟机时代的主要形态之一。 它是指云厂商提供开发工具、依赖库、服务和运行平台等能力,开发者可以依赖这些能力将自己的应用直接部署在云平台上,不用关心底层的计算资源、网络、存储等。虽然与Serverless 很类似,但依旧存在一些区别。
  • Kubernetes
    Kubernetes 是一种容器编排技术。在 Kubernetes 中应用运行的基本单位是 Pod(容器组),Pod 是应用及运行环境的集合,所以你也不用关心服务器了。基于 Kubernetes,你能很方便地进行 Pod 的管理,并且实现应用的弹性伸缩。
    所以,Kubernetes 是介于 Serverful 和 Serverless 中间的产物。

Serverless 是云原生的一种实现,云原生的另一种实现是 Kubernetes。

Serverless PaaS (平台即服务) Kubernetes
按实际使用量付费 按资源付费 按照资源数量计费

Serverless 的优缺点

  • 优点:不用运维、弹性伸缩、节省成本、开发简单、降低风险、易于扩展。
  • 缺点:
    1. 依赖第三方服务:一旦你选择了一个云厂商,要想从一个云移到另一个台,成本很高
    2. 底层硬件的多样性:代码依赖的地层硬件多样性
    3. 应用性能瓶颈:函数运行前需要现初始化函数运行环境,这个过程需要消耗一定时间。因为函数不是持续“在线”的,而是需要运行的时候才启动(不像传统应用,服务是一直启动的)。
    4. 函数通信效率低:在 Serverless 应用中,函数与函数之间就完全独立了。如果两个函数的数据有依赖,需要进行通信、交换数据,就要进行函数与函数之间的调用(调用方式是 HTTP 调用)。相比之前的内存调用,数据交互效率显然低了很多。而这个问题的本质,是 FaaS 还没有比较好的数据通信协议或方案。
    5. 开发调试复杂:Serverless 架构正处于飞速发展的阶段,其开发、调试、部署工具链并不完善(基本是每个云厂商各玩各的)
  • 本文标题:Serverless是什么
  • 本文作者:乔文飞
  • 创建时间:2021-01-01 21:59:56
  • 本文链接:http://www.feidom.com/2021/01/01/Serverless是什么/
  • 版权声明:本博客所有文章为作者学习笔记,有转载其他前端大佬的文章。转载时请注明出处。