O que é a computação serverless?
Definição de serverless
A computação serverless é um modelo de computação em nuvem que permite aos desenvolvedores criar e executar código em servidores gerenciados pelo provedor de serviços em nuvem e disponíveis sob demanda. A computação serverless isenta os desenvolvedores da necessidade de gerenciar a infraestrutura de backend e fornece um ambiente escalável e flexível para as empresas. Com a computação serverless, os provedores de serviços em nuvem provisionam a infraestrutura para atender à demanda aumentando ou diminuindo conforme a necessidade e gerenciam a infraestrutura executando manutenção de rotina, atualizações, aplicação de patches e monitoramento de segurança.
A computação serverless não significa que não haja servidores envolvidos. Na verdade, serverless significa que o gerenciamento da infraestrutura foi terceirizado para o provedor de serviços em nuvem. Esse é o motivo dos benefícios e desafios do monitoramento serverless. As empresas podem concentrar seus recursos na lógica de negócios; em contrapartida, têm menos controle e visibilidade sobre o que acontece no backend.
Serverless x FaaS
FaaS (função como um serviço) refere-se a serviços de computação que não incluem o gerenciamento da infraestrutura de backend para manter o foco na criação e na execução do código de frontend. Serverless e FaaS são frequentemente usados de forma intercambiável, mas FaaS refere-se especificamente à capacidade de execução de código que ele fornece aos desenvolvedores. Como arquitetura orientada por eventos, o FaaS é um subconjunto do serverless e é apenas um dos serviços que o serverless fornece.
Os serviços serverless também incluem armazenamento e bancos de dados serverless, transmissão de eventos e troca de mensagens, e gateways de API.
Serverless x BaaS
BaaS (backend como um serviço) é, assim como o FaaS, um subconjunto do serverless. BaaS é um modelo de computação em nuvem que permite que os desenvolvedores se concentrem no frontend. O BaaS vem com software pronto para atividades típicas de backend, como autenticação de usuário, notificações push, armazenamento na nuvem e gerenciamento de banco de dados.
O serverless funciona tanto com o FaaS quanto com o BaaS.
Serverless x SaaS
O SaaS (software como um serviço) refere-se a um serviço de computação no qual um provedor licencia e entrega aplicações de software prontas para uso da empresas pela internet. A computação serverless oferece uma infraestrutura escalável e flexível para que os desenvolvedores criem e implantem aplicações sem se preocupar com o gerenciamento do servidor.
Então, o que é o monitoramento serverless?
A arquitetura orientada por eventos e a infraestrutura de terceiros da computação serverless também exigem uma solução de monitoramento dedicada. As soluções de monitoramento serverless podem ajudar as empresas a obter visibilidade sobre todas as suas operações e são um componente importante de qualquer modelo de computação serverless.
Quais são os principais componentes da arquitetura serverless?
Existem vários componentes importantes na arquitetura serverless, o que a diferencia dos modelos de infraestrutura tradicionais.
- A função dos provedores de serviços em nuvem é importante.
- Os provedores de serviços em nuvem são essenciais para o ambiente serverless, pois assumem o gerenciamento da infraestrutura. Em um modelo de computação de arquitetura tradicional, sua equipe de TI normalmente teria de assumir o tempo e a tarefa trabalhosa de executar e gerenciar os servidores. Com o serverless, o provedor de serviços em nuvem assume essa responsabilidade, liberando seus desenvolvedores. Os provedores de serviços em nuvem provisionam os servidores, os bancos de dados e o armazenamento.
- Programação orientada por eventos.
- O serverless é disparado por eventos, em vez de por polling. Um ambiente serverless é uma arquitetura orientada por eventos (EDA, pelas iniciais em inglês). Um evento é qualquer mudança de estado que ocorre no ambiente, como uma solicitação do usuário final. Esses eventos invocam funções, que são programadas pelos desenvolvedores para disparar tarefas.
- Tarefas baseadas em gatilho.
- O serverless só executa tarefas quando disparado por uma função, que é invocada por um evento. Como resultado, o serverless usa apenas os recursos necessários quando são chamados.
- Programação assíncrona.
- A arquitetura orientada por eventos e a natureza sem estado do serverless permitem a programação assíncrona. Sem estado significa que não há dados salvos entre as interações. Assim, várias tarefas podem ser executadas ao mesmo tempo, sem a necessidade de esperar a conclusão de uma para que outra possa ser executada. A possibilidade de programação assíncrona também fornece aos desenvolvedores flexibilidade enquanto escrevem e testam novos códigos. A velocidade da implantação aumenta.
- APIs RESTful.
- O serverless se comunica entre os serviços web por meio do uso de APIs RESTful. REST significa transferência de estado representacional. Uma API é uma interface de programação de aplicações. Como um ambiente de arquitetura sem estado, o serverless usa APIs RESTful para traduzir ou representar um recurso de cliente final (backend) para um usuário que fez uma solicitação por meio de HTTP.
- DevOps (CI/CD).
- O serverless permite que os desenvolvedores tirem as operações do DevOps com CI/CD. O CI/CD introduz automação no desenvolvimento das aplicações. CI refere-se à integração contínua e CD refere-se à implantação contínua ou entrega contínua. Com o monitoramento de backend terceirizado para os provedores de serviços em nuvem, um ambiente serverless contribui para a agilidade no desenvolvimento de aplicações porque os desenvolvedores podem automatizar partes do pipeline de desenvolvimento e passar menos tempo se preocupando com os efeitos da implantação.
- Redimensionamento automático.
- O serverless é inerentemente escalável. Ele aumenta ou diminui automaticamente para atender à demanda. Um ambiente serverless só ativará os containers quando as funções forem invocadas. Como tal, ele responde automaticamente a aumentos ou diminuições de uso.
- Autocura.
- As aplicações serverless podem ser programadas para identificar e corrigir automaticamente os erros à medida que eles ocorrem. Esse tipo de funcionalidade melhora a resiliência de uma aplicação e aumenta sua disponibilidade.
Como funcionam as aplicações serverless?
O serverless usa tanto o BaaS quanto o FaaS para atender às solicitações. O ambiente como um todo é orientado por eventos, ou seja, um evento dispara uma resposta, como a autenticação ou uma função.
A parte de FaaS do serverless funciona com solicitações do usuário ou eventos. Uma solicitação é processada no gateway da API, que então invoca uma função. Por sua vez, a função se comunica com o banco de dados. Essa sequência de atividades representa uma única tarefa da aplicação. Em um ambiente serverless, as aplicações são modulares porque as tarefas são programadas como funções separadas.
Os desenvolvedores escrevem código de aplicação serverless que é implantado em containers sob demanda. O provedor de serviços em nuvem executará a função em um servidor existente ou ativará um novo servidor para executar a função.
O serverless proporciona aos desenvolvedores uma grande flexibilidade porque não tem estado, o que significa que todas as invocações são independentes. Nenhum dado é armazenado de interações anteriores. O serverless apenas usa recursos conforme a necessidade. Quando uma função não é mais necessária, o container no qual o código foi implantado desaparece. Isso contribui para a flexibilidade que o serverless oferece aos desenvolvedores.
Considerações adicionais em aplicações serverless:
- Uma inicialização a frio pode ocorrer quando uma função é invocada pela primeira vez ou após um período de inatividade. Isso pode causar alguma latência.
- Os provedores de serviços em nuvem determinam o número de funções que podem ser executadas simultaneamente. Isso é o limite de simultaneidade.
- Um tempo limite é a quantidade de tempo que um provedor de serviços em nuvem aloca a uma função antes de encerrá-la.
Por que a tecnologia serverless é importante?
A tecnologia serverless é importante porque oferece benefícios comerciais significativos com o redimensionamento automático e permite que os desenvolvedores sejam mais produtivos e forneçam aplicações com mais rapidez. Como tal, é uma tecnologia econômica: os desenvolvedores podem se dedicar à produção em vez das operações e, como um modelo baseado no consumo, alivia o custo da execução e do gerenciamento de servidores físicos.
A tecnologia serverless existe há mais de uma década. Em 2014, a AWS lançou seu primeiro FaaS, o AWS Lambda. O Google tem o Google Cloud Functions, enquanto a Microsoft tem o Azure Functions. Como a maioria das empresas depende da computação em nuvem, a tecnologia serverless é sinônimo de operações comerciais. Assim, à medida que o papel dos provedores de serviços em nuvem se torna crucial para as empresas, o mesmo acontece com a tecnologia serverless.
Benefícios das funções serverless
As funções serverless oferecem vários benefícios tanto para os desenvolvedores quanto para os clientes.
- Relação custo-benefício. Os provedores de serviços em nuvem oferecem o serverless como um modelo baseado no consumo, cobrando apenas pelos recursos e funções que você usa. Devido à natureza sem estado do serverless (se um container não está em uso, ele desaparece), não há tempo ocioso. Consequentemente, você nunca paga pelo tempo ocioso. Isso faz uma diferença brutal na eficiência de custos.
- Escala. O serverless possibilita que você aumente e diminua conforme a necessidade devido à sua arquitetura orientada por eventos. Se há mais demanda, o provedor de serviços em nuvem permite a ampliação com a ativação de mais recursos conforme a necessidade. Eles executam e gerenciam esses recursos para você, para que você possa se concentrar no crescimento.
- Redução das despesas gerais. Com as funções serverless, os provedores de serviços em nuvem assumem o gerenciamento e o monitoramento da sua infraestrutura. Isso significa que você delega o custo e os recursos humanos do gerenciamento para o provedor de serviços em nuvem e pode redistribuir seus recursos para desenvolvimento e implantação.
- Desempenho e disponibilidade. Como um ambiente orientado por eventos, o serverless aumenta o desempenho porque nunca usa recursos desnecessários. Isso também significa que os recursos estão disponíveis conforme a necessidade. O provedor de serviços em nuvem permite a ampliação conforme a necessidade, ativando servidores e containeres quando houver demanda, para que você nunca precise se preocupar com a disponibilidade do servidor ou do armazenamento.
- Produtividade do desenvolvedor. Os desenvolvedores se beneficiam das funções serverless porque um provedor de serviços em nuvem assume a parte operacional do DevOps. Isso libera os desenvolvedores para se dedicarem à escrita do código. O ambiente serverless promove agilidade e produtividade ao permitir a automação de CI/CD no pipeline de desenvolvimento.
Quais são os desafios da computação serverless?
Apesar dos benefícios óbvios de eficiência de custo e desenvolvimento acelerado, a computação serverless vem com um conjunto de desafios. Algumas desvantagens da computação serverless:
- Dependência do fornecedor. A natureza do serverless implica se comprometer com um único provedor de serviços em nuvem para implantação do código. Como resultado, os desenvolvedores são forçados a seguir o modelo oferecido pelo fornecedor. O provedor determina o uso dos recursos, como limites de simultaneidade. Por esses motivos, a dependência do fornecedor pode significar falta de flexibilidade.
- Monitoramento e depuração da perspectiva do código. Como o provedor de serviços em nuvem gerencia a infraestrutura, você tem pouca ou nenhuma visibilidade do backend das suas operações. Consequentemente, é muito difícil monitorar um ambiente serverless sem uma ferramenta de monitoramento serverless dedicada. Além disso, com a arquitetura orientada por eventos de um ambiente serverless, identificar, recriar e corrigir bugs pode ser um desafio.
- Latência. Devido à natureza sem estado das aplicações em um ambiente serverless, pode ocorrer latência quando uma função é invocada pela primeira vez ou após um longo período de inatividade. A latência também pode ocorrer devido a um tempo limite ou quando muitas funções estão sendo executadas simultaneamente. Nesse caso, o provedor pode eliminar uma das funções, levando a uma falha. No lado do usuário, isso causa latência.
- Customização e controle limitados. Como os provedores serverless gerenciam a infraestrutura subjacente, pode haver limitações quanto à customização e ao controle do ambiente, como versões de tempo de execução disponíveis, alocação de memória e limites de tempo de execução.
- Preocupações com a segurança. Embora a computação serverless reduza a superfície de ataque, ela pode introduzir novos riscos à segurança. Os desenvolvedores precisam estar cientes dos riscos associados a serviços de terceiros, permissões de nível de função e vulnerabilidades no código da aplicação.
- Condição sem estado. As funções serverless são sem estado, o que significa que não retêm nenhum dado entre as invocações. Isso pode dificultar o gerenciamento do estado da aplicação, exigindo que os desenvolvedores dependam de armazenamento externo ou bancos de dados para manter o estado.
- Previsibilidade de custo. Embora a computação serverless possa ser econômica, pode ser difícil prever os custos, pois eles dependem de fatores como número de invocações, memória e tempo de execução. Picos inesperados de uso podem levar ao aumento dos custos.
- Integração com sistemas existentes. A integração de funções serverless com sistemas e arquiteturas existentes pode ser um desafio, principalmente ao lidar com aplicações legadas ou sistemas complexos.
- Curva de aprendizado. A adoção da computação serverless exige que os desenvolvedores aprendam novos conceitos, ferramentas e práticas recomendadas, o que pode adicionar complexidade ao processo de desenvolvimento.
Casos de uso da computação serverless
Os benefícios oferecidos pela computação serverless, incluindo escalabilidade e administração reduzida, a tornam adequada para vários casos de uso.
- Desenvolvimento de aplicações web. A computação serverless é adequada para o desenvolvimento de aplicações web porque é um ambiente no qual os desenvolvedores podem testar rapidamente. Com o modelo baseado no consumo oferecido pelos provedores de serviços em nuvem, o desenvolvimento de aplicações web também se torna mais barato no ambiente serverless. Você paga apenas pelos recursos que usa e não gasta tempo ou recursos humanos no gerenciamento da infraestrutura. Assim, seus desenvolvedores podem se dedicar ao frontend. Serviços serverless como bancos de dados, gateways de API e arquitetura orientada por eventos (EDA) permitem que os desenvolvedores criem aplicações web apenas escrevendo código.
- Processamento e analítica de dados. O serverless funciona bem com dados de texto estruturado, áudio, imagem e vídeo. Ele possibilita o processamento e a análise de conjuntos de dados grandes e díspares. Como qualquer modelo de computação tradicional, um ambiente serverless contém uma variedade de conjuntos de dados isolados. Os desenvolvedores podem escrever uma aplicação para coletar e processar dados de todos os canais de negócios em um único banco de dados. A computação serverless é ideal para processar grandes quantidades de dados, como operações ETL (extrair, transformar, carregar), análise de log ou validação de dados, pois pode escalar horizontalmente para lidar com a carga de trabalho necessária.
- APIs e microsserviços. As funções serverless podem ser usadas para criar e implantar APIs e microsserviços rapidamente, para que os desenvolvedores possam se dedicar a escrever a lógica da aplicação sem se preocupar com o gerenciamento da infraestrutura.
- Processamento de arquivos em tempo real. As funções serverless podem processar arquivos em tempo real quando eles são carregados em serviços de armazenamento em nuvem, permitindo redimensionamento de imagem, transcodificação de vídeo ou extração de texto.
- Fluxos de trabalho orientados por eventos. A computação serverless pode ser usada para criar fluxos de trabalho orientados por eventos que respondem a eventos específicos, como alterações em um banco de dados, fluxos de dados de dispositivos IoT ou mensagens de uma fila.
- Tarefas agendadas e cron jobs. As funções serverless podem ser usadas para agendar tarefas e executá-las em intervalos específicos, como backups noturnos, geração de relatórios ou sincronização de dados.
- Chatbots e assistentes virtuais. As funções serverless podem ser usadas para criar chatbots ou assistentes virtuais que processam e respondem às entradas do usuário, integrando-se com plataformas de mensagens e serviços de processamento de linguagem natural.
- Processamento de dados de IoT. A computação serverless pode processar e analisar dados gerados por dispositivos IoT, proporcionando monitoramento em tempo real, detecção de anomalia e agregação de dados.
Arquitetura serverless x arquitetura tradicional
A principal diferença entre a arquitetura serverless e a tradicional é que a equipe de TI da sua empresa não executa ou gerencia servidores físicos. Isso é delegado a um provedor de serviços em nuvem.
Tradicionalmente, uma empresa usaria servidores bare metal (BM) para executar as aplicações. Isso requer tempo e recursos para adquirir hardware e um local físico para instalação, com infraestrutura de energia e refrigeração. O BM requer a montagem de racks, a instalação e a configuração do hardware. A equipe de TI também assume as responsabilidades demoradas de configurar o ambiente para implantação do código, instalar sistemas operacionais e manter e gerenciar os servidores.
Os servidores BM evoluíram para máquinas virtuais (VM). As empresas ainda precisam instalar e configurar o hardware, mas se beneficiam do fato de que várias máquinas podem ser executadas no mesmo hardware. Isso significa que os recursos de computação são mais bem utilizados. A equipe técnica pode implantar vários servidores por meio de hipervisores e, como no BM, precisa instalar os sistemas operacionais e cuidar da manutenção e do gerenciamento. A instalação dos sistemas operacionais é automatizada com o uso de modelos de VM e ferramentas de automação.
Os containers evoluíram das VMs. Os containers são pacotes de código que permitem a execução de aplicações em um determinado ambiente operacional, tornando-os portáteis. Ao contrário das VMs, todos os containers são executados no mesmo sistema operacional, e o tempo de execução do container e seus recursos de computação são divididos no espaço do usuário do kernel. Isso simplifica muito o gerenciamento desses serviços, pois há menos sistemas operacionais para gerenciar. Os containers são automatizados por meio de plataformas como o Kubernetes, que oferecem flexibilidade quanto a onde implantá-los, tornando-os portáteis e possibilitando que sejam facilmente implantados e destruídos quando necessário.
A arquitetura serverless libera as equipes de TI para se dedicarem à criação e implantação de código, já que todo o gerenciamento da infraestrutura foi delegado a um provedor de serviços em nuvem.
O futuro da computação serverless com a Elastic
A computação serverless acompanhará a evolução da tecnologia de nuvem. Os provedores já começaram a melhorar a computação serverless, adicionando componentes para tornar a computação serverless conveniente para cargas de trabalho de negócios de uso geral.
Perguntas frequentes sobre a tecnologia serverless
O que é o serverless?
Serverless é um modelo de computação em nuvem no qual o provedor de serviços em nuvem provisiona e gerencia a infraestrutura subjacente para que o cliente possa se concentrar no desenvolvimento de frontend. O serverless é composto de FaaS e BaaS. Os dois serviços trabalham juntos para fornecer um ambiente flexível que permite aos desenvolvedores implantar código rapidamente.
Cite um exemplo de computação serverless.
Um usuário em um endpoint está navegando no site do cliente. Ao fazer isso, ele interage com duas funcionalidades serverless — BaaS e FaaS. Para continuar navegando, o usuário insere suas informações. A parte BaaS do ambiente serverless executa a autenticação do usuário. O usuário continua navegando no site e faz uma compra. Esse é um evento. O evento é processado por uma API de gateway, que invoca uma função para enviar um email de recebimento. Para fazer isso, o provedor de serviços em nuvem ativa um container que contém o código da aplicação e executa a tarefa. Esse é o FaaS.
Por que é chamado de serverless?
Serverless é uma designação incorreta que descreve um ambiente de computação em nuvem no qual o provedor de serviços em nuvem provisiona e gerencia os servidores necessários para executar as aplicações do cliente. O cliente não tem servidores — ele paga o provedor de serviços em nuvem para usar os dele.
Glossário serverless
- Gateway de API: um gateway de API (interface de programação de aplicações) é um link de comunicação que lê uma solicitação e a encaminha para um serviço de backend. Em seguida, ele traduz os dados de backend para o usuário no frontend.
- BaaS: backend como um serviço é um modelo de computação em nuvem que usa software construído para fornecer serviços como autenticação de usuário ou armazenamento de dados. É um subconjunto do serverless.
- Computação em nuvem: a computação em nuvem refere-se a modelos de computação nativos do ambiente de nuvem. Qualquer tipo de computação que ocorre em uma nuvem é chamado de computação em nuvem.
- Nativo da nuvem: nativo da nuvem quer dizer qualquer aplicação ou serviço criado especificamente para a nuvem, levando em conta a escalabilidade e a elasticidade de um ambiente de nuvem.
- Inicialização a frio: uma inicialização a frio ocorre quando uma função é invocada pela primeira vez ou após um período de inatividade. É a primeira vez que o provedor de serviços em nuvem ativa um container para cumprir a função.
- Container: os containers são pacotes de código com suas respectivas dependências. São leves, portáteis e autossuficientes, permitindo que sejam executados de forma consistente em diferentes ambientes de computação.
- Arquitetura orientada por eventos: a arquitetura orientada por eventos é um modelo de arquitetura de software que usa eventos (solicitações, mudanças de estado, atualizações) para disparar a comunicação entre serviços. Orientado por eventos é uma abordagem de programação, não uma linguagem de programação.
- FaaS: função como um serviço é um modelo de computação em nuvem orientado por eventos que permite aos desenvolvedores criar e executar o frontend sem gerenciar a infraestrutura de backend.
- Microsserviços: os microsserviços são um tipo de modelo de arquitetura de software no qual o software é dividido em serviços separados. Esses serviços se comunicam por meio de APIs e proporcionam flexibilidade no desenvolvimento.
- Multinuvem: multinuvem quer dizer várias nuvens, como Google Cloud, AWS e Microsoft Azure. A maioria das empresas é multinuvem, ou seja, elas usam os serviços de vários provedores de serviços em nuvem simultaneamente. Por exemplo, uma empresa usa o pacote G Suite do Google para email e o AWS Lambda para suas funções serverless.
- Sem estado: sem estado refere-se a uma característica de computação de aplicações, protocolos ou processos que lidam com as operações de forma independente. A computação serverless, por exemplo, é inerentemente sem estado, o que significa que nenhum dado é mantido entre as invocações.