跳转至

2026-06-12

今日主题

  • WebAssembly 本质理解
  • 云网关转发平面
  • OVS 隧道抽象
  • IPIP 与多租户

新增认知

WebAssembly 本质理解

  • WASM 是跨平台虚拟指令集:不是模拟器也不是解释器,而是一套抽象的二进制指令集(类似 JVM 字节码但更底层)。
    浏览器加载 .wasm 后 JIT/AOT 编译成本地机器码直接执行,所以性能接近原生。核心价值是"一次编译,到处跑"的可移植二进制格式。

  • WASM 比 JVM 字节码更底层:JVM 指令集内置对象、类继承、虚方法、GC 引用等 Java 概念,假设运行时一定有托管堆。
    WASM 只有 i32/i64/f32/f64 四种数值类型和一块线性内存,没有对象、没有 class、没有 GC。
    高级概念全靠编译器在 4 个类型之上模拟(如指针变 i32 偏移、struct 变内存布局),因此不绑定任何特定语言,C/Rust/Go 都能编译过来。

  • WASM 运行时不止浏览器:独立运行时包括 Wasmtime(Rust,最成熟)、WasmEdge(C++,云原生)、WAMR(C,嵌入式);
    JS 运行时 Node.js/Bun/Deno 内置支持;边缘计算 Cloudflare Workers/Fastly 也跑 WASM;
    甚至 Envoy 用 WASM 写 filter 插件、Docker 实验性支持 WASM 替代容器。

  • ffmpeg.wasm 解决的核心矛盾:浏览器只认识 JS,但视频处理需要 FFmpeg(C 写的几十万行代码)。不用 WASM 只有两条路——
    纯 JS 重写(性能差几个数量级)或上传服务端(失去离线能力)。WASM 是唯一能在浏览器沙箱里以接近原生性能跑 C/C++ 的方案,实现全部离线视频处理。

  • WASM 命名由来:Web + Assembly(汇编),意为"Web 上的汇编语言"。2013 年 Mozilla 从 asm.js 起步,
    2015 年联合 Google/Microsoft/Apple 成立 W3C Community Group 正式定名,2017 年四家浏览器同步发布 MVP,
    2019 年成为 W3C 推荐标准。后缀 .wasm 取 WebAssembly 关键音节拼成。

云网关转发平面

  • 共享转发平面:大规模公网 SLB 或 vGateway 不适合按每个 VPC 创建独立 Linux vxlan device 与 bridge,
    因为设备对象、FDB、namespace、路由表和控制面同步会随租户数量爆炸。更可扩展的做法是共享 datapath,
    通过 VIP/后端/VPC/VNI/目标宿主机 VTEP 等表项决定每个包如何封装并送入 overlay。前置条件是讨论的是云厂商级多租户网关,
    而不是小规模实验环境。

  • vGateway 是逻辑网关:vGateway 通常表示 virtual Gateway,即由共享物理资源池承载的虚拟网关能力。
    用户看到的是 NAT、SLB、VPC Router、Transit Gateway 等逻辑资源,
    底层可能由 x86 转发集群、智能网卡、交换芯片或自研 datapath 实现。关键理解是 v 前缀强调逻辑网络对象与物理承载解耦。

OVS 隧道抽象

  • key 映射 VNI:在 OVS 中 VXLAN 的 VNI 被抽象成通用 tunnel key/tun_id,
    所以配置写 options:key=100 而不是 options:vni=100。
    原因是 OVS 同一套 datapath 要描述 VXLAN、GRE、Geneve 等多种隧道;当端口类型是 vxlan 时,
    key=100 最终会编码进 VXLAN header 的 VNI 字段。

  • flow 动态赋值
    options:key=flow 或 remote_ip=flow 表示 VNI 和远端 VTEP 不固定写死在 tunnel port 上,
    而是由 OpenFlow 流表按包设置。这样一个共享 vxlan 端口可以承载多个 VNI 和多个远端 VTEP,避免为每个租户或 VPC 创建独立隧道设备。
    前置条件是 datapath 有流表规则为每个包补齐 tunnel metadata。

IPIP 与多租户

  • IPIP 缺少租户标识:IPIP 也是隧道,但它只是把 inner IP packet 外面再套一层 IP header,
    没有 VXLAN VNI 这种 overlay 网络标识。因此它天然不适合承载允许地址重叠的多租户虚拟网络;若要多租户隔离,
    需要额外依赖 VRF、network namespace、独立 endpoint IP 或路由表等外部上下文。