Algumas semanas atrás, escrevi sobre um projeto no qual nossa equipe está trabalhando, chamado Destilar. Um aplicativo simples que resume e extrai detalhes importantes de nossas reuniões diárias. No last desse publish, prometi a vocês uma versão CLI escrita em Rust. Depois de algumas revisões de código de Rustaceans na Amazon e um pouco de polimento, hoje, estou pronto para compartilhar o Destilar CLI.
Depois de compilar a partir do código-fonte, basta passar um arquivo de mídia para o Distill CLI e selecionar o bucket S3 onde você gostaria de armazenar o arquivo. Hoje, o Distill suporta a saída de resumos como documentos do Phrase, arquivos de texto e impressão diretamente no terminal (o padrão). Você verá que ele é facilmente extensível – minha equipe (OCTO) já o está usando para exportar resumos de nossas reuniões de equipe diretamente para o Slack (e trabalhando no suporte para Markdown).
Mexer é uma boa maneira de aprender e ser curioso
A maneira como construímos mudou bastante desde que comecei a trabalhar com sistemas distribuídos. Hoje, se você quiser, computação, armazenamento, bancos de dados e redes estão disponíveis sob demanda. Como construtores, nosso foco mudou para uma inovação cada vez mais rápida e, ao longo do caminho, mexer no nível do sistema se tornou uma arte perdida. Mas mexer é tão importante agora quanto sempre foi. Lembro-me vividamente das horas gastas mexendo no BSD 2.8 para fazê-lo funcionar em PDP-11s, e isso consolidou meu amor sem fim por software program de sistema operacional. Mexer nos dá uma oportunidade de realmente conhecer nossos sistemas. Experimentar novas linguagens, estruturas e ferramentas. Buscar eficiências grandes e pequenas. Encontrar inspiração. E foi exatamente isso que aconteceu com o Distill.
Reescrevemos uma de nossas funções Lambda em Rust e observamos que as inicializações a frio eram 12x mais rápidas e a pegada de memória diminuía em 73%. Antes que eu percebesse, comecei a pensar em outras maneiras de tornar todo o processo mais eficiente para meu caso de uso.
A prova de conceito unique armazenava arquivos de mídia, transcrições e resumos no S3, mas como estou executando a CLI localmente, percebi que poderia armazenar as transcrições e resumos na memória e economizar algumas gravações no S3. Eu também queria uma maneira fácil de carregar mídia e monitorar o processo de resumo sem sair da linha de comando, então eu montei uma IU simples que fornece atualizações de standing e me avisa quando algo falha. O unique mostrou o que period possível, deixou espaço para ajustes e foi o modelo que usei para escrever a CLI do Distill em Rust.
Eu encorajo você a De uma likelihoode me avise quando encontrar algum bug, caso extremo ou tiver ideias para melhorar.
Os construtores estão escolhendo Rust
Como tecnólogos, temos a responsabilidade de construir de forma sustentável. E é aqui que realmente vejo o potencial do Rust. Com sua ênfase em desempenho, segurança de memória e simultaneidade, há uma oportunidade actual de diminuir os custos computacionais e de manutenção. Suas garantias de segurança de memória eliminam bugs obscuros que assolam projetos C e C++, reduzindo travamentos sem comprometer o desempenho. Seu modelo de simultaneidade impõe verificações rigorosas em tempo de compilação, evitando corridas de dados e maximizando processadores multi-core. E embora erros de compilação possam ser muito irritantes no momento, menos desenvolvedores perseguindo bugs e mais tempo focado em inovação são sempre coisas boas. É por isso que se tornou um recurso para construtores que prosperam na resolução de problemas em escala sem precedentes.
Desde 2018, temos aproveitado cada vez mais o Rust para cargas de trabalho críticas em vários serviços como S3, EC2, DynamoDB, Lambda, Fargate e Nitro, especialmente em cenários onde os custos de {hardware} devem dominar ao longo do tempo. Em seu visitor publish do ano passado, Andy Warfield escreveu um pouco sobre o ShardStore, a camada mais baixa da pilha de armazenamento do S3 que gerencia dados em cada disco particular person. O Rust foi escolhido para obter segurança de tipo e suporte de linguagem estruturada para ajudar a identificar bugs mais cedo, e como eles escreveram bibliotecas para estender essa segurança de tipo para aplicativos para estruturas em disco. Se você ainda não fez isso, recomendo que você leia a postageme a Artigo SOSP.
Essa tendência se reflete em todo o setor. Discórdia moveu seu serviço Learn States de Go para Rust para lidar com grandes picos de latência causados pela coleta de lixo. É 10x mais rápido com suas piores latências de cauda reduzidas quase 100x. De forma comparable, Figma reescreveram partes sensíveis ao desempenho de seu serviço multijogador em Rust e observaram melhorias significativas no desempenho do lado do servidor, como a redução do pico de uso médio da CPU por máquina em 6x.
A questão é que, se você leva a sério os custos e a sustentabilidade, não há razão para não considerar o Rust.
Ferrugem é difícil…
Rust tem a reputação de ser uma linguagem difícil de aprender e não vou contestar que há uma curva de aprendizado. Levará tempo para se familiarizar com o verificador de empréstimos, e você lutará com o compilador. É muito parecido com escrever um PRFAQ para uma nova ideia na Amazon. Há muito atrito no início, o que às vezes é difícil quando tudo o que você realmente quer fazer é pular para o IDE e começar a construir. Mas quando você está do outro lado, há um tremendo potencial para ganhar velocidade. Lembre-se, o custo para construir um sistema, serviço ou aplicativo não é nada comparado ao custo de operá-lo, então a maneira como você constrói deve estar continuamente sob escrutínio.
Mas você não precisa acreditar em mim. No começo deste ano, O registro publicou descobertas do Google que mostraram que suas equipes Rust eram duas vezes mais produtivas que as equipes que usavam C++, e que o mesmo tamanho de equipe usando Rust em vez de Go period tão produtivo com mais correção em seu código. Não há pontos de bônus para aumentar o número de funcionários para lidar com problemas evitáveis.
Considerações finais
Quero ser bem claro: isso não é um chamado para reescrever tudo em Rust. Assim como monólitos não são dinossaurosnão há uma única linguagem de programação para governá-los todos e nem todos os aplicativos terão os mesmos requisitos comerciais ou técnicos. Trata-se de usar a ferramenta certa para o trabalho certo. Isso significa questionar o established order e procurar continuamente maneiras de otimizar incrementalmente seus sistemas – para mexer nas coisas e medir o que acontece. Algo tão simples quanto trocar a biblioteca que você usa para serializar e desserializar json
da biblioteca padrão do Python para orjson
pode ser tudo o que você precisa para acelerar seu aplicativo, reduzir seu consumo de memória e diminuir custos no processo.
Se você não tirar mais nada deste publish, eu o encorajo a procurar ativamente por eficiências em todos os aspectos do seu trabalho. Mexa. Meça. Porque tudo tem um custo, e o custo é um bom proxy para um sistema sustentável.
Agora, vá construir!
Um agradecimento especial à AWS Rustaceans Niko Matsakis e Concessão Gurvis pelas revisões de código e suggestions durante o desenvolvimento do Distill CLI.