摘要: 过去十年,云服务深刻地改变了社会获取和使用计算能力的方式,云服务自身也以极快的速度演进。在基础设施云化之后,容器、Serverless等技术迅猛发展,开始推动业务能力的云化,云计算进入2.0时代。
点此查看原文:https://yq.aliyun.com/articles/368938?spm=a2c41.11181499.0.0
自2006年AWS发布的第一个云服务S3开始,存储、计算等IT基础设施的能力纷纷被以服务的方式提供给用户。过去十年,云服务深刻地改变了社会获取和使用计算能力的方式,云服务自身也以极快的速度演进。在基础设施云化之后,容器、Serverless等技术迅猛发展,开始推动业务能力的云化,云计算进入2.0时代。
12月19日的阿里云栖大会上,阿里云函数计算负责人杨皓然做了主题为“触摸云端编程之道——利用函数计算快速构建弹性可扩展的云原生应用”的演讲,他介绍了Serverless与函数即服务(Function as a Service, FaaS)的关系和价值,演讲结束后我们就该话题进一步采访了他。
云是弹性的、经济的、高效的
什么是云?杨皓然认为“对用户而言,云的核心是解决资源弹性、财务成本和开发效率的问题”。IaaS,PaaS,FaaS等不同形态的云服务本质上都是为了解决资源的弹性、成本和效率问题,不同的地方在于解决的问题域、角度和方式。最开始,云1.0时代,基础设施的云化为用户提供了和传统IT环境近乎一致的体验,让用户能把应用无缝迁移到云端。IaaS层服务通过虚拟化等技术大幅提高了资源利用率,而用户也只需租赁计算资源,不必承担物理硬件的折旧等成本,相比于用户维护自有IT基础设施的方式,IaaS在资源弹性和成本等方面有明显的优势。当人人都能获取所需的计算资源后,如何更高效地管理和使用计算资源则是下一个亟待解决的问题,毕竟,系统配置、故障处理、削峰填谷如何充分利用资源对用户都是不小的负担。
在杨皓然看来,不同层次的云服务是在从不同的角度去解决这些问题,大致可分为“以资源为中心”和“以应用为中心”两类。“以资源为中心”,是指沿着IaaS类服务的思路,进一步优化资源的弹性、成本和效率,例如提供更细粒度规格、更快伸缩时间的计算资源。“以应用为中心”,则是指从应用的架构和开发的角度提供服务,帮助用户构建能充分利用云端资源的、弹性高可用的应用,例如函数计算这样的FaaS服务,或者容器编排服务等。
FaaS把云的弹性、经济和高效优势发挥到了极致
当越来越多的开发者在云端构建应用时,如何正确设计应用架构、充分发挥云的优势变得越来越重要,“云端优先”的思想应运而生,这便促使“云原生(Cloud Native)”应用开发的出现。相比于Serverless,云原生应用是一个更宽泛的概念,在IaaS、PaaS与FaaS等不同的云平台上,都可以构建云原生应用,只不过它们的弹性和敏捷收益不同。”
“如果想要充分地发挥云弹性、经济和高效的优势,一开始就去适配这些特点,做架构的设计,那么最终得到的就是云原生应用。”杨皓然说。
在云原生架构中,以函数计算等FaaS服务为中心的Serverless架构越来越流行。杨皓然认为:“FaaS把云的弹性、经济和高效优势发挥到了极致,真的做到了使开发者只需要关注业务,而不用去管理底层基础设施。”FaaS有如下主要优势,这使它被越来越多人关注:
- 事件驱动,使得可以与其它服务无缝集成;
- 由云端全托管,运维高效;
- 实时弹性伸缩,细粒度的资源计量,按需付费。对于用户来讲,即使应用负载有明显的波峰波谷,资源使用率也是100%;
- 简化的编程模型,用户专注于单个请求逻辑的开发;
- 可以做严格的运行时隔离和权限管理机制,保障安全;
- ……
如果要在传统的IT基础设施上实现弹性高可用的分布式系统,那么开发者需要去管理一些具体的底层细节,比如要考虑某个函数需要调度到哪台机器上运行?它是以线程方式还是以进程方式运行?进程崩溃怎么处理?网络不连通怎么办?……这些都需要开发者编码实现。
考虑一下边缘计算的场景,那么这个问题会显得更加明显和严重。在边缘场景中,用户会面对成百上千的小集群,这些设备分布在各种物理环境中,会遇到网络条件恶劣、硬件架构类型不相同、通信能力限制等问题,由开发者来进行管理几乎是不可能的。
“但是实际上,用户应该从底层系统开发维护这类无差别的工作上脱身,专注于业务的创新,更快地将产品推向市场,更快地迭代改进。”杨皓然解释:“各种云服务就是把这些底层的东西抽象出来,让用户能快速地构建弹性的、低成本的、高可用的系统,而Serverless特别是FaaS在这上边目前做得最极致。”
连接是函数计算的核心价值
目前谈Serverless必FaaS,但实际上FaaS只是Serverless生态的一部分。杨皓然解释:“首先Serverless是一个生态,涵盖了计算、存储以及更上层的、垂直领域的很多服务。它不是一个新概念,AWS第一个云服务 S3 就是Serverless的存储服务。其次,Serverless已经无处不在了,云端每年发布的新功能、新服务,超过70%都是Serverless形态。FaaS只是整个Serverless生态的一部分,但是最近几年,因为FaaS才使得Serverless火起来,被更多人关注。”
因为FaaS把云中存储和计算的服务都粘合起来了,帮助用户快速构建云原生应用。而且FaaS以函数为单位来提供资源,这将云弹性和经济的优势发挥到了极致。他举了一个例子:“以往开发一个应用,可能存储用到了对象存储等Serverless服务,但这只是一部分,它只是解决了某一个特定问题。用户仍然要管理机器等基础设施,开发运维代价高,而通过FaaS,用户能快速地整合多种云端服务,开发效率有了质的提高。”
以开发一个短视频社交应用为例,移动设备上产生的视频文件上传到对象存储中,触发函数处理,通过函数计算连接其它服务后,用户只需专注于函数逻辑的开发,比如抽取元数据、人脸识别等等;并且,在这整个架构中,每个环节都是弹性高可用的。
通过事件驱动的连接,函数计算让对象存储、消息中间件服务、CDN等单纯的数据存储、流动、分发服务具备了“可编程”的特性,极大地增加了用户使用这些服务的灵活性。所以广泛地连接各类存储、计算或者垂直领域的服务是函数计算的核心价值。相反,杨皓然认为,目前有一些开源的FaaS框架,重点解决了弹性伸缩的问题,但还没有广泛的和其它服务连接,没有充分发挥FaaS的威力。未来,我们应该能看到开源产品在这一块的长足进步。
以应用为中心,而不是以资源为中心
对于函数计算的实现方式,杨皓然认为“立足点应该是以应用为中心,而不是以资源为中心”。他举例说明了这个观点:“以弹性伸缩为例,‘以资源为中心’的思路,是让用户设定一些规则,比如某个机器CPU使用率超过85%就要扩容,这是云1.0时代的方法。而函数计算的模式,它是根据应用层的信息去理解用户的负载,可以采用各种维度的数据,比如TPS、请求延迟,机器的负载等等,用机器学习等方式去分析数据,做出更智能的资源调度,这属于‘以应用为中心’。”
同时,“以应用为中心”也要求函数计算要同时具备工具和平台两种属性,既能让用户解决小范围的、离散的问题,也能快速构建复杂应用。“如何平衡工具和平台两种属性,是FaaS获得广泛应用的关键。”杨皓然说。
面临的挑战
虽然比较有影响力的Serverless(FaaS)产品已经发布了几年,但是现在Serverless或者FaaS技术还处在初期阶段,产品形态和边界还有很多值得探索的地方。杨皓然认为,目前Serverless在技术上有几个点需要去关注:
- 以应用为中心,更智能地去理解用户的应用场景;
- 用户体验方面,在整个生态上有很多东西需要完善,如函数协同、状态管理和工具链等等;
- 与IoT和边缘网关的无缝结合。
而另一方面,在面向使用者的时候,Serverless也遇到了很大的挑战。“用户的开发调试体验和传统方式差异较大,需要一定时间的适应。函数计算简化了用户编码的复杂度,却对架构能力提出了更高的要求。”杨皓然解释到,“FaaS为了资源的弹性,在运行环境上有诸多限制,使得以单体架构来构建的复杂系统,要迁移到Serverless的架构上比较困难。”
那么在向Serverless架构迁移时可以怎么做呢?杨皓然认为使用函数计算构建应用和微服务架构的理念是契合的,用户采用微服务架构,把业务逻辑拆解为细粒度的微服务后,一个个微服务可以实现为对应的函数。 所以说,函数计算是微服务理念的一种重要的实践方式,二者是相互促进的。因此更现实的方式是使用函数计算先解决独立的、离散的问题,或者采用微服务的方式把系统拆分为细粒度的服务,然后逐步演进到Serverless架构。
从云走向边缘
目前有一个观点是“云计算的未来将是走向边缘”,也就是说以类似于CDN的方式,将计算放到更加靠近用户的区域。杨皓然说他认同这个观点,他解释到:“未来数据的产生将无处不在,并且这些数据需要被处理、被理解,才能产生价值。”从这个角度来看,数据是需要被提炼的,在无处不在的数据中,其实有大量的噪音;而用户端到云之间有一个通道问题,如果不在贴近数据源端去做一些计算,那么整个带宽、延迟之类的成本会很不友好。
以IoT为例,杨皓然认为在IoT场景上边缘计算会特别重要。IoT大量的设备,它的数据量远远超过人产生的数据。这种场景下,如何帮助用户解决数据的收集和分析问题将非常重要,也非常有挑战。IoT/边缘环境是非常独特的,硬件架构迥异(ARM、X86、MIPS……)、通信协议众多、设备动态加入/删除、网络并不总是可用等等,面对这样的环境,需要以全新的方式构建应用。杨皓然总结了理想的边缘环境计算平台,需要具备的一些特点:
- IoT的数据处理一定会发生在边缘和云端,因此应用也一定包含边缘和云端两部分,二者需要以统一的方式构建,数据能在边缘和云端无缝同步;
- IoT 的环境是动态的,设备/网络可以很自由的加入/删除。几乎所有的协议设计都是事件驱动的方式,例如发布/订阅模式;
- IoT 在边缘上的应用,通常是轻量的,因此设备/资源/安全管理层的研发成本不能被应用逻辑的开发成本分摊掉。需要有更高的计算抽象层次,让开发专注于业务逻辑。
函数计算这样的全托管事件驱动服务比较符合上述要求,目前我们也看到业界在这上面的一些探索,相信未来FaaS在边缘环境也会发挥重要的作用。
FaaS已经在云2.0时代发挥了它的优势,至于它之后将走向何方,又将创造怎样的辉煌,我们拭目以待。