Serverless的基本概念
小陈对Serverless有了一个初步了解,为了快速抓住Serverless核心思想,合理安排学习和实验,早点完成调研,他打算向大刘讨教学习建议。
小陈:师傅,我觉得计算模式的演变方向就是不断提升生产力,从物理机发展到虚拟机,再到容器化,现在又发展到了Serverless,且还在不断进步中,是这样吧?
大刘:是啊,技术发展的方向就是让开发人员的工作,慢慢回归到编写业务逻辑代码的本职工作,趋势是越来越聚焦。
小陈:不过,我看了一些Serverless的学习资料,感觉理解起来有些困难,概念比较抽象,感觉离平时工作和学习还有些距离,不容易抓住其要领。
大刘:这是正常现象,不必焦虑。我先给你简单讲一讲,业界普遍对Serverless的理解就是FaaS(Function as a Service,函数即服务)与BaaS(Backend as a Service,后端即服务)的结合。通俗的说,就是把业务逻辑放到FaaS中去执行,比如应用的核心功能;而不能放到FaaS中的部分则封装成BaaS服务,以API形式提供调用,比如数据库访问、认证鉴权等。FaaS和BaaS结合在一起,共同实现传统应用程序的完整功能。FaaS产品化后被称为函数计算,是Serverless中比较常见和通用的产品,我建议可以围绕着函数计算去学习Serverless,学习曲线会平缓一些,学习效率也会提高。
小陈:懂了。难怪各云平台这两年都在大力推广函数计算,如阿里云的函数计算FC、AWS的Lambda等。
大刘:是这么回事。
小陈:好,那我就先从函数计算入手去学习Serverless。
Serverless是什么
Serverless的中文含义是无服务器,是一种云原生开发模式,可使开发人员专注构建和运行应用,而无需关注和管理服务器等底层基础设施及其运维。事实上,Serverless并不是真的不需要服务器,而是把服务器从应用开发中抽离出来了,转由云厂商接管相应的置备、维护和扩展等工作。
我们知道,计算模式中有自建基础设施、IaaS和PaaS,这些是基于服务器运行应用程序的Serverful模式。Serverless与这些计算模型的区别在于,Serverless无需关注与业务逻辑无关的部分,从繁重的底层资源的管理运维中解放了开发人员的精力,将业务逻辑无关的部分工作交给云厂商去管理,包括基础架构和应用扩展、管理运维等工作。
几种不同的开发模式比较
在Serverful模式中,用户需要预先购买资源,根据业务负载的波动动态调整资源的规模,在业务空闲时段仍要保留一定的运行资源,以保证负载增长时可以扩容,存在一定程度的资源浪费。此外,还要管理操作系统、安全补丁、负载平衡、容量规划、资源扩展、日志和监控等工作。与之相反,Serverless模式下的Serverless平台会自动分配和销毁资源,在某些时候可以将资源缩减到零,而不再产生任何费用,将代码开发之外的工作都转移给云厂商,释放了开发人员的生产力。
那么,Serverless架构是如何构成的呢?按照 CNCF(云原生基金会) 对 Serverless 计算的定义,Serverless 架构由 FaaS(函数即服务)和 BaaS(后端服务)结合而成,如下图。
我们使用各种计算模式,就是为了实现特定业务目的。举一个日常出行的例子,我们的出行目标是从A地到B地,然而为了实现这个目标,往往有几种不同的出行交通方式:
- 我们购买物理服务器,就好比我们自己买了一辆车直接开过去,显然,这种方式投入大、还需要持续进行车辆维护。
- 我们也可以使用虚拟机,这就好比租一辆车,自己开过去,这种方式下租用期间的维护也很头疼。
- 当然,我们也可以使用Serverless,就好比直接打车过去,这是最简单愉快的方式了,只需告诉出租车师傅去哪里,到了目的地,按实际费用支付即可。
- 另外,我们还可以使用SaaS,就像是通过公共交通,只是SaaS都是通用场景的实现,不会根据我们目标做调整,所以难免会遇到各种换车,不可避免的要走很多路花很多时间。
计算模式与出行模式的类比
从这个例子来看,我们要实现业务目标,最关心的就是快捷实现,选择Serverless就像叫车一样,可以非常便捷地把我们送到目的地。
CNCF非常看好Serverless发展前景,认为Serverless会加速云原生的普及,并将云原生创新性提升到一个新高度。在CNCF(云原生计算基金会)官网上的云原生全景图(如下)中,我们发现Serverless是一个单独的分类,处于显著的位置(右上角),足见CNCF对Serverless的重视。
什么是FaaS?
FaaS 即 Functions as a Service,函数即服务,是Serverless架构的一种形态,面向函数编程,基于事件驱动提供云服务之间端到端的解决方案。借助FaaS,开发人员可以快速构建任何类型的应用和服务,并且只需为任务实际消耗的资源付费。FaaS是Serverless模型中代码的托管计算服务。阿里云的函数计算、AWS Lambda 都是 FaaS 产品,其中阿里云的函数计算是Serverless先行者,下面我们简单了解一下。
函数计算(FC)是一种以事件驱动的全托管计算服务,开发人员只需编写代码并上传,函数计算就会自动准备好计算资源,以弹性、可靠的方式运行代码,并提供日志查询、性能监控和报警等功能,大幅简化开发运维过程。函数计算的资源调度与运行是以函数(Function)为单位,函数由函数代码和函数配置构成。
函数计算具备如下优势:
- 敏捷:编写函数即可执行;
- 弹性:毫秒级自动伸缩;
- 可靠:多可用区高可用;
- 成本:按量计费,具有竞争力的成本;
函数计算的典型应用场景,包括Web应用、数据ETL处理、AI推理、视频转码等。
什么是BaaS?
BaaS 即 Backend as a Service,后端即服务,一般是通过API调用后端或别人已经实现好的程序逻辑,通常用来管理数据。我们通常将核心业务逻辑运行在FaaS上,而其他部分逻辑则是通过应用编程接口(API)调用第三方的服务和应用来实现,典型的如云厂商提供的认证服务、额外加密、云访问数据库等服务。
理解BaaS,需要搞清楚它与PaaS的区别。BaaS是仅提供应用依赖的第三方服务,而PaaS(Platform as a Service)则需要参与应用的生命周期管理。典型的PaaS平台需要提供手段让开发者部署和配置应用,BaaS则通常不包含这些内容。从功能上讲,BaaS可以看作PaaS的一个子集,即提供第三方依赖组件的部分。BaaS还允许我们依赖其他人已经实现的应用逻辑,认证服务就是一个很好的例子。
Serverless架构与传统架构的区别
在传统模式下开发应用,开发人员要包办代码开发及运行环境等方方面面,如购买服务器,准备运行环境、安全加固,购买并配置接入层软件,再将代码包发布到配置好的环境中,进行必要的应用设置及中间件的安装及配置后,才可以提供给用户使用。
应用传统开发模式
到了Serverless模式下,开发人员不需要购买服务器、接入层软件,也无需进行运行环境、应用程序的安全加固与各种繁琐的配置,只需将开发好的代码上传到函数计算平台,配置好触发器规则,然后函数计算中的代码将根据用户的访问自动触发执行。在Serverless下,开发人员只要专注于核心业务代码的开发,无需关注开发以外的其他非功能性工作,对开发人员更加友好。
应用Serverless开发模式
Serverless的典型特征和优势
我们使用Serverless平台,是将开发完成的代码部署到Serverless服务中,比如函数计算。当驱动函数计算执行的事件触发后,函数计算会自动响应并执行代码,根据计算需要自动实现资源的分配与释放,并按照实际使用量结算资源使用费用。因此,对Serverless而言,不执行任务就不会产生费用。所以,Serverless具备弹性伸缩与按量收费两个显著特征。
在Serverless架构中,用户已经“看不到”传统架构中存在的服务器、虚拟机、容器等底层资源了,所以被称为 Serverless“无服务器”也并不违和。
Serverless减少了开发人员的工作量,具备自适应弹性,让应用更轻松应对业务负载不可预测或突发流量的情况,Serverless具有如下显著优势:
- 效能提升:只聚焦开发核心业务代码,复用第三方BaaS能力,效率高、上市快,研发效能提高。
- 安全提升:容器运行时及以下的安全由云厂商提供安全保障,大幅提升安全能力
- 成本降低:资源用量更少、利用率更高。同时,研发成本大幅下降。
- 生产力驱动:聚焦业务逻辑,解放非业务领域的耗散。