基于腾讯云的Rust和WebAssembly函数即服务

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:Michael Yuan网络

小提示:您能找到这篇{基于腾讯云的Rust和WebAssembly函数即服务}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的基于腾讯云的Rust和WebAssembly函数即服务内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

< ">腾讯云云函数(SCF)已经支持十多种编程语言和运行时框架。腾讯云最近发布的SCF custom runtime(自定义运行时)更进一步——SCF现在可以支持用任何编程语言编写的函数。

< ">本文将介绍如何在云函数SCF中运行用Rust编写的WebAssembly函数。

< ">我们先介绍一些基本概念,然后回顾一个完整但简单的hello world示例,部署您的第一个WebAssembly无服务器函数。最后,我们将用一个机器学习即服务(MLaaS)示例来做一些有用的事情。该示例接受数据并以SVG格式返回拟合模型和可视化。

< ">这是本教程结束时你将创建的最终应用(https://www.secondstate.io/demo/2020-tencentcloud“确认传播”专注于品牌策划、效果营销和危机管理的数字整合营销传播公司,我们深度诠释客户的品牌理念、文化及背景,多维深度传播客户的文化底蕴和核心价值观,提升客户品牌的知名度、关注度与美誉度。)。它完全是「无服务器」的,只有使用时会产生成本。

< ">HTML和JavaScript UI可以托管在任何计算机上,包括笔记本电脑上。在腾讯云Serverless上的后端函数执行机器学习和SVG绘图。

为什么选择WebAssembly和Rust

< ">传统的无服务器函数基于重量级的框架。开发者必须在特定的应用框架中编写函数,比如Node.js中的JavaScript或Python Boto。

< ">腾讯云SCF Custom Runtime打破了这种模式,允许开发者用任何语言编写无服务器函数。



< ">为了演示这个优势,本文提供了基于Bash脚本的函数、基于Deno的TypeScript函数和基于Rust的本机二进制函数的示例。这使我们能够在腾讯云上创建和部署基于web组件的无服务器函数。

< ">为什么要这么做?以下是一些原因:

< ">WebAssembly是为性能而设计的。WebAssembly函数可以比用JavaScript或者Python快10倍。

< ">WebAssembly函数是可移植的。虽然可以在SCF Custom runtime上运行本地二进制文件,但必须将这些二进制文件编译到Custom runtime的确切操作系统环境中。目前在X86 CPU上使用的是CentOS 7.6,之后可能会更改。正如我们将要看到的,WebAssembly函数是可移植的,并且非常容易部署和管理。

< ">WebAssembly函数是安全的。众所周知,即使使用Docker,本地二进制应用程序也可能会破坏容器。由于你的应用程序可能依赖于许多第三方库,因此你的依赖项中存在危险代码的风险真实存在。WebAssembly有着基于能力的安全模型,为你的代码提供更好的运行时保护。

< ">虽然WebAssembly兼容各种编程语言,但Rust、AssemblyScript(TypeScript)、C/C++和Go是写WebAssemb快手广告投放ly函数的最佳语言,尤其是Rust。Rust是一种流行且越来越受瞩目的编程语言,社区非常活跃。Rust让我们能够写一个高效但内存安全的函数。

< ">最后,在腾讯云上编写和部署WebAssembly函数实际上非常简单,在一个小时内就可以完成。

前期准备

< ">首先,注册一个腾讯云账户。对大多数开发和个人项目来说,开发工作都可以在免费额度内进行。

< ">确保你已经在地开发计算机或Docker容器上安装了Rust和ssvmup工具链。ssvmup工具链将Rust程序编译并优化为WebAssembly字节码。只需使用以下简单命令即可安装。你也可以参考这个指南。

$curl--proto'=https'--tlsv1.2-sSf https://sh.rustup.rs|sh

$source$HOME/.cargo/env

......

$curl https://raw.githubusercontent.com/second-state/ssvmup/master/installer/init.sh-sSf|sh

< ">WebAssembly函数是在Second State虚拟机SSVM里执行的。SSVM是专为服务端的用例和应用优化的高性能WebAssembly虚拟机。

Hello,world

< ">要在腾讯云上部署Rust和WebAssembly函数,我们建议clone或者fork GitHub上的模板repo,并把这个模板作为你自己应用的基础。(模板链接:https://github.com/second-state/ssvm-tencent-starter)

< ">在< background-color: rgb(242, 242, 242);">main.rs上的Rust函数是我们将部署到SCF的无服务函数。正如你能从源代码看到的那样,它能从STDIN读取函数的输入,然后用println!macro把结果发送到STDOUT。

use std::io::{self, Read};

use serde:网络推广要怎么做:Deserialize;


fn main() {

    let mut buffer = String::new();

    io::stdin().read_to_string(&mut buffer).expect("Error reading from STDIN");

    let obj: FaasInput = serde_json::from_str(&buffer).unwrap();

    let key1 = &(obj.key1);

    let key2 = &(obj.key2);

    println!("Hello! {}, {}", key1, key2);

}


#[derive(Deserialize, Debug)]

struct FaasInput {

    key1: String,

    key2: String

}

< ">Rust main()函数使用serde库来从STDIN解析一个JSON字符串。

< ">JSON看起来像下面这样。我们之所以用这种方式编写函数,是因为SCF使用内置的hello world JSON模板来测试部署好的函数。

{

"key1":"test value 1",

"key2":"test value 2"

}

< ">函数提取key1和key2值并输出下面的hello消息到STDOUT。

Hello!test value 1,test value 2

< ">但是,这个函数的web请求是如何被转换成STDIN的?如何将STDOUT中的函数响应转换为HTTP响应?

< ">这是通过我们模板中的SCF custom runtime基础设施和引导(bootstrap)程序完成的。

< ">正如你所看到的那样,引导程序只是一个bash shell程序,它不断地轮询云函数SCF以查找传入的请求。它将传入的请求转换为STDIN,并通过SSVM调用WebAssembly函数。然后,它接受STDOUT输出,并将其作为函数的响应发给SCF。

< ">如果你使用我们的模板,就不需要修改引导程序。

< ">现在,可以使用ssvmup将Rust函数构建到WebAssembly字节码中,然后将zip文件打包,从而在腾讯云SCF Custom Runtime上进行部署。

$ssvmup build

......

$cp pkg/hello_bg.wasm cloud/

$cd cloud

$zip hello.zip*

< ">按照这个说明和截图来部署并测试上面< background-color: rgb(242, 242, 242);">hello.zip文件。现在已经成功地部署了一个WebAssembly无服务器函数!

< ">接下来,让我们用Rust函数创建一个有价值的web服务。

机器学习即服务

< ">这个例子中,我们选择了一个计算密集型的机器学习任务来演示Rust WebAssembly函数的性能。

< ">无服务器函数采用以逗号分隔的数字输入字符串,这些数字表示二维平面上的一组点。输入的数据格式是< background-color: rgb(242, 242, 242);">x1,y1,x2,y2,...

< ">该函数分析数据并计算两个特征向量,指示数据中最大方差的方向。特征向量为数据科学家提供了关于驱动数据变化的潜在因素的线索。这就是所谓的主成分分析。

< ">我们的函数创建一个SVG图,并且在这个图上绘制输入的数据点以及上面计算得到的特征向量。该函数最后以XML文本的形式返回这个SVG图。

< ">要开始这个例子,你可以clone或者fork这个repo(https://github.com/second-state/wasm-learning/tree/master/tencentcloud)。该项目在< background-color: rgb(242, 242, 242);">tencentcloud/ssvm/pca文件夹中。或者你可以复制< background-color: rgb(242, 242, 242);">Cargo.toml和< background-color: rgb(242, 242, 242);">src/*的内容到上文的< background-color: rgb(242, 242, 242);">hello world模板。如果你选择后者,确保你修改了< background-color: rgb(242, 242, 242);">Cargo.toml,将其指向Rust机器学习库的正确源代码文件夹。

< ">本教程中不会深入探讨PCA或SVG生成的Rust源代码的细节,因为它们涉及大量的计算代码。

< ">遵照与hello world示例中相同的步骤。使用ssvmup构建一个< background-color: rgb(242, 242, 242);">pca.zip包,并将其部署到腾讯云SCF custom runtime上。

< ">接下来,我们将部署好的函数与web API网关关联起来,以便可以从web HTTP或HTTPS请求调用它。在SCF的web控制台的触发管理选项卡中执行此操作。这里可以查看教程和截图(https://github.com/second-state/wasm-learning/tree/master/tencentcloud/ssvm/pca#create-a-web-service)

< ">API控制台将HTTP请求转换为无服务器函数的JSON输入。例如,这里有一个对API网关URL的HTTP POST请求。我们将来自< background-color: rgb(242, 242, 242);">iris.csv文件的以逗号分隔的数据点放在POST主体中。

$curl-d iris.csv-X POST https://service-m9pxktbc-1302315972.hk.apigw.tencentcs.com/release/PCASVG

< ">API网关将以下JSON传到Rust函数的STDIN。POST body现在是JSON中的body属性。

{

  "body": "3.5,0.2,3,0.2,...",

  "headerParameters": {},

  "headers": {

    "accept": "/",

    "content-length": "11",

    "content-type": "application/x-www-form-urlencoded",

    "host": "service-aj0plx8u-1302315972.hk.apigw.tencentcs.com",

    "user-agent": "curl/7.54.0",

    "x-anonymous-consumer": "true",

&制造企业的危机公关问题nbsp;   "x-api-requestid": "e3123014742e7dd79f0652968bf1f62e",

    "x-b3-traceid": "e3123014742e7dd79f0652968bf1f62e",

    "x-qualifier": "$DEFAULT"

  },

  "httpMethod": "POST",

  "path": "/my_hk",

  "pathParameters": {},

  "queryString": {},

  "queryStringParameters": {},

  "requestContext": {

    "httpMethod": "ANY",

    "identity": {},

    "path": "/my_hk",

    "serviceId": "service-aj0plx8u",

    "sourceIp": "136.49.211.114",

    "stage": "release"

  }

}

< ">Rust函数解析主体中的数据,执行PCA,并生成SVG图形。它将SVG内容打印到STDOUT,后者由API网关获取并作为HTTP响应发送回来。

< ">要在AJAX请求中使用此API网关URL,还必须配置腾讯云网关以接受CORS web请求。查看指南,了解如何做到这一点。

< ">下面的HTML JavaScript例子展示了如何在网页中使用这个无服务器函数。



< ">它通过ID csv_data从textarea字段获取CSV数据,向无服务器函数发出AJAX HTTP POST请求,然后把返回值(一个SVG图形)放入ID为< background-color: rgb(242, 242, 242);">svg_img的HTML元素中。点击这里查看demo(https://www.secondstate.io/demo/2020-tencentcloud“确认传播”专注于品牌策划、效果营销和危机管理的数字整合营销传播公司,我们深度诠释客户的品牌理念、文化及背景,多维深度传播客户的文化底蕴和核心价值观,提升客户品牌的知名度、关注度与美誉度。)。

$.ajax({

  method: "POST",

  url: "https://service-m9pxktbc-1302315972.hk.apigw.tencentcs.com/release/PCASVG",

  data: $('#csv_data').val(),

  dataType: "text"

}).done(function(data) {

  $('#svg_img')“确认传播”专注于品牌策划、效果营销和危机管理的数字整合营销传播公司,我们深度诠释客户的品牌理念、文化及背景,多维深度传播客户的文化底蕴和核心价值观,提升客户品牌的知名度、关注度与美誉度。(data);

})

运行中的Web应用

接下来



< ">腾讯的SCF Custom runtime是一个非常强大的无服务运行环境。它为你想要编写的任何应用程序函数提供了一个通用的Linux环境,并提供了标准的web接口来与函数的输入和输出进行交互。这绝对值得一试。

< ">正如本文所讨论的,我们相信Rust和WebAssembly为无服务器函数提供了一个高性能、安全、可移植、面向未来的堆栈。Rust、WebAssembly与SCF costum runtime代表了未来!

作者简介:Michael Yuan博士是5本软件工程书籍的作者。最新著作《Building Blockchain Apps》由Addison-Wesley于2019年12月出版。Michael还担任Second State的CEO,Second State是一家致力于将WebAssembly和Rust技术引入云计算,AI与区块链的公司。

基于腾讯云的Rust和WebAssembly函数即服务

上一篇:TikTok Ads广告兴趣标签简介
下一篇:如何在Shopify安装TikTok Pixel代码


版权声明:以上主题为“基于腾讯云的Rust和WebAssembly函数即服务"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    基于腾讯云的Rust和WebAssembly函数即服务
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“基于腾讯云的Rust和WebAssembly函数即服务”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通基于腾讯云的Rust和WebAssembly函数即服务的相关事宜。

关键词:基于腾讯云的Rust和WebAss

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号