关于wasm:Higress实战-30行代码写一个Wasm-Go插件

前言在11月15号的直播 《Higress 开源背地的倒退历程和上手 Demo 演示》中,为大家演示了 Higress 的 Wasm 插件如何面向 Ingress 资源进行配置失效,本文对当天的 Demo 进行一个回顾,并阐明背地的原理机制。 本文中 Demo 运行的前提,须要在 K8s 集群中装置了 Higress,并失效了上面这份 quickstart 配置:https://github.com/alibaba/hi... 这个 Demo 要实现的性能是一个 Mock 应答的性能,须要实现依据配置的内容,返回 HTTP 应答。 本文会按以下形式进行介绍: 编写代码:代码逻辑解析失效插件:阐明代码如何进行编译打包并部署失效测试插件性能:阐明全局粒度,路由/域名级粒度如何失效插件失效原理:对整体流程进行回顾,阐明插件失效的原理三个革命性的个性:介绍 Wasm 插件机制为网关插件开发带来的改革编写代码 package mainimport ( . "github.com/alibaba/higress/plugins/wasm-go/pkg/wrapper" "github.com/tetratelabs/proxy-wasm-go-sdk/proxywasm" "github.com/tetratelabs/proxy-wasm-go-sdk/proxywasm/types" "github.com/tidwall/gjson")func main() { SetCtx( "my-plugin", ParseConfigBy(parseConfig), ProcessRequestHeadersBy(onHttpRequestHeaders), )}type MyConfig struct { content string}func parseConfig(json gjson.Result, config *MyConfig, log Log) error { config.content = json.Get("content").String() return nil}func onHttpRequestHeaders(ctx HttpContext, config MyConfig, log Log) types.Action { proxywasm.SendHttpResponse(200, nil, []byte(config.content), -1) return types.ActionContinue}下面代码中能够看到三个函数: ...

November 25, 2022 · 3 min · jiezi

关于wasm:Bytecode-Alliance-推出了一个-WebAssembly-Micro-Runtime-WAMR

Bytecode Alliance 推出了一个 WebAssembly Micro Runtime (WAMR),是一个轻量级的 Wasm 容器。最近两年 Wasm 的 runtime 堪称万帆竞发,不说别的,Bytecode Alliance本人还有一个wasmtime呢。 看了一下这个我的项目,次要是英特尔开发的,特点整个VM最小只须要50k就能够运行。阿里也是我的项目参与方,而且把这个runtime用在了IoT设施上,比拟有意思的是他们实现了一个相似的微信小程序wxml+script的模式,不过WAFT把渲染放在了云端。可见一个微型runtime能够适应的畛域十分广,从服务端容器到IoT设施。 不过最大的问题就是当初wasm的runtime仿佛有点太多了,而且Bytecode Alliance的次要成员是Mozilla、英特尔、RedHat 和 Fastly,这几个公司前面会不会一条心,可说不好。

November 22, 2022 · 1 min · jiezi

关于wasm:wasm入门

什么是WebAssemblyWebAssembly(简称Wasm)是一种新型的二进制代码格局,蕴含这种二进制代码格局的文件能够用相似加载模块的形式被浏览器疾速、高效地解析和执行。 基本原理V8引擎在解决Wasm模块时省略了大量Pipeline中的环节。引擎并不需要对Wasm模块中的二进制代码进行优化,也不须要生成冗余的占用大量内存的AST构造信息。而只须要把这些模块中的二进制代码间接加载到内存中,而后通过位于 V8链路末端编译器后端的解决,最初生成的机器码便能够被浏览器间接执行。从Wasm模块被浏览器加载到最初执行的整个过程并不需要很多的解决环节和系统资源开销,而这也是Wasm利用为何会放弃如此高性能的泛滥起因之一。 webassembly.studioWasmFiddle装置Emscripten下载最新Python克隆emsdkgit clone git@github.com:emscripten-core/emsdk.git装置激活Emscripten(WIN)window平台倡议间接用WSL来装置,不然会有一堆问题 ./emsdk install latest./emsdk activate latest校验装置emcc -v简略的例子hello.c# include <stdio.h>int main() { printf("你好, 世界!\n"); return 0;}生成wasm和jsemcc hello.c -o能够指定输入文件名称 运行新建html,并在服务器查看,管制会打印"你好, 世界!" <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <script src="./a.out.js"></script></body></html>WEB接口(TODO)

July 1, 2022 · 1 min · jiezi

关于wasm:Rust编译到WebAssembly可能出现侧信道攻击

许多工程师抉择 Rust 作为他们实现加密协议的首选语言,因为它具备弱小的平安保障。 只管 Rust 使平安的明码工程更容易,但仍有一些挑战须要留神。其中之一是:须要保留恒定工夫(constant-time)属性,这确保无论输出如何,代码都将始终破费雷同的工夫来运行。 这些属性在避免时序攻打(timing attack)方面很重要,但它们可能会受到编译器优化的影响。 如何阻止编译器优化毁坏代码的恒定工夫呢?有几种计划:(1)应用 -C opt-level=0 敞开所有优化。这种计划根本不可行,因为咱们须要编译器的优化。(2)应用来自 subtle crate 的结构来尝试阻止 LLVM 优化恒定工夫代码门路的尝试。(3)语言内置私密类型来反对。之前有一个 Rust RFC引入了 secret types,但这已被推延,期待 LLVM 反对。 在node中应用 WASM,意味着须要通过两次优化:(1)由 Rust 通过 LLVM 编译为 WebAssembly;(2)再由 V8 的 Turbofan JIT 编译器再次对 WAMS 进行编译优化。

May 7, 2022 · 1 min · jiezi

关于wasm:通过-emscripten-编写-wasm

emscripten 应用 LLVM 编译器。emscripten 官网文档 环境要求 python 2.7.12+,3 也能够。mime-type 媒体类型,application/wasm,能够通过 http 头验证。装置 # 下载 emsdk 仓库git clone https://github.com/emscripten-core/emsdk.git && cd emsdk# 下载并装置 sdk./emsdk install latest# 激活最新 sdk./emsdk activate latest# 激活终端环境变量source ./emsdk_env.sh也能够增加到环境变量中 # emsdkexport PATH=$PATH:$YOUR_DIR/emsdkexport PATH=$PATH:$YOUR_DIR/emsdk/node/14.18.2_64bit/binexport PATH=$PATH:$YOUR_DIR/emsdk/upstream/emscripten验证 emsdk list一个简略的 wasm 程序calculate_prime.c #ifdef __EMSCRIPTEN__ #include <emscripten.h>#endif#include <stdlib.h>#include <stdio.h>int IsPrime(int value) { int i; for (i = 2; i < value; i++) { if (value % i == 0) { return 0; } } return 1;}int main(int argc, char **argv) { int start = 0; int end = 100; printf("prime number between %d and %d\n", start, end); for (int i = start; i < end; i++) { if (IsPrime(i)) { printf("%d is prime\n", i); } } return 0;}</div></div> ...

March 18, 2022 · 2 min · jiezi

关于wasm:Hacker-News-周报-基于-WASM-在浏览器中运行-OfficeK8s-纪录片GitHub-功能增强

https://www.bilibili.com/vide...

February 20, 2022 · 1 min · jiezi