2009 年,加州大学伯克利分校公布了一篇论文《The Berkeley View on Cloud Computing》,正确预测了接下来十年的云计算演进和遍及。
2019 年,伯克利又公布了一篇有着雷同命名格调的论文《A Berkeley View on Serverless Computing》,再次预言将来“无服务器计算将会倒退成为将来云计算的次要模式”。无服务器被寄予厚望,但同时也存在一些争议。
现在,间隔 2014 年 Amazon Lambda 首次公布已有七年工夫,咱们回头去看,当初那些无服务器的承诺都能兑现了吗?
无服务器的承诺和争议
“无服务器”术语最早呈现在 2012 年左右的一篇文章里,作者 Ken Fromm 对它的解释是:
“无服务器”一词并不意味着不再波及服务器,它只是意味着开发人员不再须要思考那么多的物理容量或其余基础设施资源管理责任。通过打消后端基础设施的复杂性,无服务器让开发人员将注意力从服务器级别转移到工作级别。
尽管不少技术先知认为无服务器架构是“一项重大翻新并将很快流行起来”,但这个概念在提出过后并没有失去很好的反应。
真正让无服务器失去宽泛关注的事件是亚马逊云科技于 2014 年推出 Amazon Lambda 服务。之后,随着谷歌和微软等企业的服务进入市场,“无服务器”才逐步成为行业“热词”。
相较于“传统服务”,无服务器计算的劣势次要有几点:
- 更好的主动扩缩容形式,实践上能应答突发的从“零”到“无穷大”的需要峰值。无关扩大的决定由云提供商按需提供,开发人员不再须要编写主动扩大策略或定义机器级别资源(CPU、内存等)的应用规定。
- 传统云计算依照预留的资源免费,而无服务器依照函数执行工夫免费。这也意味着更加细粒度的治理形式。在无服务器框架上应用资源只需为理论运行工夫付费。这与传统云计算免费形式造成了鲜明对比,后者用户须要为有闲置工夫的计算机付费。
- 作为云计算的下一个迭代,无服务器计算让开发者能够更关注于构建产品中的利用,而不须要治理和保护底层堆栈,且比传统云计算更为便宜,因而无服务器被誉为“开发新利用最疾速的形式,同时也是总成本最低的形式”。
“伯克利观点”甚至认为,无服务器计算提供了一个接口,极大地简化了云编程,这种转变相似于“从汇编语言迁徙到高级编程语言”。
从诞生开始,“无服务器”就被寄托了厚望,但在倒退过程中也免不了会存在争议,之前波及到的一些问题有:
- 编程语言受限。大多数无服务器平台仅反对运行特定语言编写的利用。
- 供应商锁定危险。在“函数”的编写、部署和治理形式上,简直不存在跨平台的规范。这意味着将“函数”从一个特定于供应商的平台迁徙到另一个平台十分耗时吃力。
- 性能问题如冷启动。如果某个“函数”之前未在特定平台上运行过,或是在一段时间内未运行,那么就须要消耗一些工夫做初始化。
2019 年被认为是无服务器有重大倒退的一年。在这一年的年底,亚马逊云科技公布了 Amazon Lambda 的“预置并发(Provisioned Concurrency)”性能,它容许亚马逊云科技无服务器计算用户使其函数放弃“已初始化并筹备好在两位数毫秒内响应”的状态,这意味着“冷启动”问题成为过来,行业达到一个成熟点。
尽管这项技术依然有较长的路要走,但随着越来越多的公司,包含亚马逊云科技、谷歌、微软在这项技术上的投资,咱们看到了无服务器采用率在持续增长。
据 Datadog 2021 年公布的无服务器状态报告,开发人员正减速采纳无服务器架构:2019 年之后 Amazon Lambda 的使用率显著减少,2021 年初,Amazon Lambda 函数的均匀每天调用频率是两年前的 3.5 倍,且半数 Amazon Web Services 新用户已采纳 Amazon Lambda。
尽管微软和谷歌的份额有所回升,但作为无服务器技术的先驱,Amazon Lambda 在采用率方面始终放弃领先地位,有一半的函数即服务(FaaS)用户在应用亚马逊云科技的服务。据 Amazon Web Services 颁布的数据显示,已有数十万家客户在用 Amazon Lambda 来构建他们的服务。
通过 Amazon Lambda 看无服务器技术的演进
Amazon Lambda 是一种事件驱动的计算引擎,亚马逊云科技在 2014 年 11 月的亚马逊云科技 re:Invent 大会上公布了该性能的预览版本。这马上引起了竞争对手的跟进,不少企业纷纷开始在云上提供相似服务,谷歌于次年 2 月公布了 Cloud Functions,IBM 也于同月公布了 Bluemix OpenWhisk,微软于次年 3 月份公布预览版 Azure Functions,等等。
在 Amazon Web Services 的产品页面上,亚马逊云科技给 Amazon Lambda 下的定义是:“用户无需预置或治理基础设施即可运行代码。只需编写代码并将其作为 .zip 文件或容器镜像上传即可。”
一个简略的用例是,西雅图时报应用无服务器技术主动调整挪动、平板电脑和桌面设施显示所需的图像大小,每当图像被上传到 Amazon Simple Storage Service (S3),就会触发 Amazon Lambda 函数调用执行调整图像大小的性能。西雅图时报仅在调整图像大小后才向 Amazon Web Services 付费。
Amazon Lambda 的要害停顿
对于要摸索无服务器技术的团队来说,理解 Amazon Lambda 至关重要。无服务器尽管不等于 Amazon Lambda,但自 2014 年公布以来,Amazon Lambda 简直已成为 Amazon Serverless 服务的代名词。实际上,Amazon Lambda 须要和其它工具一起能力造成一套残缺的无服务器架构,比方通过 Amazon API Gateway 发送 HTTP 申请,或调用 Amazon S3 存储桶、Amazon DynamoDB 表或 Amazon Kinesis 流中的资源。
在公布晚期,还只有 Amazon S3、Amazon DynamoDB 和 Amazon Kinesis 可用于 Amazon Lambda 函数。但自那之后,亚马逊云科技又逐渐为 Amazon Lambda 函数集成了许多其它服务,例如 Amazon Cognito 认证、Amazon API Gateway、Amazon SNS、Amazon SQS、Amazon CloudFormation 和 Amazon CloudWatch 等等。
在 2014 年推出时,Amazon Lambda 只反对 Node.js,2015 年底,Amazon Lambda 中增加了 Java 反对,2016 年的时候又增加了 Python 反对。到当初,Amazon Lambda 原生反对 Java、Go、PowerShell、Node.js、C#、Python 和 Ruby 代码,并提供 Runtime API,容许用户应用任何其它编程语言来编写函数。
应用 Amazon Lambda,用户除上传代码(或在 Amazon Lambda 控制台中构建代码)外,还须要抉择内存、超时工夫来创立函数。
最开始 Amazon Lambda 函数超时时长为 30 秒,起初被缩短为 5 分钟。2018 年 10 月,Amazon Web Services 将超时时长设置为了 15 分钟,从此用户能够运行工夫更长的函数,更加轻松地执行大数据分析、批量数据转换、批量事件处理和统计计算等工作。
Amazon Lambda 函数会依据配置的内存量线性调配 CPU 和其余资源。2020 年底,Amazon Lambda 函数的内存下限调整为了 10 GB,与之前相比减少了 3 倍多,这也意味着用户能够在每个执行环境中拜访多达 6 个 vCPU,能够让用户的多线程和多过程程序运行得更快。
在公布至今这七年里,Amazon Serverless 服务各方面都在不断改进:
2016 年,亚马逊云科技公布了 Amazon Step Functions,能够组合调用多个 Amazon Lambda 函数和其它 Amazon 服务,将简单的业务逻辑可视化地表白为低代码、事件驱动的工作流。
2017 年,Amazon Lambda 的默认并发数晋升到了 1000,并提供了分布式跟踪工具 X-Ray。
2018 年,亚马逊云科技公布了 Amazon Aurora Serverless v1 版本,正式宣告更简单的关系型数据库(RDBMS)也能具备 Serverless 的个性,实现了云数据库基于负载的主动启停与弹性扩大。
随着云服务的演变,亚马逊云科技相继公布了五项 Serverless 数据库服务,包含 Amazon Aurora Serverless、Amazon DynamoDB、Amazon Timestream(一种工夫序列数据库服务)、Amazon Keyspaces(兼容 Apache Cassandra 的托管数据库服务)和 Amazon QLDB(一种全托管的分类账数据库)。
目前,Amazon Aurora Serverless 已从 v1 版进化到 v2 版,Aurora Serverless v2 能够在一秒内将数据库工作负载从数百个事务扩大到数十万个事务,与为峰值负载配置容量的老本相比,最多可节俭 90% 的数据库老本。
2019 年,亚马逊云科技公布了 Amazon EventBridge,它是一种无服务器事件总线服务,作为集中式枢纽连贯到 Amazon Web Services 服务、自定义应用程序和 SaaS 应用程序,提供从事件源到指标对象(例如 Amazon Lambda 和其余 SaaS 应用程序)的实时数据流。当初 Amazon Lambda 可与 200 多种 Amazon Web Services 服务和 SaaS 应用程序相集成。
同年,亚马逊云科技还推出了 Amazon S3 Glacier Deep Archive,进一步按读写冷热水平欠缺了 S3 存储服务的智能免费品位。
2021 年 Amazon Lambda 计费性能调整为了 1ms 级别,并且还提供了容器镜像反对,以及 Amazon Graviton2 处理器反对,与基于 x86 的同类产品相比,Amazon Graviton2 性价比最高可晋升 34%。
冷启动和厂商锁定
“冷启动”的性能改善算得上是一次标志性事件。FaaS 平台初始化函数实例须要一些工夫。即便对于同一个特定的性能,不同的平台之间这种启动提早可能会有很大差别,从几毫秒到几秒不等,取决于应用的库、函数配置的算力等大量因素。以 Amazon Lambda 为例,Amazon Lambda 函数的初始化要么是“热启动”,要么是“冷启动”。“热启动”是从前一个事件中重用 Amazon Lambda 函数的实例及其宿主容器,“冷启动”须要创立一个新的容器实例,启动函数宿主过程。在思考启动提早时,“冷启动”更受关注。
亚马逊云科技在 2019 年提供了一项名为“预置并发(Provisioned Concurrency)”的重要新性能,通过让函数放弃初始化状态,从而更准确地管制启动提早。用户须要做的就是设置一个值,指定平台须要为特定性能配置多少个实例,Amazon Lambda 服务自身将确保始终有该数量的预热实例期待工作。“冷启动”无疑是无服务器技术批评者指出的最大问题,而亚马逊云科技这项性能的呈现,代表着对于“冷启动”的争议曾经完结。
除此之外,“厂商锁定”也是一个极具争议的中央。几年前,作为无服务器技术的拥护方,CoreOS 首席执行官 Alex Polvi 称 Amazon Lambda 无服务器产品“是咱们在人类历史上见过的最蹩脚的专有锁定模式之一”。而为 MongoDB 工作的 Matt Asay 撰文反驳他说,“完全避免锁定的办法是本人编写所有底层软件(事件模型、部署模型等)”。
总之,作为反对方,很多人认为“锁定”并不是一件非黑即白的事件,而是自身须要重复衡量的一种架构抉择。还有技术专家示意,能够采纳将应用程序和平台拆散的设计形式,以及标准化技术的办法最小化迁徙老本:如果应用标准化的 HTTP,那么能够应用 Amazon API Gateway 将 HTTP 申请转换为 Amazon Lambda 事件格局;如果应用标准化的 SQL,那么应用与 MySQL 兼容 Amazon Aurora Serverless,能够天然地简化数据库的迁徙门路 ……
最佳实际案例
倒退到当初,用户在哪些场景下会应用无服务器计算?实际上,每年的亚马逊云科技 re:Invent 大会都会有一些团队给大家分享实践经验,其中不乏具备代表性的案例。
在 2017 年的亚马逊云科技 re:Invent 会议上,美国电信 Verizon 的 Revvel 团队介绍了他们如何应用 Amazon Lambda 和 Amazon S3 进行视频不同格局的转码。新近团队应用的是 EC2 实例,如果视频长达 2 小时或大到几百 G,问题就变得很辣手,高清转换可能须要 4-6 个小时,而转换工作中途一旦进行或中断就意味着半途而废。所以,Revvel 团队采纳的新办法是将视频分为 5M 的小块别离存储在 Amazon S3 存储桶中,而后用 Amazon Lambda 启用上千实例并行计算,实现转码后再合并成一个残缺的视频,整个过程缩短到有余 10 分钟,费用也升高到了原来的十分之一。
在 2020 年的亚马逊云科技 re:Invent 会议上,Coca-Cola 的 Freestyle 设施翻新团队分享了他们的非接触式售卖机解决方案:应用 Amazon Lambda 和 Amazon API Gateway 构建后端托管服务,前端应用 Amazon CloudFront,从而能够在一周内推出原型,并在三个月内将 Web 应用程序从原型扩大到 10000 台机器,进而在疫情期间疾速占领市场。
在往年的亚马逊云科技 re:Invent 会议主题演讲里,Werner Vogels 博士讲述了 New World Game 多人游戏中的无服务器解决方案。
这是一款非常复杂的大规模分布式实时游戏,可解决 30 次 /s 的动作或状态,重绘和计算须要大量的 CPU 资源。它通过每 30 秒 80 万次写入将用户的状态存储在 Amazon DynamoDB 中,这样用户即便意外中断游戏也能及时复原到之前的游戏状态。同时通过日志记录用户操作,而后应用 Amazon Kinesis 传输日志事件,速度可达 2300 万事件 / 分钟,随后将事件流推送到 Amazon S3 中,再用 Amazon Athena 进行剖析解决。利用该数据流,团队可即时预测游戏用户行为和更改游戏中的策略。游戏环境中的经营,比方登录、交易、告诉等操作事件,都是通过 Amazon Lambda 无服务器计算来实现的。
无服务器在这款多人游戏中施展了十分重要的作用,但这种大型架构也对无服务器的性能提出了十分大的挑战。Amazon Lambda 达到了每分钟 1.5 亿次的调用频率,这比行业里的均匀水准高出数倍。
无服务器的将来
在今年年底,亚马逊云科技一口气推出了五款无服务器产品:
Amazon Redshift Serverless,可主动配置计算资源,应用 SQL 跨数据仓库、经营数据库和数据湖剖析结构化和非结构化数据。
Amazon EMR Serverless(预览版),是 Amazon EMR 中的一个新选项,让数据工程师和分析师可能借助开源剖析框架,例如 Apache Spark、Hive 和 Presto,在云中运行 PB 级数据分析。
Amazon MSK Serverless(公开预览版), 全新类型的 Amazon MSK 集群,齐全兼容 Apache Kafka,且无需治理 Kafka 的容量,服务会主动预置和扩大计算及存储资源。
Amazon Kinesis On-demand,用于大规模实时流数据处理,服务会主动按需扩大和缩减。
Amazon SageMaker Serverless Inference(预览版),让开发者无需配置或治理底层基础设施即可部署机器学习模型进行推理,按执行工夫和解决的数据量付费。
由此,咱们能够看到云上的 Serverless 服务越来越多,无服务器计算的能力曾经从计算、存储、数据库服务扩大到数据分析,以及机器学习的推理。以前机器学习的推理须要启动大量的资源来撑持峰值申请。如果应用 EC2 推理节点,闲暇资源会推高老本,而应用 Amazon Lambda 服务,就不须要再思考集群节点治理这些事件,服务会依据 Workload 主动预置、扩大和敞开计算容量,只为执行工夫和解决的数据量付费,相比之下能节俭很多。
Amazon Serverless 服务在一直进化的同时,计算架构也在不断改进,比方用户能够将原来的 Intel x86 处理器,通过平台提供的选项配置为 Amazon Graviton2 ARM 处理器,性能更快且能便宜 20%。有技术专家认为,平台也会朝着更智能的方向倒退,“当初须要用户改配置抉择更便宜的 ARM 处理器,将来服务齐全能够做到主动抉择计算平台。”
作为云计算的一种演进形式,无服务器的愿景必定会扭转咱们对编写软件的认识。以前素来没有一种办法能够像云计算这样思考如何应用数百万个处理器内核和 PB 级内存进行设计,而当初无服务器曾经进入到通用和可用的阶段,用户无需思考如何治理这些资源。
就像 Werner Vogels 博士在主题演讲里讲的那样:“如果不必云计算,这些大型架构根本无法实现。所以当初,用属于 21 世纪的架构去随心构建你幻想的零碎吧(Build systems the way you always wanted to,but never could)。”
参考资料:
https://www.datadoghq.com/sta…
https://readwrite.com/2012/10…
https://www.youtube.com/watch…
https://www.serverless.com//g…
https://aws.amazon.com/cn/blo…
https://www.techrepublic.com/…
https://www.thoughtworks.com/…
https://martinfowler.com/arti…
https://aws.amazon.com/cn/lam…
美国电信 Verizon 案例:https://www.youtube.com/watch…
Coca-Cola Freestyle 案例:https://aws.amazon.com/cn/sol…
New World Game 多人游戏案例:https://www.youtube.com/watch…