一文详解从云计算到 Serverless
一、 从云计算到 Serverless
自世界上第一台通用计算机 ENIAC(图左)诞生以来,计算机科学与技术的发展就从未停止过前进的脚步。2003 年-2006 年,谷歌先后发表了这三篇非常经典的论文(图右),指明了 HDFS(分布式文件系统)、MapReduce(并行计算)和 HBase(分布式数据库)的技术基础及未来机会,为云计算发展方向奠定了基础。
所以说从。埃尼阿克到谷歌的 3 篇经典论文,计算机科学与技术的发展是在不断的前进。而到了云计算时代,可以说计算机科学与技术的发展是在飞速的前进。
云计算的概念
对于云计算的界定,学术界的和工业界有不同的理解,回顾下云计算的发展历程:
1、2006 年,谷歌首席执行官在搜索引擎大会上首次提出云计算的概念;同年亚马逊将其弹性计算能力作为云服务器进行售卖,标志着云计算这种新兴商业模式正式诞生;2、2008 年,微软发布云计算平台 Windows Azure,尝试将技术和服务托管化、线上化;3、2009 年,《伯克利云计算白皮书》发表,文中明确指出云计算的定义:云计算包含互联网上的应用服务以及在数据中心提供这些服务的软硬件设施。
明确定义后,伯克利提出了关于云计算展望,同时也指出云计算所面临的 10 个问题,如服务的可用性,数据的丢失或者数据安全性和可审计性等。
二、Serverless 概念
定义
Serverless 翻译成中文是无服务器,所谓的无服务器并非是说不需要依靠服务器等资源,**而是说开发者再也不用过多考虑服务器的问题,可以更专注在产品代码上,同时计算资源也开始作为服务出现,**而不是作为服务器的概念出现,**Serverless 是一种构建和管理基于微服务架构的完整流程,允许用户在服务部署级别而不是服务器部署级别来管理用户的应用部署。**与传统架构的不同之处在于,它完全由第三方管理,由事件触发,存在于无状态(Stateless),暂存(可能只存在于一次调用的过程中)在计算容器内,Serverless 部署应用无须涉及更多的基础设施建设,就可以基本实现自动构建、部署和启动服务。
Serverless 架构
左边是传统意义上来说比较常见的 web 应用的架构, 它是由客户端、服务端、数据库等元素组成。
以往做此类项目时,开发者需要在服务端做很多操作,如购买服务器、考虑购买数量、宽带、操作系统、部署在哪几个区、环境、软件等等问题。随后还需要人为对这台服务器的健康要实时去监控,不断的去感知。
而在 Serverless 架构下,开发者只需要关心我们的业务代码即可,在项目整个的开发、上线、维护过程中,用户并不需要关注服务器层面的维护,也无需为流量的波峰波谷进行运维资源的投入,这一部分将由云厂商来负责;同时在 Serverless 架构下,用户也无需为闲置资源进行额外支出。
Serverless 优点
Serverless 架构拥有零服务器运维和空闲时无计算成本等特点;其交付心智可以体现为将复杂留给云厂商,把便捷带给更多开发者。综上所述 Serverless 的优势可以体现在如下:
1)降本提效
云厂商为使用者提供服务器的管理和运维工作,为使用者提供数据库、对象存储等 Baas 服务,让用户将更多的注意力放在自身的业务逻辑上,提升研发效率,缩小项目的创新周期,同时 Serverless 的使用者不用更多的担心自身的服务器运维,基础设施的运维等工作,更不用为这部分有额外的费用支出,无需承担更多的运维工作成本等;Serverless 架构提供了较为完善、全面的按量付费模型,使用者只需要按照自己实际使用的资源量付费即可;Serverless 架构在这一层面有较为明确的优势。
降低运维成本
降低人力成本
提高研发效率
降低创新周期
按量付费、降低支出成本
2)安全、方便、可靠
把更专业的事情交给更专业的人去做,Serverless 架构将更多服务器运维、安全相关的事情交给云厂商来做,大规模提升项目整体的安全性;同时,Serverless 架构明显比其它架构更简单,因为更多的 Baas 服务都是云厂商提供的,使用者将会管理更少的组件,这意味着 Serverless 的使用者可以更简单更方便的管理项目;同时 Serverless 架构拥有着弹性能力,即自动伸缩的能力,该能力可以让项目在流量增加的时候,自动进行扩容,在流量降低的时候,自动进行缩容,进而保证整个业务的安全、稳定。专业团队为用户保障安全,保障性能,这使得 Serverless 架构:
安全风险更低
资源开销更小
符合“绿色”计算思想
更加方便管理
弹性伸缩,服务更可靠
总体来说,托管给云厂商之后呢,不仅可以大规模的提升项目整体的安全性和稳定性,Serverless 架构也是明显比其他架构更为简单的。
面临挑战
Serverless 架构虽然出现多年但是真正步入“元年”并得以快速发展的时间其实很短暂;因此 Serverless 架构拥虽有诸多优点,但是也面临一些困难和挑战,包括但不限于冷启动问题严重、开发工具不完善、厂商锁定等现象。但是近些年 Serverless 架构热度持续上升,人们对它寄予厚望,各个厂商也加大投入,相信目前的问题都是暂时的,Serverless 架构会朝着更好用、更易用的方向不断演进。
Serverless 架构为使用者提供全新的编程范式的同时,当用户在享受 Serverless 带来的第一波技术红利的时候, Serverless 的缺点也逐渐地暴露了出来,例如函数的冷启动问题,就是如今颇为严峻且备受关注的问题。由于 Serverless 架构具有弹性伸缩的能力, Serverless 服务的供应商会根据用户服务的流量波动进行实例的增加或缩减,其示意图如图所示。
以阿里云函数计算为例,当系统接收到第一个触发函数的事件时,它将启动一个容器来运行代码。如果此时收到了新的事件,而第一个容器仍在处理上一个事件,平台将启动第二个代码实例来处理第二个事件, Serverless 架构的这种自动的零管理水平缩放,将持续到有足够的代码实例来处理所有的工作负载为止。当然,不仅仅是并发情况下会比较容易触发函数冷启动,在函数的前后两次触发时间间隔超过了实例释放时间的阈值时,也会触发函数的冷启动,如下图所示。
然而这里就涉及一个问题,当新的请求或者说是事件到来时,在广义上可能出现以下两种情况:
存在空闲且可以直接复用的实例:热启动。
不存在空闲且可以直接复用的实例:冷启动。
在本地执行一个函数,通常情况下是环境都已经准备妥当,每次执行只需要执行函数对应的方法即可,但是 Serverless 架构下并不是,本地与 FaS 的函数调用区别示意图如图所示。
三、典型应用场景
Serverless 架构自提出到现在经过若干年的发展,已经在很多领域中有着非常多的最佳实践,CNcf 总结出一些 Serverless 架构所适合的场景。
1、实时文件处理
视频应用、社交应用等场景下,用户上传的图片、音视频往往总量大、频率高,对处理系统的实时性和并发能力都有较高的要求。例如,对于用户上传的图片,可以使用多个函数对其分别处理,包括图片的压缩、格式转换等,以满足不同场景下的需求。
2、数据 ETL 处理
通常要对大数据进行处理,需要搭建 Hadoop 或者 Spark 等相关大数据的框架,同时要有一个处理数据的集群。通过 Serverlesst 技术,只需要将获得到的数据不断的存储到对象存储,并且通过对象存储相关触发器触发数据拆分函数进行相关数据或者任务的拆分,然后再调用相关处理函数,处理完成之后,存储到云数据库中。函数计算近乎无限扩容的能力可以使用户轻松地进行大容量数据的计算。利用 Serverless 架构可以对源数据并发执行多个 mapper 和 reducer 函数,在短时间内完成工作,整个流程可以简化为以下图中所示;相比传统工作方式,使用 Serverless 架构更能避免资源的闲置浪费,从而节省成本。
3、实时数据处理
通过 Serverless 架构所支持的丰富的事件源,通过事件触发机制,可以通过几行代码和简单的配置对数据进行实时处理,例如:对对象存储压缩包进行解压、对日志或数据库中的数据进行清洗、对 MNS 消息进行自定义消费等。
4、机器学习(AI 推理预测)
在 AI 模型完成训练后,对外提供推理服务时,可以使用 Serverless 架构,通过将数据模型包装在调用函数中,在实际用户请求到达时再运行代码。相对于传统的推理预测,这样做的好处是无论是函数模块还是后端的 GPU 服务器,以及对接的其他相关的机器学习服务,都是可以进行按量付费以及自动伸缩,从而保证性能的同时也确保了服务的稳定。
5、Web 应用/移动应用
后端 Serverless 架构和云厂商所提供的其他云产品进行结合,开发者能够构建可弹性扩展的移动或 Web 应用程序,轻松创建丰富的无服务器后端,而且这些程序可在多个数据中心高可用运行,无需在可扩展性、备份冗余方面执行任何管理工作。
6、音视频转码
在视频应用、社交应用等场景下,用户会上传一些视频,通常上传的视频会进行一些转码,包括转换为不同的清晰度。 Serverless 技术与对象存储相关产品组合后,可利用对象存储相关触发器,即上传者将视频上传到对象存储中,触发 Serverless 架构的计算平台(FaaS 平台)对其进行处理,处理之后将其重新存储到对象存储中,这个时候其他用户就可以选择编码后的视频进行播放,还可以选择不同的清晰度,如图所示。
综上所述, Serverless 架构的典型应用场景更多是由 Serverless 架构的特点决定的。当然,随着时间的不断推移, Serverless 架构也在不断演进,特点会更加突出,劣势会被弥补。
四、Serverless 产品介绍
1、公有云产品自 Serverless 概念被提出,其从不为人知到引人注目经历了数年,Serverless 架构也在飞速发展,在 Serverless 架构中,计算机服务通常由 Faas 平台提供。AWS Lanmbda、Google Cloud Functions、阿里云函数计算等都是有代表性的工业化产品。
CNCF 列出的 Faas 平台
2、阿里云 ServerlessServerless 架构对底层的技术基础要求很高,而从图中可以看出阿里云关于 Serverless 架构的整体形态是十分完善的,并且一直在自建自研的路上不断精进。阿里云 Serverless 产品在阿里巴巴经济体内部已经实现落地,在淘宝、支付宝、闲鱼、飞猪、钉钉,包括在语雀都有很好的体现。
函数计算是国内生态最完整、功能最丰富的 Serverless 产品,开发者一步上云、一键 Serverless 化将成为现实。上图是阿里云 Serverless 从产品维度的一些分析,下图则表达了 Serverless 从功能或者架构,底层基础设施,和在计算层面所展现出来的典型业务能力。例如说弹性伸缩、负载均衡、流量控制、高可用部署、版本灰度故障恢复等。像在运行时的容器镜像服务,阿里云在去年便已推出,随后 AWS 、腾讯等,也都相继推出容器镜像。图中诠释了阿里云 Serverless 是如何通过底层,逐渐的向上层建设,让开发者可以更简单、更方便的使用 Serverless 的全过程。
3、开源产品不仅仅在工业界有诸多厂商不断为 Serverless 架构努力,在开源领域也有诸多优秀的 Serverless 项目。包括 OpenWhisk、Fission、Knative 以及 Kubeless 等在内的众多优秀的开源 Faas 平台都已得到 CNCF 的认可。
评论