写点什么

webAssembly on server side 的应用场景

作者:甲韭
  • 2022-12-21
    江苏
  • 本文字数:1064 字

    阅读完需:约 3 分钟

webAssembly on server side 的应用场景

webAssembly 除了应用在前端和区块链领域,在云原生领域也有一些应用场景。

webAssembly with k8s

webAssembly runtime 作为一种 pod 类型。


基本原理是实现一个特殊的 kubectl,然后将 webAssembly 的 deployment selector 到这个运行特殊 kubectl 的节点,这个节点有 webAssembly runtime 能够运行 webAssembly 程序。


目前有 azure 在做这件事情,这是 Azure 官方 AKS 如何开启并使用这个特性的指南: https://learn.microsoft.com/en-us/azure/aks/use-wasi-node-pools


为什么做?


在 azure 开源版本 krustlet blog 中提到:


Our hunch is that WebAssembly is going to play a tremendous role as a cloud technology–well beyond the browser


可见是信仰的力量。。。


有什么好处?


  • 比 docker 更小的包,更快的冷启动速度

  • 相较于基于 Linux 内核的OCI运行在 arm 架构上还是挺麻烦的,但是 WebAssembly 就没这个问题


webAssembly with gateway

现代云原生网关都追求很强的扩展能力。


以下云原生网关都使用了 webAssembly 作为扩展能力的实现方式。


  1. https://apisix.apache.org/zh/blog/2021/11/19/apisix-supports-wasm/

  2. https://megaease.com/zh/blog/2021/09/17/extend-backend-application-with-webassembly/

  3. 网红程序员左耳朵耗子的公司 easegress 产品。


基本原理是将 webAssembly 嵌入到 Gateway,用户使用其他语言编写规则逻辑脚本,编译成 webAssembly,网关进行加载脚本执行,根据结果决定网关下一步动作。


以 apiv3 举个例子,假设 apiv3 也集成了 webAssembly runtime,每个 service 请求都会加载 service 自定义的 webAssembly 代码执行。可以在 webAssembly 代码里实现比如鉴权的逻辑,如果鉴权失败 return 401,网关就不需要把流量转发到 service 了。


还有一个 easegress 的用来做秒杀的应用案例,基本思路是一致的就是在调用目标 service 之前先调用 webAssembly 代码,主要要两个好处,1.执行环境是隔离的


  1. 可以用多种语言编写 script 然后编译成 webAssembly 字节码。

with Rule Engine

还没看到有人这样用,只是我的一个想法,比如做资源风险巡检这个场景,不同的资源有不同的 check 规则,我们可以将运营中会变化的逻辑通过 webAssembly 的脚本实现,然后在应用中嵌入 webAssembly runtime 运行这段代码,将规则和应用程序分离。

concepts

webAssembly runtimes & WASI


webassembly-runtimes 是 webassembly 代码的运行时,有很多实现:https://blog.logrocket.com/webassembly-runtimes-compared/


因为 webassembly-runtimes 是隔离的并不能直接 syscall 访问操作系统,WASI 是和操作系统之间的 API。


如果想玩一下的话,推荐:wasmtime



更多文章:https://bitseatech.cn

发布于: 刚刚阅读数: 6
用户头像

甲韭

关注

还未添加个人签名 2018-02-10 加入

还未添加个人简介

评论

发布
暂无评论
webAssembly on server side 的应用场景_云原生_甲韭_InfoQ写作社区