E-commerce serverless com Cloudflare Workers

Um dos motivos de eu ter meu próprio negócio é que gosto de experimentar novas soluções. Seja na experiência do usuário no site da minha empresa, no desenvolvimento de produtos, na comunicação com os clientes ou na arquitetura dos sistemas que utilizo.

Tenho um pequeno e-commerce que não recebe muito tráfego. Este site hoje responde por volta de metade do nosso faturamento e tem suas fontes de tráfego em anúncios, ativações via e-mail e redes sociais e orgânico de buscadores.

Nuxt > API > WP Desde o início deste e-commerce optei por uma solução de frontend customizada com Nuxt.js conectado a uma API Node própria que por sua vez conversava com um backend WordPress (com WooCommerce).

Estava hospedado em um VPS de uma empresa que oferece máquinas aqui no Brasil. Funcionou sem problemas durante mais de um ano. Até que diversos dias de instabilidades no serviço deste fornecedor com desculpas que não me convenceram me fizeram encarar a tabela de preços da Amazon AWS.

Na Amazon optei por uma instância EC2 com a mesma capacidade do meu VPS anterior. Foi complicadíssimo entender o quanto eu iria pagar por aquele serviço, mas fui na fé, contratei um "Savings Plan" e o valor final acabou ficando bem próximo do que eu pagava no fornecedor anterior.

Até que fiquei uma tarde de sábado inteira com minha instância fora do ar por algum problema no datacenter de São Paulo da Amazon AWS.

Cloudflare Workers Com repulsa da complexidade até para saber os preços na AWS, eu me questionei sobre migrar meu e-commerce para os Workers, da Cloudflare. Essa é uma solução que roda o seu código nos mais de 200 datacenters locais que a empresa tem espalhados pelo mundo.

No dia seguinte dessa tarde toda com o site offline por conta de problemas na AWS, eu iniciei minha pesquisa sobre os Workers. Para minha surpresa, pouco mais de uma hora depois, eu tinha meu site rodando "serverless" na infraestrutura dos Workers. Decidi arriscar e apontar os DNS para lá no mesmo dia. Funcionou.

O Nuxt.js já está preparado para exportar o seu site em modo estático, bastou que eu fizesse isso para que o site fosse compatível com o modo Sites dos Workers. Com o CLI "Wrangler" ficou ainda mais fácil gerar o projeto e fazer o deploy.

Para facilitar ainda mais, integrei o deploy através de uma Action no Github. Então basta fazer um push do trabalho para minha branch de testes e depois fazer um pull request para a branch principal, que dispara o processo de geração do Nuxt.js e upload dos arquivos para os Workers.

API Node nos Workers O que o site teve de fácil, a minha API própria em Nodejs teve de difícil. Os Workers rodam sobre javascript baseado na engine V8 do Google Chrome assim como o Nodejs. Porém as APIs implementadas pelos Workers são as WebAPI. Já o Node tem várias implementações particulares que, entre outras coisas, dão acesso ao sistema de arquivos.

Ou seja, muitos dos pacotes com os quais estamos acostumados a trabalhar não irão funcionar ou irão apresentar erros quando o código é portado para os Workers. Tomei como um desafio para me livrar de toda quinquilharia acumulada no package.json. O código ficou muito, muito mais magro e eficiente.

No fim, a maioria do código nesta API que faz a ponte com meu meio de pagamento (EBANX), logística (Correios) e outros funcionou sem maiores exigências. Importante notar que esta API utiliza Typescript e não tive qualquer problema quanto a isso, já que os Workers suportam Webpack.

Ainda dependo do Wordpress O WordPress estava lá no início da minha vida profissional, acompanho o mesmo desde suas primeiras versões. Apesar de todos os problemas que existem nele, é um software muito robusto. E seu painel é muito usável. Esta é a única peça do meu quebra-cabeças que ainda precisa de um servidor, está na EC2 da Amazon.

Outro ponto que mantém a utilidade do WordPress é sua integração com o ERP Bling que a minha empresa utiliza.

Banco de dados serverless? Eis que a parte do WordPress ainda me incomoda. Iniciei recentemente outro projeto e pesquisei por alguns dias para saber como poderia fazer meu e-commerce completamente nos Workers, mas não achei uma solução viável.

Uma possibilidade é utilizar os Workers KV (uma espécie de Redis). Porém muitas das ferramentas de gerenciamento e backup teriam que ser escritas. Além disso, fazer queries em um "banco noSQL" sem qualquer implementação específica para isso não parece uma missão para um simples hobbista como eu.

Conclusão Ainda quero ter esta pilha inteira de peças rodando todas nos Workers da Cloudflare. Estou curioso, por exemplo, para ver o que eu poderia fazer com os Durable Objects (objetos que mantém seu estado nos Workers), atualmente em beta fechado.

O custo dos Workers? $5. Sem contagem de banda ou requisições.

A Cloudlfare tem feito um trabalho tão obviamente interessante pela simplicidade e funcionalidades alavancadas em seus datacenters espalhados mundo a fora que as suas ações ($NET) estão em uma disparada incrível. Eu que sou apenas um programador por hobby consigo ver o valor incrível disso. E olhando para o tamanho do mercado "em nuvem" que a Amazon AWS criou, acho que a Cloudflare ainda vai muito longe, quem sabe até soprar a nuvem do Bezos para longe, substituindo uma parte do céu da internet com a nuvem laranja.

Veja também: Building Black Friday e-commerce experiences with JAMstack and Cloudflare Workers https://blog.cloudflare.com/building-black-friday-e-commerce-experiences-with-jamstack-and-cloudflare-workers/