草庐IT

Serverless是云计算的未来

胥磊 2023-03-29 原文

译者 | 胥磊

审校 | 孙淑娟

自云计算问世以来历经数次演进,其中归根于成本的因素是推动云计算历次演进的重要动力。近几年随着云计算的迅猛发展,终于出现一种新的推动力那就是Serverless,其将推动云计算再次演进。本文中我们将阐述一个观点,即Serverless是云计算的未来,同时将该论点围绕以下的前提展开论述,进而描绘一个全新的愿景。

  • 云计算是现代互联世界的中心,大多数应用都使用云计算来收集和处理数据,并构建边缘设备需要的信息
  • 云计算的需求预计将以每年15%的速度增长
  • 云计算的支出预计将达到关键市场领域IT成本的50%
  • 云计算的能耗已经占了全球能源消耗的1-1.5%,其增长已对环境构成实质威胁

综上,鉴于云计算不断增长的需求,我们提出更节能,更具成本效益的Serverless计算模式是当前主流云计算的下一个演进方向。

一、简介

当下云计算的影响力已经渗透到世界的各个角落,无论你身处何方都可以看见那些依赖便携电脑上网和处理信息的人。那些信息大都从边缘设备采集,进而被运行在云端的应用程序和服务收集,处理后产生的。作为一名拥有该领域多年经验,且推动支撑现代IT关键开源技术发展的个体,是时候退一步思考一下云计算未来发展方向的大问题--当前云计算模式的下一步的发展方向是什么?更确切地说是目前占主导地位的由Kubernetes驱动的混合云的计算模式的未来是什么。

说起无服务计算,就和当初Kubernetes的情况一样,通常被提到的就是自然进化,但它是朝着正确的方向演进吗?是否有助于缓解日益增长的云计算成本?亦或它的持续增长是否对我们的环境再次造成威胁?

二、动力

在本文中,我们认为这些极具挑战性的问题的答案都是确切的。我们相信云计算的未来就是Serverless。这一论点的得出,不是简单的源自于用户所实现的成本效益,而是源于云供应商所获得的更高的计算密度,另外还源于对环境影响方面的因素。所有的计算模型都必须是“绿色”的,都要具备环境的可持续性,要对我们赖以生存的气候更友好。

三、历史视角

作为21世纪初主导模式的云计算,被看作是IT史上的一场革命。伴随着云计算的兴起,任何人都可以用每小时几分钱的低廉价格拥有一块云计算机(通常以VM虚拟机或容器的形式)。极大的便捷性使任何人在任何地方都具备毫不费力的启动“云规模”计算资源的能力,这也是我们当前技术革命的最大驱动力之一。

当然这场变革也带来一个后果,一旦向用户提供了高可用的廉价计算单元,无论计算资源是否被充分的利用都将被一直分配。这些资源被分配后,云供应商就需确保在用户需要使用时可以被随时使用。而与此同时,用户运行的工作负载却很难达到7*24持续去使用这些分配的计算资源。

大多数的工作负载都具有事件驱动的特性,除了被设置的事件调度的时候,大部分时间都是在等待事件,当一个事件到来后工作负载才会做出反应和回应。另一种常见的工作负载就是以批处理的模式工作,当然批处理任务可能是外部事件触发,也可能是定期发生。在目前主流的云计算模式下,用户必须预先获取其工作负载所需要的计算资源的量,这种做法通常会带来巨大的浪费。而这些浪费的计算资源则增加了成本支出,以及能源的耗费。

四、Serverless是云计算的未来

Serverless是为了解决云计算资源分配的问题而产生的。通过增加资源分配的自动化功能,Serverless使用户不再需要预先确认和分配其工作负载所需要的计算资源。作为一个开源的示例,Knative就是在Kubernetes云平台之上增加了自动化扩展,根据实际服务的需要自由扩缩计算资源。一方面随着请求的不断到来,Knative会相应增加分配的计算资源,并且支持无限扩展Pods节点,另一方面当请求量逐步降低时,Knative会相应缩小计算资源的规模(无请求时则0个Pods)

由此,Knative通过确定何时何地需要那些计算资源,解决了为用户预先分配资源的问题。唯一要做的就是在Knative增强的Kubernetes集群上部署一个服务,当然服务本身并不占用额外的计算资源,以后便可以随时随地的响应计算资源的请求。正如Knative所展示的,Serverless模型将每个服务都定义为一个事件,Knative本身也做了一些功能增强,以便能更好的控制事件的生产和消费。这也能确保每个服务在任何时候都能独立的进行扩展控制,只需要有必要数量的服务实例在云上运行。

Knative通过不断的将每个服务所预留的云资源与实际使用的量相适应来提高云的效率。Knative成为改进Kubernetes的一种方式—涵盖了很多相同功能的同时为用户增加了简化和自动化,从而实现了更高的云效率。因此,你应该尽可能去使用Knative而不是直接使用底层Kubernetes。

五、管理成本

Serverless主要承诺之一就是通过有效分配和使用云资源与服务来节省成本。目前在云上运行的工作负载大都需要对云资源进行预先分配。但鉴于确切的资源消耗难以预测和知晓,用户往往都进行了过度分配,因此也支付了过多的费用。

此外,大多数的云计算服务的资源需求也并不是恒定的。恰恰相反,一个典型的服务的需求会随着每天不同时间,每周不同日期,一年中不同季节,假期以及当地或全球突发事件而波动。多数情况下,试图预测实际需求都是一项不可能完成的任务,所以用户都会在预期的峰值之上配置和预留冗余的云资源,以确保能够平稳处理峰值。这些都意味着大多数时候为服务提供的云资源比实际需要的要高很多。即使用户通过充分分析峰值后选择一个较低的冗余数量,而实际的需求也可能会更低,这就造成了成本的浪费。或者也可以选择一个不足的数量,这将可能会导致收入的损失。通过实时自动配置资源以适应需求,Serverless有效避免了浪费和损失。

Serverless解决了云用户在部署服务时需要保留计算资源的问题。通过Serverless部署的服务只有在事件(服务请求)需要处理时才会被激活,为云用户节约了成本。伴随更多事件的出现,相应的云服务就会通过扩展来满足需要,而当需求减少时服务便可以缩减直至为零,最佳的情况就是一个服务只需要消耗它处理收到需求所必要的资源,不多也不少。

云服务商在提供Serverless服务时也可以节约成本。在没有Serverless的时候,用户购买了预先配置的计算资源,所有的这些资源都在某处的虚拟机上进行本地化部署。云服务商必须确保当服务达到峰值时,为该服务提供资源的虚拟机要有足够的本地资源提供扩展空间。而有了Serverless后,随着服务需求的增长,云服务商只要确保云上有足够的资源来服务该事件既可。

以Knative为例,如果一个事件到达某个特定的Kubernetes集群,Knative可以在集群的任何地方为该事件寻找资源,而不必局限于一个特定的工作节点。如果整个Kubernetes集群的资源都被完全使用,云服务商可以将事件路由到其他集群,这些通过Istio将网络抽象,同时使用Kubernetes的联合模型非常容易实现。随意使用任意地方的计算资源为事件服务解决了对本地资源预分配的问题,也大幅提高了云效率。总的来说,Serverless为云服务商和用户都带来了显著的成本降低。

六、环境

正如我们之前所讨论的,Serverless提高了云服务的效率。通过解决只能在节点层面上对资源进行本地的预配置问题,Serverless可以使用任何地方的云资源来服务请求。整体上看整个云端只需要更少的计算资源来服务同一云服务。更重要的是每个工作负载所耗费的资源会随之减少。例如一个缩减到零的工作负载比它持续运行所耗费的资源要少,同样必要的能源消耗的数量也会随之减少。所以Serverless可以带来额外的能源节约,随着越来越多的服务转向Serverless计算模式,云供应商就可以在数据中心的任务地方提供服务,未来甚至数据中心可以在容量满足需求的情况下暂停部分工作节点和物理机。由于能源消耗是云服务商首要成本之一,这样就可以节省很多的成本支出。

这种节约不仅使云的效率更高,也使云更环保。随着越来越多的工作负载转移到云上,节省的费用将非常可观。另外气候变化的问题不是单靠行为上改变就能应对的,而是要通过更有效的利用我们所拥有的能源,进一步减少能源的消耗。通过Serverless这些就可以在对当前应用没有任何影响的情况下实现,事实也是如此。当然并不是所有的工作负载都可以采用Serverless模式的,转向Serverless也是有挑战性的,这一点我们将在后续讨论。所以,云负载的Serverless未来意味着更环保的环境。

七、其他用例

最初Serverless是一种使用范围狭窄的小众技术,主要用于功能或服务的工作负载。近来随着其使用范围的大幅扩展,几乎可以满足任何类型的工作负载要求。例如批处理或交易的处理就天然适合Serverless架构,因为它们都是为实现一个结果而执行的工作负载类型,当然为了保证批处理和事务处理的完整性,事件调度和失败重试协议也是很有必要的。

1、数据和人工智能

数据和人工智能也是一个成熟的Serverless使用领域。典型的用例就是在大型数据集上运行机器学习(ML)算法,以及完善算法和功能,并重新运行的能力。一些项目如Kubeflow围绕Knative打包了必要的库和功能,便于这些用例的执行。我们还可能会通过不同的交互模式扩展当前的Serverless解决方案,使数据和人工智能用例更加自然,如允许fire-and-forget类型调用。此外,添加对提供的端点进行回调,以获得结果的功能也可能会非常有帮助。

2、量子计算

最后Serverless架构未来的一个非常重要的应用就是帮助量子计算机成为主流。量子计算机性能全面超越经典计算机,且具有其所不具备的优势,然而它的使用却需要专门的硬件和机柜,并且量子计算机编程限制也是一个重要因素。量子计算机令人望而却步的财务成本及其冷却系统相关的能源成本,使得能提供成本和能源优化的Serverless成为天然候选者。通过量子Serverless模型,如《超导量子计算的未来》中所述,我们可以通过访问事件驱动和经典的Serverless相关的工作负载来减少直接使用量子计算机的复杂性。IBM量子团队正在将量子Serverless作为他们未来2-5年战略的基石。

八、总结

在这篇博文中,我们解释了为什么Serverless成为所有云计算工作负载的未来方向。我们认为未来这种Serverless优先的模式对云用户和服务商都带来各种潜在的好处。这种好处不仅仅体现在各方面成本的节约,更重要的是还包括能源效率,从而带来更环保的云和更有环境意识的计算。最后我们还提供了Serverless优先的云的一些用例,如数据和人工智能以及量子计算。

原文链接:https://developer.ibm.com/blogs/the-future-is-serverless/

译者介绍

胥磊,51CTO社区编辑,某头部电商技术副总监,关注Java后端开发,技术管理,架构优化,分布式开发等领域。

有关Serverless是云计算的未来的更多相关文章

  1. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  2. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  3. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  4. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in

  5. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

  6. ruby-on-rails - 如何计算 Ruby/Rails 中 JSON 对象的数量 - 2

    Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包

  7. ruby - 如何计算自 Ruby 中给定日期以来的周数? - 2

    目标我正在尝试计算自给定日期以来周的距离,而无需跳过任何步骤。我更喜欢用普通的Ruby来做,但ActiveSupport无疑是一个可以接受的选择。我的代码我写了以下内容,这似乎可行,但对我来说似乎还有很长的路要走。require'date'DAYS_IN_WEEK=7.0defweeks_sincedate_stringdate=Date.parsedate_stringdays=Date.today-dateweeks=days/DAYS_IN_WEEKweeks.round2endweeks_since'2015-06-15'#=>32.57ActiveSupport的#weeks

  8. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到 - 2

    技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进

  9. ruby - 如何计算两个字符串共有的字符数? - 2

    如何计算两个字符串之间的字符交集?例如(假设我们有一个名为String.intersection的方法):"abc".intersection("ab")=2"hello".intersection("hallo")=4好的,男孩女孩们,感谢你们的大量反馈。更多示例:"aaa".intersection("a")=1"foo".intersection("bar")=0"abc".intersection("bc")=2"abc".intersection("ac")=2"abba".intersection("aa")=2一些补充说明:维基百科定义intersection如下:Int

  10. python - 如何计算文件中唯一字符的数量? - 2

    给定一个包含各种语言字符的UTF-8文件,我如何计算它包含的唯一字符的数量,同时排除选定数量的符号(例如:“!”、“@”、"#",".")从这个算起? 最佳答案 这是一个bash解决方案。:)bash$perl-CSD-ne'BEGIN{$s{$_}++forsplit//,q(!@#.)}$s{$_}++||$c++forsplit//;END{print"$c\n"}'*.utf8 关于python-如何计算文件中唯一字符的数量?,我们在StackOverflow上找到一个类似的问题

随机推荐