摘要: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是下一代计算范式的更多相关文章

  1. Serverless 实战 —— 函数计算 + Typescript 实践

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...

  2. Serverless助力AI计算:阿里云ACK Serverless/ECI发布GPU容器实例

    ACK Serverless(Serverless Kubernetes)近期基于ECI(弹性容器实例)正式推出GPU容器实例支持,让用户以serverless的方式快速运行AI计算任务,极大降低AI ...

  3. Serverless 解惑——函数计算如何安装字体

    前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传.函数计算准 ...

  4. Everything is Serverless,从开源框架对比说起

    摘要:Everything is Serverless. 在众多云计算解决方案中,Serverless 逐渐崭露头角,受到了很多关注并且发展迅猛,今天就关于serverless 开源框架细说二三. 什 ...

  5. 腾讯云微计算实践:从Serverless说起,谈谈边缘计算的未来

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:黄文俊,腾讯云高级产品经理,曾经历过企业级存储.企业级容器平台等产品的架构与开发,对容器.微服务.无服务器.DevOps等都有浓厚兴趣. ...

  6. 从零入门 Serverless | 函数计算如何粘合云服务,提供端到端解决方案

    作者 | 西流 阿里云技术专家 导读:阿里云 Serverless 产品函数计算可以作为粘合剂,串联其他云服务提供端到端解决方案,从而简化编程模型,快速实现最上层的业务目标. 传统单体应用的拆解 首先 ...

  7. 干货 | 用Serverless快速在APP中构建调研问卷

    Serverless 计算将会成为云时代默认的计算范式,并取代 Serverful (传统云)计算模式,因此也就意味着服务器 -- 客户端模式的终结. ------<简化云端编程:伯克利视角下的 ...

  8. 视频课程 | 云原生下的Serverless浅谈

    京东云开发者社区在3月底于北京举行了以"Cloud Native时代的应用之路与开源创新"为主题的技术沙龙,现场多位技术大咖与开发者们面对面就Cloud Native进行了深入交流 ...

  9. 阿里云研究员叔同:Serverless 正当时!

    作者 | 叔同 导读:Serverless 将开发人员从繁重的手动资源管理和性能优化中解放出来,就像数十年前汇编语言演变到高级语言的过程一样,云计算生产力再一次发生变革.Serverless 的核心价 ...

  10. 6岁!是时候重新认识下Serverless了

    一.背景 Serverless 概念从2012年开始提出,真正推出相关云产品是2014年AWS推出Lambda.如果我们将 Serverless 比作一个婴儿,那么它已经6岁了. 虽然业界对Serve ...

随机推荐

  1. GPL协议原文及中文翻译

    GPL协议原文及中文翻译 原文参考链接 翻译参考链接 原文 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 19 ...

  2. 记一次有趣的 buffer overflow detected 问题分析

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明   无 前言   在我开发的一个实验和学习库中,在很久 ...

  3. Ubuntu18.04环境下安装redis 6.2.0,配置文件的部分参数说明

    环境是win11的Linux子系统Ubuntu-18.04,安装方式是源码安装,也可以用apt安装(见本文最后参考资料),用的用户是默认用户(所以一些关键命令要注意用sudo,不用会报错) 安装: j ...

  4. AtCoder Beginner Contest 321(ABC321)

    A. 321-like Checker 直接模拟. Code B. Cutoff 直接暴力枚举 \([0\sim100]\),每次把第 \(n\) 个数当作当前枚举的 \(i\),然后看看条件是否满足 ...

  5. Spring Cloud Gateway系列:路由断言工厂

    目录 1.After路由断言工厂 配置式 API式 2.Before路由断言工厂 配置式 API式 3.Between路由断言工厂 配置式 API式 4.Cookie路由断言工厂 配置式 API式 5 ...

  6. 对于goland相对较新一些版本新建项目时没有go mod模式选项的坑

    前言 对于一些小白在网上看很早的一些go视频,使用goland2020.3.x版本或者其之前版本创建新项目,里面会有GO Modules(vgo)这个选项,也就是gomod模式创建新项目,然而对于现在 ...

  7. sql server 截断和收缩所有用户数据库日志--用游标循环所有正常状态的用户数据库

    在服务器运维活动中,我们经常需要做一项工具就是将好多年的用户数据库日志文件截断并收缩为最小,以节省大量的磁盘空间.当数据库只有一两个时可以手动操作,但数据库数量众多时,就需要采用sql脚本,批量化执行 ...

  8. Production Environment Difference Between Development, Stage, And Production

    There are three different environments that you'll probably deal with at some point. Each environmen ...

  9. C#.NET 国密SM4 CBC 对称加解密 与JAVA互通 ver:20231103

    C#.NET 国密SM4 CBC 对称加解密 与JAVA互通 ver:20231103 .NET 环境:.NET6 控制台程序(.net core). JAVA 环境:JAVA8,带maven 的JA ...

  10. 虚拟机centos7上安装docker+jenkins

    虚拟机centos7上安装docker+jenkins 学习某册子的CICD时,安装了docker和jenkins,记录的安装过程和中间碰到的问题. 使用的虚拟机为Parallels Desktop, ...