【译】使用.NET将WebAssembly扩展到云(二)
原文 | Richard Lander
翻译 | 郑子铭
轻量级功能
嗯……但是如果我们使用 Wasm 更像是一个典型的功能而不是一个应用程序,我们可能不会计算一百万个单词,而是做一些更轻量级的事情。让我们重新运行比较,但使用最小的文件。
通过 Wasm,使用我们的解释器:
$ time WASMTIME_NEW_CLI=0 wasmtime run --mapdir /text::/home/rich/git/convenience/wordcount count.wasm $* /text/Clarissa_Harlowe/summary.md
9 153 1044 /text/Clarissa_Harlowe/summary.md
Elapsed time (ms): 21
Elapsed time (us): 21020.8
real 0m0.098s
user 0m0.083s
sys 0m0.014s
使用 Wasm 和原生 AOT:
$ time WASMTIME_NEW_CLI=0 wasmtime run --mapdir /text::/home/rich/git/convenience/wordcount count.wasm $* /text/Clarissa_Harlowe/summary.md
9 153 1044 /text/Clarissa_Harlowe/summary.md
Elapsed time (ms): 0
Elapsed time (us): 825.3
real 0m0.048s
user 0m0.035s
sys 0m0.014s
再次,使用 CoreCLR:
$ time ./app/count ../Clarissa_Harlowe/summary.md
9 153 1044 ../Clarissa_Harlowe/summary.md
Elapsed time (ms): 16
Elapsed time (us): 16100
real 0m0.063s
user 0m0.027s
sys 0m0.019s
此图表显示了上下文中的所有结果,这次是针对较小的文档。
有趣的。对于较小的工作负载,其中一些选项之间的性能差异开始缩小。我们还可以看到运行时启动成本的差异。现在说还为时过早,但这些动态可能是这项技术的关键考虑因素。一个重要的警告是,字数统计只是一种情况,其他情况可能会产生完全不同的结果。目前,该示例已经提供了足够的预期内容。
这一切都还处于早期阶段。随着我们走得更远,我们将想要测试更有趣的场景,以形成更具代表性的理解。我也确信其中一些性能数字将会提高。
功能上略有改进
WASI 的承诺是能够依赖一组具有丰富功能的接口(和匹配的实现)。 SpiderLighting 兑现了这一承诺。
SpiderLightning:一组 WIT 接口,抽象分布式应用程序功能和运行时 CLI,用于运行使用这些功能的 Wasm 应用程序。
如前所述,WASI 旨在定义与 System 命名空间相同的平台功能(但只是其中的一小部分)。您可以在 SpiderLighting wit 目录中看到该接口的接口定义(至少一种版本)。
如果你有智慧,那就发挥你的智慧
您应该能够走到任何 WIT 界面,引用它,查看其完整的类型形状,并开始使用它进行编码。我们距离最终体验还有几步之遥,但这就是愿景。
SpiderLighting 提供了一个名为 slim 的便捷 CLI 工具,它可以连接 wasmtime、您的应用程序、WASI SDK 以及您的应用程序所需的任何 WIT 实现(如在 slimfile.toml 中声明的那样)。
SpiderLighting 团队告诉我们,他们构建了 slim(及相关组件)作为工具来帮助他们开发 wasi-cloud-core 规范,以实现无服务器功能。在不久的将来,我们预计其他应用程序主机(例如 Fermyon Spin)将使用 wasi-cloud-core 接口,然后我们将使用其中一台主机,而不是轻微的。
我们有一组 Spiderlight 样本。以下示例创建 WASI 键值存储,然后打印到控制台。请注意,dotnet run 使用 light 作为实现细节。
using SpiderLightning;
using var keyValue = new KeyValue("placeholder-name");
keyValue.Set("somekey", "Hello from .NET. This value is from a SpiderLightning key-value store.");
Console.WriteLine(keyValue.GetString("somekey"));
请记住,KeyValue 不是 C# 类型,而是投射到 C# 中的 WASI 接口。
这是代码运行时的样子。
$ pwd
/home/rich/git/spiderlightning-dotnet
$ docker run --rm -it -v $(pwd):/source -w /source/sample/ConsoleApp wasi-sdk dotnet run -c Release
Hello from .NET. This value is from a SpiderLightning key-value store.
我正在一个安装了所有必需依赖项的容器中运行该应用程序。容器和WASI可以一起使用吗?一定。
您可以在有限的环境中构建依赖 WASI SDK 的应用程序,并在更大的环境中运行它们。 Windows 和 macOS Arm64 的支持似乎最差。随着时间的推移,这肯定会改变。
网页场景
对 WASI 的很多兴趣在于能够托管小型且便携式的 Wasm 功能和应用程序。其中一个关键方面是使用某种形式的网络编程模型。目前,我们还没有启用 WASI 的 ASP.NET Core。目前,我们已经公开了 http-server WASI 类型。
它启用以下模式。
HttpServer.OnIncomingRequest(request =>
{
return new HttpResponse(200)
.WithBody($"<h1>Hello!</h1> You did a {request.Method} request to {request.Uri} with {request.Headers.Count} headers")
.WithHeaders(new[] { KeyValuePair.Create("content-type", "text/html") });
});
这有点低级了。委托也不是异步友好的。以下是异步最终如何工作的一些提示。
我尝试用这个 API 编写一个更大的示例。它目前被阻止,因为我们没有办法调用 https 端点。我可以通过在本地复制所有必需的 JSON 文件来解决这个问题,但不会那么引人注目。
这个领域是最有趣的,但也是定义最少的。我们预计至少还需要一年的时间才能运行我们所认为的真正的网络应用程序和功能。我们的目标是建立一个模型,您无需更改太多代码即可使用 Wasm 作为部署目标。
实验
WASI 工作负载目前处于实验阶段,因此得名工作负载。至少在 WASI 本身发布稳定的 1.0 版本之前,它仍将是一个实验。我们无法确切地预测那会是什么时候。
有几个待办事项需要调查和解决:
- 综合调试
- 支持AOT
- dotnet 使用 wasmtime CLI 参数运行
- 支持更多 WASI 接口,可能通过更好的 witbindgen 支持
闭幕式
更高层次的故事是,我们已经能够使我们的 Blazor Wasm 实现(实际上是整个 .NET)适应便携式计算的新领域。正如这几个演示所证明的那样,很多功能已经发挥作用。
您可以使用 .NET 8 尝试在本文中阅读的所有内容(以及更多内容)。从以下命令开始,安装所需的软件。
dotnet workload install wasi-experimental
在接下来的一年里,我们将专注于提高当前实施的功能和用户体验,并跟随 WASI 的总体发展。我们还期待观察云团队如何在其服务中采用 WASI。迄今为止,我们一直在构建支持技术。随着我们的进一步发展,我们将考虑专注于与云服务相结合的更多定位体验。就目前而言,这一切都是面向未来的,就像 WASI 的其他部分一样。
简洁是智慧的灵魂。 - 威廉·莎士比亚
如果你读到这里,你就会明白,如果我说得简短一点,你就不会那么了解情况了。但鉴于这篇文章的篇幅和细节,我已经无计可施了。
原文链接
Extending WebAssembly to the Cloud with .NET
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com)
【译】使用.NET将WebAssembly扩展到云(二)的更多相关文章
- s3存储桶:s3可扩展的云存储
S3(Simple Storage Service,简单存储服务),即可扩展的云存储,又称桶存储,S3 是一种面向 Internet 的存储服务.S3为任意类型的文件提供临时或永久的存储服务.用于存储 ...
- [转]新型智慧城市总体架构 华为 新ICT 一云二网三平台
本文转自:http://www.jpsycn.com/hangyexinwen/20160801142354.html “十三五”规划提出,充分运用现代信息技术和大数据,建设一批新型示范性智慧城市.日 ...
- Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- Laravel5中通过SimpleQrCode扩展包生成二维码实例
Simple Qrcode是基于强大的Bacon/BaconQrCode库开发的针对Laravel框架的封装版本,用于在Laravel中为生成二维码提供接口. 安装SimpleQrCode扩展包 在项 ...
- spring扩展点之二:spring中关于bean初始化、销毁等使用汇总,ApplicationContextAware将ApplicationContext注入
<spring扩展点之二:spring中关于bean初始化.销毁等使用汇总,ApplicationContextAware将ApplicationContext注入> <spring ...
- PHP中的MySQLi扩展学习(二)mysqli类的一些少见的属性方法
虽说是少见的一些属性方法,但是可能还是有不少同学在日常的开发中使用过,这里只是学习了可能相对来说我们用得比较少的一些 mysqli 的属性或方法.就当是扩展一下自己的知识体系. 切换用户 首先就是切换 ...
- SuperEdge: 使用WebAssembly扩展边缘计算场景
作者 SuperEdge 开发者团队 概要 SuperEdge 是 一个开源的分布式边缘计算容器管理系统,用于管理多个云边区域中的计算资源和容器应用. 在当前架构中,这些资源和应用能够作为一个 Kub ...
- 【Linux】扩展阿里云数据盘分区和文件系统
扩容云盘只是扩大存储容量,不会扩容文件系统 一.准备工作 在扩展数据盘扩展分区和文件系统前,请提前完成以下工作. 创建快照以备份数据,防止操作失误导致数据丢失. 通过ECS控制台或者API扩容云盘容量 ...
- 基于 Golang 构建高可扩展的云原生 PaaS(附 PPT 下载)
作者|刘浩杨 来源|尔达 Erda 公众号 本文整理自刘浩杨在 GopherChina 2021 北京站主会场的演讲,微信添加:Erda202106,联系小助手即可获取讲师 PPT. 前言 当今时 ...
- 译:Datetime类型的扩展
译文出处:http://www.codeproject.com/Articles/870939/Datetime-Extensions 本文主要针对System.DateTime类型的一系列扩展.包括 ...
随机推荐
- apache mina
本文为博主原创,未经允许不得转载: Apache Mina(Apache Multipurpose Infrastructure for Network Applications)是一个基于Java的 ...
- 23- 数码管动态显示02-转换BCD码
1.BCD码 数码管动态显示的data[19:0]使用二进制数表示的多位十进制数,不能直接生成段选和片选信号,需要使用BCD码表示的十进制数 BCD码(Binary-Coded Decimal),又称 ...
- DEV-C++调试报错
1.报错信息如下: 2.原因 SIGSEGV是是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号. 意思是程序接受一个无效的指针地址,Segmentation fault即是提示我们去 ...
- Mybatis @Insert插入数据返回自增的主键id
mapper层 @Insert("insert into t_user (username,password,valid,create_time) values (#{username},# ...
- [转帖]CPU写入512bit要多久:从AVX到NEON
https://zhuanlan.zhihu.com/p/677124882 写这篇文章的原因是有个项目需要降低延迟,希望能更快地把512bit的数据从内存搬进PCIe设备.原先的做法是软件写寄存器通 ...
- [转帖]DBWR与LGWR的写入机制
https://www.jianshu.com/p/6c87cb6cd320 读与写是每个数据库提供的最基本的功能.当数据库中出现第一个进程时,总免不了要将数据从磁盘上加载到内存中,一次数据库的物理I ...
- [转帖]《Linux性能优化实战》笔记(二)—— CPU 上下文切换(上)
上一篇的最后一个例子,在多个进程竞争CPU时,我们看到每个进程实际上%usr部分只有20%多,70%多是在wait,但是load远远高于单个进程使用CPU达到100%. 这让我想到之前看的RWP公开课 ...
- [转帖]50年来Intel CPU变化有多大?频率从0.75MHz提升到5.2GHz
https://m.baidu.com/bh/m/detail/ar_9297450181050583423?data_from=lemon 今天(11月15日)是Intel推出4004处理器50周年 ...
- [转帖]jvm学习三-MAT内存分析工具的使用
目录 1 模拟内存溢出程序 1.1 jvm配置 1.2 测试代码 2 MAT工具进行内存分析 2.1 大纲介绍 2.2 Histogram视图介绍 2.3 Leak Suspects视图介绍 2.4 ...
- centos8上安装中文字符集
https://www.cnblogs.com/kaishirenshi/p/12669353.html yum install glibc-common yum install -y langpac ...