Por Gursimran Singh|Insights|06,Oct,2020
O que são Aplicações Stateful e Stateless?
Uma aplicação Stateful lembra detalhes específicos de um utilizador como perfil, preferências e acções do utilizador. Esta informação é considerada como o ‘Status’ de um sistema.
Por exemplo, o seu carrinho de compras enquanto utiliza qualquer website na Nuvem. Cada vez que selecciona um item e o adiciona ao seu carrinho, adiciona-o com os itens adicionados anteriormente e, eventualmente, navega para a página de checkout.
Uma aplicação ou processo Stateless é algo que não guarda nem faz referência a informações sobre operações anteriores. Cada vez que realiza cada operação do zero tal como da primeira vez e fornece a funcionalidade de utilizar a impressão, CDN (Content Delivery Network) ou os Servidores Web para processar cada pedido a curto prazo.
Por exemplo, alguém está a pesquisar uma pergunta no motor de busca e pressionou o botão Enter. No caso de a operação de pesquisa ser interrompida ou encerrada por algum motivo, terá de iniciar uma nova, pois não há dados guardados para o seu pedido anterior.
Sessão Stateful vs Sessão Stateless
Aplicações Stateful e Stateless guardam o estado dos pedidos dos clientes no próprio servidor e utilizam esse estado para processar outros pedidos. Utiliza o DB para armazenar dados como backend, mas a informação da sessão é armazenada no próprio servidor. Quando um utilizador envia um pedido de login, permite que o login seja verdadeiro e autenticado agora, e no segundo pedido, o utilizador vê o painel de controlo. As aplicações estatais não precisam de fazer uma segunda chamada à BD como informação de sessão armazenada no próprio servidor. Compreender o Papel dos Contentores no DevOps é uma melhor forma de se familiarizar com as aplicações Microservices.
Hence que é mais rápido. Mas tem inconvenientes. Há um equilibrador de carga, e há dois servidores atrás, a executar a mesma aplicação de Estado. O primeiro pedido de login vai para o servidor 1 e o segundo pedido pode ir para o servidor 2; agora, uma vez que apenas o servidor permitiu o login para ser verdade, o utilizador não será capaz de fazer a lógica quando LB o enviar para o segundo servidor. Assim, não é possível escalar horizontalmente as aplicações Stateful.
Quer melhorar a contentorização das aplicações, sejam Stateful ou Stateless?
P>Verifica os nossos Serviços Geridos para Microservices
Stateless e Stateful Container Management
Embora as aplicações Stateless funcionem de formas diferentes, elas não armazenam nenhum estado no servidor. Utilizam o DB para armazenar toda a informação. DB é stateful, ou seja, tem armazenamento persistente ligado a ele.
Tipicamente, um utilizador solicita login com credenciais, qualquer um dos servidores por trás de LB processa o pedido, gera um auth token, armazena-o no DB, e devolve o token ao cliente no front end. O próximo pedido é enviado juntamente com o token, Agora, independentemente do servidor que processe o pedido, ele irá corresponder o token com informações no BD, e conceder login ao utilizador. Cada pedido é independente e não tem qualquer ligação com pedidos anteriores ou próximos, tal como REST.
Apesar de as aplicações Stateless terem uma sobrecarga extra da chamada ao BD, estas aplicações são surpreendentes em escalas horizontais, cruciais para aplicações modernas, que podem ter milhões de utilizadores.
Aplicações modernas e aplicações legadas têm uma característica em comum, seja para armazenar estado ou não. Se lidar com Monoliths ou microserviços depende das necessidades da aplicação’; alguns precisam de armazenar estado enquanto outros não precisam de se preocupar com o estado.
Diferença entre Aplicações de Estado vs. Aplicações de Estado
Both Stateful and Stateless omnipresentes nas lojas de TI. Mas o software moderno sendo arquitectado de forma apátrida uma vez que a escala é um factor essencial para o mundo de hoje.
As oito principais diferenças entre aplicações apátridas e apátridas são –
- Estado de trabalho: As aplicações em Stateful reagem pelo estado actual, enquanto as aplicações Stateless actuam independentemente, tendo em consideração o pedido anterior/próximo.
- Dados Armazenados: Se o servidor web armazena dados de forma backend e os utiliza para identificar o utilizador como um cliente sempre ligado, o serviço é Stateful. Enquanto estiver no Stateless, o servidor armazena os dados, mas numa base de dados para verificar o utilizador/cliente sempre que necessitar de se ligar.
- Reacção para com os Clientes: Em Stateful, o servidor pensa que um cliente é apenas uma máquina burra, enquanto que em Stateless, o servidor é uma máquina inteligente que não precisa de depender de nenhum estado do lado do servidor.
- Pedidos: Nos Stateless, os pedidos são autónomos, ou seja, tudo o que está contido no pedido, e tratados em duas fases distintas, um “pedido” e uma “resposta”. Enquanto em Stateful, os pedidos dependem sempre do estado do lado do servidor.
- Estado Gerado: Enquanto navega na Internet, o estado gerado e armazenado em algum lugar. Embora o estado gerado em ambos os tipos quando o estado armazenado no servidor, gera uma sessão. A isto chama-se uma aplicação Stateful.
- State Stored: Quando o estado armazenado pelo cliente, gera alguns dados utilizados para outros pedidos enquanto tecnicamente “Stateful” como referencia um estado, mas o estado armazenado pelo cliente, por isso chama-lhe Stateless.
- Cookie Stores: No lado do cliente, o cookie armazena dados de autenticação. No lado do servidor, criar dados temporários do cliente ou armazenar numa base de dados (este é o caso típico). Ao voltar ao painel para fazer outro pagamento, é um cookie armazenado no browser que estabelece o estado com o servidor.
- Base de dados de utilizador: O estado é passado quando existiam Monoliths e não havia uma base de utilizadores dinâmica. Stateless é futuro, tendo os Microservices a flutuar e a maior parte a comunicar através de interfaces REST e de qualquer coisa em escala, uma vez que não há nenhum estado armazenado.
Moving to microservices and containers helps enterprises seeking to move past legacy technologies, but challenges still remain remain challenges.
Por que razão as aplicações sem Estado importam?
- Por que razão há necessidade de aplicações sem Estado quando as coisas correram bem antes com aplicações sem Estado?
As aplicações sem Estado são excelentes para casos de uso mínimo, mas tem alguns problemas. Primeiro, quando o utilizador refere um estado no servidor, o utilizador abre muitas sessões e transacções incompletas.
- Num sistema Stateful, o estado calculado pelo cliente, quanto tempo deve o sistema deixar a ligação aberta?
- Como verificar no lado do servidor que o cliente falhou ou se desligou da sessão?
- Como as acções do utilizador acompanharam, mantendo as alterações do documento e fazendo rollbacks?
- Os principais consumidores/clientes respondem ao servidor de forma inteligente e dinâmica, mantendo assim um estado de servidor independente do cliente assumindo que o cliente é meramente um “burro”; o cliente é um desperdício.
- Statelessness é um aspecto fundamental das aplicações modernas – todos os dias; utiliza uma variedade de serviços e aplicações sem estado. Utiliza HTTP para se ligar de uma forma apátrida, utilizando mensagens que são transmitidas e trabalhando dentro do isolamento uns dos outros e do estado do cliente.
- Facebook utiliza continuamente um serviço apátrida. Quando o servidor solicita uma lista de mensagens recentes utilizando a API do Facebook, emite um pedido de GET com token e data. A resposta é independente de qualquer estado do servidor, e tudo é armazenado na máquina do cliente sob a forma de uma cache.
- Simplesmente, invocando um comando POST, passa um corpo complexo com dados de autorização/autenticação no cabeçalho sem considerar o estado do servidor.
li>Não há relação com o anterior, actual & próximo pedido. No Stateless, o cliente não espera pela sincronização a partir do servidor. Não existe um conceito de conclusão de processo na arquitectura sem servidor para Big Data. Por isso, é mais rápido.
REST é uma forma corrente de conceber, arquitectar, e desenvolver APIs modernas & Representational State Transfer (REST) is stateless.
How Stateless Application Works?
Stateless Architecture significa que a aplicação depende apenas do armazenamento de terceiros porque não armazena qualquer tipo de estado na memória ou no seu disco. Todos os dados que necessita ou requer tem de ir buscar a algum outro serviço estatal (Base de Dados) ou estão presentes no pedido CRUD.
p>Stateless Architecture é completamente diferente e melhor que Stateful. As aplicações Stateless escalam muito mal.
P>Passo 1: Pedidos de carga balanceados para qualquer réplica de um serviço Stateless porque tem todos os dados armazenados noutro lugar, geralmente DB com armazenamento persistente.
Passo 2: Quando o volume de utilizadores concorrentes cresce em tamanho em aplicações Stateful, mais servidores executam as aplicações adicionadas, e a carga distribuída uniformemente entre esses servidores usando um load-balancer. Mas como cada servidor ‘lembra’ o estado de cada utilizador logado, torna-se necessário configurar este balanceador de carga em ‘sticky-mode’.’
P>Passo 3: Ao mesmo tempo, distribuindo a carga pelos servidores, o balanceador de carga requeria enviar o pedido de cada utilizador para o mesmo servidor que responde ao pedido anterior desse utilizador, para processar o pedido correctamente, o que anula o propósito de balanceamento de carga porque a carga não é distribuída de uma verdadeira forma Round-Robin.
P>Passo 4: A lógica do lado do servidor codificada de modo a não depender do ‘estado previamente armazenado’ do cliente.
Passo 5: A informação do estado enviada juntamente com cada pedido, para o servidor através do qual o servidor procede à manutenção do pedido. O equilibrador de carga não precisa de se preocupar em encaminhar pedidos para o mesmo servidor, e o equilíbrio de carga verdadeiramente uniforme alcançado.
P>Passo 6: O equilibrador de carga envia tráfego para qualquer servidor & pedido bem atendido desde que o cliente envie uma ficha ou outra informação necessária com cada pedido. JSON Web Token (JWT) amplamente utilizado para criar aplicações Stateless.
Benefícios das Aplicações Stateless
As 5 principais vantagens da aplicação Stateless são as seguintes:
- Retirar as despesas gerais para criar/utilizar sessões.
- Escalas de escala horizontal necessárias para as necessidades dos utilizadores modernos.
- Novas instâncias de uma aplicação adicionada/removida a pedido.
- Permite a consistência entre várias aplicações.
- Statelessness torna uma aplicação mais confortável de trabalhar e de manter.
As vantagens adicionais de escalabilidade e desempenho de aplicações Stateless estão abaixo:
- Reduz o uso de memória no lado do servidor.
- Eliminar problema de expiração da sessão – Por vezes, sessões expiradas causam problemas difíceis de encontrar e testar. Aplicações sem estado não precisam de sessões & por isso não sofrem destas.
- Pelo lado do utilizador, a ausência de estado permite que os recursos possam ser ligados. Se uma página é Stateless, então quando o utilizador liga um amigo a essa página, garante que o utilizador vê o mesmo que outro utilizador vê.
Como adoptar Aplicações Stateless?
Os 5 passos seguintes são os de adoptar Aplicações Stateless
Passo 1: Adaptar e Desenvolver Novas Aplicações
Adotar Aplicações Stateless pode ser uma tarefa assustadora no início, uma vez que é um novo paradigma. Mas com a mentalidade e informação certas, adaptar e desenvolver novas aplicações sem manter qualquer estado. Use Autenticação/Autorização para se ligar ao servidor.
Passo 2: Desenvolver Aplicações usando Microservices
Neste passo, a contentorização será feita para fins de implementação. Os contentores são melhores a executar cargas de trabalho sem estado. Quando vários contentores para gerir o aumento, considerar mudar para a Orquestração em Nuvem e Ferramentas de Gestão como a Kubernetes para executar um grande número de Contentores.
Passo 3: Aplicações de Microserviços em Contentores
Procurar o melhor local para executar a Segurança de Contentores a partir de um ponto de recurso e manter o HA (High Availability) da aplicação.
Passo 4: Anexar Armazenamento ao Stateless Ephemeral
Armazenamento anexo ao Stateless é efémero. As organizações devem começar com Contentores Stateless, uma vez que são mais facilmente adaptados a este tipo de arquitectura e separados das aplicações Monolíticas e independentemente escalonados.
Passo 5: Aplicar Filosofia REST
O backend deve utilizar padrões de design REST para aplicações de construção. A filosofia REST não é manter o estado, apenas ligeiramente cookies e armazenamento local no lado do cliente.
Best Practices For Stateless Applications
Nove práticas simples para a manutenção adequada de Stateless Applications estão abaixo:
- Try to Avoid sessions at any cost.
- Sessões adicionam complexidade desnecessária fornecendo muito menos valor.
- Torna-se difícil reproduzir bugs.
- Dificuldade em corrigir bugs relacionados com sessões uma vez que tudo é armazenado no lado do servidor.
- Não é possível escalar sessões.
- Se a carga na aplicação aumenta exponencialmente, distribuir a carga por diferentes servidores. Se utilizar sessões, replique todas as sessões a todos os servidores ao mesmo tempo. O sistema torna-se altamente sofisticado e propenso a erros. Evitar sessões.
- Sessões só são úteis para casos de utilização específicos, tais como FTP (File Transfer Protocol).
- Para casos de utilização como Dropbox partilhada, as sessões de estado acrescentam despesas gerais adicionais, enquanto que as sessões de estado sem estado são perfeitas.
- Funcionalidade de sessões replicadas utilizando cookies, caching no lado do cliente.
Explorar mais sobre Microservices com Golang – Uma Solução Completa
Stateless Applications Tools
As melhores ferramentas de aplicação Stateless estão abaixo:
- Línguas modernas como Python, Golang.
- Para fins de implantação – Contentores e Orquestração como Docker e Kubernetes.
- Outros Serviços de Descoberta – Serviço de Proxy Kube, Etcd.
- API Gateway – Para ligação a vários serviços a partir do exterior.
- Para Serviço Mesh em torno de todas as aplicações sem Estado: LinkerD / Istio.
Concluindo Aplicações Stateless
Muitas empresas de TI que constroem Microservices, já a criar aplicações Stateless utilizando o desenho REST API. A compreensão deste conceito é a base sobre a qual a maioria das arquitecturas modernas se baseiam, tais como conceitos como o design RESTful. Uma boa compreensão e vantagem dos Stateless sobre Stateful é essencial no desenvolvimento de aplicações para servir as necessidades massivas dos utilizadores de hoje.