Depois de passar um bom tempo tentando desenvolver uma aplicação em C++ capaz de separar uma tarefa para várias máquinas trabalhem em paralelo, eu conheci a linguagem rust.
E uma das primeiras coisas que eu fiz em rust, foi um simples programa de proxy para um servidor de arquivos estáticos que armazena todas as solicitações em cache. Até ai, eu estava tentando aprender a linguagem, e acabei por fazer tudo na mão.
Mas, após conhecer uma biblioteca, hyper, tentei fazer outra aplicação, essa seria um serviço para fazer upload e compartilhar arquivos. Porém, foi tudo implementado diretamente em cima da biblioteca hyper, o máximo que usei foi outra biblioteca para acesso ao sistema de arquivos de forma assíncrona.
Agora estou mais interessado em utilizar outras bibliotecas, como Tower, Axum e Tonic para criar uma aplicação que distribua as tarefas entre vários clientes(workers), e disponibilize uma interface web para monitoramento e gerenciamento.
Caso queira saber mais sobre essa aplicação, clique aqui.
Axum é um framework para aplicações web, possui uma forma bem simples de rotear as requisições no servidor web. Exemplo utilizando Axum junto ao Tonic: axum/examples/rest-grpc-multiplex.
Tonic implementa o protocolo gRPC em rust.
Tower possui um trait Service
que é uma interface para serviços assincronos concorrentes.