28 pontos por xguru 2024-02-01 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
[Este comentário foi ocultado.]