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(云原生计算基金会)

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这种直接编译输出的语言无需任何依赖;

  • 2016 年 Rust 1.14发布,开始支持 WASM

Kotlin、Swift、Go这种带有GC的语言需要运行时代码或者依赖Wasm-gc;

  • 2021 年,WebAssembly 开始支持 GC(垃圾回收器)
  • Kotlin 1.8.20 版本,包括一项名为“Kotlin/Wasm”的实验性功能,明确将 WebAssembly 设为编译目标。

.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 状态,到时将会正式公开。
 

边缘战场

云计算厂商

主流的云计算厂商还在传统的云计算模式中(支持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厂商。

Serverless无服务应用架构纵横谈2:边缘计算激战正酣的更多相关文章

  1. Serverless无服务应用架构纵横谈

    Serverless无服务应用架构纵横谈 一.Serverless是啥 自从互联网兴起以来,Server就成了网络的核心部件.所以围绕Server的生意圈,也发展得如火如荼. 从最早的电信托管,到虚拟 ...

  2. 理解serverless无服务架构原理(一)

    阅读目录 一:什么是serverless无服务? 二:与传统模式架构区别? 三:serverless优缺点? 四:使用serverless的应用场景有哪些? 回到顶部 一:什么是serverless无 ...

  3. 理解serverless无服务

    理解serverless无服务 阅读目录 一:什么是serverless无服务? 二:与传统模式架构区别? 三:serverless优缺点? 四:使用serverless的应用场景有哪些? 回到顶部 ...

  4. protobuf / Consul / 边缘计算 / MEC / CDN / Serverless / GraphQL / 微服务 / 网关 / 云原生 / Serverless (真能造概念啊!!!)

    技术概念层出不穷,学吧!记录下自己多这些概念的理解 protobuf: 数据结构而已,类比XML, JSON consul 解决的只是微服务里的服务注册与发现,健康检查等. 边缘计算:可以理解为是指利 ...

  5. Serverless无服务器架构详解

    本文对Serverless架构的基础概念.具体产品.应用场景.工作原理进行详细解析. 基础概念 Serverless: 无服务器架构,即在无需管理服务器等底层资源的情况下完成应用的开发和运行,是云原生 ...

  6. 5G边缘计算:开源架起5G MEC生态发展新通路

    摘要:‍‍本文尝试从‍‍边缘计算的角度来阐述了‍‍为什么‍‍要把边缘计算当做一种新的生产关系来构建,‍‍以及如何用开源来构建这种新的生产关系. 5G推动新一轮工业革命 过去‍‍人类经历了三次工业革命, ...

  7. 《Serverless架构-无服务单页应用开发》读后感

    本书的作者是[美]Ben Rady,译者郑赞美.简传挺,书中作者详细的介绍了如何使用html.js以及amazon提供的诸多云服务(Simple Storage Service(S3).Cognito ...

  8. 无服务架构在IOT的应用场景——使用函数工作流处理DIS数据

    在物联网领域,复杂性往往并非在于传感器,真正的复杂性在于各种传感器产生的大量数据,以及对这些数据的处理,所以开发者不得不花费大量的时间去构建和维护后端服务器来处理这样一个庞大的数据流.而在今天这个敏捷 ...

  9. Serverless的概念&定义-无服务计算详解

    过去几年间,Serverless 发展迅猛,与其相伴的还有从小程序.移动端等到前后端一体化的演进与实践,也正因如此,从云计算到前端,众多开发者都极为关注 Serverless到底是什么? 在国内,Se ...

  10. 腾讯云微计算实践:从Serverless说起,谈谈边缘计算的未来

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:黄文俊,腾讯云高级产品经理,曾经历过企业级存储.企业级容器平台等产品的架构与开发,对容器.微服务.无服务器.DevOps等都有浓厚兴趣. ...

随机推荐

  1. 【PB案例学习笔记】-01创建应用、窗口与控件

    写在前面 这是PB案例学习笔记系列文章的第一篇,也是最基础的一篇.后续文章中[创建程序基本框架]部分操作都跟这篇文章一样, 将不再重复.该系列文章是针对具有一定PB基础的读者,通过一个个由浅入深的编程 ...

  2. PageOffice在线打开office文件通过js调用vba可实现的功能

    pageoffice封装的js接口有限,某些比较复杂的设置用到的客户不多,所以没有提供直接的js方法,但是pageoffice提供了Document属性和RunMacro方法,可以调vba或直接运行宏 ...

  3. python基础环境

    刚开始接触并学习一门开发语言,带着不求甚解的想法,其实也挺有好处的:我并不是所有的东西都知道,但是代码跑起来了. 但是时间久了,还是带着这种想法,可能就会遇到一些棘手的问题.比如电脑上不知不觉已经安装 ...

  4. 【进阶篇】使用 Stream 流对比两个集合的常用操作分享

    目录 前言 一.集合的比较 1.1需要得到一个新的流 1.2只需要一个简单 boolean 结果 二.简单集合的对比 2.1整型元素集合 2.2字符串元素集合 2.3其它比较 三.Stream 基础回 ...

  5. 2024盘古石取证比赛(APK)

    题目列表 使用软件: Notepad++,火眼证据分析软件,雷电分析app,DB browser for SQLCipher 1. 分析伏季雅的手机检材,手机中诈骗APP的包名是:[答案格式:abc. ...

  6. MySQL学习笔记-多表查询(上)

    多表查询(上) 一. 多表关系 在实际应用中,根据需求,设计的表结构之间存在联系,联系一般分为以下三种 一对多(多对一) 多对多 一对一 1. 一对多(多对一) 案例:部门与员工的关系,一个部门对应多 ...

  7. Qt下载、安装及环境搭建

    1  下载 刚开始去的官网下载,需要注册账号,而且还比较麻烦,后来找到了一个安装包的链接,直接下载就好了:http://mirrors.ustc.edu.cn/qtproject/archive/qt ...

  8. SELinux 安全模型——TE

    首发公号:Rand_cs SELinux 安全模型--TE 通过前面的示例策略,大家对 SELinux 应该有那么点感觉认识了,从这篇开始的三篇文章讲述 SELinux 的三种安全模型,会涉及一些代码 ...

  9. VMware搭建集群环境

    集群地址分配 名称 IP 子网掩码 网关 DNS flink01 192.168.22.211 255.255.255.0 192.168.22.2 114.114.114.114 flink02 1 ...

  10. 谁说.net core不好动态访问webservice?看这篇文章,C#快速实现动态访问webservice,兼容.net framework和.net core+

    前言:访问webservice,大多数人都是用服务引用的方式,但是这种方式比较麻烦,例如遇到服务更新了,你还需要手动更新你的服务引用,再重新发布,很麻烦.或者已有的一些例子,至少我看到的很多案例,动态 ...