Kubernetes

Aplicativos com estado versus aplicativos sem estado no Kubernetes

Aplicativos com estado versus aplicativos sem estado no Kubernetes
critérios importantes a serem considerados antes de executar um novo aplicativo, em produção, é a arquitetura subjacente do aplicativo. Um termo frequentemente usado neste contexto é que o aplicativo é 'sem estado' ou que o aplicativo é 'com estado'. Ambos os tipos têm seus próprios prós e contras. Teremos um cluster Kubernetes no fundo da nossa mente quando falarmos sobre um aplicativo ou serviço em execução na produção. Você pode instalar um cluster Kubernetes próprio na nuvem ou pode executá-lo como um nó único em seu PC para praticar.

Vamos começar com uma definição ingênua de "apatridia" e, em seguida, progredir lentamente para uma visão mais rigorosa e do mundo real.

Um aplicativo sem estado é aquele que não depende de nenhum armazenamento persistente. A única coisa pela qual seu cluster é responsável é o código e outros conteúdos estáticos hospedados nele. É isso, sem alterações nos bancos de dados, sem gravações e sem arquivos restantes quando o pod é excluído.

Um aplicativo com estado, por outro lado, tem vários outros parâmetros que deve cuidar no cluster. Existem bancos de dados dinâmicos que, mesmo quando o aplicativo está offline ou excluído, persistem no disco. Em um sistema distribuído, como o Kubernetes, isso levanta vários problemas. Vamos examiná-los em detalhes, mas primeiro vamos esclarecer alguns equívocos.

Serviços sem estado não são realmente 'sem estado'

O que significa quando dizemos o estado de um sistema? Bem, vamos considerar o seguinte exemplo simples de uma porta automática.

A porta se abre quando o sensor detecta alguém se aproximando e fecha quando o sensor não recebe nenhuma entrada relevante.

Na prática, seu aplicativo sem estado é semelhante a este mecanismo acima. Ele pode ter muito mais estados do que apenas fechado ou aberto, e muitos tipos diferentes de entrada, tornando-o mais complexo, mas essencialmente o mesmo.

Ele pode resolver problemas complicados apenas recebendo uma entrada e realizando ações que dependem da entrada e do 'estado' em que está. O número de estados possíveis são predefinidos.

Portanto, apatridia é um termo impróprio.

Aplicativos sem estado, na prática, também podem trapacear salvando detalhes sobre, digamos, as sessões do cliente no próprio cliente (cookies HTTP são um ótimo exemplo) e ainda ter um bom estado sem estado que os faria funcionar perfeitamente no cluster.

Por exemplo, os detalhes da sessão de um cliente, como quais produtos foram salvos no carrinho e não retirados, podem ser armazenados no cliente e na próxima vez que uma sessão começar, esses detalhes relevantes também serão coletados.

Em um cluster Kubernetes, um aplicativo sem estado não tem armazenamento persistente ou volume associado a ele. Do ponto de vista das operações, esta é uma ótima notícia. Diferentes pods em todo o cluster podem funcionar de forma independente, com várias solicitações chegando a eles simultaneamente. Se algo der errado, você pode simplesmente reiniciar o aplicativo e ele voltará ao estado inicial com pouco tempo de inatividade.

Serviços com estado e o teorema CAP

Os serviços com estado, por outro lado, terão que se preocupar com muitos e muitos casos extremos e questões estranhas. Um pod é acompanhado por pelo menos um volume e, se os dados desse volume forem corrompidos, isso persiste mesmo que todo o cluster seja reinicializado.

Por exemplo, se você estiver executando um banco de dados em um cluster Kubernetes, todos os pods devem ter um volume local para armazenar o banco de dados. Todos os dados devem estar em perfeita sincronia.

Portanto, se alguém modificar uma entrada no banco de dados, e isso foi feito no pod A, e uma solicitação de leitura vier no pod B para ver os dados modificados, o pod B deve mostrar os dados mais recentes ou fornecer uma mensagem de erro. Isso é conhecido como consistência.

Consistência, no contexto de um cluster Kubernetes, significa cada leitura recebe a gravação mais recente ou uma mensagem de erro.

Mas isso vai contra disponibilidade, uma das razões mais importantes para ter um sistema distribuído. A disponibilidade implica que seu aplicativo funcione o mais próximo da perfeição possível, o tempo todo, com o mínimo de erros possível.

Pode-se argumentar que você pode evitar tudo isso se tiver apenas um banco de dados centralizado que é responsável por lidar com todas as necessidades de armazenamento persistente. Agora, voltamos a ter um único ponto de falha, que é outro problema que os clusters do Kubernetes devem resolver em primeiro lugar.

Você precisa ter uma maneira descentralizada de armazenar dados persistentes em um cluster. Comumente conhecido como particionamento de rede. Além disso, seu cluster deve ser capaz de sobreviver à falha de nós que executam o aplicativo com estado. Isso é conhecido como tolerância de partição.

Qualquer serviço (ou aplicativo) com estado, sendo executado em um cluster Kubernetes, precisa ter um equilíbrio entre esses três parâmetros. Na indústria, é conhecido como teorema CAP, onde as compensações entre consistência e disponibilidade são consideradas na presença de particionamento de rede.

Referências adicionais

Para obter mais informações sobre o teorema CAP, você pode querer ver esta excelente palestra dada por Bryan Cantrill, que examina mais de perto a execução de sistemas distribuídos em produção.

Adicione gestos do mouse ao Windows 10 usando essas ferramentas gratuitas
Nos últimos anos, os computadores e sistemas operacionais evoluíram muito. Houve um tempo em que os usuários tinham que usar comandos para navegar pel...
Controle e gerencie o movimento do mouse entre vários monitores no Windows 10
Gerenciador de mouse com tela dupla permite que você controle e configure o movimento do mouse entre vários monitores, diminuindo seus movimentos pert...
WinMouse permite que você personalize e melhore o movimento do ponteiro do mouse no PC com Windows
Se você quiser melhorar as funções padrão do ponteiro do mouse, use um freeware WinMouse. Ele adiciona mais recursos para ajudá-lo a obter o máximo do...