写点什么

FaaS 如何在云 2.0 时代发挥优势,又将走向何方?

  • 2018 年 1 月 08 日
  • 本文字数:3984 字

    阅读完需:约 13 分钟

自 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 时代发挥了它的优势,至于它之后将走向何方,又将创造怎样的辉煌,我们拭目以待。

2018 年 1 月 08 日 17:311828

评论

发布
暂无评论
发现更多内容

月薪60k的Java开发在阿里是什么级别?对技术能力有哪些要求?

Java 程序员 后端

服了!阿里资深架构师发布SpringCloud笔记,在GitHub标星已达81

Java 程序员 后端

数据结构系列第六部分:排序,Github爆火的《高并发秒杀顶级教程》

Java 程序员 后端

新人问一般都用哪些 Linux 命令,我把这个扔了过去,linux基础及应用教程课后答案

Java 程序员 后端

最近被安排搞搜索接口优化,压测了4次,才勉强达到要求

Java 程序员 后端

本科毕业斩获字节offer的我做了什么准备?大厂面试经验试题分享

Java 程序员 后端

推荐一款技术人必备的接口测试神器:Apifox,不愧是大佬

Java 程序员 后端

数据结构的栈和队列(这不进来看一看),计算机java语言入门

Java 程序员 后端

是什么Java面试题PDF被Git全面封杀?刷完这套题已经拿完9个Offer!

Java 程序员 后端

极速体验docker容器健康,高并发分布式系统架构

Java 程序员 后端

推荐这款牛掰的 API 敏捷开发工具,java程序设计教程课后题答案

Java 程序员 后端

数据库索引的原理,springcloud视频百度云

Java 程序员 后端

有个厉害的程序员老婆是什么体验?,mysql性能优化面试题

Java 程序员 后端

提升开发效率N倍的20+命令行神器,赶紧收藏了,mybatis原理图

Java 程序员 后端

数据源的概念是什么?Springcloud+Mybatis如何使用多数据源

Java 程序员 后端

最新基准测试:Kafka、Pulsar-和-RabbitMQ-哪个最快,阿里Java笔试题目

Java 程序员 后端

Go channel,面试官会这样问

Rayjun

channel Go 语言

数论 - 约数基础 【 试除法求所有约数 + 约数个数和约数之和

Java 程序员 后端

斯坦福高效睡眠法-读书笔记,这可能是目前最全的

Java 程序员 后端

是什么让普通的链表也能达到二分查找的效率,你知道吗?

Java 程序员 后端

来自北京大学NOIP金牌选手yxc的常用代码模板3——搜索与图论

Java 程序员 后端

如何用内网渗透突破安全策略

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

来自阿里大牛20000字总结-+-40张图文详解,我就不信你还参透不了并发编程

Java 程序员 后端

数据库ACID四大特性到底为了啥,一文带你看通透,java支付宝支付接口教程

Java 程序员 后端

无论你是什么职业,这篇职场生存法则都是你必备的,java微服务架构技术

Java 程序员 后端

最新版SpringBoot开发实战:阿里技术官从基础到项目综合实战pdf

Java 程序员 后端

本科毕业斩获字节offer的我做了什么准备?大厂面试经验试题分享(1)

Java 程序员 后端

来自北京大学NOIP金牌选手yxc的常用代码模板4——数学知识

Java 程序员 后端

数据库中间件MyCat实战笔记(第一步),arm架构linux系统

Java 程序员 后端

普通本科,毕业六年,复盘一个月,mybatis一级缓存和二级缓存面试题

Java 程序员 后端

普通程序员就不能有拥有架构师光环?想要建立架构思维,这份京东架构技术精髓一定不能错过

Java 程序员 后端

FaaS如何在云2.0时代发挥优势,又将走向何方?-InfoQ