Categories
geral tech

Edge Computing na prática com Cloudfare Workers®

Configure seu worker em apenas 15 minutos.

Livin’ On The Edge!

Durante uma conferência web no trabalho discutimos o tema de Edge Computing, aliás na oportunidade tivemos uma palestra do Boris Kuszka da RedHat sobre o tema.

O que me fez refletir um pouco sobre o assunto, e como de praxe, eu prefiro colocar a coisa em prática para melhor solidificar os conceitos, vou descrever aqui um passo-a-passo, mas antes, vamos dar uma olhada  no conceito, isso nos dará base para avançarmos com mais qualidade.

Introdução sobre Edge Computing

Edge Computing é levar a computação para a borda, o mais próximo possível do usuário final, sejam dados estáticos, de IoT ou analíticos.

Hoje estamos vivendo um momento importante para implementação de Edge Computing, especialmente motivado pela implementação das redes 5G, que vão habilitar casos de uso novos exigindo baixíssima latência e alto throughput.

Uma das características de Edge Computing é a que ao invés de uma grande rede, podemos enxerga-la como um encadeamento de várias pequenas redes. A conectividade de rede dentro dessas redes menores é normalmente confiável, mas em situações que que as redes podem ser instáveis, alguns conceitos de Edge Computing são projetados para lidar com interrupções temporárias.

Vamos observar um gráfico da Red Hat que trás uma ilustração bem legal sobre as camadas de implementação.

O conceito de Edge Tiers em gráfico da Red Hat

O conceito de Edge Computing não é tão novo assim, lembro que no final da década de 90 já tínhamos componentes de edge server, basicamente fazendo off-load de sistemas de retaguarda via CDN – Content Delivery Networks.

Os benefícios de Edge Computing são muitos, mas eu destacaria:

Eficiência: Devido à proximidade dos recursos analíticos com os usuários finais, ferramentas analíticas sofisticadas podem ser executadas nas bordas do sistema. Esse posicionamento aumenta a eficiência operacional do sistema.

Disponibilidade: uma arquitetura bem desenhada de Edge, permite uma proteção para falhas em determinadas camadas sem interromper o serviço ao cliente final.

Velocidade: Casos de usos não explorados seja por latência ou throughput começam a ser viabilizados, trazendo o poder computacional mais próximo do usuário final.

Os desafios desse tipo de implementação passam principalmente gestão de segurança e privacidade uma vez que dados ora centralizados estarão dispersos em provedores menores e um segundo fator é o cuidado com a escalabilidade, as bordas têm que ser inteligentes, pois muitas vezes não dispõem dos poderes computacionais e das padronizações do data center centralizado.

Uma das maneiras de implementar Edge Computing é o uso de Serverless na borda, o que vamos ver agora implementado pela Cloudflare Workers®.

Sobre o Cloudflare Workers®

Já deu para ter uma idéia, agora vamos para ação, para atingir o objetivo de ver edge computing na prática eu escolhi usar um serviço da Cloudflare chamado Workers®.

Seguindo a denominação de camadas no gráfico da Red Hat a implementação da Cloudflare seria algo como Regional Data Center e/ou Provider Aggregation Edge, acredito ser um bom exemplo de plataforma edge com aplicação em diversos casos de uso.

A implementação da Cloudflare é bem interessante pois trás o conceito de serverless para o jogo, ou seja, a minha aplicação Edge se torna um serverless, simplificando em muito a operação uma vez que elimina a necessidade de gerenciamento de todo o stack na borda (Hardware, Rede, Sistema Operacional, Middleware, Banco de Dados, Firewall , etc).

Você escolhe a linguagem de programação que mais se adequa ao seu caso de uso, configura sua conta, escreve o seu código, faz deploy e a infraestrutura serverless cuida de fazer disponibilização do seu código ao redor do mundo.

Hora do Laboratório

Passo a passo Cloudflare Workers®

Para seguir com o passo a passo é necessário ter uma conta na Cloudflare e customizar algumas coisas, você pode criar uma conta sem custo para reproduzir os passos aqui.

Uma vez criada a conta existe uma franquia de 100.000 (cem mil) execuções por dia, mais do que suficiente para o propósito de experimentar a tecnologia.

Criando sua conta no Cloudflare Workers®

Para inicio dos testes acesse https://workers.cloudflare.com/ essa é a página com o fluxo especifico para ativação dos Workers, você também tem acesso aqui para documentação e outros links interessantes. Por hora clique no botão Start building.

Página inicial do Cloudflare Workers®

Preencha seu e-mail e senha e clique no botão Create Account.

Página de cadastro inicial Cloudflare Workers®

Nessa página você deve escolher um subdomínio grátis para usar para com seu worker, se você tiver interesse em evoluir a solução no futuro é possível mudar.

Página de seleção de subdomínio

Interessante notar que a região está definida como Earth, ou seja, seu worker serverless será deployed em todos os datacenters onde a Cloudflare tem presença, no momento da escrita desse artigo a rede está presente em 200 cidades em mais de 95 países.

Escolha a opção Continue with Free, com esse plano é possível criar até 30 workers.

Escolha de plano

Hora de verificar o seu e-mail, passo obrigatório para seguir adiante.

Email de verificação

Criando seu primeiro Workers®

Após da validação do e-mail finalmente chegamos na página de criação de Workers.

Criação de Workers

Os Workers podem ser criados em JavaScript, Rust, C e C++ e outras linguagens. Verifique que nessa página são apresentadas duas opções, uma Web GUI no botão Create Worker para rapidamente experimentar a tecnologia e uma opção mais roots via CLI (command line interface), conforme indicado na seta: set up Wrangler CLI.

Instalando o Wrangler CLI

Clicando no botão set up Wrangler CLI temos uma página com um passo a passo de instalação, eu tive algumas dificuldades seguindo os passos da página, principalmente com os pré-requisitos, logo vou documentar bem mais detalhado aqui, se você estiver confiante pode seguir as etapas da página oficial da Cloudflare.

O Wrangler é a interface de linha de comando usado para todo o ciclo de vida do Worker, seguiremos nesse caminho, algo mais próximo de uma implementação real.

O processo de instalação do Wrangler tem como pré-requisito alguns componentes do Node.js, caso você não tenha é possível fazer a instalação para o seu de sistema.

Instalando os pré-requisitos do Wrangler

A maneira mais indicada para instalar e gerenciar uma instalação de Node.js é através do NVM (Node Version Manager), verifique a última versão de NVM no git do projeto https://github.com/nvm-sh/nvm.

No momento de escrita desse documento a versão de NVM era 0.35.3. Para instalar nvm em um terminal de comando execute (sempre valide o comando para o seu sistema operacional):

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

Uma vez instalado nvm, para rodar o profile e carregar todas as variáveis de ambiente você pode fechar o terminal e abrir novamente. Na sequência vamos instalar o node através do nvm usando o comando:

$ nvm install node

Uma vez instalado o node o nvm também já instala o npm, desta forma estão satisfeitos os pré-requisitos.

Comando de instalação e configuração do Wrangler

Sem delongas, vamos seguir com a instalação do aguardado wrangler cli:

$ npm install -g @cloudflare/wrangler
Tela com a instalação do wrangler cli

Hora de testar para ver se a instalação foi realizada com sucesso mesmo:

$ wrangler --help
Tela com o help do wrangler cli

Com o CLI instalado chegou a hora de configurar o Wrangler e autenticar seu acesso com a Cloudflare, execute:

$ wrangler config

A nossa primeira ação necessária é preencher o API Token. Para encontra-lo acesse https://dash.cloudflare.com/profile/api-tokens. Para novos usuários da plataforma é necessário criar o seu token seguindo os passos a seguir:

Tela do wrangler config

Navegando até a página do API Token, siga os passos:

1. Clique em Create Token:

Página do API Token

2. No item Edit Cloudflare Workers clique em Use template:

Página de criação do template

Selecione em Account Resources sua conta e em Zones selecione All:

Configuração do Token

Deixe os outros campos com os valores padrão e clique em Continue to summary:

Configuração do Token

Agora clique em Create Token:

Criando Token

Pronto, finalmente temos nosso Token, na sequencia vamos copia-ló e testa-lo.

Token criado com sucesso

Vamos testar o nosso recém criado Token, para isso precisamos abrir outra tela do terminal para não interromper o processo que de config que iniciamos.

Não vou postar o comando aqui, use o que está na sua tela.

Testando o Token

Legal ! Token válido e ativo.

Hora de terminar essa etapa da configuração, copie seu Token na página e volte para o terminal que ficou na passo de configuração do Wrangler, cole seu Token e depois enter:

Token configurado com sucesso.

Vamos dar uma olhada no arquivo de configuração que o Wrangler criou e atualizou nessa etapa:

$ cat $HOME/.wrangler/config/default.toml

O resultado do cat dever ser um arquivo simples com seu API Token. Com tudo configurado podemos gerar um Hello Worker usando um template em JavaScript oferecido pela plataforma, execute:

$ wrangler generate hello-world-project https://github.com/cloudflare/worker-template
Usando um template em JavaScript para um Hello Worker

O wrangler cli fez alguns ajustes e clonou um código de um template do Github, agora temos que configurar nossas informações de account_id e zone_id editando o wrangler.toml, mas antes precisamos pegar essas informações na console em https://dash.cloudflare.com.

Para quem não usa os serviços da Cloudflare existe um passo adicional de criar um registro de um site na plataforma.

Hoje em dia tudo mundo tem algum domínio registrado, se não tiver é possível passar algo não completamente válido nessa etapa, mas confesso que não testei essa opção.

Inclusive não é necessário ativar o serviço para seu site e efetivamente usar a Clouflare, neste exemplo eu não vou direcionar o meu registro para os nameservers da Cloudflare.

Clique em + Add Site:

Adicionando um site

Fornece um domínio e clique em novamente em Add Site:

Adicionando o domínio do seu site

Escolha o plano Free e clique em Confirm plan.

Escolha o plano Free

O Cloudflare fará um scan no seu domínio e irá popular essa tabela, pode deixar padrão, o ponto aqui é que o serviço só será ativado se você apontar seus nameserver para a Cloudflare, clique Continue.

Página com domínio escaneado

Só execute os passos descritos na tela seguinte se você estiver apontado seu site para a Cloudflare, role a página até o final e clique em Done, check nameservers.

Validando nameservers

Role essa próxima página até o final novamente e clique em Done.

Página final do Add site

Ufa! Deslize a tela até a metade, e no lado esquerdo temos finalmente o nosso objetivo, as informações de Account ID e Zone ID. Copie esses valores pois usaremos na configuração do nosso projeto.

Zone ID e Account ID

De posse dos Zone ID e Account ID vamos editar o wrangler.toml do nosso projeto:

$ nano $HOME/hello-world-project/wrangler.toml
Editando o wrangler.toml

Edite conforme indicado na tela abaixo usando os seus valores recuperados do portal.

Editando wrangler.toml com nano

Com a parte de configuração pronta, vamos ver o código do nosso Hello Worker !

$ cd $HOME/hello-world-project/
$ nano index.js
Visualizando o JavaScript do Hello Worker

Agora que já demos uma olhada no código podemos fazer um preview antes de publicar, na pasta do projeto execute:

$ wrangler preview

Esse comando gera dois resultados, um no próprio terminal via linha de comando e outro no browser, vamos ver no terminal.

Wrangler preview

E também o resultado no browser, executando um request preview.

Wrangler preview no browser

Com todos os passos executados com sucesso podemos buildar e publicar o nosso Hello Worker!

$ wrangler build # não necessário no caso de java script
$ wrangler publish
Wrangler Publish

Agora é só usar o navegador e chamar a URL do worker, pronto o projeto Hello Worker está no ar nos 200 datacenters e em 95 países onde a Cloudflare tem presença.

Hello Worker!

Utilizei o comando traceroute para ver quantos hops eu teria até meu worker, realmente foi bem rápido e com apenas 9 hops.

Considerando que só a partir do sexto hop é que sai da rede da Vivo/Telefonica, meu provedor de acesso, gostei da implementação.

$ traceroute hello-world-project.venanc.workers.dev
Traceroute rede local

Testei outros domínios tradicionais e muitas vezes a quantidade de hops passou de 30.

Agora preciso ver se esse meu worker está em outros locais, testei com um virtual host que tenho em New York. E olha que legal ! somente 5 hops e um tempo de resposta bem baixo:

$ traceroute hello-world-project.venanc.workers.dev
Traceroute Nova York

Evoluindo o nosso Worker

Incrementando um pouco mais nosso exemplo, vamos transformar nosso Hello Worker com um código que fará múltiplas chamadas externas a API da Coinbase, agregará o resultado e devolverá uma única resposta.

Edite seu index.js e inclua o código a seguir.

$ cd $HOME/hello-world-project/
$ nano index.js
// Make multiple requests, aggregate the responses and
// send it back as a single response.

addEventListener('fetch', event => {
    event.respondWith(fetchAndLog(event.request))
})
  
async function fetchAndLog(request) {
    const init = {
      method: 'GET',
      headers: {'Authorization': 'XXXXXX', 'Content-Type': 'text/plain'}
    }
    const [btcResp, ethResp, ltcResp] = await Promise.all([
      fetch('https://api.coinbase.com/v2/prices/BTC-USD/spot', init),
      fetch('https://api.coinbase.com/v2/prices/ETH-USD/spot', init),
      fetch('https://api.coinbase.com/v2/prices/LTC-USD/spot', init)
    ])
  
    const btc = await btcResp.json()
    const eth = await ethResp.json()
    const ltc = await ltcResp.json()
  
    let combined = {}
    combined['btc'] = btc['data'].amount
    combined['ltc'] = ltc['data'].amount
    combined['eth'] = eth['data'].amount
  
    const responseInit = {
      status: 200,
      headers: {'Content-Type': 'application/json'}
    }
    return new Response(JSON.stringify(combined), responseInit)
}

Alguns detalhes do código destacados pelas setas.

Detalhe do nosso código com mais funcionalidades

Hora de publicar novamente nosso projeto.

$ wrangler build # não necessário no caso de java script
$ wrangler publish
Resultado do comando publish
Resultado no navegador do Worker com Agregação de Resultados

Se você seguiu esse passo a passo até aqui parabéns! Você criou um Worker na Cloudflare rodando em centenas de Datacenters!

Eu realmente espero que você tenha aprendido algumas coisas ao longo do caminho. Daqui em diante você deve ter uma base decente para mexer com coisas mais avançadas aqui nos Workers da Cloudflare ou com Edge Computing em geral e pode continuar aprendendo.

Conclusão

Realmente a implementação desse modelo de edge computing com serverless promete ser uma grande ferramenta aplicada a esse nosso novo normal do 5G, IoT e Analytics na borda.

O Cloudflare está focando corretamente nos desenvolvedores, com uma pegada bem fácil de utilizar, os workers já tem suporte para JavaScript, C, C++, Rust, Go, Python, Scala, Kotlin e até COBOL.

O modelo de custo por request parece justo, facilita no orçamento e você paga pelo que usa, sem contar a abrangência da rede da Cloudflare com 200 datacenters em 95 países.

Mapa Datacenters Cloudflare

Aqui estão alguns recursos disponíveis para ajudá-lo em sua jornada:

Para relatar problemas, use o a comunidade da Cloudflare:

https://community.cloudflare.com/tags/workers

Outro lugar que tem bastante informação é o Git do Wrangler:

https://github.com/cloudflare/wrangler

Conheça outros exemplos:

https://github.com/cloudflare/worker-examples/tree/master/examples

Obrigado e boa sorte nos projetos Edge! Por favor deixe seu comentário. André Venâncio.

Revisão: Diogo Nunes e Rafael Espinha.