Serverless无服务应用架构纵横谈2
6年前,我写了一篇《Serverless无服务应用架构纵横谈》。
文中说到无论是公有云FaaS还是私有云FaaS,都不是云计算的未来。
因为无论是Kubernetes还是PHP、Python、Node这些传统技术栈都太重了。
那么,6年来,Serverless又有了哪些变化,是否有了转机?
从历史看,内容分发网络CDN发生在1990年代末和2000年代初,当时Internet的使用和网站正经历爆炸性的增长。
但随着用户的增多和地域的分散,页面加载时间成为网站提供商关注的焦点,网站运营商开始痴迷优化页面加载时间。
在这种背景之下,很多公司开始涌现,于是CDN行业诞生了。从网络拓扑上看,CDN正位于互联网的边缘,边缘大战从此开启。
2017年,亚马逊云科技的CDN服务CloudFront推出了Lambda@Edge,允许在全球范围内的CloudFront边缘位置执行Lambda函数。
在2008年创立时,CloudFront在全球范围内仅有14个边缘位置。如今,CloudFront在全球50个国家的100多个城市和都市圈部署了超过600个边缘位置。
正是Lambda@Edge将Serverless与Edge computing结合,引领了Serverless前进的方向。
彼时的Lambda@Edge,还没有王者之气,因为它使用的还是传统的Node技术栈。
这使得它无论是空间占用,启动速度,还是运行速度,都是十分低下的,不过边缘计算带来的好处,已经显露无疑。
无论位于全球何地访问网站,延迟时间都大幅减少。这给不少站点带来了大量流量。Lambda@Edge慢慢开始火爆。
2018 年,知名的CDN厂商Cloudflare 发布了 Cloudflare Workers (CFW)。这是一个基于 Chromium V8引擎的 FaaS 平台。Cloudflare Workers将冷启动时间减少了100倍,进入到毫秒阶段。并将内存使用量减少了10倍,从而可以更有效地利用硬件资源。
正是Cloudflare Workers的出色表现,将Serverless的长处充分展示出来,从而迎来了Serverless的迅猛增长,而Cloudflare也成功从CDN厂商转型为边缘云计算的头部玩家。
2020年,一家于2011年3月才成立的CDN厂商Fastly, 内测了其边缘计算产品Compute@Edge,有约 60 个客户参与 Beta 测试,并在 2021 年正式推向市场。
Fastly没有依赖现有技术来进行无服务器计算,而是决定全心投入WebAssembly,并构建了自己的Lucet编译器和运行时,对性能、安全性和紧凑性进行了优化。
WebAssembly 的前身是 Mozilla 2010年 创建的 Emscripten 项目。2018 年 7 月 WebAssembly 1.0 草案正式发布,在 2019 年 12 月正式成为 W3C 国际标准,成为与 HTML、CSS 和 JavaScript 并列的第四个前端技术。
Fastly冷启动时间完全进入微秒级别--官方宣称为35微秒。这至少比V8引擎快100倍,后者需要3-5毫秒才能启动(3,000到5,000微秒)。同样,由于Lucet仅包含运行已编译的汇编代码所需的代码模块,因此它只需要几千字节的内存。这大约是V8引擎使用的3MB的千分之一。
Fastly公司开源了他们的 Lucet 项目。而这个项目最终孵化了wasmtime。
2017至2021年,4年时间,经过两次指数级性能提升,Serverless启动从秒级进入到微秒级。不仅制造了两家现象级厂商,也彻底激活了Serverless市场。
而在2019 年,Docker 创始人 Solomon Hykes 发布了一条推文,他说如果 2008 年就诞生 WebAssembly 和 WASI 的话,Docker 就没有必要诞生了。
这也就表明,最主流的容器技术已经从Docker和Kubernetes,转向了WebAssembly,它比原生容器更轻量,更容易控制,跨平台特性也更好。
事实上,WebAssembly不仅替代了Docker,还替代了Java跨平台的支柱地位,也是后者近年来占比大幅退步的根本原因。
CNCF 成立于 2015 年 12 月,它是 Linux 基金会的一部分。在成立之初,CNCF 得到了 Google 和 SoundCloud 的支持,这两家公司分别捐赠了著名的 Kubernetes 以及 Prometheus,在当时,一并作为会员加入 CNCF 的企业还有:Cisco、CoreOS、Docker、Google、华为、IBM、Intel 和 Redhat 等。
从成立时间看,彼时正在流行Kubernetes ;从成员看,都是传统云计算的大型基础软硬件厂商;从内容看,CNCF定义了云原生:容器化、微服务、可编排。
从这些可以看出,云原生就是将计算机云看成一台实体电脑,抹平硬件和操作系统的差异,并方便运行程序的基础软硬件设施。
CNCF的出身决定了它更强调治理,将WebAssembly做为Docker的替代品。
由 Mozilla、英特尔、RedHat 和 Fastly 公司宣布成立字节码联盟(Bytecode Alliance)。Bytecode Alliance 是一个推动 WebAssembly 标准化的组织,该组织正在推动标准化的 WASI(WebAssembly System Interface),使 WebAssembly 能够安全地访问文件、网络和内存等系统资源,让WebAssembly 运行环境从浏览器转向服务器。
BA的出身决定了,它更强调WebAssembly的多样性,在更多的领域发挥作用。
主要有四大平台。
https://github.com/WasmEdge/WasmEdge
WasmEdge 可以说是目前最受关注的 WebAssembly 虚拟机实现,因为它不仅仅是 CNCF 推荐的 WASM 虚拟机,更是 Docker 内置的 WebAssembly 虚拟机。WasmEdge 是由美国的袁钧涛(Michael Juntao Yuan)发起,是由 CNCF 托管的云原生 WebAssembly runtime。它广泛应用于边缘计算、汽车、Jamstack、Serverless、SaaS、服务网格,乃至区块链应用。WasmEdge 可以进行 AOT (提前编译)编译器优化,是当今市场上最快的 WebAssembly runtime 之一。可以预计,随着 Docker Wasm 的普及,WasmEdge 将成为最流行的 WASM 虚拟机实现之一。
https://github.com/bytecodealliance/wasmtime
2022 年 9 月份,历经三年开发,Bytecode Alliance(字节码联盟)宣布 WebAssembly runtime —— Wasmtime 1.0 正式发布,并可用于生产环境。
wasmtime 使用 Rust 语言开发完成,并提供了 C/C++、Python、.NET、Go 等语言接口。
https://github.com/WAVM/WAVM
wasm-micro-runtime 也简称为 WAMR,与 wasmtime 一样是隶属于 Bytecode Alliance 的开源 WebAssembly 引擎项目,适用于嵌入式平台、各类 IoT 设备、智能合约和云原生等场景。名字中的 micro 也正是它的特点之一: WAMR 的二进制产物很轻量,纯 AOT 配置的产物体积只有约 50KB,非常适合资源受限的宿主。
https://github.com/wasmerio/wasmer
Wasmer 是支持 WASI 和 Emscripten 的通用 WebAssembly 运行时,提供基于 WebAssembly 的超轻量级容器,专注于支持在任何平台上运行 WASM 代码,从桌面端到云端、以及 IoT 设备,并且能嵌入在任何编程语言中。
绝大多数的编程语言,都已经支持WebAssembly。
Rust、C/C++、Zig这种直接编译输出的语言无需任何依赖;
Kotlin、Swift、Go这种带有GC的语言需要运行时代码或者依赖Wasm-gc;
.net与Java这种重运行时的语言需要托管运行时;
JavaScript、Python、Ruby这些脚本语言需要虚拟机运行程序;
凹语言,Moonbit这些为WebAssembly而生的语言最没有负担。
主流的云计算厂商还在传统的云计算模式中(支持Java、Python、Node.js、GO、C#等)。得益于技术提升,无服务成本正在大幅下降中。
Cloudflare、Fastly、Vercel、Netlify、Akamai、Limelight 等公司都支持通过其边缘运行时部署 WebAssembly 功能。
Amazon CloudFront 是一种内容分发网络 (CDN) 服务,旨在获得优异性能、安全性和开发人员便利性。
Azure Functions 为 C#、JavaScript、F#、Java 和 Python 等语言提供了不同级别的支持。Azure Functions 使用计划根据每秒资源使用和执行次数计费。消费计划定价包括每月免费授予的 1 百万个请求和每个订阅每月 400,000 GB-s 的资源消耗,包含在订阅中所有函数应用之间的即用即付定价中。Azure Functions 高级计划提供增强的性能,并根据高级功能消耗的 vCPU 和 GB 数量按秒计费。
函数计算(Function Compute)是一个事件驱动的全托管 Serverless 计算服务,您无需管理服务器等基础设施,只需编写代码并上传,函数计算会为您准备好计算资源,并以弹性、可靠的方式运行您的代码。 函数计算3.0全新发布,降价幅度最高达93%。
同时提供边缘容器:容器服务 Edge 版 ACK Edge
函数工作流(FunctionGraph)是一项基于事件驱动的函数托管计算服务。通过函数工作流,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。此外,按函数实际执行资源计费,不执行不产生费用。函数前100万次/月调用免费。
同时提供边缘容器:智能边缘平台 IEF(Intelligent EdgeFabric)
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
新用户前三个月将获得更多用量的免费额度,第四个月开始不再享受免费额度,同时从第四个月开始,系统每月会自动发放基础套餐额度(调用次数50万次、资源使用量10万GBs、外网出流量2GB)并扣除基础套餐费用12.8元。
同时提供边缘容器:腾讯云边缘容器服务(Tencent Kuberentes Service for Edge)
Cloudflare 成立于 2009 年,是一家主流网站安全管理、云内容交付网络(CDN)厂商。
新锐CDN厂商 Fastly。开源了wasmtime
Vercel是一个新锐托管平台,主要用于托管、构建和部署静态网站和无服务应用程序,旗下产品有 Next.js。
Netlify是一个新锐托管平台,与Vercel非常相似。
Akamai是主流的网站安全管理与CDN厂商,Cloudflare的主要对手。
Edgio是Limelight Networks在2022年收购Edgecast Networks之后成立的公司,也是主流的CDN厂商。