什么是Serverless

文章目录

  • 什么是Serverless
    • Serverless 不等于 FaaS
      • BaaS
      • FaaS
      • 为什么FaaS和BaaS都叫Serverless
    • Serverless应用场景
  • 参考

什么是Serverless

Serverless 基本概念入门
参考URL: https://zhuanlan.zhihu.com/p/78250791

2019 年,Serverless 被 Gartner 称为最有潜力的云计算技术发展方向,并被赋予是必然性的发展趋势。Serverless 从底层开始变革计算资源的形态,为软件架构设计与应用服务部署带来了新的设计思路。

发展背景:
传统的云计算技术,本质上都是基于虚拟机的,云平台可以将一些性能强劲的物理服务器,拆分成若干个虚拟机,提供给用户使用,但在互联网发展到今天,虚拟机还是太重了。即使是飞天集群,新增部署虚拟机的时间也是以分钟来计的。但是对于互联网用户来讲20秒的等等就是就会千万50%以上的用户流失,不能忍受的煎熬,因此Docker秒级启动的速度也不是个完美的解决方案,最终还是要Serverless极速的伸缩才能满足客户需求。

以docker为代表的容器技术仅仅是缩短了应用程序的迭代周期,而serverless技术是直接缩短了创新周期,从概念到最小可行性部署的时间,让初级开发人员也能在很短的时间内完成以前通常要经验丰富的工程师才能完成的项目。

通俗的讲,Serverless就是基建狂魔版的云平台,虽然传统的基建技术安全性更高,稳定性也更好,但是从头修路、盖房、装修成本太高时间也太长,而Serverless本质上是一个比容器还小的最小运行环境的镜像,只要给点阳光就能野灿烂,而且用完以后想拆也很方便,是应对云原生时代最新发展出的神器。

Serverless的核心理念就是函数式计算,开发者无需再关注具体的模块,云上部署的粒度变成了程序函数,自动伸缩、扩容等工作完全由云服务负责。

Serverless Computing,即”无服务器计算”,其实这一概念在刚刚提出的时候并没有获得太多的关注,直到2014年AWS Lambda这一里程碑式的产品出现。Serverless算是正式走进了云计算的舞台。

Serverless 具有的特质

  • 免运维:不需要管理服务器主机或者服务器进程。

  • 弹性伸缩:根据负载进行自动规模伸缩与自动配置。伸缩范围零到无穷大。

  • 按需付费:根据使用情况决定实际成本。

  • 高可用:具备隐含的高可用性。

  • Serverless 使得应用与服务器解耦,业务上线前无需预估资源,无需进行服务器购买、配置

  • Serverless 也使得底层运维工作量进一步降低,业务上线后,也无需担忧服务器运维,而是全部交给了云平台或云厂商

Serverless 的计算产品 —— 云函数,作为云虚拟机、容器技术之后的下一代计算形态,将引来云计算中新的热潮。
Serverless,又叫无服务器。Serverless 强调的是一种架构思想和服务模型,让开发者无需关心基础设施(服务器等),而是专注到应用程序业务逻辑上。 Serverless 也是下一代计算引擎。

Serverless 不等于 FaaS

Serverless 系列之(2):Serverless到底是什么
参考URL: https://zhuanlan.zhihu.com/p/53713515

大部分人开始了解Serverless的时候,会有一个误区,以为Serverless就是FaaS,比如AWS的Lambda,Google的Cloud Function,但是实际上,当我们深入研究就会发现,Serverless实际上涵盖了一系列技术,我们将这些技术分为两类:Backend as a Service(BaaS)和Functions as a Service(FaaS),所以,简单的说Serverless=BaaS+FaaS。

Serverless 架构近几年频繁出现在一些技术架构大会的演讲标题中,很多人对于 Serverless,只是从字面意义上理解——无服务器架构,但是它真正的含义是开发者再也不用过多考虑服务器的问题,当然,这并不代表完全去除服务器,而是我们依靠第三方资源服务器后端,从 2014 年开始,经过这么多年的发展,各大云服务商基本都提供了 Serverless 服务。比如使用 Amazon Web Services(AWS) Lambda 计算服务来执行代码。

Serverless架构分为 Backend as a Service(BaaS) 和 Functions as a Service(FaaS) 两种技术,Serverless 是由开发者实现的服务端逻辑运行在无状态的计算容器中,它是由事件触发、完全被第三方管理的。

BaaS

BaaS(Backend as a Service)后端即服务,一般是一个个的API调用后端或别人已经实现好的程序逻辑,比如身份验证服务Auth0,这些BaaS通常会用来管理数据,还有很多公有云上提供的我们常用的开源软件的商用服务,比如亚马逊的RDS可以替代我们自己部署的MySQL,还有各种其它数据库和存储服务。

BaaS就是用现成的第三方服务替换我们原来自己编码实现或者自己搭建的服务器端组件,它在概念上更接近于Software as a Service(SaaS),不同之处在于SaaS通常是关于外包业务流程,比如人力资源或销售工具,或者像Github这样的产品,然而对于BaaS来说,实际上是我们将我们的应用程序分解成更小的组件,并将其中一部分组件用第三方提供的服务来完成,这个第三方服务通常就叫做BaaS。

BaaS服务是通过API远程调用的组件,而不是SDK,或者Library,我们通过远程API的调用,来完成我们的应用程序的一部分功能。这里的一个很好的例子是身份验证,许多应用程序实现自己的代码来实现注册,登录,密码管理等功能,但是这些代码在很多应用程序中非常相似,同样的事情无数的公司和团队做过了无数遍,已近非常成熟了,可以把它们抽象出来变成一个第三方公共服务再好不过,这正是Auth0和亚马逊的Cogono等产品的目标,这两种产品都允许任何人,不需要写一行代码的情况,就可以在移动应用程序和Web应用程序上实现非常完善的身份验证和用户管理功能。

BaaS最早的时候,在移动应用程序开发中特别受欢迎,一开始人们甚至把它叫做Mobile Backend as a Service(MBaaS),但是实际上,BaaS除了被用作移动应用的后端服务之外,还可以应用到非常多的场景,比如我们可以不需要自己搭建和维护Mysql实例,而是使用亚马逊的RDS服务,或者我们可以用Kinesis替换我们自己搭建和管理的Kafka消息队列,其他数据基础设施服务包括文件系统、对象存储和数据仓库、语音分析、以及我们之前提到的身份验证,这些服务都是BaaS,都可以作为一个应用的后端服务的一部分。

FaaS

Serverless的另一半是FaaS, FaaS是Compute as a Service的另一种形式,概念上容易混淆的地方在于,AWS有时候将自己的FaaS服务,Lambda,称为Serverless Compute。

FaaS是一种构建和部署服务器端软件的新方法,只不过粒度更细,能够独立的部署某一个函数,许多人认为Serverless就是FaaS,但是实际上并不完全正确。

我们通过传统方式部署服务器端软件时,我们从主机实例开始,通常是虚拟机(VM)实例或容器(参见下图), 然后我们在主机中部署我们的应用程序,如果我们的主机是VM或容器,那么我们的应用程序是一个操作系统进程, 通常我们的应用程序中的代码实现了一些不同功能的操作,例如,Web服务提供检索和更新资源的操作。

什么是Serverless_第1张图片

FaaS改变了这种部署模式(如下图), 部署模型中少了主机实例和应用程序进程,我们只关注实现应用程序逻辑的各个操作和函数,我们将这些函数代码单独上传到云供应商提供的FaaS平台。

什么是Serverless_第2张图片

但是,这些函数在云服务托管的服务器进程中缺省处于空闲状态,直到需要它们运行的时候才会被激活(如下图), 通过配置FaaS平台来监听每个函数的激活事件。 当该事件发生时,FaaS平台实例化函数,然后使用触发事件调用它。
什么是Serverless_第3张图片
一旦该函数执行结束了,理论上FaaS平台可以销毁掉实例,不过,通常为了优化性能,会将函数实例保留一段时间,可以被下一个事件复用。

FaaS本质上是一种事件驱动的模型,除了提供托管和执行代码的平台之外,FaaS平台还集成了各种同步和异步事件源,HTTP API网关就是一种同步事件源,消息总线、对象存储或类似于(cron)的定时器就是一种异步源。

AWS在2014年就推出了Lambda,到目前为止成熟度和接受度已经获得大幅的提高,一些公司每天在使用Lambda处理数十亿的事件,到目前为止,Lambda集成了超过20种不同类型的事件源,可以支持各种不同类型的应用程序。

除了AWS Lambda之外,还有其他一些来自Microsoft,IBM,Google厂商的商业FaaS产品,正如我们之前讨论的各种其他计算即服务平台(IaaS,PaaS,CaaS)一样,也有其他可以运行在私有云上开源FaaS项目,私有的FaaS领域目前比较早期,没有绝对的领先者,一些比较活跃的项目有OpenWhisk、Fission、IronFuncions、Serverless、Nuclio等

为什么FaaS和BaaS都叫Serverless

Serverless 系列之(2):Serverless到底是什么
参考URL: https://zhuanlan.zhihu.com/p/53713515
什么是Serverless架构和FaaS函数即服务?
参考URL: https://zhuanlan.zhihu.com/p/31386919

从表面上看,BaaS和FaaS完全不同,BaaS是托管应用程序的一部分依赖组件,FaaS托管应用程序的代码,那么为什么我们把它们放在一起,都叫做Serverless呢?

这里的关键就是你不需要管理自己的服务器主机或服务器进程,完全使用Serverless架构的应用程序,将不再需要考虑服务器或者进程,应用程序的所有逻辑,无论您是自己编写的,还是与第三方服务集成的部分,都运行在完全弹性的环境中,状态也采用以类似弹性的形式存储,无服务器并不意味着服务器已经消失,这只是意味着着您不再需要关心它们了。

个人总结: 原作者把对Serverless扩大化了,不能说不对,很多地方也是这么描述的。不过一般我们Serverless 就是 FaaS(函数即服务),当前使用最广泛的是AWS的Lambada。现在当大家讨论Serverless的时候首先想到的就是FaaS.

什么是Serverless_第4张图片
传统的服务器端软件不同是经应用程序部署到拥有操作系统的虚拟机或者容器中,一般需要长时间驻留在操作系统中运行,而FaaS是直接将程序部署上到平台上即可,当有事件到来时触发执行,执行完了就可以卸载掉

什么是Serverless_第5张图片

总结
两者都为我们的计算资源提供了弹性的保障,Serverless 的应用架构是将 BaaS 和 FaaS 组合在一起的应用,用户只需要关注应用的业务逻辑代码,编写函数为粒度将其运行在 FaaS 平台上,并且和 BaaS 第三方服务整合在一起,最后就搭建了一个完整的系统。整个系统过程中完全无需关注服务器。

总得来说,Serverless 架构还不够成熟,很多地方尚不完善。Serverless 依赖云服务商提供的基础设施,目前来说云服务商还做不到真正的平台高可用。Serverless 资源虽然便宜,但是构建一个生产环境的应用系统却比较复杂。

Serverless应用场景

Serverless安全研究 — Serverless概述
参考URL: https://cloud.tencent.com/developer/article/1693993
CNCF发布的Serverless白皮书v1.0版本中对Serverless的使用场景进行了介绍
CNCF :https://github.com/cncf/wg-serverless/blob/master/whitepapers/serverless-overview/cncf_serverless_whitepaper_v1.0.pdf

什么是Serverless_第6张图片
由上图我们可以看出Serverless比较适用于异步并发、短暂、无状态的应用的场景,并且Serverless一直秉持着节约成本的原则,因此也适用于应对突发或服务使用量不可预测的场景。

参考

基于腾讯云 serverless 的 Rust 和 WebAssembly 函数即服务
参考URL: https://segmentfault.com/a/1190000023892428
C 和 Java 没那么香了,Serverless 时代 Rust 即将称王?
参考URL: https://blog.csdn.net/CSDN_bang/article/details/118035948
那些必须要了解的Serverless时代的并发神器-Rust语言Tokio框架基础
参考URL: https://cloud.tencent.com/developer/article/1876512
Serverless 架构到底要不要服务器?
参考URL: https://zhuanlan.zhihu.com/p/344449142

你可能感兴趣的:(软件架构/技术选型,云原生(Cloud,Native),云计算,虚拟化,安全相关,无服务架构,serverless)