众所周知,事物具有两面性,即使时至今日,云计算的发展已经取得了巨大的进步,但是作为云计算最新产物的Serverless架构,仍然存在着巨大的优势和不可忽略的挑战。
所具备的优势
亚马逊AWS首席云计算技术顾问费良宏曾说:今天大多数公司在开发应用程序并将其部署在服务器上的时候,无论是选择公有云还是私有的数据中心,都需要提前了解究竟需要多少台服务器、多大容量的存储和数据库的功能等。并需要部署运行应用程序和依赖的软件到基础设施之上。假设不想在这些细节上花费精力,是否有一种简单的架构模型能够满足这种想法?
时至今日,Serverless架构已逐渐“走进寻常百姓家”,这个答案就显然已经存在了。确实如此,在传统项目上线过程中,需要申请主机资源,这时候一般会非常花时间和精力去评估一个峰值最大开销来申请资源,即使某些服务按照最大消耗去申请资源,也要有专人在不同时间段进行资源的扩容或缩容,以达到保障业务稳定且降低成本的效果;而对于另一些服务来说,有些时候申请的资源还需要在最大开销基础上评估,即使可能出现很多流量波谷,并产生大量的资源浪费,也不得不这样去做,比如数据库这种很难扩展的应用就是“尽管很多时都觉得浪费资源也比当峰值到来时应用程序因为资源不足而无法服务好”。正如费良宏所说,在Serverless架构下,这个问题得到了比较好的解决,不计划到底需要使用多少资源,而是根据实际需要来请求资源;根据使用时间来付费,根据每次申请的计算资源来付费,让计费的粒度更小,将更有利于降低资源的开销。这是对应用程序本身的优化,例如让每次请求耗时更短,让每次消耗的资源更少,能够显著节省成本。
Serverless架构所具备的优势正如《云原生发展白皮书(2020年)》中所描述的“Serverless架构使得用户能够专注在价值密度更高的业务逻辑的开发上”;也正如UC Berkeley在《Cloud Programming Simplified: A Berkeley View on Serverless Computing》中对Serverless架构特点的陈述“Serverless具备弹性伸缩和按量付费的特点”,以及总结的Serverless架构六个潜在优势:
- 按需提供无限计算资源;
- 消除云用户的前期承诺;
- 根据需要在短期内支付使用计算资源的能力;
- 由于许多非常大的数据中心,大规模降低成本的规模经济;
- 通过资源虚拟化简化操作并提高利用率;
- 通过复用来自不同组织的工作负载来提高硬件利用率;
Serverless架构相对于传统架构或者传统的业务上线过程,确实具备业务聚焦、弹性伸缩、按量付费等优势,这些优势往往是开发者在技术选型时的重要参考。
业务聚焦
所谓的业务更聚焦,指的是Serverless架构所交付的核心心智之一:让开发者将更多精力放在自身的业务逻辑之上,而不需要再花费更多精力关注底层资源。
无论CNCF在《CNCF WG-Serverless Whitepaper v1.0》中所说的:“Serverless所谓的‘无服务器’并不是‘没有服务器’,而是说Serverless的用户不再需要在服务器配置、维护、更新、扩展和容量规划上花费时间和资源,将更多的精力关注到业务逻辑本身,至于服务器,则‘把更专业的事情交给更专业的人’去做,即由云厂商来提供统一的运维”;还是信通院云原生产业联盟所发布的《云原生发展白皮书(2020年)》中所描述的:“无服务器(即Serverless)是一种架构理念,其核心思想是将提供服务资源的基础设施抽象成各种服务,以 API 接口的方式供给用户按需调用,真正做到按需伸缩、按使用收费。这种架构体系结构消除了对传统的海量持续在线服务器组件的需求,降低了开发和运维的复杂性,降低运营成本并缩短了业务系统的交付周期,使得用户能够专注在价值密度更高的业务逻辑的开发上”,一定程度上都是在说“开发者可以更聚焦价值密度更高的业务逻辑开发”。
众所周知,单体架构时代应用比较简单,应用的整体部署、业务的迭代更新,物理服务器的资源利用效率足以支撑业务的部署。随着业务的复杂程度飙升,功能模块复杂且庞大,单体架构严重阻塞了开发部署的效率,业务功能解耦,单独模块可并行开发部署的微服务架构逐渐流行开来,业务的精细化管理不可避免的推动着基础资源利用率的提升。如图3所示,在虚拟化技术不断完善和被广泛运用之后,虚拟化技术打通了物理资源隔阂,减轻了用户管理基础架构的负担。容器/PaaS 平台则进一步抽象,提供了应用的依赖服务、运行环境和底层所需的计算资源。这使得应用的开发、部署和运维的整体效率再度提升。Serverless架构技术则将计算抽象的更加彻底,将应用架构堆栈中的各类资源的管理全部委托给平台,免去基础设施的运维,使用户能够聚焦高价值的业务领域。
弹性伸缩
所谓的极致弹性,指的是Serverless架构特性之一:可以根据业务流量波动,自动进行资源的分配和销毁,以最大程度的平衡稳定性、高性能以及资源利用率。
在2019年UC Berkeley的文章《Cloud Programming Simplified: A Berkeley View on Serverless Computing》中,对Serverless架构的特性进行了一个比较明确的描述,他说在对于被认为是Serverless的服务,它必须具备弹性伸缩和按量付费的特点。这其中的弹性伸缩指的是Serverless服务的供应商会根据用户服务的流量波动进行实例的增加或缩减。
从IaaS到PaaS再到SaaS的过程中,去服务器化越来越明显。到了Serverless架构,所谓的去服务器化已经上升到了一个新的高度,相对于Serverful而言,Serverless对业务用户强调的是Noserver的心智,所谓的Noserver,不是说脱离了服务器或者说不需要服务器,而是意味着去除有关对服务器运行状态的关心和担心,这也就意味着原先需要对服务器进行了扩容操作和缩容操作也都不再需要业务人员关注了,这一切都交给云商场进行管理和负责。如上图所示为例,蓝色的折线为一个网站在某天的流量走势图:
-
左侧是传统云主机架构下流量与机器负载示意图,可以看到在网站上线之前:
- 技术人员需要对网站资源用量进行评估,评估结果是这个网站最大的流量峰值为800PV/小时,所以进行了对应的云服务器的购买;
- 但是在当天10时,运维人员发现网站流量突然变多,已经逐渐濒临800PV/小时,此时运维人员在线上购买了一台新的云主机并进行了环境的配置,最后在Master机器上添加了对应的策略,解决了10时-15时的流量峰值;
- 过了15时,运维人员发现流量已经恢复正常,此时工作人员对后加入策略中的云主机进行停止,并将额外的资源进行释放;
- 当到了18时,再次发现过载流量的到来......
- 右侧是Serverless架构弹性模式下流量与负载的示意图,在这个图中可以清晰地看到负载能力始终在和流量是匹配的(当然这个图本身存在着一定的问题,即真实的负载能力在一定程度上可能是高于当前流量的),即并不需要像左侧传统云主机架构,需要在技术人员的人为干预下应对流量的波峰波谷;这一切的弹性能力(包括扩容和缩容),均由云厂商提供;
通过对图4的分析,不难看出Serverless架构所具备的弹性能力,在一定程度上来源于厂商的运维技术支持,在Serverless架构所主张的“把更专业的事情交给更专业的人,让开发者更加专注自身的业务逻辑即可”心智,在弹性模式上也是一个非常直观的体现。
按量付费
所谓的按量付费,同样指的是Serverless架构特性之一:Serverless架构可以按照用户实际的资源使用量进行按需收费。在一定程度上可以最大程度提高资源使用效率,降低成本支出。
在传统云服务器架构下,服务器一旦购买和运行,就在持续消耗资源,并且产生持续性的费用。尽管每台服务器的可用资源是有限的,通常也是固定的,但是服务器每时每刻的用户量却是不同的,资源使用率也是不同的,这就导致传统云服务器架构下,会比较明显的产生一定的资源浪费,一般情况下,白天资源利用率相对较高,资源浪费少一些;夜间资源利用率较低时,资源浪费会相对高一些。按照《福布斯》杂志的统计,在商业和企业数据中心的典型服务器仅提供5%~15%的平均最大处理能力的输出,这无疑也证明了刚刚对传统服务器的资源使用率和浪费程度分析的正确性。
而Serverless架构的出现,则可以让用户委托服务提供商管理服务器、数据库和应用程序甚至逻辑,这样的做法一方面减少了用户自己维护的麻烦,另一方面用户可以根据自己实际使用函数的粒度进行成本的支付。对于服务商而言,他们可以将更多的闲置资源进行额外的处理,这从成本的角度、“绿色”计算的角度来说,都是非常不错的。
如图所示,蓝色的折线为一个网站在某天的流量走势图:
- 左侧是传统云主机架构下流量与费用支出示意图,通常业务在上线之前是需要进行资源使用量评估的,当该网站的资源使用两评估之后,购买了一台可以承受每小时最大1300PV的服务器,那么在一整天的时间内,这台服务器所提供的算力总量为橙色面积,所需要指出的费用也是橙色面积对应算力的费用,但是很明显可以看出真正有效的资源使用与费用支出仅仅是流量曲线下面的面积,而流量曲线上方的橙色面积部分则为资源损耗与额外的支出部分;
- 右侧是Serverless架构弹性模式下费用支出示意图,在这个图中可清晰地看到,费用支出和流量基本是成正比的,即当流量处于一个较低水位时,对应的资源使用量是相对较少的,同样对应的费用支出也是相对较少的;当流量处于一个比较高的数值时,借助Serverless架构的弹性伸缩能力与按量付费能力,资源使用量和费用支出将会成正相关增长;在整个过程中,可以清晰的看出并未像左侧传统云主机架构下流量与费用支出示意图产生明显的资源浪费与额外的成本支出;
通过对图的分析,不难看出Serverless架构所具备的弹性伸缩能力与按量付费模型进行有机结合,可以在极大的程度上避免资源浪费,降低业务成本。
其他优势
除了上面所说的业务聚焦、弹性伸缩、按量付费等优势,Serverless架构还具备其他很多优势,例如:
- 降低业务创新周期:由于Serverless架构在一定程度上是“云厂商努力做更多,让开发者更关注自身的业务”的模式,所以可以认为开发者将会付诸更少的时间、精力在一些传统云主机架构所需要关注的OS层面、云主机层面、系统环境层面;所以在一定程度上开发者们可以更加专注自身的业务逻辑,带来的直接效果的就是可以提升项目的上线效率,降低业务的创新周期,提升研发交付速度;
- 系统安全性更高:虽然Serverless架构在一定程度上有一种“黑盒”的既视感,但也正是因为如此,Serverless架构往往不会提供登陆实例的能力,也不会对外暴露系统的细节;同时操作系统等层面的维护也都是交给云厂商负责和管理;所以在一定程度上Serverless架构是更加安全的,一方面表现在Serverless架构只对外暴露预定的,且需要暴露的服务/接口,在一定程度上相对云主机等免去了被暴力破解的风险,另一个方面则表现在云厂商有更加专业的安全团队和服务器运维团队,在帮助开发者则保障整体的业务安全与服务稳定;
- 更平稳的业务变更:Serverless架构是由云服务商提供的一种天然分布式架构,同时又因为Noserver的心智免除了开发者对服务器运行状态的关心和担心,所以在Serverless架构下,开发者在对业务代码、配置进行变更时是非常简单的,只需要更通过云厂商所提供的部署工具进行业务部署即可,新的业务逻辑平稳生效等不再需要开发者关注,所以Serverles是架构在业务的平滑升级、变更以及敏捷开发、功能迭代、灰度发布等多个层面有着极大的优势;
当然,即使我们在上文中已经举例说明了很多Serverless架构的优势,仍然没办法枚举出他全部的优势和价值,但是不可否定的是随着时间的发展,Serverless架构在近些年正在被更多人所关注,也正在被更多团队和个人所应用,其价值也正在被快速凸显出来,并被更团队和个人所接受。