Projetos interessantes usando WebAssembly
Esta é a última parte de uma série de posts que escrevi sobre uma das tecnologias que eu acho mais impactantes dos últimos anos: WebAssembly. No primeiro texto falei sobre como portar código em Go para executá-lo em um navegador web. Na segunda parte mostrei como usar código WebAssembly em um projeto Go e neste quero falar sobre alguns projetos bem interessantes que vem fazendo uso desta tecnologia.
Kong Gateway
O Kong é um API Gateway usado por empresas ao redor do mundo. Ele sempre contou com o conceito de “plugins” e “filtros” que permitem que o usuário possa criar novas funcionalidades e adicioná-las a rotas e serviços. Apesar do Kong em si ser feito em Go, (o Bruno Souza apontou meu erro nos comentários) para que os usuários criássem estas extensões era necessário fazer uso da linguagem de script Lua (OBS: é possível criar plugins em Go nas versões abaixo da 3.4, mas diferente de Lua, ao usar Go a performance é menor pois a lógica é executada em um processo separado). A partir da versão 3.4 foi adicionada a opção de usarmos WebAssembly para este fim. Isso adiciona mais flexibilidade para os times usando e criando soluções em cima do Gateway. Neste post é possível entender um pouco mais sobre os detalhes e ver como implementar um filtro simples usando o TinyGo. No repositório do projeto é possível encontrar um template e um exemplo de filtro para implementar rate limit.
Spin e SpinKube
Os próximos dois exemplos são projetos open source mantidos por uma empresa chamada Fermyon com contribuições de empresas como Microsoft e SUSE. O primeiro chama-se Spin e permite usarmos WebAssembly para criarmos aplicações Serverless. O segundo, SpinKube, combina alguns dos tópicos que mais me empolgam atualmente: WebAssembly e Kubernetes Operators :) Segundo o site oficial, “Ao executar aplicativos na camada de abstração Wasm, o SpinKube oferece aos desenvolvedores uma maneira mais poderosa, eficiente e escalável de otimizar a entrega de aplicativos no Kubernetes.” Falando em empolgação, este post mostra como integrar o SpinKube com o Dapr, outra tecnologia que estou muito interessado e devo escrever alguns posts breve ;)
wasmCloud
Outro projeto que se propõe a facilitar o deploy e execução de aplicações WebAssembly é o wasmCloud: “wasmCloud é uma plataforma de aplicativos universal que ajuda você a construir e executar aplicativos WebAssembly distribuídos globalmente em qualquer nuvem e em qualquer borda.”. Me pergunto quanto tempo falta até grandes players como AWS, Google Cloud e Azure comprem ou implementem soluções similares em seus portfolios…
Tarmac
O Tarmac na verdade é um framework que facilita a criação de aplicações WebAssembly. Segundo o site oficial: “Framework para escrever funções, microsserviços ou monolitos com Web Assembly. Tarmac é independente de linguagem e oferece suporte integrado para armazenamentos de chave/valor como BoltDB, Redis e Cassandra, bancos de dados SQL tradicionais como MySQL e Postgres e recursos fundamentais como autenticação mTLS e observabilidade”. É um projeto que vale a análise pois pode acelerar a implementação de aplicações que depois podem ser hospedadas em um dos produtos que citei acima.
Onyx
O Onyx é algo completamente diferente dos exemplos anteriores pois é uma nova linguagem de programação, com foco em WebAssembly. Segundo a documentação, “Onyx é uma nova linguagem de programação que apresenta uma sintaxe moderna e expressiva, segurança de tipos rigorosa, tempos de build extremamente rápidos e suporte multiplataforma pronto para uso, graças ao WebAssembly.”. Sendo desenvolvida há mais de três anos é uma linguagem completa, com sintaxe similar a Go, algumas características de linguagens funcionais, gerenciador de pacotes e suporte nas principais IDEs.
Conclusões
O objetivo deste post era tentar deixá-lo em um nível de empolgação próximo ao meu :) Vejo grande potencial para a tecnologia e acredito que vale o investimento de estudos pois é algo que deve ganhar mais destaque nos próximos anos, especialmente em cenários próximos a infraestrutura e backend.
Quais suas opiniões sobre WebAssembly? Acha que é mais um hype ou tem potencial para ser “disruptivo”? Conhece mais alguns exemplos de aplicações interessantes? Contribua aqui nos comentários.