伯克利:serverless是下一代计算范式
摘要:Serverless技术正是云厂商的基于规模经济的一个选择。
引子
刚过去的HC2020,华为面向多样化算力的时代,发布了DC分布式计算的三个开发套件,其中一个是元戎组件。元戎是基于函数计算的分布式并行应用开发框架,希望能够帮助开发者定义DC分布式计算的开发模式和运行模式。关于的这里的函数计算,不断有同事询问这个和Serverless的关系或者区别呢?
在公司不同的场景,推动serverless技术的使用也有两年时间了,现在也是借这个引子,说说自己的理解。
1.Serverless的本质
Serverless当前相对比较正式的定义(CNCF白皮书)有几个特征:是云计算形态的进一步发展,相对于当前云计算,它带来两个关键好处:NoOPS和Pay as You Run。现阶段Serverless技术的实现形态,以AWS发布的Lambda为代表,其他还包括微软Azure Function,谷歌Cloud Functions等。在2019年伯克利发布《Cloud Programming Simplified》展望中,把Serverless定义为云计算的下一代计算范式。云计算从微服务技术主导到Serverless技术的演进,我们看看云计算的本质就可以比较好的理解这些技术背后的逻辑,也就能理解为什么伯克利继成功断言云计算的兴起之后,把目光聚焦在Serverless技术上呢?
图1:当前serverless技术的阶段和形态
1.1云计算兴起到云原生生态的演进
云计算的兴起,在CPU硬件能力大力发展之后,得益于OS+ISV的软件生态和虚拟化技术的成熟。云计算巧妙地延续OS+ISV生态,把ISV可以无缝地迁移到云上。云vendor利用虚拟化技术,对客户提供IAAS服务。满足客户:1、应用软件运行条件没有发生变化;2、不用维护物理主机,只需要关注应用软件本身。
首先,从云计算的服务形态来看,对于企业应用及其基础设施,现在变成了用户和基础设施提供商两个层次,如下图所示。这个逻辑层次的划分很重要,在软件生态中原来基础设施平台和应用软件都是由用户自己管理和维护,这时出现了专业的平台提供者的角色,来提供基础设施。
图2:云计算带来基础设施提供商的概念
其次,我们回到云计算兴起的过程,如图三所示,云Vendor利用虚拟化技术的成熟,没有改变原来OS+ISV的生态玩法,对用户提供IAAS服务,这样用户的软件几乎是无缝迁移到云厂商的基础设施之上的。这样云厂商快速地聚集了一些企业用户上云,在这个阶段之后,云厂商比如AWS快速创新,在IAAS服务之外,云中间件,云安全,第三方服务集成大量的云上应用运行和业务逻辑服务。逐渐构建起云原生生态所需要的生态环境。在这个第一阶段之后,容器技术持续演进,云原生的软件生态开始形成,可以明显地看到软件生态的界面从GuestOS上升到容器的层次,应用软件的部署也是由平台提供商来完成,用户不用再关注基础设施运行的操作系统是什么了。这个软件栈中云厂商即平台提供商cover的范围又上升了一步,这个变化既是云原生生态带来的变化,又有云厂商商业逻辑的需要在里面。
图3:云计算的产生和演进示意图
为什么这么说呢?可以看下一节。
1.2云计算的商业逻辑建立在规模经济之上
当前云计算集中在几个云厂商,而且成功的厂商都是在自有的消耗大量基础设施的业务基础之上,云业务才逐渐扩大发展起来的,比如,AWS和阿里云基于自有的电商服务平台。谷歌云和Azure在分别找到自己的移动用户服务和SAAS服务的规模运营之后,两家也是逐渐占据市场份额。
观察云计算发展过程,我们可以说云计算厂商遵循规模经济的发展模式。结合规模经济,有两个重要的现象或者规律,了解这两个现象,可以很好地帮助我们了解云技术的演进方向。
首先,可以解释为规模经济性,简单地说,随着生产规模(云计算)扩大,平均单位产出(服务收益)成本(基础设施成本)趋于下降。英国的杰弗里·韦斯特研究城市的人口和产业的发展规律,总结为规模经济体的产出呈超线性,而成本遵循亚线性规律,如下图所示。
了解到这个现象,我们可以理解为什么云厂商极力追求规模。AWS 2002年推出,持续推进云服务,到2013年AWS发布财报,才进入规模经济的盈利期。AWS现在每年投入100亿美金的CAPS,持续构建云规模,全球规模>500W台服务器。基于规模成本的优势,构建了长期价值成本和技术生态驱动的良性循环,掌握了云服务的定价策略,19年reInvent宣称实现了70+次的降价正常,同时还能获取云计算业务20+%的营业利润率。
图4:云计算遵循规模经济性的现象
其次,可以解释为规模的有效性。生产规模不断扩大,当基础设施单位成本降到最低时,达到最佳生产规模,如果生产技术没有发生变革,这时再继续扩大生产规模,平均单位产出成本转而逐渐上升。当前进入规模效应良性循环的AWS,其capex/收入比基本保持在40-50%左右,虽然相对稳定,也需要寻求继续成本下降的空间。
图5:规模经济LAC曲线
而同时,当前云厂商主体服务IAAS,为租户提供虚拟机资源,都遇到了资源利用率低的问题,包括CPU利用率和内存利用率。业内数据:云厂商提供的数据中心,CPU资源利用率不高于20-30%。租户购买固定VCPU和内存配置的虚拟机,云厂商实际在平台使用的是装箱算法,按照租户的需求,装配到数据中心的空余空间中去。租户按照其业务峰值购买了资源,在这种情况下,大量租户资源长时间处于业务非峰值态,云厂商对于资源利用率这个问题基本都是无能为力。而同时,云厂商自运营的业务,通过不同业务的混部,SLA的调度等技术,比如谷歌很早就已经宣称Brog的改进版可以在数据中心获得90%的CPU资源利用率。这样一个现状,也是云厂商不约而同地提出共享计算实例的原因,比如AWS T实例等。通过用户SLA策略,在用户知情的情况下,获得对VCPU的共享的控制权,实现高CPU利用率。
回到前面我们提到用户和平台提供商两个角度。首先,云厂商希望能够获得更多的对资源的控制权,让超大规模的云计算继续享有规模的经济性,能够做到单位资源成本继续下降。其次,租户担一方面心其业务运行的平稳性,另一方面也希望能够更加聚焦业务本身。所以我们可以理解了云计算技术的方向:云厂商管理的软件栈层次肯定会越来越高,云计算技术必须能够解决用户业务的弹性和高可扩展。云厂商获得应用运行资源的最大控制权,追求高资源利用率和低成本,租户获得业务SLA保证的应用。
Serverless技术正是云厂商的基于规模经济的一个选择。
1.3 Serverless技术是匹配云原生规模经济的选择
如图3所示,Serverless在容器Runtime之后,进一步实现计算抽象,云厂商负责管理的软件栈进一步提升到Runtime。这里笔者把函数计算和Serverless技术分开。函数计算是一种计算范式的抽象,把计算抽象进一步为两个层次,函数(代码逻辑)和函数运行时(函数运行需要的资源,库等),即
函数计算= 函数+函数运行时
Serverless计算也是利用函数计算上述的抽象,在云原生生态下,进一步让用户聚焦到业务代码逻辑,直接使用云厂商提供的Runtime,相比容器,云厂商管理的软件栈又提升了一个层次。笔者把Serverless技术归到云原生的技术,因为serverless为租户提供服务,必须依赖云厂商提供的大量后台的服务及其运行时,即
Serverless= FaaS+BaaS
函数计算这个层次的抽闲,借助于终端用户或IOT等事件型的应用,将代码和其运行时分离,云厂商提供函数代码的运行时及其物理资源。如下图所示,平台提供商获得了软件栈最大可控制的范围,而用户只需要关注其代码。因此,函数粒度的应用,让平台提供商获得了最大的技术空间,基于这个空间,让云计算的规模成本进一步得到下降,所以Serverless技术是云厂商必选的选择项。
图6:Serverless使平台提供商获得软件栈中最大的可控制技术空间
然而,在当前阶段的Serverless,适用范围还主要是事件式,短时间任务型的应用。用户编写任务的函数,在执行时间,资源上有一个约束。平台提供商基于此获得最大的调度权限,所以提供了按次收费,按需收费的定价策略。在海量终端的服务驱动的场景获得很好的应用,充分发挥了serverless按需弹性,按需计费的好处。显然这样的应用范围,是不足以满足云厂商的期待的。所以从Serverless= FaaS+BaaS,另外一个BaaS方面,云厂商要推动serverless计算的快速演进。
Serverless 官方定义中从用户角度看到的两个关键特征NoOPS和Pay as You Run。符合这两个特征的形态也是Serverless技术,所以Serverless技术又比函数计算概念广泛,不一定非得基于函数计算的抽象,只要能为用户提供NoOPS和Pay as You Run的业务也就可以归到Serverless技术中去。所以云厂商不断的推进两件事情。
一件事情是把BaaS serverless化,这个我们都已经看到了,云DB,云存储的serverless产品都已经推出。还有一件事情,云厂商需要推动现在的应用serverless化,即当前用户继续关于自己应用服务及其runtime,但是服务的autoscaling,并行化模板都由云厂商来提供。这一点谷歌的产品策略中可以清晰地看到这一点。
谷歌对于Serverless两条明确的技术线:一是cloudRun产品,基于K8S容器平台演进的Serverless平台,相当于Serverless的应用平台,推动已有的微服务化应用演进到serverless化;二是移动应用的CloudFunction+MBaaS的产品。两条技术线推动Serverless技术演进。AWS当然也不会落后,虽然AWS没有想谷歌一样的运行时平台的强大生态控制权,但是AWS也直接提供AutoScaling、ASM等服务指导应用服务Serverless化。
基于上述我们对serverless技术背后的商业逻辑,所以它成为了云厂商的必选,也是伯克利断言serverless是云时代下一代计算范式的底气所在。
伯克利:serverless是下一代计算范式的更多相关文章
- Serverless 实战 —— 函数计算 + Typescript 实践
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
- Serverless助力AI计算:阿里云ACK Serverless/ECI发布GPU容器实例
ACK Serverless(Serverless Kubernetes)近期基于ECI(弹性容器实例)正式推出GPU容器实例支持,让用户以serverless的方式快速运行AI计算任务,极大降低AI ...
- Serverless 解惑——函数计算如何安装字体
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...
- Everything is Serverless,从开源框架对比说起
摘要:Everything is Serverless. 在众多云计算解决方案中,Serverless 逐渐崭露头角,受到了很多关注并且发展迅猛,今天就关于serverless 开源框架细说二三. 什 ...
- 腾讯云微计算实践:从Serverless说起,谈谈边缘计算的未来
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:黄文俊,腾讯云高级产品经理,曾经历过企业级存储.企业级容器平台等产品的架构与开发,对容器.微服务.无服务器.DevOps等都有浓厚兴趣. ...
- 从零入门 Serverless | 函数计算如何粘合云服务,提供端到端解决方案
作者 | 西流 阿里云技术专家 导读:阿里云 Serverless 产品函数计算可以作为粘合剂,串联其他云服务提供端到端解决方案,从而简化编程模型,快速实现最上层的业务目标. 传统单体应用的拆解 首先 ...
- 干货 | 用Serverless快速在APP中构建调研问卷
Serverless 计算将会成为云时代默认的计算范式,并取代 Serverful (传统云)计算模式,因此也就意味着服务器 -- 客户端模式的终结. ------<简化云端编程:伯克利视角下的 ...
- 视频课程 | 云原生下的Serverless浅谈
京东云开发者社区在3月底于北京举行了以"Cloud Native时代的应用之路与开源创新"为主题的技术沙龙,现场多位技术大咖与开发者们面对面就Cloud Native进行了深入交流 ...
- 阿里云研究员叔同:Serverless 正当时!
作者 | 叔同 导读:Serverless 将开发人员从繁重的手动资源管理和性能优化中解放出来,就像数十年前汇编语言演变到高级语言的过程一样,云计算生产力再一次发生变革.Serverless 的核心价 ...
- 6岁!是时候重新认识下Serverless了
一.背景 Serverless 概念从2012年开始提出,真正推出相关云产品是2014年AWS推出Lambda.如果我们将 Serverless 比作一个婴儿,那么它已经6岁了. 虽然业界对Serve ...
随机推荐
- 【Azure Developer】在App Service上放置一个JS页面并引用msal.min.js成功获取AAD用户名示例
问题描述 在App Service上放置一个JS页面并引用msal.min.js,目的是获取AAD用户名并展示. 问题解答 示例代码 <!DOCTYPE html> <html> ...
- 【ZJCTF 2019】NiZhuanSiWei
[ZJCTF 2019]NiZhuanSiWei 收获 file_get_contents绕过 include联想伪协议 熟悉__tostring魔术方法的使用 题目 代码: <?php $te ...
- 钉钉OA自定义审批流的创建和使用
前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 钉钉作为一款办公软件,审批功能是它的核心功能 ...
- OI 模板合集
update on 2023.10: 这篇博客的原本意义是 方便直接复制 / 快速复习,但部分原有代码存在本质错误,完全没有起到这个作用,故重构. 由于折叠代码块在某些 markdown 编辑器中不支 ...
- 调和级数发散率证明|欧拉常数|ln n+gamma+varepsilon_k证明|sigma(1/i)
最近在做一个 练习 ,然后看到了 调和级数 这个东西,说实话这东西谁能在考场上想到,平日还是要多积累. 开门见山 但是我们今天只证这个东西: \[\sum^{n}_{i = 1} \frac{1}{n ...
- ChatGPT提示词迭代
openAI CEO 除了上一篇讲的:限定,排除,示例,生成,扩展了其他方法,包括:关键词.调教和其他使用方法 关键词 像应用搜索引擎一样,在描述的句子开头给一些关键词,比如: 问题 代码 解释 分析 ...
- Python 正则表达式(RegEx)指南
正则表达式(RegEx)是一系列字符,形成了一个搜索模式.RegEx 可用于检查字符串是否包含指定的搜索模式. RegEx 模块 Python 中有一个内置的包叫做 re,它可以用于处理正则表达式.导 ...
- Net 高级调试之八:代码审查及杂项命令
一.简介 今天是<Net 高级调试>的第八篇文章.这篇文章设计的内容挺多的,比如:如何查看方法的汇编代码,如何获取方法的描述符,对象同步块的转储,对象方法表的转储,托管堆和垃圾回收器信息的 ...
- WPF --- 如何以Binding方式隐藏DataGrid列
引言 如题,如何以Binding的方式动态隐藏DataGrid列? 预想方案 像这样: 先在ViewModel创建数据源 People 和控制列隐藏的 IsVisibility,这里直接以 MainW ...
- Java——设计模式
一.概述 设计模式是历代程序员总结出的经验 二.分类 创建型模式:简单工厂模式 工厂方法模式 单例模式:饿汉式(开发) 懒汉式(面试) 行为型模式 结构型模式 三.简单工厂模式 一个工厂中可以创建很多 ...