云原生
1 - 概述
2 - [译]WebAssembly:云原生分布式计算的未来(2021)
原文出处:WebAssembly: The Future of Cloud Native Distributed Computing
演讲视频:https://www.youtube.com/watch?v=HPA8qmsHQfc
作者:Liam Randall, Wasmcloud创始人
WebAssembly已经成为2021年增长最快的云原生趋势之一。随着wasmCloud(今夏由Cosmonic捐赠的云原生计算基金会/CNCF沙盒项目)等分布式应用运行时的出现,我们看到WebAssembly出现在服务器和边缘,作为一个可扩展的平台嵌入到Envoy等平台,并通过Krustlet等项目成为直接的云原生编排目标,Krustlet项目最近被CNCF沙盒接受。
阻碍分布式应用开发、部署和维护的挑战催生了一种新的模式,其中WebAssembly在未来的云原生分布式计算中发挥着突出作用。
WebAssembly是一个小型和可移植的虚拟机,可以在现代网络浏览器、服务器和大量不同的硬件上运行。这个开放的WC3标准快速而高效,是各种编程语言支持的编译目标,包括Rust、C/C++、Typescript、Go等。
简称Wasm,这个开放的网络标准重视能力驱动的安全性,这意味着所有的应用程序在沙盒中启动时,沙盒必须不可默认,应用程序必须被授予明确的能力访问。它最初是在Mozilla工作室内部孵化的,现在由字节码联盟管理,作为网络浏览器中的JavaScript的补充,独立和云原生的Wasm。Wasm已经超越了浏览器,在整个云原生生态系统中的受欢迎程度正在上升。
WebAssembly的关键价值主张:
主张 | 描述 |
---|---|
高效快速 | 快速的启动时间使Wasm成为按需扩展的理想选择,其执行速度接近原生速度。 |
安全可靠 | 在不容许默认的环境中被沙箱和操作,对个别能力的明确访问需要被授权 |
开放可调试 | Wasm是一个社区驱动的WC3标准,由字节码联盟负责管理。 |
多语言 | 选择你自己的语言,你可以把经过测试的库带到一个领域。 |
可移植 | WebAssembly是一个编译目标,可以在多种环境下运行–服务器、浏览器、嵌入式设备。作为一个安全的沙盒,Wasm也可以被嵌入到其他应用程序内,使其成为执行其他代码的理想选择。 |
就其本身而言,WebAssembly为现代开发环境带来了新的功能和额外的安全特性–无论是在浏览器中还是在云原生中。然而,现代云原生开发人员面临着新的挑战,如CPU多样性、多种运维环境、安全性、分布式应用架构和可扩展性,这些挑战超越了部署到单一的公共云供应商。
要了解现代分布式计算环境,就必须考虑公共云内部不断上升的多样性,我们看到新的ARM CPU挑战x86芯片组的历史主导地位,在成本和性能方面展开竞争。
传统的企业系统通常将软件编译到特定的开发环境中,包括CPU和操作系统,如Linux-32位、MacOS-ARM64或Windows-64位。从公共云向边缘看去,我们发现在各种CPU架构上的执行环境更加多样化。
这包括我们选择不运行或不能运行Linux的地方,如小型设备、网络浏览器内或苹果的IOS系统上。WebAssembly给开发者提供了一个可移植的基础,同时针对操作系统和芯片组的不同组合,并实现了一次编写,到处运行的承诺。
Linux基金会的Edge工作组已经将这些串联起来,这是一个我们可以用来作为起点的世界观。
这种对世界的看法有助于我们框定现代分布式计算的复杂性。有许多不同的设备类型–有各种系统架构和能力,但这些类别实际上低估了复杂性。
如果我们稍微注释一下这个观点,将一些额外的背景与生态系统中现有的和常见的一些平台结合起来,我们就会得到一个我们需要考虑的更完整和复杂的世界观。
在公有云和服务提供商那里,我们发现了Kubernetes–有常规的和微型的。 我们发现在Kubernetes之上的容器中托管的应用程序,这些容器是在考虑到特定的操作系统和CPU架构的情况下构建和发布的。 我们应该在我们的生态系统中包括开发者环境,而包括移动设备意味着我们需要支持手机、浏览器、智能电视和所有其他的物联网(IoT)。
即使是真正的小东西–具有微小的能力。而且,虽然Kubernetes和Linux在公有云中占主导地位,而且越来越向边缘发展,但有一个计算的下限,让我们可能选择或不能部署它们。
当然,保护这个庞大的组合变得无比复杂,在分布式云原生边缘上有不同的细微差别和安全方法。WebAssembly的能力驱动安全方法将安全边界从流程中移出,我们在今天流行的容器驱动格式中发现它,并将其移到WebAssembly安全沙箱中。虽然技术上有差异,但WebAssembly与今天的企业环境兼容,可以与之结合使用。
分布式计算的挑战
在上一个技术时代,微服务和SaaS应用在公有云中集中托管的部署一直占主导地位。我们有令人信服的理由相信,下一个技术时代将由分布式应用主导。系统架构的多样性、应用架构的多样性、分布式安全、离线使用以及部署在边缘的机器学习正在继续推动分布式计算的崛起。
连接到互联网的设备数量和令人难以置信的多样性都在继续激增,因为我们正朝着2030年预计有500亿台连接设备的方向发展,企业的整合任务因十几种流行的、不兼容的CPU架构而变得更加复杂。其中每一种都有自己相对独特的操作生命周期,并来自几十个主要制造商。
WebAssembly有能力在这种复杂的环境中运行–Wasm运行时甚至可以被优化,以适应特定情况下的应用。例如,Bytecote联盟的Wasmtime为服务器端执行进行了大量的优化,Wasm-micro-runtime(WAMR)为较小的嵌入式设备进行了优化。
分布式和连接式系统的庞大集合将在巨大的不同应用架构中相互连接。N层应用、模型-视图-控制器、Pub/Sub、微服务等等。
在家庭、现代企业,甚至在我们社会的日常互动中,现代应用越来越多的是对等的,而不是客户端-服务器。点对点意味着兼容而复杂的逻辑,而微服务将需要在整个不同的生态系统中部署。
Wasm在这方面也很出色–其接近原生的性能使其成为独立、嵌入式或其他类型集成的理想选择。可移植性和一次编写到处运行的方法为开发者提供了部署其应用程序的新能力。
这些庞大的分布式应用的安全性是一个广泛的话题,然而,WebAssembly的原生安全设计对于在连续的任何地方运行的分布式项目是一个受欢迎的补充。
WebAssembly本身具有沙盒的功能;当你想改编或把代码带到大量复杂的系统中时,它是很有帮助的。WebAssembly还接受了能力驱动安全的现代趋势,应用程序不再被授予其父辈的权利,而是被执行到一个拒绝默认的沙盒中。
人们很容易相信,当我们把数十亿的设备连接到互联网时,我们可以简单地把所有的功能卸载到远程API和服务上–这些可能是哑巴终端,连接到智能核心或智能边缘。
虽然边缘将继续把功能移到靠近用户的地方,以尽量减少性能影响,但有许多令人信服的理由相信,设备将被连接,并在离线或间歇性连接时仍然提供某种程度的功能。由于各种原因,真正复杂的逻辑将需要运行在终端设备上和内部。
-
延迟和确定性问题意味着一些设备需要在本地做出反应,没有任何延迟,例如无人驾驶汽车需要即时反应。
-
在视频、广播、音频、设备遥测等所有不同频谱的边缘可用的大量数据集,必须首先在数据所在的地方–设备上进行处理。我们将继续看到机器学习(ML)模型提取元数据,并运回公共云进行进一步分析。
-
对隐私和安全日益增长的关注将使逻辑保持在边缘或设备本身–一些数据,如家中的原始麦克风或摄像头馈送,不应运出本地环境而不进行预处理。
-
在对有限的或故意的自主性的需求中–一些设备将需要能够在缺乏连接的远程环境中运行。远在海上的船只,遥远的漫游者,或无人机。即使是与互联网连接的智能电器,在连接断续的情况下,也应该保持一定程度的功能。
-
不断上升的监管问题,如GDPR和CCPA,是未来事情的开始。大科技在不久的将来会被进一步监管,这将影响到我们分布式软件系统设计中的位置和方式。
这意味着,到2030年,估计有500亿台联网设备将放大我们的工作负荷–这些设备可能很小,可能很便宜–但它们将变得越来越智能和复杂。由于上述原因,WebAssemblies一次编写到处运行,安全模式和可移植性肯定会使它成为未来基础设施的重要组成部分。
3 - [译]WebAssembly情归何处:云
在上一篇文章中,我们向你介绍了WebAssembly的基本原理。现在我们知道了WebAssembly是什么,是时候讨论它的归宿了,我们坚信,它是在云端。
什么使WebAssembly具有云的价值?
在前面的文章中,我们讨论了WebAssembly的一系列决定性属性。在这篇文章中,让我们来看看这些属性,看看是什么让它们在云中如此吸引人。
可移植性式
在云中,工作负载并不是静态的。与过去的虚拟机和数据中心不同的是,我们启动的东西不会永远保持在同一个地方运行。在云中,我们的工作负载在主机之间移动。当我们考虑被称为 “边缘” 的神话生物时,我们也希望我们的工作负载能够在后端和边缘的任何终端之间自由移动。
为了实现这一点,我们需要知道,我们的工作负载将在任何有足够资源的主机上工作。这就是为什么可移植性在云中是如此重要。
快速
时间就是金钱。我们不得不等待某些工作完成的时间越长,我们执行这项工作的成本就越高。更糟糕的是,如果我们让我们的客户等待,那么我们也有可能失去他们的钱。在上一篇文章中,我们讨论了WebAssembly虚拟机的高效、快速特性。我们从实验和基准测试知道,我们可以从WebAssembly模块中获得接近原生(或完全原生,取决于引擎)的性能。
小巧
当部署的单位很大时,有些事情我们根本无法做到。例如,你不能指望快速和轻松地运送一个1GB的Docker镜像,你当然也不能指望在不付出带宽和速度的代价的情况下,能够下载和启动这样一个镜像。
WebAssembly模块很小,而且是可流式的。这意味着我们部署的工作单元可以比我们现有的云部署的工作负载小得多,而且它可以实现以前不可能实现的部署和分发场景。我们可以将计算单元分布在信息中,这些信息可以比通常伴随着大型Web应用的典型JavaScript包更小。
安全
今天的现代云原生应用程序实行深度防御,即假设入侵者能够穿透你的基础设施的任何一层,因此你要在所有层建立安全。我们有一些工具可以在运行时监控系统,以防止它们执行未经授权的操作,但像WebAssembly模块这样独立的沙盒实体,除非主机运行时允许,否则它们不能做任何事情,也不能访问自己以外的任何内存。你甚至可以询问一个模块,确定它将向主机运行时请求哪些功能。这里没有惊喜,也没有办法劫持一个模块,让它做一些它不能做的事。
云端的WebAssembly
虽然许多人在阅读这篇文章时可能听说过WebAssembly在浏览器中运行,但从云端到边缘,到处都有一些惊人的创新,都是利用我们刚才讨论的WebAssembly的引人注目的品质。
有一些提供边缘计算的公司正在提供基于WebAssembly的函数执行,有一些开源项目和公司正在开发整个高层开发框架,旨在改变我们构建分布式应用的方式,有一些传统的云供应商,如AWS和谷歌,在他们的云中提供WebAssembly函数执行,甚至还有Kubernetes社区的一个萌芽部分,探索如何将基于WebAssembly的工作负载与容器调度平台结合起来。
边缘计算
边缘计算是在用户的物理位置或执行所需的数据源附近进行的代码执行。人们需要边缘计算,因为我们对计算能力和性能的要求从未停止过。我们想要一切,而且我们想要比以前更快。
想想一个机器学习应用,它分析视频的每一帧来检测物体。如果分析器靠近(网络方面)视频帧的源头,我们就可以在用户观看视频时,在用户所在的地方实时完成这项工作。如果没有边缘计算,这将成为一个缓慢、乏味的过程,整个视频被提交处理,我们在排队等咖啡后最终得到结果。
边缘计算最近越来越受欢迎,有许多公司提供边缘网络,用于从静态内容交付到这些交付网络边缘的代码执行。这些边缘网络现在支持WebAssembly,接受其微小的尺寸、安全性和性能。
以边缘计算服务著称的Fastly公司最近在其 Compute@Edge 产品中支持在其边缘网络上运行以WASI(WebAssembly系统接口)编译的代码。你可以使用Rust或AssemblyScript等语言来编写代码,这些代码在边缘运行,靠近用户,利用Fastly的库,处理附近的数据,并与传统的后端进行通信。Fastly是字节码联盟(Bytecode Alliance)的成员(该联盟是由对WebAssembly的成功具有既得利益的公司组成的多行业团体),并通过该成员资格积极支持WebAssembly社区,为运行时和工具开发做出贡献。