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