Cloudflare无服务器服务Workers现支援WebAssembly

Cloudflare宣布在其无服务器JavaScript执行服务Cloudflare Workers,开始支援WebAssembly,目前所有使用Workers服务的用户,已经可以在应用程序中新增WebAssembly程式码,此为无须额外费用的功能。
Workers是Cloudflare的无服务器服务,可以让使用者将JavaScript程式码,直接部署到云端上执行,使用者一旦部署程式码,在30秒之内便会被发布到全球每个资料中心。Workers可以从Cloudflare的153个资料中心,以最靠近终端使用者的位置处理HTTP运算流量,提供低延迟和低成本的服务。在上周Cloudflare为Workers增加了储存功能,因此现在使用者已经能完全使用Workers开发应用程序。
虽然目前Workers只支援JavaScript,但是透过WebAssembly,使用者就可以使用更多语言来开发应用程序。WebAssembly是一种用来扩展网页平台,以支援诸如C、C++、Rust和Go等编译语言的技术,这些语言可以被编译成特殊的WebAssembly二进制格式,供浏览器载入执行。WebAssembly和JavaScript都能在安全的沙盒中运作,但由于WebAssembly会被编译成低阶语法,因此能有效的执行部分资源密集的工作负载。
不过,并非所有工作都适合使用WebAssembly,Cloudflare提到,像是把请求重新转址到不同的URL,或是检查授权令牌等轻量级的工作,使用纯粹的JavaScript可能比WebAssembly更快更容易。由于WebAssembly应用程序在自己独立的内存空间中运作,这代表WebAssembly在执行过程中,需要把资料复制进自己的内存中执行,因此当程式码需要频繁的跟外部物件互动,且没有大量的运算工作,则可能不会因为编译成WebAssembly,而获得执行效率上的好处。
相反的,如果是要处理像是资源耗尽(Resource-hungry),或是处理音讯串流、调整图片大小等工作,就能真正发挥WebAssembly的长处,虽然纯JavaScript也能完成这些工作,JavaScript引擎如V8等也在这些部分下了很大的功夫,Cloudflare提到,但是仍赢不过具有静态类型和外显内存配置的编译语言。
Cloudflare持续的与Emscripten和WebAssembly社群合作,以确保Cloudflare Workers和网页浏览器一样,可以无缝支援WebAssembly。另外,他们也计划透过整合WebAssembly 和Cloudflare Spectrum,允许现存的C和C++服务器程式码,能处理边缘上任意TCP和UDP协定。
今年无服务器服务竞争激烈,除了很早以前就有的AWS Lambda,还有Google在Next 2018大会发表的事件驱动无服务器平台Cloud Functions正式可用,还与Pivotal、IBM、红帽和SAP合作开发了Knative,要透过Kubernetes让使用者跨云端平台管理无服务器服务。另外,微软也在早前更新释出Azure Functions 2.0,还让其Runtime可以落地,在本机Windows、macOS和Linux上执行。
