$ 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

A função WebAssembly é executada no VM de segundo estado – uma VM WebAssembly de alto desempenho otimizado para casos de uso e aplicativos do lado do servidor.

Olá Mundo

Para começar a sua primeira função Rust e WebAssembly na nuvem Tencent, nós o encorajamos a clonar ou garfo este repositório de modelos no Github e use-o como base para seu próprio aplicativo.

A função Rust em main.rs é a função sem servidor que implementaremos no SCF. Como você pode ver em seu código-fonte, ele lê a entrada da função de STDINe, em seguida, use o println! macro para enviar resultados para o 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}

The Rust main() função usa o serde biblioteca para analisar uma string JSON de STDIN.

O JSON se parece com o seguinte. Escrevemos a função dessa maneira porque esse é o modelo JSON hello world integrado que o SCF usa para testar funções implantadas.

{      "key1": "test value 1",      "key2": "test value 2"}

A função extrai o key1 e key2 valoriza e produz a seguinte mensagem de olá para STDOUT.

Hello! test value 1, test value 2

Mas, como uma solicitação da web para esta função é traduzida em STDIN? E como a função responde em STDOUT foi traduzido em uma resposta HTTP?

Isso é feito pela infraestrutura do SCF Custom Runtime e pelo bootstrap programa em nosso modelo.

Como você pode ver, o bootstrap programa é simplesmente um programa de shell bash que pesquisa continuamente o SCF para solicitações de entrada. Ele traduz a solicitação recebida para STDIN e chama a função WebAssembly por meio do SSVM. Em seguida, leva o STDOUT saída e a envia de volta ao SCF como a resposta da função.

Você não precisa modificar o programa de bootstrap se usar nosso modelo.

Agora, você pode construir a função Rust no bytecode WebAssembly com ssvmup e, em seguida, empacotar um arquivo zip para implantação no Tencent Cloud SCF Custom Runtime.

$ ssvmup build

Siga as instruções e capturas de tela para implantar e testar o hello.zip arquivo de cima. Agora você implantou com sucesso uma função sem servidor WebAssembly!

A seguir, vamos criar um serviço da web útil a partir de uma função Rust.

Aprendizado de máquina como serviço

Para este exemplo, escolhemos uma tarefa de aprendizado de máquina com uso intensivo de computação para demonstrar o desempenho de uma função Rust WebAssembly.

A função sem servidor recebe uma string de entrada de números delimitados por vírgulas que representam um conjunto de pontos em um plano 2-D. O formato dos dados de entrada é x1,y1,x2,y2,....

A função analisa os dados e calcula dois vetores próprios que indicam as direções da maior variação nos dados.

Os Eigenvectors fornecem aos cientistas de dados dicas sobre os fatores subjacentes que determinam a variação dos dados. Isso é chamado de Análise de Componente Principal (PCA).

Nossa função cria um gráfico SVG com os pontos de dados de entrada, bem como os vetores próprios traçados nele. Ele produz o gráfico SVG em texto XML.

Para começar com este exemplo, você deve clone ou bifurque este repositório. O projeto está no tencentcloud / ssvm / pca pasta. Você também pode copiar o conteúdo do Cargo.toml e src /*ao seu modelo hello world.

Se você fizer o último, certifique-se de modificar o Cargo.toml para apontar para a pasta de código-fonte correta para nossa biblioteca de aprendizado de máquina Rust.

Não vou entrar em detalhes sobre o código-fonte do Rust para geração PCA ou SVG neste tutorial, pois eles envolvem uma boa quantidade de código computacional. Se você estiver interessado, pode verificar mais recursos no final deste artigo.

Você pode siga o mesmo processo como no exemplo hello world. Use o ssvmup para construir um pca.zip empacotar e implantá-lo no Tencent Cloud SCF Custom Runtime.

Em seguida, queremos associar a função implementada a um gateway de API da web para que possa ser chamada a partir de uma solicitação HTTP ou HTTPS da web. Faça isso na guia Trigger Management no console da web para SCF. Veja as instruções e capturas de tela aqui.

O console da API transforma uma solicitação HTTP em uma entrada JSON para a função sem servidor. Por exemplo, aqui está uma solicitação HTTP POST para a URL do gateway de API. Colocamos os pontos de dados delimitados por vírgulas do iris.csv arquivo no corpo do POST.

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

O API Gateway passa o seguinte JSON para o STDIN da função Rust. O corpo POST agora é o atributo body no JSON.

{  "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",    "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"  }}

A função Rust analisa os dados no corpo, executa PCA e gera o gráfico SVG. Ele imprime o conteúdo SVG em STDOUT, que é captado pelo API Gateway e enviado de volta como a resposta HTTP.

Para usar este URL de gateway de API em solicitações AJAX, você também deve configurar o gateway Tencent Cloud para aceitar solicitações da web CORS. Confira este guia sobre como fazer isso.

O exemplo HTML JavaScript abaixo mostra como usar essa função sem servidor em uma página da web.

Ele pega os dados CSV do textarea campo com ID csv_data, faz uma solicitação AJAX HTTP POST para a função sem servidor e, em seguida, coloca o valor de retorno, que é um gráfico SVG, em um elemento HTML com ID svg_img. Veja a demonstração ao vivo aqui.

$.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').html(data);})

tencentcloud pca webapp
O aplicativo da web sem servidor em ação.

Próximos passos

O Tencent SCF Custom Runtime é um ambiente sem servidor muito poderoso. Ele fornece um ambiente Linux genérico para qualquer função de aplicativo que você deseja escrever, bem como interfaces da web padrão para interagir com a entrada e saída da função. Definitivamente, vale a pena experimentar.

Conforme discutido no artigo, acreditamos que Rust e WebAssembly fornecem um pilha de alto desempenho, segura, portátil e preparada para o futuro para funções sem servidor. Rust e WebAssembly com SCF Custom Runtime são o futuro!

Recursos

Assine a nossa newsletter e mantenha contato. Boa codificação!