我们真的需要Serverless吗 | ? 技术专题第七期征文

时间:2021-1-18 作者:admin

什么是Serverless

首先我们要纠正一个误区,很多人会以为Serverless是前端的概念,是Serverless让前端深入到业务端,但实际上,Serverless依然可以让业务端进行一次架构上的革新。Serverless是一种架构模式,或是平台能力,架构本身是无语言限制的。

Severless字面意义是无服务,这里的服务实际指的是服务器。现在我们在开发应用时,不管是单体应用还是微服务应用,我们都需要将自己的代码部署到服务器上,无论这个服务器是物理的还是逻辑的。但是任何一段代码都不能凭空运行,所以无服务器的提出,并不意味着我们不再需要物理机,而是指我们开发人员可以不再关心服务器的状态。即使在现在我们把服务器管理的工作交给了运维人员,但是开发人员依然需要关心服务器的状态,这一点相信所有程序开发人员都是认可的。

在解释为什么Serverless不需要用户管理服务器之前,这里先需要解释一下Baas和Faas的概念。Baas(Backend as a Service)指后端即服务,我们可以认为是一系列API的集合,类似于二方包的概念,通过第三方提供的Baas能力,我们可以轻易地实现消息通知、数据分析等功能;Faas(Function as a Service)指函数即服务,函数是基于事件触发的一段业务逻辑代码,可以认为就是我们应用中的方法。我们可以将一段业务逻辑代码托管到Faas平台,由平台提供的计算容器来运行并提供服务,我们只需要提供事件触发的条件和参数,即可在不部署应用的前提下执行这段代码。

Serverless现在普遍认为是Baas和Faas的结合,Faas虽然非常灵活易用,但是功能过于简单,结合Baas之后,就能够提供相当强大的功能,甚至我们可以将应用整体迁移到Serverless平台

现在我们可以知道为什么Serverless下不需要关心服务器的概念,因为在Serverless的架构模式下,我们的代码会被托管到第三方容器中运行,相当于云计算厂商帮我们做了运维的工作,而且第三方也不可能让我们接手容器,这就向开发人员天然屏蔽了服务器的概念。

Serverless的优势

降低运维成本

Serverless一个很明显的优势就是将运维和开发人员从沉重的服务器中解脱出来。运维人员的负担很显然减轻了,因为他们的工作交给了serverless平台。对于开发人员而言,能将自己的精力集中于业务逻辑的开发,而不是关心程序是否能在服务器上良好运行

提高研发效率

当应用的规模大到一定程度的时候,软件的部署就已经变成了一种负担。一个代码变更从提交发布到部署到服务器运行,平均会耗费5~10分钟。因为很多逻辑难以进行单元测试,这时候如果想要验证代码就不得不执行漫长的发布过程。而Faas应用天然就有灵活轻便的特点,我们在Faas平台部署的仅仅是一个函数而已,从提交到部署运行只需要花费几十秒的时间,与一个大型应用的部署时间相比,这之间差异是显而易见的。

更强的扩展能力

因为我们不用再考虑服务器的问题,所以弹性缩扩容的问题也就交给了云厂商来解决。Serverless天然就是容器化的,而且由于Faas灵活敏捷的部署方式,可以实现短时间快速扩容。因为Faas应用是无状态的,仅包含业务逻辑,自然扩展能力就要远强于传统应用。

Serverless架构下的开发

在Serverless架构下,我们不再需要开发一个个应用或是服务,而是开发一系列函数。我们可以将一个完整的业务服务拆分为一系列逻辑代码段,如下图所示,我们将应用服务器中的服务拆分为一系列函数,将其托管到Serverless平台上运行。

Serverless是完美的吗

诚然,Serverless的架构方式无论是对于集群管理还是研发效能都有很明显的优势,最近几年炒的火热的云原生的概念,似乎想要将效仿当初微服务取代单体应用一样,来引领一次软件开发行业的革新。但是即使在现在,也不能说某一种架构方式就完全优于另一种。虽然距离2014年亚马逊正式公布AWS Lambda商业化以来已经6年,但是依然没有公司大规模应用Serverless的架构,起码在目前,Serverless仍然存在以下的缺陷

不可信的第三方

虽然目前国内很多公司都将自己的服务器托管在阿里云、腾讯云等云厂商,但仅是类似委托云厂商帮助管理机房。而在Serverless架构下,公司的开发人员需要在Faas平台上开发函数,并提交部署,所有流程都交给第三方维护,开发者只需要关心业务逻辑即可。不需要用户关心服务器是否是一件有利无弊的事情还很难说,起码在目前,并没有一家云厂商能保证流程不会出现问题。

实际上大多说公司并不具备运维能力,如果交给第三方管理很明显会极大减少运维事故。至于为什么还说第三方是不可信的,这就回到了自动驾驶的问题,自动驾驶可以证明事故率比人低,但是只要没有做到0%,那就依然是无用的。更何况Serverless目前还不成熟,第三方云厂商是否有足够的能力给数以万计的用户保障还是一个未知数

无状态的应用

上面提到过,Faas本身是无状态的,我们可以认为就是一个函数方法,接收参数->执行逻辑->返回结果,我们的数据存储等有状态的服务需要依赖平台提供的Baas能力,这实际上又和云厂商绑定在一起了。函数之间有时也需要共享数据,这在传统应用里很好实现,但是在serverless架构下,就需要谨慎设计了。

对于开发者而言,暂且不提从0开始的项目,如果想要将应用迁移到Serverless架构,那么剥离出有状态和无状态的服务这件事就很难实现。对于一个大型项目而言,serverless能带来的效能提升,与迁移到serverless架构带来的问题和困难相比就显得很渺小了

我们真的需要Serverless吗

Serverless,以及云原生的概念虽然没有完全成熟,却并不是天马行空的设想。对开发和运维而言,Serverless的提效是相当明显的,但目前我认为还是适合一些简单轻量的服务,很多人会说Faas不适合大流量,这是一种误解,相反Faas天然契合这种场景。实际应用中,我们完全可以将一些数据映射、编码解析,或是频繁变更的无状态方法等函数迁移到Serverless平台。

总而言之,云原生一定会是未来的发展趋势,但是目前而言我仍持观望态度。贸然将传统应用进行迁移显然是不可行的,不过对于一些新兴项目,或是简单的场景完全可以先进行试用,只听别人说是不可靠的,总要自己亲自使用过之后才能知道Severless真正的利与弊。

? 技术专题第七期 |万物皆可 Serverless

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。