草庐IT

WebAssembly(WASM) 和云原生 | wasm和区块链

西京刀客 2023-07-30 原文

文章目录

一、什么是Wasm、WASI

Wasm,即WebAssembly,是一种用来补充JS在运行上不足的“低级”语言——基于二进制编写。其目标之一正是达到在网页上如同运行机器语言一样快速高效。其开发团队分别来自Mozilla、Google、Microsoft、Apple。

Wasm允许用户采用自己熟悉的语言书写(目前支持C/C++/Rust),再在虚拟机引擎在浏览器上运行。它支持沙盒模式,即先用高级语言编写wasm模块,再在JS中以库函数加载。

WebAssembly,我们都知道,是一种新的字节码格式,目前被应用于 web 中,由于其可移植、体积小,安全性的等优点被渐渐广泛认可,但是其主要是运行在浏览器中。

一些天才们,想让 WebAssembly 也可以运行在非浏览器环境中,这就产生了 WASI。

WASI是一个新的API体系, 由Wasmtime项目设计, 目的是为WASM设计一套引擎无关(engine-indepent),
面向非Web系统(non-Web system-oriented)的API标准.

二、WebAssembly(WASM) 和云原生

说到 WebAssembly 最初与 Docker、云原生产生关联,就不得不提 Docker 联合创始人 Solomon Hykes 在 2019 年 3 月份发布的一条推文。他在推文中表示:如果 WASM(WebAssembly)和 WASI(WebAssembly System Interface, WASM 系统接口)在 2008 年就已经存在,那就没有必要创建 Docker 了。

在这条动态里,他说如果 Wasm + WASI 在 2008年就存在了,就没有必要创建 Docker了,Wasm 是云计算的未来。

很多人只看到了这一句话,没有看到他后面补发的内容,他说 WebAssembly 不会取代 Docker,Docker 与 WebAssembly 会肩并肩运行。

随着Wasm的发展,WebAssembly system interface(简称Wasi)出现了。WASI代表WebAssembly系统接口。这是由Wasmtime项目设计的API,可提供对几种类似操作系统的功能的访问,包括文件和文件系统,Berkeley套接字,时钟和随机数。

此时Wasm的沙箱机制带来的隔离性和安全性,都比Docker做的更好。

Wasm已经成为了云原生项目的扩展利器,并且非常有可能成为云原生工作负载的最佳运行时。

WebAssembly已经成为2021年增长最快的云原生趋势之一。

WebAssembly 能不能取代 Docker

Docker 联合创始人 Solomon Hykes 推特说,如果 Wasm + WASI 在 2008年就存在了,就没有必要创建 Docker了,Wasm 是云计算的未来。
很多人只看到了这一句话,没有看到他后面补发的内容,他说 WebAssembly 不会取代 Docker,Docker 与 WebAssembly 会肩并肩运行。

WebAssembly 与 Docker 不是一个取代关系。WebAssembly 与 Docker 是各有所长、互相补足的关系,就像之前提到的,WebAssembly 对工具链要求比较高,但是 WebAssembly 的性能高、轻量级、安全的特点会让 WebAssembly 用在今天 Docker 进不去的场景。

举个具体的例子,WebAssembly 在冷启动方面,能够比 Docker 快100倍。所以 Docker 很难满足 的边缘计算、轻服务、汽车、区块链,都是 WebAssembly 的用武之地。

三、Wasm container 与 Kubernetes

WebAssembly崛起,Kubevirt成主流,2022年云原生的五大发展趋势
参考URL: http://app.myzaker.com/news/article.php?pk=61edfe9eb15ec0709e1236a0&f=normal
国外原文链接:https://thenewstack.io/5-cloud-native-trends-to-watch-out-for-in-2022/

WebAssembly 已经发展成为一个高性能、跨平台和多语种的软件沙盒环境,被运用于云原生软件组件。由于容器运行时和 WebAssembly(WASM)存在惊人的相似性,所以 Kubernetes 也可以被用于协调 WASM 组件。

WasmCloud、 WasmEdge、KubeEdge 以及 Krustlet 等项目使 WASM 成为云原生宇宙的公民之一。Kubernetes 可以从一个单一的控制平面无缝协调 WebAssembly 和容器两种工作负载,也就是说我们甚至可以将打包成 WebAssembly 的软件与容器化软件一起运行。包括 SecondState, Cosmonic 和 Suborbital 在内的创业公司正在建立的平台和工具,都在加速 WASM 的采用。预计自 2022 年我们可以看到云原生 WASM 的崛起。

四、云原生、WASM和边缘计算

云原生的下一步,或从WebAssembly在边缘取代Docker开始
参考URL: https://weibo.com/ttarticle/p/show?id=2309404751926406546094

过去几年,云计算的边界不断向边缘侧延伸。作为云原生技术事实标准的Kubernetes+容器组合,自然也被很多人考虑部署到边缘侧。不过K8s+容器组对于边缘计算场景来说,还是太过重了。因为边缘设备通常硬件资源有限,没有足够的资源部署运行完整的K8s。

很多边缘设备基于ARM架构,但大部分K8s发行版不支持ARM架构。同时,很多边缘设备所处环境复杂,无法保证稳定可靠的网络连接,而K8s的致命问题就是不支持离线运行。

传统容器方案,比如Docker,问题与K8s类似,Docker镜像大小很容易就达到一两百MB以上,边缘场景有不少内存和磁盘空间小于1GB的微型设备。

Docker 资源消耗大,对边缘设备要求高。

边缘计算不仅需要更轻量的K8s,也需要更轻量、更快的容器方案,WebAssembly(WASM)就是近几年出现的一个新选择。

云原生的下一步,或从WebAssembly在边缘取代Docker开始! 到2030年,估计有500亿台联网设备将放大我们的工作负荷–这些设备可能很小,可能很便宜–但它们将变得越来越智能和复杂。由于上述原因,WebAssemblies一次编写到处运行,安全模式和可移植性肯定会使它成为未来基础设施的重要组成部分。

为边缘优化的 WebAssembly 虚拟机: wasmedge

官网:https://wasmedge.org/
github: https://github.com/WasmEdge/WasmEdge

五、wasm和区块链

以太坊内核实现了一个图灵完备的虚拟机,即以太坊虚拟机(简称EVM)。它定义了一套通用的、确定性的指令,程序可以被编译成这些指令,并且可以在全世界任何一台计算机上运行。

传统计算机包含的指令集只接受32位或者64位的输入。EVM与此不同并且很特殊,它是一台256位的计算机,故意设计成这样是为了更易于处理以太坊的哈希算法,它会明确产生256位的输出。

然而,实际运行EVM程序的计算机则需要把256位的字拆分成它们的本地架构来执行智能合约,从而使得整个系统变得非常低效和不实用。

WebAssembly,或者简称为WASM,是内存安全、平台独立的,可以完美高效地映射到所有类型的CPU架构上。

使用 WebAssembly,不依赖于EVM,现在我们有了一套优秀并且高效的指令集,可以编译各种类型的语言,并且有信心它们可以在不同类型的平台上执行且具有同等的性能 - 这对于去中心化应用来说是非常理想的!更进一步,通过去除浮点运算指令,WASM指令集可以很容易地变成确定性指令集,从而很适合作为EVM的替代品。

尽管EVM目前算是区块链领域较为完备的机制,但它的局限性和时效性随着区块链发展也显得有些“落伍”,而作为EVM合约升级版的Wasm合约开始受到了众人关注。

以太坊创始人“V神”早就表示以太坊2.0将会升级为Wasm合约(eWASM),以满足更多开发需求。

EWASM团队已经着手在以太坊上集成WebAssembly,从而保证以太坊2.0的执行层更加高效、简单,适合作为完全的去中心化计算平台。https://github.com/ewasm

以太坊不是唯一一家正在调研 WebAssembly 技术的区块链企业。还有很多人都在押注这项技术,包括 Dfinity、EOS、NEAR、和 波卡 等等——它似乎已成为构建新一代区块链网络的事实标准。

作为EVM的发明者同时也是波卡创始人Gavin博士,对这个问题拥有足够的话语权。在做波卡的时候,Gavin并没有沿用自己发明的EVM,而是选择Wasm。

比较新兴的公链会更多的支持Wasm,然后以兼容的形式对接EVM。例如 波卡兼容EVM又支持Wasm,波卡的许多生态项目也是两者皆有。

Wasm对于EVM有什么优势?

以太坊基金会在Devcon上多次说明了自己打算将EVM过渡到Wasm的想法,但已经上线的庞大合约体量无法支持深层次的变革,生态也在这一临时方案上越走越远。选用Wasm作为智能合约的虚拟机的优势有以下几点:

1.完胜EVM虚拟机。相比EVM需要开发者预编译,较高的编程成本,Wasm虚拟机的结构、指令完备性及执行效率远胜于EVM虚拟机,将成为合约开发的新引擎。

2.执行速度快。Wasm有一套完整的语义,且具有紧凑的二进制格式,体积很小,这使得Wasm字节码运行时的效率可以接近于本地机器码的效率,比EVM的性能高1到2个数量级,后期还会升级为更快JIT虚拟机。

3.交易费用低。更快的Wasm虚拟机,致使交易吞吐量大幅提升,那么合约部署和交易成本也能大幅降低。可以说Wasm合约很好的解决了现在以太坊上交易费用高和交易拥堵的问题。

4.合约语言广。Wasm扩展了智能合同开发者可用的语言系列,支持使用任何Wasm的高级语言(如Rust、C++、JavaScript等)开发编写复杂业务逻辑,这意味着你可以用你熟悉的任何语言编写智能合约,包括最成熟的基于Rust的ink!,或基于AssemblyScript的Ask!等。

集成WASM也可以让那些熟悉Rust和Go之类的主流语言的人更容易进行智能合约的开发,而不是需要学习solidity的各种细节才能在以太坊上开发有用的应用程序。

虚拟机之战:WASM 与 EVM

虚拟机之战:WASM 与 EVM
参考URL: https://m.bimama.com/news/10600.html
英文原文:https://medium.com/momentum6/the-war-on-virtual-machines-wasm-vs-evm-8e68f9d53ef4

有关WebAssembly(WASM) 和云原生 | wasm和区块链的更多相关文章

  1. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  2. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  3. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  4. 【云原生】SpringCloud-Spring Boot Starter使用测试 - 2

    目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一

  5. ruby - 如何让 Ruby 找到原生库? - 2

    我在/usr/local/lib中安装了一些本地库。我现在正在尝试安装一个需要这些的gem,以便正确构建,但是gem构建失败,因为它找不到图书馆。gem的extconf.rb文件试图确认它可以找到库have_library()但由于某种原因失败了。我尝试设置一堆环境变量,但似乎没有任何效果:irb(main):003:0>require'mkmf'=>trueirb(main):004:0>have_library('gecodesearch')checkingformain()in-lgecodesearch...no=>falseirb(main):005:0>ENV['LD_LI

  6. 云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载 - 2

    文章目录Kubernetes(k8s)工作负载一、Workloads二、Pod三、Deployment四、RC、RS、DaemonSet、StatefulSet五、Job、CronJob1、Job2、CronJob六、GCKubernetes(k8s)工作负载一、Workloads什么是工作负载(Workloads)工作负载是运行在Kubernetes上的一个应用程序。一个应用很复杂,可能由单个组件或者多个组件共同完成。无论怎样我们可以用一组Pod来表示一个应用,也就是一个工作负载Pod又是一组容器(Containers)所以关系又像是这样工作负载(Workloads)控制一组PodPod控制

  7. 腾讯云区块链服务平台(TBaaS)长安链体验网络公测试用感受 - 2

    前阵InfoQ社区看到腾讯云腾讯云区块链服务平台(TBaaS)长安链体验活动,一顿操作猛如虎报了个名,体验完用一个字概括:强。非要再加几个字的话,总体感受下来装配模式灵活高效,配套工具完整辩解。话不多说开始主题本文目录结构分为区块链分类和TBaaS平台介绍、TBaaS平台上链教程三个部分一、区块链分类:大体上来说,区块链可分为公链,联盟链,私有链三种:公有链(PublicBlockchain)公有链是指任何人都能参与的区块链。公有链是去中心化程度最高的区块链,不受机构控制,整个账本对所有人公开透明。任何人都能在公有链上查询交易、发送交易、参与记账。加入公有链不需要任何人授权,可以自由加入或者离

  8. (Fabric 学习七)Fabric2.4.x 区块链多机部署(重新整一遍) - 2

    时隔很久没有学习区块链了,今天重新搭建一下区块链网络,有了更多新的体会。我是跟着b站up主DevX_一步一步往下搭建的。这是大神的视频,简洁易懂而且很符合我目前的技术栈(java应用端+java链码),而且代码开源,非常适合新手学习!!DevX亡命天涯的个人空间-DevX亡命天涯个人主页-哔哩哔哩视频经过测试已成功。为了今后学习便利,记录一遍搭建过程。一、区块链搭建网络拓扑结构:本次环境搭建要求:3个Orderer节点以满足raft共识;2个组织:org1、org2;两个组织内都有两个peer节点。但是我懒得开多台虚拟机,索性利用一台虚拟机整多个端口来搞了,划分清楚端口就好。资源规划如下:节点

  9. iphone - iPhone 原生应用的测试驱动设计 - 2

    我正在试验iPhoneSDK并在Nic博士的rbiPhoneTest项目中做一些TDD。我想知道有多少人(如果有的话)成功地使用了这个或任何其他iPhone/Cocoa测试框架?更重要的是,我想知道如何最好地断言专有的二进制请求/响应协议(protocol)。这个想法是通过网络发送二进制请求并接收二进制响应。请求和响应是使用byteand'ing和or'ing创建的。我正在使用黄金副本模式来测试我的请求。这是我到目前为止所拥有的。不要笑,因为我是ObjectiveC和Ruby的新手:requireFile.dirname(__FILE__)+'/test_helper'require'

  10. 【云原生 • Kubernetes】kubernetes 核心技术 - Ingress - 2

    本文导读一、前言二、Ingress和pod有什么关系三、使用Ingress对外暴露应用1.创建应用并使用NodePort暴露端口2.应用Ingress(1)部署IngressController(2)创建Ingress规则(3)在Windows系统的hosts文件添加域名访问规则一、前言在以往的操作过程中,我们都是将某端口号对外暴露,然后再使用IP+端口号进行访问服务,这是通过Service中的NodePort实现的。但是NodePort有着明显的缺陷:NodePort会在每一个node节点都启用一个端口,也就是说在集群中的任何一个node节点中,使用节点IP+端口号都能访问到该服务;每个端口

随机推荐