Serverless无服务应用架构纵横谈2:边缘计算激战正酣
Serverless无服务应用架构纵横谈2
前言
6年前,我写了一篇《Serverless无服务应用架构纵横谈》。
文中说到无论是公有云FaaS还是私有云FaaS,都不是云计算的未来。
因为无论是Kubernetes还是PHP、Python、Node这些传统技术栈都太重了。
那么,6年来,Serverless又有了哪些变化,是否有了转机?
边缘战史
内容分发网络:EdgeComputing1.0
从历史看,内容分发网络CDN发生在1990年代末和2000年代初,当时Internet的使用和网站正经历爆炸性的增长。
但随着用户的增多和地域的分散,页面加载时间成为网站提供商关注的焦点,网站运营商开始痴迷优化页面加载时间。
在这种背景之下,很多公司开始涌现,于是CDN行业诞生了。从网络拓扑上看,CDN正位于互联网的边缘,边缘大战从此开启。
边缘Serverless:EdgeComputing2.0
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厂商转型为边缘云计算的头部玩家。
边缘云原生:EdgeComputing3.0
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(云原生计算基金会)
CNCF 成立于 2015 年 12 月,它是 Linux 基金会的一部分。在成立之初,CNCF 得到了 Google 和 SoundCloud 的支持,这两家公司分别捐赠了著名的 Kubernetes 以及 Prometheus,在当时,一并作为会员加入 CNCF 的企业还有:Cisco、CoreOS、Docker、Google、华为、IBM、Intel 和 Redhat 等。
从成立时间看,彼时正在流行Kubernetes ;从成员看,都是传统云计算的大型基础软硬件厂商;从内容看,CNCF定义了云原生:容器化、微服务、可编排。
从这些可以看出,云原生就是将计算机云看成一台实体电脑,抹平硬件和操作系统的差异,并方便运行程序的基础软硬件设施。
CNCF的出身决定了它更强调治理,将WebAssembly做为Docker的替代品。
Bytecode Alliance(字节码联盟)
由 Mozilla、英特尔、RedHat 和 Fastly 公司宣布成立字节码联盟(Bytecode Alliance)。Bytecode Alliance 是一个推动 WebAssembly 标准化的组织,该组织正在推动标准化的 WASI(WebAssembly System Interface),使 WebAssembly 能够安全地访问文件、网络和内存等系统资源,让WebAssembly 运行环境从浏览器转向服务器。
BA的出身决定了,它更强调WebAssembly的多样性,在更多的领域发挥作用。
运行平台
主要有四大平台。
WasmEdge
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 虚拟机实现之一。
wasmtime
https://github.com/bytecodealliance/wasmtime
2022 年 9 月份,历经三年开发,Bytecode Alliance(字节码联盟)宣布 WebAssembly runtime —— Wasmtime 1.0 正式发布,并可用于生产环境。
wasmtime 使用 Rust 语言开发完成,并提供了 C/C++、Python、.NET、Go 等语言接口。
WAMR
https://github.com/WAVM/WAVM
wasm-micro-runtime 也简称为 WAMR,与 wasmtime 一样是隶属于 Bytecode Alliance 的开源 WebAssembly 引擎项目,适用于嵌入式平台、各类 IoT 设备、智能合约和云原生等场景。名字中的 micro 也正是它的特点之一: WAMR 的二进制产物很轻量,纯 AOT 配置的产物体积只有约 50KB,非常适合资源受限的宿主。
wasmer
https://github.com/wasmerio/wasmer
Wasmer 是支持 WASI 和 Emscripten 的通用 WebAssembly 运行时,提供基于 WebAssembly 的超轻量级容器,专注于支持在任何平台上运行 WASM 代码,从桌面端到云端、以及 IoT 设备,并且能嵌入在任何编程语言中。
开发语言
绝大多数的编程语言,都已经支持WebAssembly。
编译直出型语言
Rust、C/C++、Zig这种直接编译输出的语言无需任何依赖;
- Emscripten,这是一个将 C/C++ 代码转换为 WebAssembly 模块的LLVM工具链。
- 2016 年 Rust 1.14发布,开始支持 WASM
- 2019年发布的Zig 0.5.0已开始支持WebAssembly和WASI(Web Assembly System Interface)
运行时GC型语言
Kotlin、Swift、Go这种带有GC的语言需要运行时代码或者依赖Wasm-gc;
- 2021 年,WebAssembly 开始支持 GC(垃圾回收器)
- Go 1.21添加了一个新的端口,通过新的GOOS值wasip1来定位WASI预览1系统调用API。该端口建立在Go 1.11引入的Wasm端口的基础上。
- Kotlin 1.8.20 版本,包括一项名为“Kotlin/Wasm”的实验性功能,明确将 WebAssembly 设为编译目标。
- 新开源项目SwiftWasm旨在将WebAssembly后端集成到官方Swift编译器中,该项目仍处于最早阶段。
托管运行时型语言
.net与Java这种重运行时的语言需要托管运行时;
- Blazor是一个使用 .NET框架和C#编程语言Razor语法构建Web应用程序的UI框架
- 静态编译组合成wasm的代码。这些代码包括Mono C 运行时平台和开发者的.NET代码
- TeaVM 现已支持将 Java 字节码编译成 WebAssembly
虚拟机依赖型语言
JavaScript、Python、Ruby这些脚本语言需要虚拟机运行程序;
- JavaScript 用户,直接通过浏览器内置的 WebAssembly 模块,浏览器环境之外的 WASM +JS虚拟机
- Ruby 3.2 也增加了基于 WASI 的 WebAssembly 支持。使得 CRuby 二进制内容可用于浏览器、以及 WASI 环境。
- Python 3.11 对 wasm32-emscripten 和 wasm32-wasi 提供了支持,从而也实现了在浏览器执行 Python 的梦想。
.
新型专用型语言
凹语言,Moonbit这些为WebAssembly而生的语言最没有负担。
- 2022年7月,国内 Gopher 也发起了针对 WebAssembly 平台的凹语言。
- MoonBit 负责人张宏波称,MoonBit 编译器预计在 2024 年第二季度末达到 Beta 状态,到时将会正式公开。
边缘战场
云原生
云原生的定义很复杂,原因是利益牵涉方太多,以我们这些纯路人的视角来定义,反而清楚得多。
云原生 = 以Docker为代表的容器技术 + 以K8S为代表的编排工具 + 以Wasm为代表的原生应用平台
最终,所有的东西都会被Wasm替代,容器技术大幅简化变成专用Linux、K8S也注定会被WASM编排工具替代。
Wasm会统一云原生生态,过程可能还要持续多年。
Serverless决战之地
Serverless 终于等到了它的理想战场,只有在数量庞大的边缘节点,无服务这种不运行不占用资源的特点才得到充分利用。
试想一下,在全球几百个边缘节点各开一个Docker,是单一服务器资源占用的数百倍;
而在全球几百个边缘节点运行Serverless 的次数,与单一Serverless 服务器的资源占用相同。
所以,前言中问题的答案很明显了,边缘云原生Serverless 就是未来,而且未来已来。
还找不着北的国产大厂们,不要犹豫了。
云计算厂商
主流的云计算厂商还在传统的云计算模式中(支持Java、Python、Node.js、GO、C#等)。得益于技术提升,无服务成本正在大幅下降中。
Cloudflare、Fastly、Vercel、Netlify、Akamai、Limelight 等公司都支持通过其边缘运行时部署 WebAssembly 功能。
亚马逊云计算Amazon AWS
Amazon CloudFront 是一种内容分发网络 (CDN) 服务,旨在获得优异性能、安全性和开发人员便利性。
微软云计算Microsoft Azure
Azure Functions 为 C#、JavaScript、F#、Java 和 Python 等语言提供了不同级别的支持。Azure Functions 使用计划根据每秒资源使用和执行次数计费。消费计划定价包括每月免费授予的 1 百万个请求和每个订阅每月 400,000 GB-s 的资源消耗,包含在订阅中所有函数应用之间的即用即付定价中。Azure Functions 高级计划提供增强的性能,并根据高级功能消耗的 vCPU 和 GB 数量按秒计费。
阿里云Alibaba Cloud
函数计算(Function Compute)是一个事件驱动的全托管 Serverless 计算服务,您无需管理服务器等基础设施,只需编写代码并上传,函数计算会为您准备好计算资源,并以弹性、可靠的方式运行您的代码。 函数计算3.0全新发布,降价幅度最高达93%。
同时提供边缘容器:容器服务 Edge 版 ACK Edge
华为云Huawei Cloud
函数工作流(FunctionGraph)是一项基于事件驱动的函数托管计算服务。通过函数工作流,只需编写业务函数代码并设置运行的条件,无需配置和管理服务器等基础设施,函数以弹性、免运维、高可靠的方式运行。此外,按函数实际执行资源计费,不执行不产生费用。函数前100万次/月调用免费。
同时提供边缘容器:智能边缘平台 IEF(Intelligent EdgeFabric)
腾讯云Tencent Cloud
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
新用户前三个月将获得更多用量的免费额度,第四个月开始不再享受免费额度,同时从第四个月开始,系统每月会自动发放基础套餐额度(调用次数50万次、资源使用量10万GBs、外网出流量2GB)并扣除基础套餐费用12.8元。
同时提供边缘容器:腾讯云边缘容器服务(Tencent Kuberentes Service for Edge)
Cloudflare Workers
Cloudflare 成立于 2009 年,是一家主流网站安全管理、云内容交付网络(CDN)厂商。
The Fastly Edge Cloud Platform
新锐CDN厂商 Fastly。开源了wasmtime
Vercel
Vercel是一个新锐托管平台,主要用于托管、构建和部署静态网站和无服务应用程序,旗下产品有 Next.js。
Netlify Edge Functions
Netlify是一个新锐托管平台,与Vercel非常相似。
Akamai EdgeWorkers
Akamai是主流的网站安全管理与CDN厂商,Cloudflare的主要对手。
Limelight Edgio Sites
Edgio是Limelight Networks在2022年收购Edgecast Networks之后成立的公司,也是主流的CDN厂商。