Blog

Melhores práticas para Serverless

Melhores práticas para Serverless

No último post dessa série, comparamos serverless e containers para aplicações modernas, discutindo muitas das vantagens de trabalhar com serverless. No entanto, isso também apresenta alguns desafios. Para aproveitar o melhor dessa arquitetura, é importante selecionar a plataforma correta e aderir a práticas recomendadas para tal. Este post abordará alguns casos de uso de serverless essenciais, melhores práticas para desenvolvedores e a abordagem da Azion em relação à computação serverless usando Edge Functions.

Características do serverless e casos de uso

Com facilidade de entrada, escala automática, modelo de precificação “pay-as-you-go”, uso eficiente de recursos e serviços de back-end gerenciados, o serverless é uma oportunidade para novos modelos de negócios. No entanto, as propriedades de funções serverless as fazem particularmente apropriadas para tarefas pequenas e independentes.

Além disso, a elasticidade das funções serverless oferece um jeito eficiente de escalar demandas irregulares ou pouco frequentes, enquanto sua facilidade de entrada e implementação rápida são ideais para empresas com requisitos que mudam rapidamente ou uma necessidade de desenvolvimento acelerado.

Um whitepaper feito pela CNCF, o Cloud Native Computing Foundation, fornece vários exemplos de casos de uso que se encaixam nessas condições, tais como:

  • processar trabalhos ou tarefas agendadas;
  • APIs em REST;
  • lógica de negócios; e
  • pipelines de integração contínua.

Isso ecoou na pesquisa de 2020 de Jeremy Daly, em que desenvolvedores listaram todos os exemplos acima entre os seus maiores casos de uso, juntos com:

  • aplicações single-page;
  • tarefas de DevOps; e
  • integração de serviços third-party.

Melhores práticas para desenvolvedores que usam serverless

Opte por tarefas pequenas e efêmeras

Uma das práticas mais frequentemente citadas é criar funções adequadas para implementação serverless. Funções com muitas dependências levam mais tempo para download e inicialização, resultando em maior latência. Além disso, manter as tarefas pequenas e seu curto tempo de execução evita que os custos excessivos aumentem conforme a quantidade de funções cresce.

De acordo com observação da Forrester em um relatório de 2019, “Ao usar uma infraestrutura baseada em FaaS, desenvolvedores pagam por invocations, duração e memória. Embora os custos relacionados a invocations sejam fixos, duração e memória podem variar e, conforme aumentam, tendem a diminuir os custos de invocation. Ao projetar serviços pequenos concentrados em uma só tarefa, os desenvolvedores podem controlar os custos”.

Projete para escalas automáticas

Outra maneira de controlar custos e manter a alta performance é lembrar do escalonamento automático ainda no estágio de design. A escolha de tarefas com poucas interdependências facilita sua execução em paralelo, enquanto o uso de design assíncrono pode oferecer custos reduzidos em relação ao método model-view-controller.

Como a Forrester destacou, “Encadear funções é muito mais econômico do que implementar controladores como uma função que aguarda a alteração dos estados ou eventos para processar”. Na Azion, facilitamos a programação de funções assíncronas por meio do uso de async/await com promises.

Usufrua de serviços third-party

Serviços third-party e serverless se complementam naturalmente, já que é por meio de APIs que funções serverless se comunicam entre si. Como resultado, desenvolvedores podem facilmente conectar funções a serviços third-party, terceirizando as tarefas que não são exclusivas de suas missões. Isso reduz códigos personalizados, o que pode ajudar empresas a chegar ao mercado mais rápido. O Azion Marketplace, lançamento recente da Azion, permite que desenvolvedores encontrem e implementem serviços third-party em poucos cliques.

Proteja as suas funções

Uma das vantagens de serverless é o modelo de responsabilidade compartilhada de proteção de aplicações.. Com aplicações serverless, o provedor serverless lida com a segurança de back-end, reduzindo drasticamente os vetores de ataque que precisam ser contidos pelo desenvolvedor.

Para muitos desenvolvedores, no entanto, isso constitui quase, ou toda, a sua postura de segurança. Ao criar aplicações serverless, é absolutamente essencial que os desenvolvedores garantam a segurança dos clientes, tais como dados do usuário, autenticação e monitoramento de uso.

Em um post de 2020 sobre segurança serverless, Jeremy Daly forneceu algumas das melhores práticas para garantir a segurança desse tipo de aplicação, como:

  • aplicar permissões de privilégio mínimo;
  • avaliar a segurança de pacotes de segurança third-party;
  • criptografar dados sensíveis (e prevenir sua exposição por meio de registros e alertas);
  • implementar um sistema de registros e monitoramento;
  • aplicar melhores práticas para proteger chaves de acesso e credenciais de login; e
  • resguardar-se contra ataques SQL, XXS e DDoS.

Escolhendo uma plataforma serverless

Conhecendo os desafios do serverless

Apesar de o uso de serverless trazer ótimas vantagens, a pesquisa sobre serverless de 2020 do Daly também listou os maiores pain points entre os desenvolvedores. Essas dores são frequentemente citadas como desafios do desenvolvimento serverless e incluem:

  • depuração;
  • monitoramento;
  • performance;
  • vendor lock-in; e
  • segurança.

Embora algumas dessas questões possam ser resolvidas adotando as melhores práticas mencionadas acima, atenuar outras pode demandar inovação por parte do provedor serverless. Assim, conhecer a abordagem do provedor em relação a esses desafios é a chave da implementação de sucesso de funções serverless.

A abordagem da Azion para computação serverless

Na Azion, desenvolvemos nossa solução FaaS, o Edge Functions, especificamente para evitar os pontos problemáticos que os clientes serverless enfrentam. Sendo assim, gostaríamos de compartilhar a nossa abordagem única em relação a depuração, monitoramento, desempenho, segurança e vendor lock-in.

Depuração e monitoramento

Como foi constatado no Guide to Serverless Technologies da New Stack, depuração e monitoramento são complicados em serverless porque muito da infraestrutura é abstrata; com isso, “Não existe uma métrica padrão única em que os desenvolvedores possam confiar para dizer se o código está funcionando ou não”. Além disso, sistemas serverless são distribuídos e as funções, efêmeras, tornando registros não apenas mais difíceis de implementar, mas incrivelmente importantes.

Mas determinar quando (e como) as aplicações falham é apenas a ponta do iceberg. O monitoramento não é necessário apenas para mantê-las funcionando; ele fornece informações sobre o sucesso de uma aplicação, como page views, cliques em anúncios, conversões de vendas e outros KPIs.

O Azion Edge Functions fornece análises de dados amplas e refinadas para ajudar na depuração e no monitoramento. Desenvolvedores podem configurar registros por meio da Fetch API e conferir informação em tempo real sobre o desempenho de suas aplicações usando Real Time Metrics.

Performance

Uma preocupação central acerca do serverless é a questão de performance conhecida como cold start: um atraso de cerca de meio segundo que ocorre ao iniciar uma função que se encontra ociosa há algum tempo. Cold starts acontecem quando provedores serverless executam funções em contêineres.

A fim de economizar recursos, o provedor reduz a rotação dos contêineres após um período de inatividade (geralmente em torno de 30 minutos) e aumenta a rotação quando a função é reiniciada. Uma vez que cold starts tornam o desempenho imprevisível e elevam a latência, a performance frequentemente é listada entre os pontos fracos do serverless. Inclusive, muitas listas de melhores práticas sugerem evitar o uso de serverless para serviços que requerem baixa latência e performance confiável.

No entanto, cold starts são apenas um problema para soluções FaaS como AWS Lambda que são executadas em contêineres.. Como a Azion não usa contêineres, o Edge Functions pode ser executado de qualquer lugar sem cold start. Em vez de acionar um contêiner e uma instância de node.js quando a função se encontra ociosa, a Azion só precisa carregar do disco para a memória, resultando em uma solução que é até 10x mais barata e 100x mais rápida – uma solução ideal para aplicações de próxima geração, confiáveis e de baixa latência.

Segurança

Embora contêineres possam prejudicar o desempenho, alguns provedores de serverless sugerem que eles são necessários para isolar funções e, assim, mantê-las seguras. A Azion equilibra segurança e desempenho usando V8 Isolate em um ambiente multi-tenant para criar um sandbox que isola e assegura cada função.

Vendor lock-in

Em seu livro de 2020 What is Serverless, Mike Admunsen aponta que as abordagens de diferentes servidores de cloud para cada uma dessas tarefas contribui grandemente para o vendor lock-in entre clientes serverless. Ele escreve que “vendor lock-in acontece quando competidores resolvem problemas compartilhados aderindo métodos únicos. (…) Quando cada um dos papéis fornecidos por plataformas serverless é separado e oferecido como elementos independentes interoperáveis, arquitetos de software e desenvolvedores experimentam um aumento em mobilidade para suas soluções.”

A necessidade de interoperabilidade em plataformas serverless é uma das principais razões pelas quais a Azion adota padrões abertos em sua plataforma de Edge. Além disso, nossos produtos de Edge estão disponíveis separadamente para que os clientes possam selecionar apenas os produtos dos quais precisam.

Conclusão

A implementação bem-sucedida de funções serverless requer certa compreensão das melhores práticas de desenvolvimento e da escolha de plataforma e ferramentas certas para o trabalho. Por se tratarem de um modelo de implementação e arquitetura relativamente novos, muitas plataformas de serverless ainda se encontram em processo de maturação.

Como resultado, é importante escolher a plataforma que não só atenda às necessidades atuais do seu negócio, mas que forneça portabilidade e interoperabilidade para garantir que sua empresa possa conectar-se e integrar-se facilmente a outros serviços futuramente.

Projetado com padrões abertos e features próprias para lidar com alguns dos maiores pain points de clientes serverless, o Edge Functions é uma solução excelente para desenvolvedores que buscam aproveitar o poder da computação serverless.