Visão geral
O estado de uma aplicação (ou de qualquer outra coisa) é a condição ou a qualidade dela em um momento específico: é seu estado de existência. Definir se algo é stateful ou stateless depende de dois fatores: há quanto tempo o estado da interação com o objeto em questão está sendo registrado e como essa informação precisa ser armazenada. Uma aplicação stateful retém o estado ou contexto em relação às interações dela com os usuários, sistemas e componentes. Como o estado é persistente em uma solução de armazenamento durável, a aplicação sobrevive após uma reinicialização. A principal diferença é que as aplicações stateful salvam informações antigas e atuais, enquanto as stateless, não.
O que são aplicações stateful?
Os processos e aplicações stateful preservam o próprio estado porque armazenam, registram e consultam pela Internet informações e procedimentos já estabelecidos. Nas aplicações stateful, o servidor monitora o estado de cada sessão ou interação e armazena essas informações com base nas solicitações dos usuários. É possível acessar essas sessões várias vezes, como é o caso dos e-mails e internet banking. Esses processos são executados com o contexto de transações anteriores, e isso pode afetar a transação atual dependendo do que aconteceu durante os processos prévios. Por isso, as apps stateful usam os mesmos servidores sempre que processam uma solicitação de um usuário.
Quando uma transação stateful é interrompida, você pode retomar de onde parou graças ao contexto e histórico que ficam armazenados. Essas apps stateful monitoram aspectos como localização da janela, preferências de configuração e atividade recente. Pense nessas transações como uma conversa contínua e frequente com a mesma pessoa.
Casos de uso das aplicações stateful
- Aplicações voltadas ao usuário: esse tipo de aplicação, como apps de redes sociais e sites de e-commerce, monitora a sessão de usuários logados, incluindo as preferências deles e os itens que são colocados no carrinho.
- Sistemas de IoT: um sistema de Internet das Coisas (IoT) funciona enviando, recebendo e analisando dados de maneira contínua em um ciclo de feedback. Com base em dados históricos ou em tempo real, os dispositivos respondem às mudanças no estado ao longo do tempo, assim como um termostato.
- Treinamento de modelos de IA/ML: os modelos de treinamento de inteligência artificial e machine learning (AI/ML) aprendem e memorizam os dados. O estado preservado de aprendizagem e memorização faz com que os modelos funcionem com capacidade total.
Recursos da Red Hat
O que são aplicações stateless?
Os processos e aplicações stateless não retêm informações sobre as interações dos usuários. Não há nenhum conhecimento ou referência armazenados em relação às transações anteriores. Cada transação é feita do zero, como se fosse a primeira vez. Aplicações stateless fornecem um serviço ou função e usam uma rede de entrega de conteúdo (REC), a web ou servidores de impressão para processar essas solicitações de curto prazo.
Um exemplo de transação stateless seria pesquisar online uma dúvida. Você digita sua pergunta em um mecanismo de busca e pressiona "enter". Se a transação for interrompida ou encerrada por acidente, você terá que começar novamente Pense nessas transações como uma máquina de venda automática: para cada solicitação, uma resposta.
Casos de uso de aplicações stateless
- APIs REST: a interface de programação de aplicações (APIs) REST transfere uma representação do estado de um recurso a um solicitante ou endpoint. Cada solicitação de API é separada, e o servidor não armazena informações sobre as solicitações anteriores.
- Microsserviços: com os microsserviços, cada função principal de uma aplicação pode existir de maneira independente. Por isso, os microsserviços são ideais tanto para aplicações stateless como para stateful.
- Arquiteturas serverless: as arquiteturas serverless são criadas para responder a eventos de maneira isolada e não preservam o contexto de ações anteriores. Por isso, esse tipo de estrutura não precisa armazenar estado. As arquiteturas serverless são ideais para apps assíncronas e stateless com inicialização instantânea.
Stateful e stateless: comparação
A principal diferença entre esses tipos de aplicação é que um armazena informações sobre o estado atual das interações do usuário enquanto o outro trata cada solicitação como uma transação independente e isolada. No entanto, há algumas diferenças específicas, como:
Retenção de estado
Muitas vezes, as aplicações stateful armazenam informações sobre interação em um banco de dados ou em uma memória distribuída. Como as aplicações stateless não armazenam informações sobre interações, as transações sempre precisam começar de novo.
Dependência da sessão
Com as aplicações stateful, cada solicitação depende dos dados e contexto das interações e transações anteriores. Já as aplicações stateless têm sessões mais independentes, já que cada solicitação é tratada como nova. No entanto, isso significa que a aplicação precisa ter todas as informações necessárias para processar a solicitação.
Dependência do armazenamento
As aplicações stateful exigem armazenamento persistente, como bancos de dados e sistemas de arquivos distribuídos. Esse tipo de app depende de uma solução de armazenamento subjacente e precisa de um esquema que determine a sincronização dos dados entre as instâncias.
Utilização de recursos
As aplicações stateless costumam exigir menos recursos porque não há necessidade de armazenar e gerenciar dados de sessão. Como as aplicações stateful dependem mais do armazenamento, elas podem exigir mais memória e capacidade de processamento para gerenciar e manter informações de sessão.
Escalabilidade
Em geral, as aplicações stateless são mais escaláveis, já que cada solicitação é independente e pode ser processada por qualquer servidor que usa o balanceamento de carga. Como as aplicações stateful têm instâncias fortemente acopladas, elas são mais difíceis de escalar. Essas aplicações exigem pods ou instâncias mais específicas no Kubernetes para gerenciar o estado e as sessões, além de balancear a carga.
Tolerância a falhas
As aplicações stateless são mais tolerantes a falhas, já que a falha de um servidor não afeta as sessões do usuário. Nas aplicações stateful, a falha de um servidor pode resultar na perda de dados da sessão a não ser que medidas adicionais estejam em vigor, como clusterização e replicação de sessão.
Complexidade do desenvolvimento
As aplicações stateless são mais simples de desenvolver e manter, já que não exigem gerenciamento de estado entre várias solicitações. Por outro lado, as aplicações stateful requerem o processamento minucioso do gerenciamento de estado e dados de sessão.
Containers e estado
A maioria das aplicações que usamos no dia a dia é stateful. No entanto, à medida que novos avanços tecnológicos surgem, os microsserviços e containers facilitam a criação e implantação de aplicações na nuvem.
Assim como a cloud computing e os microsserviços, a conteinerização de aplicações stateful e stateless é cada vez mais utilizada. Os containers são unidades de código de uma aplicação incluídos em um mesmo pacote com suas respectivas bibliotecas e dependências. Com aplicações em container, eles podem ser movidos com facilidade e executados em todos os ambientes, seja um computador, infraestrutura de TI tradicional ou nuvem.
Originalmente, os containers foram criados como stateless, para serem flexíveis e portáteis. Mas com a expansão de seu uso, apps stateful existentes começaram a ser redesenhadas e empacotadas para serem executadas em containers. Assim, elas adquiriram a flexibilidade e a velocidade para utilizar containers, mantendo o armazenamento e o contexto de apps stateful.
Por isso, essas aplicações se parecem muito com as stateless e vice-versa. Por exemplo, você pode ter uma app stateless que não requer armazenamento a longo prazo, mas que permite ao servidor rastrear as solicitações do mesmo cliente usando cookies.
Com o aumento no uso dos containers, as empresas começaram a oferecer novas formas de gerenciar containers stateless e stateful utilizando armazenamento de dados, Kubernetes e StatefulSets. Hoje, o modelo stateful é parte essencial do armazenamento em containers. A dúvida agora não é mais se devemos usar containers stateful, mas quando.
Por que escolher a Red Hat?
Quando falamos de aplicações stateful e stateless, a Red Hat tem a melhor solução para você. Seja para orquestrar containers stateful na nossa plataforma de aplicações em nuvem híbrida, o Red Hat® OpenShift® , ou para criar um ambiente unificado para desenvolvimento de apps com o Red Hat Application Foundations, você pode contar com nosso suporte premiado e ecossistema de parceiros.
O Red Hat OpenShift é uma plataforma unificada de aplicações de nuvem híbrida com segurança reforçada. Com essa solução, as empresas aceleram a inovação ao modernizar o desenvolvimento e implantação de aplicações, além dos processos operacionais. O Red Hat OpenShift oferece funcionalidades que dão suporte a aplicações stateful como o Kubernetes StatefulSets. Com o Red Hat OpenShift Data Foundation, você gerencia dados stateful com uma solução que oferece armazenamento definido por software e provisiona volumes persistentes. O Red Hat OpenShift também integra aplicações stateful aos fluxos de trabalho do DevOps. Já o Red Hat OpenShift Pipelines foi criado para executar cada etapa do pipeline de CI/CD, o que dá suporte a teste e implantação de cargas de trabalho stateful e stateless ao mesmo tempo.
O Red Hat Application Foundations disponibiliza recursos de composição e orquestração de serviços, transformação de dados e conectividade de aplicações, transmissão de mensagens em tempo real, captura de dados de mudança e gerenciamento de APIs. Tudo isso combinado a uma plataforma nativa em nuvem e a uma cadeia de ferramentas compatíveis com toda a gama de desenvolvimento de aplicações modernas.
Juntos, o Red Hat OpenShift e o Red Hat Application Foundations oferecem a plataforma ideal para você desenvolver e entregar aplicações nativas em nuvem. Seja qual for a sua necessidade, temos o que você precisa para criar soluções, aumentar a produtividade dos desenvolvedores e promover a inovação. E tudo isso seguindo a filosofia open source.
Blog da Red Hat
Tudo relacionado à Red Hat: soluções, treinamentos e certificações Red Hat, casos de sucesso de clientes, novidades dos nossos parceiros e notícias sobre projetos das comunidades open source.