Serverless 是什么?设计

发布时间:2019-08-14 11:33:15  作者:本站编辑  来源:本站原创  浏览次数:

Serverless 是一个当今软件世界中比较新的话题。它并没有一个普遍公认的权威定义,每个人每个企业对它的解释可能都有不同,而 Serverless 正是在这种情况下不断发发展的。但是就算如此,有一些 Serverless 的特征还是被广泛认可的:

  • 服务端的主机和进程完全由供应商管理

  • 可以根据负载进行自动伸缩

  • 按照精确的使用情况来计费,就像水和电一样。(效用计算)

满足以上几点就意味着:

  • 供应商对 Serverless 服务的能力评估方式不再是单纯的提供多少CPU,多少硬盘空间这种的资源性指标了,而可能是可以承受多少峰值的并发数,实时性等类似的非功能性指标。

  • 由于服务端完全托管给给供应商,使用者无法介入,那么供应商应该提供很高的可用性保障。

以上五点我认为是 Serverless 比较重要的几个特性。

Serverless 的两种形式

Serverless 其实是一种理念,这个理念的核心就是去服务器化。而当前这种理念有两种实现形式,分别是:

  • MBaaS(Mobile Backend as a Service),简称 BaaS

  • FaaS(Function as a Service)

BaaS

BaaS 有些类似 SaaS 的概念,只不过是更小粒度的应用。可以理解为 BaaS 就是有第三方提供的包含某一块功能的微服务,使用者以 API 形式接入。比较有名的有 Google Firebase。而国内的厂商 Lean Cloud 也提供了比较丰富的 BaaS 服务能力。

BaaS 一开始更多的是服务于移动应用开发,为了让很多移动应用创业者可以更专注与应用端本身的业务,出现了 BaaS 这种服务形式,大大提高了他们的生产效率。

FaaS

FaaS 是一种面向函数的构建和部署软件的方式,最先由亚马逊提出,其标志性产品就是 AWS Lambda。

与 BaaS 相同,用户也不需要管理任何服务端的资源。除此之外,这些函数进程甚至都不是永久存在的,而是只有在需要的时候才加载运行,运行后会立刻被销毁。由于这种面向函数的构建和部署方式很简单,FaaS 的自动扩展能力非常强。

Serverless 的优点

简单的介绍完了 Serverless 的概念,那么我们为什么要使用 Serverless 以及什么场景使用 Serverless 比较好呢?

Common

普遍的好处有两点:

  1. 降低运维成本。

    由于很多服务端的主机维护以及进程管理,甚至是构建部署都不需要使用方关系,可以节约一大波人力和资源成本。

  2. 绿色计算,降低资源浪费

    因为供应商的服务是构建在云上的,而出于效用最大化的考虑,供应商会努力去提高资源的使用效率。相比现在很多厂商自己维护主机和进程,可以减少很多不必要的资源浪费。

BaaS

由于 BaaS 是把很多服务端能力交由第三方实现,所以开发成本也得到了很大的节约。

FaaS

FaaS 的好处主要有两点:

  1. 构建和部署更简单

    因为供应商提供了比较完整的 FaaS 的构建部署方案,不需要开发者自己再去搞了。而且 FaaS 的构建和部署形式本身也是相对简单的。

  2. 最小化了扩展的成本

    这个优点对于无规律的请求高峰更有益处。因为无规律意味着你很难制定合适的策略去应对,而 FaaS 它方便的自动伸缩能力可以很好的应对这种场景,而且也不会造成资源的浪费。

Serverless 的缺点

说完了优点,我们谈谈缺点

首先,当前的各种 Serverless 概念的服务,无论 BaaS 还是 FaaS,最大的问题是会被供应商绑定。比如你使用 Lean Cloud 的数据存储服务,如果你想要迁移到 Google Firebase 上去,那么他们的数据和编程模型可能完全不同,这其中的成本有可能是非常巨大的。这些是你需要考虑的一点。

其次,因为服务端被托管给了供应商,你无法自己去根据自己的需求对服务端进行优化。

第三,由于服务端本质还是云计算的那套,供应商处于效用最大化原则,你的服务是有可能和其他人的服务公用一个实体资源的。那么可能会产生多租户问题,不论是从安全性还是从性能的角度都要考虑清楚。

第四,安全问题。越多的调用第三方服务,就意味着向外暴露越多的风险点。另外,如果你的服务端完全依靠第三方的话,还有一个重要的问题是你失去了一层服务端的壁垒,很多需要在服务端拦截的内容现在你无法做到了,而放在应用端做这些事情的风险是很大的。

最后,对于 FaaS 而言,还有一些它独有的缺点:

  1. 函数量爆炸

    随着使用的深入,你管理的函数数量可能会有一个大爆发。而这意味着混乱,和更多出错的可能。

  2. 重复的函数逻辑

    不同的应用端可能不得不写一套相同的函数逻辑。因为有可能发出的事件是不同的,但是处理方式是相同的。

  3. 无状态

    因为函数进程是运行后即刻销毁,所以状态的保留在这里毫无意义。

总结

对开发者而言,无论什么样的技术和概念,本质都是我们实现业务的工具而已。所以对工具的各方面的了解是十分有必要的。



热搜