Google、Lyft及IBM合作开发的微服务管理器Istio,最近推出了1.5版本,而Google说明这个版本其中最大的特色,便是Istio的网络代理Envoy开始支持WebAssembly,而这让Envoy和Istio能够获得WebAssembly扩展组件的加持,借以将Istio可扩展性从控制层(Control Plane)移到侧车代理(Sidecar Proxy)。目前这项功能还在Alpha测试阶段。
Lyfty在2016年开源了Envoy服务代理项目,现在逐渐成为云计算原生应用程序部署的固定工具,包括在边缘以及侧车应用都受到欢迎。Envoy原本就有其扩展机制,可以使用预编译的C++模块或是Lua脚本增加扩展功能,但Google提到,这两者都有其缺点,由于Istio的设计目标之一,就是要简化政策、遥测和日志系统的扩展性,虽然使用控制层组件和程序外配置器可以达到这目的,但是却会增加多余的网络跳跃点以及延迟。
WebAssembly是一种二元指令格式,Istio现在通过Envoy把WebAssembly带来服务器端中。WebAssembly现在已经是W3C推荐的网页应用标准,用户可从30多种语言编译成WebAssembly程序代码,并在沙盒环境中执行。通过WebAssembly在Envoy代理中扩展功能,则不需要重新编译程序代码,部署也更加简单,Istio能够将扩展组件发布给代理,在不需要重新启动的情况下,加载扩展组件。
Envoy项目创造者Matt Klein提到,在Envoy中支持WebAssembly,将会解开更多服务网状网络和API网关的使用案例。而为了要强化WebAssembly扩展组件的使用体验,他们与Solo.io合作,Solo.io创建了WebAssembly Hub服务,可用来构建、共享、探索和部署WebAssembly扩展组件,让用户够简单地将WebAssembly扩展组件部署到Envoy上。
WebAssembly Hub高度自动化了开发和部署WebAssembly扩展组件的步骤,使用WebAssembly Hub工具,用户可以轻松地将任何支持的语言程序代码,编译成为WebAssembly扩展组件,接着把这些扩展组件上传至Hub注册服务中,用户只要使用单个指令,就可以将扩展组件部署至Istio中。Google提到,WebAssembly扩展组件与容器一样易于管理,能简单地安装以及执行。
WebAssembly Hub在背后处理了许多细节问题,像是ABI版本验证和权限控制等问题,而且也会自动扩展部署,减少跨Istio服务代理配置的麻烦,避免配置错误或是版本不符的意外错误。
目前Envoy支持WebAssembly的功能,仍在Alpha测试中,接下来开发团队会最终确定ABI,并将其转变为标准,以在标准组织中取得更广泛的反馈。另外,Google提到,他们会继续向Envoy上游项目提供支持,并且为相关工具以及WebAssembly Hub寻找适合的社群。