- Serverless não significa literalmente que não há servidor; significa apenas usar o servidor de outra pessoa
- A arquitetura ServerFree propõe o conceito de executar código sem servidor de backend, contêineres ou máquinas virtuais
- Nessa arquitetura, o código é executado dentro do navegador, sendo necessário apenas um servidor para servir arquivos estáticos
- Demonstra como empacotar uma aplicação web para que ela possa ser executada no navegador
- O código de frontend é compilado normalmente, o backend é empacotado para rodar em um Web Worker, e o banco de dados usa SQLite compilado para WebAssembly
Ideia
- Foi decidido criar um projeto de demonstração como parte de content marketing e, inspirado pelo Hacker News, fazer um rastreador de candidaturas a vagas com foco em privacidade
- O projeto evoluiu para um processo de desenvolvimento de uma nova arquitetura, resolvendo problemas como Web Workers, incompatibilidades de documentos e documentos ausentes.
Primeira tentativa com arquitetura clássica (a parte fácil)
- O app foi construído usando o SubZero CLI para alterar o esquema do banco de dados e configurar permissões.
- Ele oferece funcionalidades de CRUD e filtragem, mas a personalização da UI foi levada para mais perto de um produto do que de uma simples demo.
- A barra lateral foi movida para o topo para reduzir o espaço desperdiçado à esquerda.
- Foram adicionados componentes Show, Create, Edit e List à página "Opportunities".
- Um fluxo de filtragem complexo foi implementado sem mexer no código de backend.
- O dashboard foi melhorado para exibir dados relevantes como "oportunidades abertas", "progresso médio / candidatura" e "média de dias após a candidatura".
- Para o deploy em produção, foi criada uma imagem Docker, o banco de dados recebeu seed e o contêiner foi executado.
- O arquivo do banco de dados SQLite foi mantido fora do contêiner para preservar os dados de forma persistente.
- O Turso DB foi usado para resolver os problemas de persistência e backup do banco de dados SQLite.
Migração para a arquitetura ServerFree (a parte divertida)
- SQLite foi compilado para WebAssembly e usado como banco de dados.
- OPFS (Origin-Private FileSystem) foi usado para armazenar os dados.
- O código de backend foi executado em um Web Worker para evitar bloquear a thread da UI.
- Express foi substituído por itty-router para garantir compatibilidade com o navegador.
- Um Service Worker foi usado para interceptar e processar requisições entre a UI e o backend.
- Foi implementada uma comunicação confiável entre o Service Worker e o Web Worker por meio da thread principal.
- O código relacionado à autenticação foi removido da thread principal (UI).
- Os dados são armazenados no computador do usuário e não são enviados para um servidor.
Conclusão
- Essa arquitetura é especialmente útil quando os dados do cliente são independentes e não precisam ser compartilhados entre usuários.
- Como não há servidor de backend, os custos de hospedagem são reduzidos, a privacidade dos dados é reforçada e a segurança é aprimorada.
- Com ferramentas como Electric, é possível sincronizar parte do banco de dados com o cliente e processar algumas requisições/consultas no navegador
1 comentários