借助 NGINX Unit 在服务器端使用 WebAssembly

原文作者:Liam Crilly of F5

原文链接:借助 NGINX Unit 在服务器端使用 WebAssembly

转载来源:NGINX 中文官网


NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

WebAssembly(缩写为 Wasm)可为 Web 应用领域提供有力支持。在浏览器中,它提供了一个安全的沙盒执行环境,支持前端开发人员在不影响性能的情况下使用各种高级语言(不仅限于 JavaScript!)。在后端(服务器端),WebAssembly 的跨平台支持和多架构可移植性有望极大地简化开发、部署和可扩展性。

NGINX 旨在帮助您创建服务器端 WebAssembly 模块并在任何位置运行它 — 不必修改也无需多个 build 流水线。相反,您的 WebAssembly 模块创建可以从本地开发开始,直至投入到运行任务关键的多云环境。

随着 NGINX Unit 1.31 的发布,我们很高兴实现了这一愿景。NGINX Unit 是一个通用的 web 应用服务器,应用代码与 TLS、静态文件及请求路由等其他基本属性一同执行。不仅如此,NGINX Unit 还面向七种编程语言运行时提供一致的开发人员体验,现在又添加了 WebAssembly。

将 WebAssembly 添加到 NGINX Unit 在多个层面上都很有必要:

  • HTTP 的“请求-响应”模式与 WebAssembly 沙盒的输入/输出(I/O)字节流完美契合。

  • 开发人员能够在不影响运行时性能的情况下尽享高级语言生产效率。

  • NGINX Unit 的请求路由器可帮助通过多个 WebAssembly 模块构建复杂应用。

  • WebAssembly 的启动速度很快,因此同样适用于部署单个微服务和功能,乃至功能齐全的应用。

  • 通用可移植性和跨平台兼容性有助于本地开发,而没有复杂的 build 流水线。

  • NGINX Unit 已经提供了 Per-App 隔离,WebAssembly 沙盒有助于更安全地运行不受信任的代码。

:截至本文撰写时,WebAssembly 模块为技术预览版 — 详情见下。

NGINX Unit WebAssembly 模块的工作原理

NGINX Unit 的架构将网络协议从应用运行时中分离出来。unitd: router 进程会处理传入的 HTTP 请求,并根据需要处理 TLS 层。在确定如何处理该请求后,“HTTP 上下文”(URI、请求头和正文)将被传递到应用运行时。

对于如何向应用代码提供 HTTP 上下文以及开发人员如何访问 URI、请求头和正文,许多编程语言都有明确的规范。NGINX Unit 提供了多个语言模块,可实现 NGINX Unit 路由器与应用运行时之间的接口层。

NGINX Unit 的 WebAssembly 语言模块在 WebAssembly 运行时和路由器进程之间提供了类似的接口层。WebAssembly 沙盒的线性内存使用当前请求的 HTTP 上下文进行初始化,最终的响应将返回到路由器,以便传输给客户端。

沙盒执行环境由 Wasmtime 运行时提供。下图说明了从客户端到路由器再到由 Wasmtime 执行的 WebAssembly 模块的 HTTP 请求流。

从客户端到路由器再到由 Wasmtime 执行的 WebAssembly 模块的 HTTP 请求流程图

在 NGINX Unit 上运行 WebAssembly 模块

配置 NGINX Unit 来运行 WebAssembly 模块就像使用其他任何语言一样简单。下面的配置片段中有一个名为 helloworld 的应用,它具有以下属性:

  • type 定义要为此应用加载的语言模块

  • module 指向已编译的 WebAssembly 字节码

  • access 是 Wasmtime 运行时的一项特性,支持应用访问沙盒以外的资源

  • request_handlermalloc_handler 和 free_handler 与将 HTTP 上下文传输到 Wasmtime 的 SDK 函数有关(下一节将详细介绍)

{"applications":{"helloworld":{"type":"wasm","module":"/path/to/wasm_module.wasm","access":{"filesystem":["/tmp","/var/tmp"]},"request_handler":"luw_request_handler","malloc_handler":"luw_malloc_handler","free_handler":"luw_free_handler"}}
}

在 WebAssembly 沙盒中查找 HTTP 上下文

如上所述,NGINX Unit 的 WebAssembly 语言模块使用当前请求的 HTTP 上下文初始化 WebAssembly 执行沙盒。许多编程语言运行时都能提供对 HTTP 元数据的原生直接访问,而 WebAssembly 没有此类标准。

我们期望 WASI-HTTP 标准最终能够满足这一需求,与此同时,我们也提供了 Rust 和 C 语言的软件开发套件(SDK)。Unit-Wasm SDK 支持轻松编写 Web 应用和 API,这些应用和 API 可编译为 WebAssembly,并在 NGINX Unit 上运行。请查看我们的 WebAssembly 操作指南,了解开发环境和构建步骤。

尽管我们希望实现 WebAssembly 作为通用运行时的潜力,但使用该 SDK 构建的应用只能在 NGINX Unit 上运行。因此,我们将 WebAssembly 支持作为技术预览版推出,希望尽快代之以 WASI-HTTP 支持。

试用技术预览版

技术预览版旨在展示服务器端 WebAssembly 的潜力,同时为运行 Web 应用提供轻量级服务器。欢迎试用,并提出反馈意见。请在 NGINX Community Slack 上或通过 NGINX Unit GitHub repo 告诉我们。

在开始使用之前,请安装 NGINX Unit 并查看 WebAssembly 操作指南。


NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源: 开源社区官网 | 微信公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 教程 - 06 类的封装、继承、多态

文章目录 封装继承多态 封装 在private/protected 模块放置数据或者底层算法实现&#xff1b;在public块提供对外接口&#xff0c;实现相应的功能调用&#xff1b;类的封装案例 #include <iostream> using namespace std;// 类的定义 一般放在头文件 class Stu {public…

uniapp——上传图片获取到file对象而非临时地址——基础积累

最近在看uniapp的代码&#xff0c;遇到一个需求&#xff0c;就是要实现上传图片的功能 uniapp 官网地址&#xff1a;https://uniapp.dcloud.net.cn/ 上传图片有对应的API&#xff1a; uni.chooseImage方法&#xff1a;https://uniapp.dcloud.net.cn/api/media/image.html#choo…

没有手机怎么办呐!高考成绩出来了:请不要吹灭别人的灯——早读(逆天打工人爬取热门微信文章解读)

结婚的时候红包随礼随多少呢 引言Python 代码第一篇 洞见 高考成绩出来了&#xff1a;请不要吹灭别人的灯第二篇结尾 为什么是这个标题呢&#xff1f; 是因为摸鱼看足球直播 主播好兄弟结婚 他老婆问他要红包 引言 今天早上停电了 大概是在3点多的时候 我本身一直都没有开空调…

Javac编译器

Java语言的编译器是一段不确定的操作过程&#xff0c;可能是讲Java文件转变为class文件的过程&#xff0c;也可能是指虚拟机的后端编译&#xff0c;讲字节码转换为机器码的过程&#xff0c;还肯是静态提前编译器直接讲Java文件编译为本地机器代码的过程。 前端编译器&#xff…

HTML5五十六个民族网站模板源码

文章目录 1.设计来源高山族1.1 登录界面演示1.2 注册界面演示1.3 首页界面演示1.4 中国民族界面演示1.5 关于高山族界面演示1.6 联系我们界面演示 2.效果和源码2.1 动态效果2.2 源代码2.3 源码目录 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.ne…

数字化转型第三步:数字化业务创新与发展,提升收入和利润

引言&#xff1a;之前笔者的文章发布了企业数字化转型业务部分&#xff0c;如【开源节流】如何通过数字化转型增强盈利能力&#xff1f;企业供应链数字化转型如何做&#xff1f;让企业盈利能力增强再飞一会 【财务数字化转型之底座】集团企业财务数据中台系统建设方案 等文章&a…

基于jeecgboot-vue3的Flowable流程-自定义业务表单处理(二)-挂接自定义业务表单

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、增加一个根据服务名称动态寻找对应自定义表单组件的hooks import { ref, reactive, computed, markRaw, onMounted, defineAsyncComponent } from vue; import { listCustomForm } fro…

Redis之优惠券秒杀

文章目录 全局ID生成器添加优惠券实现优惠券秒杀下单超卖问题悲观锁和乐观锁相关文章乐观锁执行逻辑乐观锁解决超卖问题 一人一单功能超卖问题相关文章一人一单执行逻辑代码实现集群模式下锁失效 分布式锁基于Redis的分布式锁Redis实现分布式锁流程实现分布式锁初级版本分布式锁…

RabbitMQ(消息队列)

RabbitMQ 它是消息中间件&#xff0c;是在消息的传输过程中保存消息的容器&#xff0c;实现应用程序和应用程序之间通信的中间产品。目前主流消息队列通讯协议是AMQP&#xff08;二进制传输&#xff0c;支持多种语言&#xff09;、JMS&#xff08;HTTP传输&#xff0c;只支持J…

要离职了,记录一下个人在用的 Mac 应用

大家好&#xff0c;我是楷鹏。 通用 飞书 说起来不信&#xff0c;第一个推荐的是【飞书】&#xff0c;飞书是目前用过最舒服的项目管理应用了。 单拎出来一个飞书文档&#xff0c;功能和体验远超市面上腾讯文档、石墨文档、语雀等等。 现在飞书还支持个人版&#xff0c;No…

【系统架构设计师】六、信息系统基础知识(定义|分类|企业信息化系统|生命周期|建设原则|开发方法)

目录 一、信息系统的定义 二、信息系统的分类 三、企业使用的信息化系统 四、信息系统的生命周期 五、信息系统建设原则 六、信息系统的开发方法 6.1 结构化方法 6.2 原型法 6.3 构件化开发方法 6.4 面向服务的方法 6.5 面向对象的方法 6.6 敏捷方法 历年真题考情&#x…

还是国产大模型靠谱!这里有一个OpenAI API用户特别搬家计划

近日&#xff0c;一场风波在科技圈引起了广泛的关注。6月25日凌晨&#xff0c;OpenAI向大量开发者发送邮件&#xff0c;通知他们&#xff1a;“您的组织有流量来自来OpenAl目前不支持的地区。从7月9日起&#xff0c;我们将采取额外措施&#xff0c;停止OpenAI不支持的国家和地区…

iOS开发者模式自带弱网测试工具

弱网测试的思路 弱网功能测试&#xff1a;2G/3G/4G、高延时、高丢包 无网状态测试&#xff1a;断网功能测试、本地数据存储 用户体验关注&#xff1a;响应时间、页面呈现、超时文案、超时重连、安全及大流量风险 网络切换测试&#xff1a;WIFI → 4G/3G/2G → 网多状态切换…

①分析胃癌组蛋白脱乙酰酶HDS模型-配对转录组差异

目录 HDS评分构建 ①数据加载 ②评分计算 做样本及评分展示图 ①数据处理 ②进行作图 分析配对的单细胞及转录组胃癌数据的 HDS评分,数据源于gastric-cancer - GitCode①胃癌单细胞和配对转录组揭示胃肿瘤微环境(文献和数据)_代码笔记:处理迄今为止最大的单细胞胃癌数…

贪吃蛇项目GameStart部分:对游戏的初始化

接上一篇文章介绍完需要使用到的WIN32API的相关知识&#xff0c;本篇文章让我们来开始使用他们来创建我们的贪吃蛇欢迎界面以及游戏所需要的地图。 准备工作&#xff1a; 为了后面我们构建贪吃蛇游戏所需要的各项函数便于观察&#xff0c;同时便于我们的函数声明&#xff0c;在…

【源码+文档+调试讲解】企业人才引进服务平台

摘 要 随着信息时代的来临&#xff0c;过去的传统管理方式缺点逐渐暴露&#xff0c;对过去的传统管理方式的缺点进行分析&#xff0c;采取计算机方式构建企业人才引进服务平台。本文通过课题背景、课题目的及意义相关技术&#xff0c;提出了一种企业信息、招聘信息、应聘信息等…

Python-爬虫 下载天涯论坛帖子

为了爬取的高效性&#xff0c;实现的过程中我利用了python的threading模块&#xff0c;下面是threads.py模块&#xff0c;定义了下载解析页面的线程&#xff0c;下载图片的线程以及线程池 import threading import urllib2 import Queue import re thread_lock threading.RL…

300 KVA(240kW、180KVAR)系列负载组

交流 固定式/永久式 电阻式和电抗性 300 KVA&#xff08;240kW、180KVAR&#xff09; 480 伏交流电 60赫兹 这是一款紧凑、多功能的 300 KVA 固定/永久负载组&#xff0c;用于测试备用发电机和地面电源装置。负载组可用于测试在 480V 电压下最大 300KVA 的任何负载。…

可穿戴式手持气象仪

TH-SQ17在快节奏的现代生活中&#xff0c;我们越来越依赖各种智能设备来辅助我们的决策和行动。其中&#xff0c;气象信息的重要性不言而喻&#xff0c;它不仅关系到我们的出行安全&#xff0c;更影响着我们的日常生活安排。如今&#xff0c;一款革命性的产品——可穿戴式手持气…

Qt 实战(6)事件 | 6.1、事件机制

文章目录 一、事件1、基本概念2、事件描述3、事件循环4、事件分发4.1、QApplication::notify()4.2、QObject::event() 5、事件传递6、事件处理器 前言&#xff1a; Qt 框架中的事件机制&#xff08;Event Mechanism&#xff09;是一种核心功能&#xff0c;它允许应用程序以事件…