Nota do tradutor: Rust é uma linguagem de programação relativamente jovem, e exemplos práticos são sempre interessantes neste estágio de desenvolvimento. Sabe-se que Intel, Dropbox, Amazon, Facebook, Google e outros usam Rust em seus projetos. Era conhecido o uso do Rust no projeto da Microsoft, mas não havia detalhes, e esta é provavelmente a primeira publicação oficial sobre o uso do Rust na Microsoft. (os detalhes técnicos do produto em si são fornecidos "como estão", especifique detalhes no site da empresa)O Azure IoT Edge é um projeto de software de plataforma cruzada de código aberto criado pela equipe de desenvolvimento da IoT do Azure na Microsoft. O Azure IoT Edge “é um serviço da Internet das Coisas baseado no Centro da Internet das Coisas. Este serviço é destinado a clientes que precisam analisar dados não na nuvem, mas em dispositivos de ponta. Como resultado da movimentação de parte da carga de trabalho para a área de fronteira, os dispositivos passam menos tempo enviando mensagens para a nuvem e respondem mais rapidamente aos eventos. ”
[extraído da documentação oficial em russo (1) - aprox. tradutor]Esta postagem explica alguns dos motivos pelos quais escolhemos o Rust como a linguagem de programação para implementar o componente Security Daemon no produto.
O Daemon de Segurança carrega o tempo de execução do Azure IoT Edge. Ele atua como mediador da comunicação entre o tempo de execução do Azure IoT Edge e muitos serviços de host, como o tempo de execução do contêiner e os dispositivos de hardware criptográfico Security Security Modules (HSM) e Trusted Platform Modules (TPM).
Seleção técnica de pilha para o Daemon de Segurança
Quando começamos a trabalhar no Security Daemon (doravante denominado
edgelet ), identificamos os seguintes objetivos principais de design:
- O edgelet deve ser um componente nativo que não requer um tempo de execução, como o .NET CLR.
- como o edgelet servirá como um canal para acessar o equipamento HSM / TPM no dispositivo, ele deve ser seguro.
- O edgelet irá interagir com o equipamento HSM / TPM através da interface binária do aplicativo C (ABI), portanto, carregar objetos / DLLs comuns e chamar funções C deve ser simples.
De acordo com esses pontos, tivemos que escolher uma das seguintes linguagens de programação: C ou C ++, ou Rust, que é compilada no código nativo. A falta de vontade de suportar a sobrecarga do coletor de lixo significava que Go não era adequado para nós. Os requisitos de segurança do daemon significavam que queríamos evitar erros de memória e simultaneidade. Como se viu, dadas essas limitações, Rust é perfeito para nós. Em uma publicação anterior (2) deste blog
[que significa o blog
“Microsoft Security Response Center” - comentário da tradução]] , foram consideradas as vantagens de escolher Rust como a linguagem de programação.
Do que gostamos
Antes de lançar o Azure IoT Edge ao público, contratamos um provedor de segurança externo para testar o software de penetração. O fato de não terem encontrado nenhum problema com a segurança da base de código no Rust foi para nós uma confirmação da correção de nossa escolha. Desde o início, decidimos que o compilador trataria todos os avisos como erros, incluindo erros verificados pelo clippy. Nosso sistema de integração contínua rejeita um conjunto de solicitações que não passam pelo rustfmt, o que garante uma formatação consistente do código em toda a base de códigos.
O processo de atualização do compilador Rust and Cargo
[sistema de gerenciamento de montagem e embalagem - aprox. tradutor] trabalhem perfeitamente no Azure IoT Edge. Atualizar para uma nova versão do compilador é quase sempre uma ação indolor.
Aceitação de ferrugem
O próximo passo foi aprender o idioma. Comparado a outras linguagens de programação populares, o Rust possui um limiar de entrada bastante alto e temíamos o impacto que este estudo teria no cronograma do projeto. Nossa equipe havia experimentado desenvolvedores em C, C ++, C # e Java, e felizmente para nós, também havia vários desenvolvedores que eram muito apaixonados pelo Rust!
Criamos oficinas da Rust nas quais conduzimos uma equipe nas partes do idioma que, em nossa experiência, eram bastante difíceis de entender. Esses consumos de tempo provaram ser muito úteis. Descobrimos que aprender um idioma acabou não sendo um problema tão grande quanto imaginávamos.
Durante 4-6 semanas, quase todos os membros da equipe fizeram uma contribuição não trivial para o código fonte no Rust.
Dificuldades
Apesar do fato de nossa primeira experiência de lançamento de uma produção com um produto baseado em Rust na Microsoft ter sido completamente bem-sucedida, teríamos observado vários pontos difíceis:
- O ecossistema Rust ainda é relativamente novo em comparação com outros idiomas mais estabelecidos. Isso significava que muitas vezes tínhamos que criar partes da infraestrutura que, caso contrário, provavelmente não precisaríamos criar.
- Às vezes, analisar mensagens de erro do compilador era muito complicado, especialmente ao trabalhar com código que usava muito os combinadores do Tokio (3) [uma estrutura assíncrona para Rust] Futures ou std :: iter :: Iterator.
- As equipes que estão acostumadas a dar suporte total às ferramentas de edição e depuração de C # e ao código Java não encontraram o mesmo suporte no Rust. A extensão VS Code Rust RLS era instável na prática.
- Desafios na análise da cadeia futura dos Tokio
- Às vezes, não era fácil resolver os tipos complexos que inevitavelmente surgem nas cadeias combinadoras do Tokio Future.
O que vem a seguir
Seria justo observar aqui que a IoT do Azure está totalmente integrada à linguagem de programação Rust. Desde que lançamos o Azure IoT Edge, o uso do Rust aumentou apenas. Muitos dos projetos de serviço em nuvem que estão sendo trabalhados ativamente estão escritos em Rust. A trindade que o Rust oferece (segurança de memória, segurança de corrida de dados e desempenho) é perfeita para a IoT do Azure. Esperamos ter mais alguma coisa a dizer sobre isso no futuro!
Raj Wengalil, Gerente Geral, SWE, Plataforma IoTReferências
(1)
docs.microsoft.com/en-us/azure/iot-edge(2)
msrc-blog.microsoft.com/2019/07/22/why-rust-for-safe-systems-programming(3)
tokio.rsDe um tradutor: obrigado pela ajuda na tradução do
Legatus88 ,
Funkill , o grupo de telegramas em língua russa Rust (@rustlang_ru) e KDPV
daqui .