O que é arquitetura sem servidor?
A arquitetura sem servidor é um modelo de computação em nuvem em que os desenvolvedores criam e executam aplicativos sem gerenciar servidores tradicionais. Os servidores ainda existem, mas estão na nuvem, onde os provedores de nuvem lidam automaticamente com a infraestrutura, o dimensionamento e a alocação de recursos.
Para aplicativos sem servidor, os desenvolvedores normalmente escrevem o código como funções isoladas que são executadas em resposta a eventos ou acionadores, e os provedores de nuvem cobram apenas pelos recursos de computação reais usados. Essa abordagem simplifica o desenvolvimento de aplicativos, reduz a sobrecarga operacional e permite a escalabilidade rápida, tornando-a ideal para microsserviços e aplicativos orientados por eventos.
Esta página abrange:
- Como funciona a arquitetura sem servidor
- Conceitos-chave na arquitetura sem servidor
- Quando usar a arquitetura sem servidor
- Benefícios da arquitetura sem servidor
- Limitações da arquitetura sem servidor
- Ferramentas de computação sem servidor
- Conclusão
Como funciona a arquitetura sem servidor
A arquitetura sem servidor abstrai o gerenciamento do servidor dos desenvolvedores e conta com os provedores de nuvem para lidar com a infraestrutura subjacente. Veja como ela geralmente funciona:
1. Criação de funções: Os desenvolvedores escrevem códigos como funções individuais, com cada função projetada para executar uma tarefa ou serviço específico. A arquitetura sem servidor às vezes é chamada de Function-as-a-Service ou FaaS.
2. Implementação de funções: As funções são empacotadas e implantadas em uma plataforma sem servidor fornecida por um provedor de serviços em nuvem. As plataformas sem servidor mais comuns são o AWS Lambda, o Azure Functions e o Google Cloud Functions.
3. Acionadores de eventos: As funções são configuradas para serem executadas em resposta a eventos ou acionadores específicos. Os eventos podem incluir solicitações HTTP (por exemplo, API Gateway), alterações nos dados (por exemplo, atualizações de banco de dados), cronômetros, uploads de arquivos ou qualquer outra coisa. O provedor de nuvem gerencia as fontes de eventos e invoca automaticamente as funções associadas.
4. Escala automática: À medida que os eventos ocorrem, a plataforma sem servidor dimensiona automaticamente os recursos subjacentes para acomodar a carga de trabalho. Se sua função sofrer um pico repentino de solicitações, o provedor de nuvem fornecerá mais recursos.
5. Execução: Quando um evento aciona uma função, a plataforma sem servidor inicializa um contêiner ou ambiente de tempo de execução para essa função. O código dentro da função é executado e pode acessar quaisquer recursos ou dados necessários. Depois que a função conclui sua tarefa, o contêiner pode permanecer quente por um curto período, permitindo que as solicitações subsequentes sejam executadas mais rapidamente.
6. Faturamento: O faturamento é baseado no tempo de execução real e nos recursos usados pelas funções. Você é cobrado por execução e pelos recursos de computação, como CPU e memória, que são alocados durante a execução.
7. Apatridia: As funções sem servidor geralmente não têm estado, o que significa que não retêm informações entre as invocações. Qualquer estado ou dado necessário deve ser armazenado externamente, geralmente em um banco de dados ou serviço de armazenamento.
8. Registros e monitoramento: As plataformas sem servidor geralmente oferecem ferramentas integradas de registro e monitoramento, permitindo que os desenvolvedores acompanhem o desempenho e solucionem problemas em suas funções.
Conceitos-chave na arquitetura sem servidor
Como o desenvolvimento sem servidor é uma alternativa ao desenvolvimento tradicional, você deve se familiarizar com os termos e conceitos a seguir para ter uma compreensão clara de como projetar, implantar e gerenciar aplicativos sem servidor:
Invocação: Um evento que aciona a execução de uma função sem servidor. Exemplos são uma solicitação HTTP, uma atualização de banco de dados ou um cronômetro programado.
Duração: A quantidade de tempo que uma função sem servidor leva para ser executada, que é um fator no cálculo do custo de execução.
Partida a frio: A execução inicial de uma função sem servidor, em que o provedor de nuvem provisiona recursos e configura o ambiente de tempo de execução. As partidas a frio introduzem latência adicional em comparação com as partidas a quente.
Partida a quente: Execuções subsequentes de uma função sem servidor quando o ambiente de tempo de execução já está preparado, resultando em tempos de resposta mais rápidos em comparação com as inicializações a frio.
Limite de simultaneidade: O número máximo de execuções simultâneas de funções permitidas pela plataforma sem servidor. Esse limite pode afetar a capacidade de lidar com solicitações ou eventos simultâneos.
Tempo limite: A duração máxima permitida para a execução de uma função sem servidor. Se uma função exceder esse limite, ela será encerrada à força e seu resultado poderá não ser retornado.
Fonte do evento: A origem de um evento que aciona uma função sem servidor. Exemplos de fontes de eventos incluem buckets do Amazon S3, gateways de API, filas de mensagens e atualizações de banco de dados.
Apatridia: As funções sem servidor geralmente não têm estado, o que significa que não retêm dados entre as invocações. Qualquer estado necessário deve ser armazenado externamente em bancos de dados ou serviços de armazenamento.
Alocação de recursos: A especificação de recursos de computação, como CPU ou memória, para uma função sem servidor. Esses recursos geralmente são escolhidos pelos desenvolvedores ao definir a função.
Escala automática: O ajuste automático de recursos sem servidor pelo provedor de nuvem para acomodar cargas de trabalho variáveis e garantir o desempenho ideal.
Banco de dados sem servidor: Os bancos de dados sem servidor são bancos de dados de dimensionamento elástico que não expõem a infraestrutura em que operam Couchbase Capella™ DBaaS é um exemplo de um banco de dados sem servidor totalmente gerenciado.
Quando usar a arquitetura sem servidor
Embora a arquitetura sem servidor seja versátil, ela não é a melhor opção para todos os casos de uso - aplicativos com tarefas de longa duração, altos requisitos de computação ou cargas de trabalho consistentes geralmente se beneficiam mais das arquiteturas tradicionais baseadas em servidor. Não deixe de considerar os requisitos específicos e os pontos fortes exclusivos da arquitetura sem servidor ao decidir se ela é a escolha certa para seu aplicativo.
Casos de uso de arquitetura sem servidor
Alguns dos casos de uso mais comuns e mais adequados para a arquitetura sem servidor incluem:
Aplicativos móveis e da Web: Lide com back-ends de aplicativos móveis e da Web, forneça conteúdo, processe solicitações de usuários e gerencie a autenticação de usuários.
APIs: Dimensione automaticamente suas APIs RESTful e GraphQL e integre-as facilmente a outros serviços.
IoT: Gerencie com eficiência o processamento e a análise de dados de dispositivos IoT que acionam eventos com dados de sensores.
Processamento de dados em tempo real: Processe fluxos de dados em tempo real, como análise de fluxo de cliques, processamento de registros e análise orientada por eventos.
Processamento em lote: Execute trabalhos em lote periódicos ou sob demanda, como ETL (extração, transformação, carregamento) de dados, geração de relatórios e limpeza de dados.
Tarefas de armazenamento de arquivos e dados: Interagir com serviços de armazenamento em nuvem para gerenciar uploads de arquivos, downloads e manipulação de dados.
Autenticação e autorização do usuário: Os serviços de gerenciamento de identidade e acesso (IAM) para autenticação e autorização de usuários são uma boa opção para funções sem servidor.
Serviços de notificação: Envie notificações e alertas como e-mail, SMS ou notificações push em resposta a eventos ou acionadores específicos.
Chatbots e assistentes virtuais: Crie interfaces de conversação em que as funções processam solicitações de linguagem natural e geram respostas.
Processamento de dados e imagens: Execute tarefas como redimensionamento de imagens, conversão de formatos e transformação de dados que exigem interação mínima do usuário.
Tarefas programadas: Automatize tarefas periódicas, como backups de dados, geração de relatórios e manutenção do banco de dados.
Microsserviços: Crie e gerencie microsserviços individuais em um aplicativo maior, permitindo fácil dimensionamento e implementação independente.
Serviços de segurança e conformidade: Implemente funções relacionadas à segurança, como detecção de intrusão, monitoramento e auditoria de conformidade.
Sem servidor vs. contêineres
À primeira vista, a arquitetura sem servidor às vezes é confundida com a arquitetura de contêineres ou com a arquitetura de microsserviços porque compartilha certas semelhanças com cada uma delas. Na verdade, a arquitetura sem servidor é bastante distinta de ambas, e explicaremos o que as torna diferentes.
O que contêineres O que os contêineres e o serverless têm em comum é que ambos permitem que os desenvolvedores implementem o código do aplicativo abstraindo o ambiente do host. No entanto, uma das principais diferenças é que o serverless abstrai totalmente o gerenciamento do servidor, enquanto os contêineres permitem que os desenvolvedores gerenciem seus próprios ambientes de servidor com mais controle sobre a infraestrutura.
Como uma forma leve de virtualização, os contêineres empacotam aplicativos e suas dependências em ambientes isolados e consistentes que são executados como instâncias independentes em um sistema operacional compartilhado. Os contêineres fornecem uma maneira de garantir que os aplicativos funcionem de forma consistente em vários ambientes, desde o desenvolvimento até a produção, e oferecem uma maneira padronizada de empacotar e distribuir software. Em geral, os contêineres são de longa duração e podem incluir vários processos em um único contêiner.
Em resumo, a computação sem servidor abstrai o gerenciamento do servidor e é ideal para tarefas orientadas por eventos e de curta duração, enquanto os contêineres oferecem mais controle sobre o ambiente do servidor e são mais adequados para processos de longa duração e cargas de trabalho consistentes. A escolha entre eles depende dos requisitos específicos do seu aplicativo e do seu nível de controle sobre a infraestrutura subjacente. Em alguns casos, uma combinação das duas tecnologias é usada em um único aplicativo para diferentes componentes.
Sem servidor vs. microsserviços
Microsserviços Os microsserviços são um padrão de arquitetura de software que estrutura um aplicativo como uma coleção de pequenos serviços implantáveis de forma independente, que se comunicam por meio de APIs e trabalham juntos para oferecer funcionalidade complexa e modular. A confusão entre microsserviços e arquitetura sem servidor geralmente surge devido à sua ênfase compartilhada em modularidade e escalabilidade. O que torna a linha ainda mais confusa é o fato de eles serem frequentemente usados juntos, com funções sem servidor atuando como microsserviços em um aplicativo maior baseado em microsserviços.
Apesar de suas semelhanças, os microsserviços e sem servidor têm características exclusivas nas seguintes áreas que os diferenciam:
Gerenciamento de infraestrutura
- Microsserviços os desenvolvedores mantêm o controle sobre a orquestração de servidores e contêineres.
- Sem servidor o gerenciamento do servidor é totalmente abstraído, e os desenvolvedores não lidam com a infraestrutura subjacente.
Modelo de execução
- Microsserviços são executados continuamente em instâncias de servidores dedicados.
- Sem servidor as funções são executadas em resposta a eventos ou acionadores. Essa distinção pode levar a uma diferença nos tempos de resposta, pois os aplicativos sem servidor podem sofrer cold starts.
Modelo de custo
- Microsserviços exigem que você provisione e mantenha os recursos do servidor. Isso pode levar a custos contínuos, mesmo durante períodos de baixa utilização.
- Sem servidor segue um modelo de pagamento conforme o uso com base na execução real da função. Isso pode ser mais econômico para cargas de trabalho esporádicas.
Modularidade
- Microsserviços um aplicativo é dividido em pequenos serviços independentes.
- Sem servidor Os desenvolvedores escrevem código como unidades individuais de funcionalidade.
Escalabilidade
- Microsserviços permitem o dimensionamento independente de cada serviço.
- Sem servidor dimensiona automaticamente as funções individuais.
Benefícios da arquitetura sem servidor
A arquitetura sem servidor oferece uma ampla gama de benefícios que a tornam uma opção atraente para muitos aplicativos e casos de uso. As vantagens mais atraentes são:
Dimensionamento automático: As plataformas de arquitetura sem servidor aumentam ou diminuem automaticamente os recursos com base na carga de trabalho recebida. Isso garante que seu aplicativo possa lidar com níveis variáveis de tráfego, proporcionando alta disponibilidade e desempenho sem intervenção manual.
Eficiência de custo: Com o serverless, você paga apenas pelos recursos de computação reais usados durante a execução da função. Não há custos associados ao tempo ocioso, o que o torna econômico, especialmente para cargas de trabalho com tráfego imprevisível ou esporádico.
Redução da sobrecarga operacional: O Serverless abstrai as tarefas de gerenciamento do servidor, permitindo que os desenvolvedores se concentrem no código e não na manutenção da infraestrutura. Isso reduz a necessidade de esforços de DevOps e simplifica a implementação e o dimensionamento.
Desenvolvimento mais rápido: O Serverless acelera o processo de desenvolvimento, eliminando a necessidade de gerenciar servidores e infraestrutura. Os desenvolvedores podem iterar e implantar códigos rapidamente, resultando em um tempo de colocação dos aplicativos no mercado mais rápido.
Resiliência: As funções sem servidor geralmente não têm estado, promovendo um design que depende de serviços de armazenamento externo ou bancos de dados para a persistência de dados. Isso pode levar a aplicativos mais resilientes e tolerantes a falhas.
Registro e monitoramento integrados: As plataformas sem servidor geralmente oferecem ferramentas integradas para monitoramento e registro, permitindo que os desenvolvedores acompanhem o desempenho, solucionem problemas e obtenham insights sobre o comportamento do aplicativo.
Redução da dependência de fornecedores: Muitas funções podem ser projetadas para serem relativamente independentes do fornecedor, facilitando a migração ou a integração de serviços de diferentes provedores de nuvem. Esse nem sempre é o caso, como você verá na próxima seção sobre limitações sem servidor.
Alta disponibilidade: As plataformas sem servidor são projetadas para serem altamente disponíveis, com mecanismos de redundância e failover incorporados. Isso ajuda a garantir que seu aplicativo permaneça acessível e responsivo mesmo em caso de falhas.
Eficiência energética e de recursos: O dimensionamento automático e o gerenciamento de recursos de plataformas sem servidor podem levar a uma maior eficiência energética e à utilização de recursos, reduzindo o impacto ambiental.
Limitações da arquitetura sem servidor
Embora a arquitetura sem servidor ofereça muitas vantagens, ela também tem suas limitações. Certas características do serverless podem se manifestar como benefícios ou desafios. Ao avaliar o serverless para um aplicativo específico, considere seus requisitos ou restrições relacionados ao seguinte:
Partida a frio: As funções sem servidor podem sofrer um atraso quando a função é invocada pela primeira vez, pois o provedor de nuvem precisa inicializar um novo ambiente de execução. Essa latência pode ser problemática para aplicativos que exigem tempos de resposta consistentemente rápidos.
Restrições de recursos: As plataformas sem servidor impõem restrições de recursos, como limites de memória e tempo de execução. Essas restrições podem ser limitantes para tarefas de computação intensiva ou aplicativos que exigem processos de longa execução.
Apatridia: As funções sem servidor geralmente não têm estado, o que significa que não retêm dados entre as invocações. Embora isso possa ajudar a melhorar a resiliência (conforme explicado acima), o uso de bancos de dados externos ou serviços de armazenamento para persistência de dados pode aumentar a complexidade de alguns aplicativos.
Bloqueio do fornecedor: Embora muitas funções possam ser projetadas para serem relativamente independentes do fornecedor, seu aplicativo pode ter algumas configurações e integrações específicas da plataforma que dificultam a mudança para um provedor de nuvem diferente.
Depuração complexa: A depuração e a solução de problemas de aplicativos sem servidor podem ser mais desafiadoras em uma arquitetura sem servidor porque a natureza distribuída das funções e a falta de acesso direto ao servidor podem dificultar a identificação e a resolução de problemas.
Testes locais limitados: Desenvolver e testar funções sem servidor localmente pode ser um desafio, pois os testes locais podem não replicar totalmente o ambiente de execução na nuvem. Os desenvolvedores geralmente precisam implementar funções na plataforma sem servidor para realizar testes completos.
Ferramentas de computação sem servidor
Existem várias plataformas e ferramentas de computação sem servidor que permitem aos desenvolvedores criar, implementar e gerenciar aplicativos sem servidor usando suas linguagens de codificação e provedores de serviços de nuvem favoritos. Aqui estão algumas das mais populares:
Plataformas
AWS Lambda da Amazon suporta várias linguagens de programação e se integra perfeitamente a outros serviços do AWS. O AWS também fornece um gateway de API para criar APIs RESTful e acionar funções Lambda.
Funções do Azure da Microsoft é uma oferta sem servidor dentro do ecossistema de nuvem do Azure. Ele oferece suporte a vários idiomas e oferece integração com os serviços do Azure, o que o torna uma boa opção para aplicativos baseados no Windows.
Funções de nuvem do Google suporta várias linguagens de programação e se integra bem a outros serviços do Google Cloud, o que o torna adequado para a criação de aplicativos no ecossistema do Google Cloud.
Funções da nuvem da IBM é baseado na estrutura do Apache OpenWhisk e permite que você se integre aos serviços do IBM Cloud usando várias linguagens.
Computação de função na nuvem da Alibaba permite que os desenvolvedores criem aplicativos no ecossistema da Alibaba Cloud e se integrem a outros serviços da Alibaba Cloud usando vários idiomas.
Ferramentas
Netlify é uma plataforma mais conhecida por hospedar sites estáticos, mas também oferece funções sem servidor para criar serviços de back-end, APIs e fluxos de trabalho.
OpenFaaS é uma estrutura sem servidor de código aberto para funções baseadas em contêineres. Ele permite que você crie e execute funções sem servidor usando contêineres do Docker.
Fissão é outra estrutura sem servidor nativa do Kubernetes de código aberto que oferece suporte a vários idiomas e foi projetada para facilitar a implantação em clusters do Kubernetes.
Conclusão
A arquitetura sem servidor é popular para aplicativos da Web e móveis, IoT, processamento de dados em tempo real e outros casos de uso comuns, pois permite que os desenvolvedores se concentrem em escrever código em vez de gerenciar servidores. A responsabilidade de gerenciamento é transferida para provedores de nuvem, como o AWS Lambda, o Azure Functions ou o Google Cloud Functions, para que eles possam lidar com a infraestrutura subjacente e dimensionar os recursos automaticamente para acomodar as alterações na carga de trabalho. No entanto, o Serverless não é ideal para todos os casos de uso, e determinadas cargas de trabalho ou tarefas de longa duração podem ser mais adequadas para abordagens tradicionais baseadas em servidor.
Para saber mais sobre a arquitetura sem servidor e as tecnologias relacionadas, confira estes recursos:
Arquitetura sem servidor com computação em nuvem
Previsões do Couchbase para 2023 - computação de borda, sem servidor e muito mais
Serviços de Aplicativos Capella (BaaS)
Visite nosso Centro de Conceitos para saber mais sobre outros tópicos relacionados a bancos de dados.