时间: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与区块链的公司。 |
上一篇:TikTok Ads广告兴趣标签简介
下一篇:如何在Shopify安装TikTok Pixel代码
基于对传统行业渠道的理解,对互联网行业的渠道我们可以下这样一个定义:一切...
小米应用商店的后台操作和苹果是比较相似的,因为都能填写100字符关键词,允许...
小米的规则目前是在变更中的,但是根据经验小米的搜索排名评分的高低是个很重...
为了恰饭,有时候是要接入一些广告的,所以FB也专门有一个广告的SDK,这就是A...
在 2018 年于旧金山举行的游戏开发者大会上,Amazon Web Services (AWS) 曾宣布,目前世...
关于Facebook Audience Network如何收款的问题,其实官方已经给了详细的步骤。本文主要...
本文介绍了Audience Network对广告载体的质量检查,以及它重点广告形式需要注意的问...
随着iOS开发,作为开发者或公司需要针对iOS App开发涉及的方方面面作出对应的信息...
Facebook和谷歌对出海企业广告渠道都很熟悉,但事实上,在国外还有一些渠道也很...
卖家从做号的第1分钟开始,就一定要想好变现路径是什么?一定要以变现为目的去...
小提示:您应该对本页介绍的“基于腾讯云的Rust和WebAssembly函数即服务”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通基于腾讯云的Rust和WebAssembly函数即服务的相关事宜。
关键词:基于腾讯云的Rust和WebAss