serverless什么意思?(serverless的缺点和好处)
serverless是什么意思?serverless是什么,直译过来就是无服务器。根据 CNCF 的定义,Serverless 是指构建和运行不需要服务器管理的应用程序的概念。
serverless中文的含义是 “无服务器”,但是它真正的含义是开发者再也不用过多考虑服务器的问题,但是并不代表完全去除服务器,而是我们依靠第三方资源服务器后端,比如使用 Amazon Web Services(AWS) Lambda. 计算服务来执行代码,那么Serverless架构分为 Backend as a Service(BaaS) 和 Functions as a Service(FaaS) 两种技术,Serverless它是由开发者实现的服务端逻辑运行在无状态的计算容器中,它是由事件触发,完全被第三方管理的。
什么是BaaS?
Baas 的英文翻译成中文的含义:后端即服务,它的应用架构由大量第三方云服务器和API组成的,使应用中关于服务器的逻辑和状态都由服务提供方来管理的。比如我们的典型的单页应用SPA和移动APP富客户端应用,前后端交互主要是以RestAPI调用为主。只需要调用服务提供方的API即可完成相应的功能,比如常见的身份验证,云端数据/文件存储,消息推送,应用数据分析等。
什么是FaaS?
FaaS可以被叫做:函数即服务。开发者可以直接将服务业务逻辑代码部署,运行在第三方提供的无状态计算容器中,开发者只需要编写业务代码即可,无需关注服务器,并且代码的执行它是由事件触发的。其中AWS Lambda是目前最佳的FaaS实现之一。
Serverless的应用架构是将BaaS和FaaS组合在一起的应用,用户只需要关注应用的业务逻辑代码,编写函数为粒度将其运行在FaaS平台上,并且和BaaS第三方服务整合在一起,最后就搭建了一个完整的系统。整个系统过程中完全无需关注服务器。
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.无状态
因为函数进程是运行后即刻销毁,所以状态的保留在这里毫无意义。
总结:
对开发者而言,无论什么样的技术和概念,本质都是我们实现业务的工具而已。所以对工具的各方面的了解是十分有必要的。