Serverless, uma coisa no back-end que dá super poderes aos desenvolvedores front-end
Tags: ptbr, serverless, startup, webdev
Published: 2020-09-11 03:12:30

Aprender desenvolvimento web é difícil. Na maioria das vezes, você começa com HTML e passa muito tempo aprendendo todas as suas tags. No entanto, sua página da web parece ser do início de 1990. Você precisa aprender CSS para torná-la bonita. Parece simples até você tentar alinhar dois elementos da maneira que desejar.

Por fim, você passa para o JavaScript para tornar a sua nova página da web interativa. Antes mesmo de entender seu mundo dinâmico de frameworks, você tenta fazer algo simples, como calcular uma soma de 0,1 e 0,2, e não obtém o resultado esperado. Se você passou alguns dias tentando aprender JavaScript, provavelmente conheceu seu lado estranho.

Porém, se você for persistente o suficiente, conseguirá construir seu primeiro aplicativo da web. E quando você fizer isso, você sentirá que tem superpoderes. E você tem superpoderes!

Se você for como eu, seu primeiro aplicativo provavelmente não será um aplicativo da web premiado, mas, no momento em que você o terminar, parecerá o melhor e mais complexo aplicativo de todos os tempos. Você deve ter orgulho disso e mostrá-lo aos seus amigos.

[![Meu primeiro app](https://res.cloudinary.com/practicaldev/image/fetch/s--xv4bSefk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iaphuu7wt3ub80w9yeet.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--xv4bSefk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iaphuu7wt3ub80w9yeet.png)

Você finalmente mostra seu aplicativo para seus amigos, e eles ficam felizes por você. Então você quer mostrar a um bom amigo que mora longe. Espere, como você envia sua obra-prima para seu amigo Ben da Austrália?

## Como disponibilizar seu aplicativo da web

Depois de uma rápida pesquisa online, é óbvio; você precisa de um servidor!

Isso é fácil. Você rapidamente encontra e aluga um. Agora você pode simplesmente colocar seu aplicativo na nuvem e disponibilizá-lo para seu amigo Ben e para o resto do mundo.

Bem, não tão rápido. Os servidores não são caixas onde você pode simplesmente colocar seu aplicativo e torná-lo disponível globalmente. Os servidores são como animais de estimação; eles requerem mais atenção e conhecimento. Você provavelmente tem um sistema operacional com seu servidor de nuvem, mas precisa instalar e configurar algumas outras bibliotecas para hospedar seu aplicativo. Apache, Nginx, domínios, SSL e outras palavras estranhas que você mal entende. Você precisa aprender todas essas coisas para poder mostrar seu aplicativo para seu amigo Ben? Você aprendeu muito e agora parece que não é suficiente terminar um aplicativo simples do mundo real.

Huh, existe uma maneira melhor? Não seria ótimo se você pudesse simplesmente clicar em algum botão mágico e tornar seu aplicativo disponível publicamente?

## Como funciona a hospedagem de aplicativos da web estáticos

Em um mundo ideal, depois de criar um aplicativo da web, você deve ser capaz de clicar em algum botão ou executar um comando de seu terminal para tornar seu aplicativo disponível para todos. Também deve ser barato. Melhor ainda, deve ser gratuito se quase ninguém usar seu aplicativo. Por que você precisaria pagar $ 10 por mês para mostrar seu aplicativo ao seu amigo Ben? Não é muito dinheiro, mas é o suficiente para comprar aquele excelente vídeo-curso que ensina novas habilidades.

Além disso, e se seu aplicativo se tornar popular de repente? Isso também acontece. Os servidores não são bons em lidar com a popularidade instantânea dos aplicativos da web que hospedam. Eles podem suportar muitos visitantes, mas em algum momento, eles começam a ficarem tímidos e lentos, até que param. Então você terá que lidar com um novo conjunto de problemas.

Em um mundo ideal, seu aplicativo deve ser capaz de lidar com popularidade instantânea com escala automática e armazenamento em cache, sem a sua ajuda.

Depois de mais alguns minutos pesquisando na web, você pode encontrar vários serviços com um conjunto semelhante de recursos, como [Netlify](https://www.netlify.com/) , [Github Pages](https://pages.github.com/) ou [Amazon Simple Storage Service (S3)](https://aws.amazon.com/s3) .

No entanto, há outra coisa com um conjunto semelhante de recursos e um nome estranho: Serverless.

## Afinal, o que é serverless?

Então, o que é serverless? É alguma mágica hospedar seu aplicativo serverless, semelhante a [redes ponto a ponto](https://datproject.org/) ? Ou você precisa de menos servidores? Você viu um tópico em que alguém afirma que há ainda mais servidores em serverless e provavelmente está confuso.

Para entender o serverless, vamos dar um passo atrás e ver o que precisamos fazer para que nossos aplicativos funcionem corretamente.

Para ter um aplicativo da web totalmente funcional, você precisa comprar ou alugar um servidor e certificar-se de que ele possui um sistema operacional. Em seguida, você precisa configurar seu servidor e instalar as ferramentas e bibliotecas necessárias, como Nginx ou Apache. Então, você frequentemente precisa de algumas estruturas, etc. Nesse momento, você pode finalmente pensar sobre a lógica de negócios e o código de seu aplicativo. Assim que seu código estiver pronto, você precisa disponibilizá-lo implantando-o em seu servidor. No entanto, isso não é tudo; você precisa se certificar de que seu aplicativo sempre funcione, monitorando-o. Além disso, de vez em quando, você precisa gerenciar seu servidor (atualizações de software e patches de segurança) e seu aplicativo (novos recursos e correções de bugs).

Uma longa lista de tarefas pendentes apenas para garantir que seu aplicativo seja entregue da maneira que deveria. Como exercício, se você estiver criando esse aplicativo para um cliente não técnico, tente mostrar essa lista a seus clientes e pergunte o que é importante para eles. Tenho certeza de que a lista de coisas essenciais é muito mais curta e provavelmente incluirá lógica de negócios, garantindo que o aplicativo funcione (monitoramento) e tenha certeza de que o aplicativo é bem mantido (novos recursos regulares e correções de bugs).

Como desenvolvedor, você deve se concentrar nas coisas que são importantes para o cliente e os usuários finais do aplicativo. A nuvem ajuda você a cuidar de alguns dos elementos menos críticos de sua lista: alugar um servidor e gerenciar o sistema operacional é mais fácil do que nunca e você não precisa mais se preocupar com isso.

Serverless é a próxima etapa natural da evolução da nuvem. Sua ideia é cuidar de outras coisas não essenciais de sua lista de tarefas. Com o serverless, você não precisa mais configurar servidores, você escreve sua lógica de negócios e a plataforma gerencia o sistema operacional e todas as bibliotecas e estruturas necessárias em cima dele. A plataforma também cuida de atualizações e patches de segurança de seu sistema operacional, bibliotecas e suas estruturas, e oferece uma maneira fácil de implantar seu aplicativo.

O Serverless está adicionando outra camada de abstração e ajuda você a se concentrar nas coisas que são importantes para seu cliente e usuários finais: a lógica de negócios. Você ainda precisa estar em dia com os procedimentos de monitoramento e implantação, mas existem muitas ferramentas para apoiá-lo.

[![Uma ideia](https://res.cloudinary.com/practicaldev/image/fetch/s--KH-y1lS1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9wc3t9g4bxqvhdt65y5c.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--KH-y1lS1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9wc3t9g4bxqvhdt65y5c.png)

Se você ainda não consegue entender o nome desta próxima etapa da evolução da nuvem, eu entendo. Não é o melhor nome de todos. Como você deve se lembrar, há duas coisas difíceis na ciência da computação, e dar nomes às coisas é uma delas.

A melhor explicação que encontrei é a que Gojko Adzic deu em [um de seus excelentes artigos serverless](https://gojko.net/2016/08/27/serverless.html) :

> Serverless é da mesma forma que o WiFi é sem fio. Em algum momento, o e-mail que envio por Wi-Fi atingirá um fio, é claro, mas não preciso puxar um fio do meu telefone.

## Benefícios do Serverless

Serverless tem muitos benefícios, além da infraestrutura gerenciada. Possui escala automática, failover automático e isolamento por função. É fácil começar e barato na maioria das vezes. Você verá alguns argumentos de que serverless pode ser caro em grande escala, mas a maioria desses argumentos compara diretamente o custo da infraestrutura e ignora todas as coisas que você não precisa mais fazer.

Enquanto estamos falando sobre o custo de serverless, é importante observar que o benefício essencial de serverless é seu modelo de preço. Por quê? Porque você paga por uso e se ninguém usar seu aplicativo, você pagará $ 0. Além disso, a maioria dos fornecedores tem preços baixos com camadas gratuitas generosas. Por exemplo, a função AWS Lambda custa US $ 0,2 por milhão de execuções de funções, e o primeiro milhão é gratuito. Outros serviços e outros fornecedores têm preços semelhantes.

Explicar por que o modelo de preços serverless é essencial exigiria muito mais do que alguns parágrafos de texto. No entanto, o modelo de preços não dá superpoderes aos desenvolvedores front-end, pelo menos não diretamente. Se quiser saber mais sobre economia serverless, você pode ler sobre isso em muitos artigos, incluindo o seguinte:

-   [FinDev e Serverless Microeconomics](https://aws.amazon.com/blogs/enterprise-strategy/findev-and-serverless-microeconomics-part-1/) de Aleksandar Simović
-   [Microotimização: Custos baseados em atividades para serviços digitais](https://aws.amazon.com/blogs/enterprise-strategy/micro-optimization-activity-based-costing-for-digital-services/) por Mark Schwartz
-   [Arquiteturas Serverless: uma virada de jogo ou uma moda reciclada](https://gojko.net/2016/08/27/serverless.html) por Gojko Adzic

## Superpoderes

O modelo de preços não dá superpoderes aos desenvolvedores front-end. Mas o que é então?

Qual seria o superpoder perfeito para um desenvolvedor front-end, além de uma capacidade de flutuar os elementos em CSS e entender o que "this" é em JavaScript?

Existem muitos candidatos em potencial, mas uma das principais opções é o mítico desenvolvedor full-stack.

O que é um desenvolvedor full-stack? Em teoria, é um desenvolvedor capaz de construir e entregar um aplicativo do zero. No entanto, como Carl Sagan disse:

> Se você deseja fazer uma torta de maçã do zero, primeiro você deve inventar o universo.

Na prática, um desenvolvedor web full-stack é geralmente um desenvolvedor back-end que conhece jQuery ou noções básicas de uma estrutura de front end popular, ou um desenvolvedor de front end capaz de criar uma API da web usando Express.js ou alguma outra estrutura da web popular. Isso é impressionante, mas, em muitos casos, essas habilidades estão longe das habilidades necessárias para entregar um aplicativo da web pronto para produção. Leva tempo para aprender o front-end e o back-end. No entanto, ser desenvolvedor front-end e back-end não o torna mais um desenvolvedor full-stack. Se você deseja criar e fornecer um aplicativo da web pronto para produção, também precisa de habilidades DevOps.

Felizmente, é aí que o serverless entra em ação e ajuda um desenvolvedor front-end a ganhar superpoderes. Como? É hora da história!

## CodePen

Se você é um desenvolvedor front-end, há uma grande chance de ter ouvido falar do [CodePen](https://codepen.io/) . Caso você não tenha feito isso, CodePen é uma comunidade online para mostrar trechos de código HTML, CSS e JavaScript criados pelo usuário. Ele funciona como um editor de código online e um ambiente de aprendizagem de código aberto, onde os desenvolvedores podem criar trechos de código, com nomes criativos de "pens".

No CodePen, você pode escrever seus trechos de código usando TypeScript, SASS, LESS e muitas outras bibliotecas e ferramentas populares. Como seu navegador não entende a maioria dessas bibliotecas prontas para usar, a plataforma faz alguma mágica em segundo plano e converte seu snippet de código em HTML, CSS e JavaScript simples que seu navegador entende.

[![Codepen](https://res.cloudinary.com/practicaldev/image/fetch/s--9QQwgW97--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/45wng7c0ckqybblx637l.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--9QQwgW97--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/45wng7c0ckqybblx637l.png)

CodePen é incrível. No entanto, eles não têm um orçamento ilimitado e uma grande equipe. No momento em que entrevistamos sua equipe para o [nosso livro](https://www.manning.com/books/serverless-applications-with-node-js) , eles tinham uma única pessoa DevOps em sua equipe e mais de 250 milhões de solicitações à API de pré-processador a cada mês.

Um pré-processador é um serviço que traduz ferramentas e bibliotecas que o navegador não entende em HTML, CSS e JavaScript simples. Por exemplo, TypeScript para JavaScript ou SCSS para CSS.

Sua arquitetura original era baseada em dois aplicativos Ruby on Rails monolíticos - o site principal e outro aplicativo dedicado a pré-processadores - e um único serviço de banco de dados relativamente pequeno. Depois de implementar sua ideia inicial, eles perceberam algumas desvantagens significativas de seu plano. Primeiro, algumas pens se tornam virais rapidamente e precisam ser escalonadas rapidamente, mas para manter o custo de infraestrutura o mais baixo possível. Outra, ainda mais, a desvantagem crítica era o isolamento de seus pré-processadores, ou para ser mais preciso, a falta dele. Alguns de seus usuários foram criativos e conseguiram executar funções SASS e LESS que tinham acesso ao sistema de arquivos e interferiam em outros pré-processadores.

[![Uma tentativa inicial](https://res.cloudinary.com/practicaldev/image/fetch/s--omqb6ANl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zqp1k0qwcrphbihs3qcv.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--omqb6ANl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zqp1k0qwcrphbihs3qcv.png)

Eles começaram a investigar como separar a execução do código dos usuários para fins de segurança. Essa foi a primeira vez que ouviram falar do AWS Lambda: seu engenheiro de DevOps sugeriu isso como uma solução possível. Inicialmente, seus desenvolvedores rejeitaram a ideia porque não viam o objetivo, pensando que seria um incômodo instalar e configurar um novo ambiente.

Então, um dia eles quiseram adicionar um novo pré-processador e decidiram experimentar este "conceito Lambda". Um de seus engenheiros de front-end usou [Claudia.js](https://claudiajs.com/) para criar e implantar um novo pré-processador. E então eles se apaixonaram por serverless.

Logo depois, eles migraram todos os seus pré-processadores para AWS Lambda e Amazon API Gateway. Agora, cada um de seus pré-processadores vive em uma única função do AWS Lambda e estão totalmente isolados. Se dois usuários executam a mesma pen ao mesmo tempo, cada solicitação gira uma única função Lambda e ambos os serviços são executados em paralelo, mas totalmente isolados por design.

[![Codepen e sem servidor](https://res.cloudinary.com/practicaldev/image/fetch/s--ifQ3p3QS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l2a1captzwal21a7ul6h.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--ifQ3p3QS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l2a1captzwal21a7ul6h.png)

CodePen lidam com mais de 250 milhões de solicitações de API por mês aos pré-processadores, no momento da entrevista, eles tinham mais de 200.000 solicitações por hora no pico.

De quantos membros da equipe DevOps você precisa para lidar com 250 milhões de solicitações de API de pré-processador por mês?

Se você for CodePen, a resposta é zero. Sim, você ouviu corretamente - zero.

Os pré-processadores são desenvolvidos, implantados e mantidos por sua equipe de front-end. Eles ainda têm uma pessoa DevOps que mantém seu servidor de aplicativos e o banco de dados. A fatura mensal da AWS era um pouco mais de US $ 1.000 por mês, o que parece alto, mas ainda é uma fração do custo do engenheiro DevOps e da infraestrutura com servidores virtuais ou contêineres. Além disso, eles poderiam reduzir sua fatura pela metade se aplicassem algumas otimizações.

Serverless deu superpoderes reais à sua equipe de front-end.

## Vacation Tracker

Outro bom exemplo é uma startup em que estou trabalhando, [Vacation Tracker](https://vacationtracker.io/).

O Vacation Tracker é um sistema de gerenciamento de licenças onde os funcionários podem solicitar licenças e gerenciar seus dias de folga facilmente com o Slack. Com nossa ferramenta, você pode verificar seus dias de férias restantes e solicitar novas férias pelo Slack. Você também pode receber uma confirmação sem sair do Slack. Não há necessidade de lembrar outra senha, aprender uma nova ferramenta ou gerenciar sua equipe em outra ferramenta.

A ideia começou com um hackathon da empresa, então criamos um protótipo simples serverless, publicamos uma página de destino e esquecemos dela. No entanto, muitas equipes se inscreveram para o beta privado e decidimos construir uma ferramenta.

A equipe inicial não era uma equipe, pois tinha apenas um único desenvolvedor front-end em tempo integral que nunca trabalhou com serverless antes. Nosso desenvolvedor aprendeu rapidamente como criar uma API usando Claudia.js API Builder, Amazon API Gateway e AWS Lambda.

Após a luta inicial com a curva de aprendizado, ganhamos uma velocidade decente com ciclos de desenvolvimento rápidos. Nosso aplicativo é totalmente escalonável pronto para usar, e nossa fatura da AWS é inferior a US $ 100 por mês, apesar de ter quase 500 equipes pagantes e muitas outras organizações esperando pelo beta do MS Teams (que estará disponível nas próximas semanas).

[![Rastreador de férias](https://res.cloudinary.com/practicaldev/image/fetch/s--OXaT8kRs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hgvxutrykc9rxxxgov48.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--OXaT8kRs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/hgvxutrykc9rxxxgov48.png)

Nossa equipe cresceu, mas o núcleo do aplicativo ainda é mantido e desenvolvido por desenvolvedores front-end com superpoderes. Como nossa equipe está aprendendo rápido, podemos aplicar rapidamente o que aprendemos aos nossos serviços existentes, já que tudo é desenvolvido isoladamente usando AWS Lambda e outros serviços AWS.

Também acabamos com algumas [peças reutilizáveis](https://aws.amazon.com/blogs/aws/serverless-and-startups/) para nossos próximos produtos.

## Por onde devo começar?

Se você gosta dessas histórias, provavelmente quer saber por onde começar. Mas, para manter este artigo razoavelmente curto, vou deixar isso para o próximo post desta série.

# Créditos

- [Serverless: a backend thing that gives superpowers to frontend developers](https://dev.to/aws-heroes/serverless-a-backend-thing-that-gives-superpowers-to-frontend-developers-163c), escrito originalmente por [Slobodan Stojanović](https://twitter.com/slobodan_).