Recentemente, comecei a trabalhar para uma empresa que deseja dividir seu aplicativo SaaS monolítico em microsserviços em contêiner. Estou tendo dificuldades para entender uma parte fundamental do armazenamento persistente. Por que existem tantas plataformas concorrentes diferentes? Portworx, Rexray, StorageOS, Flocker, Inifint, etc.
Minhas perguntas
Por que alguém simplesmente não cria um servidor NFS e usa uma estrutura hierárquica de pastas lá como back-end de armazenamento? Que ganhos você obtém ao usar uma dessas ferramentas?
Quão perigoso é usar algo assim com o Docker? Quais são as causas comuns para a perda de dados catastrófica em um ambiente baseado em docker?
Qual solução de armazenamento persistente você recomendaria e por quê? Minha empresa opera uma plataforma SaaS. As cargas úteis de dados são pequenas em tamanho (5kb-100kb). O processamento de dados é pequeno-médio no consumo de recursos. O volume geral é médio, mas continua a crescer. Esperamos mover completamente nosso aplicativo monolítico para a nuvem como microsserviços em contêineres separados. Incluindo nosso armazém de dados.
Um pouco não relacionado, mas está ligado. Quais são os pontos fortes do uso do Kubernetes como orquestrador, em oposição ao Rancheiro / Gado? O Kubernetes não está com excesso de engenharia para uma plataforma de pequeno e médio porte? Existem pontos fortes no uso do Kubernetes no Rancher, além da instalação com um clique?
Obrigado pela compreensão. Desculpe pela ingenuidade. Congratulo-me com toda a documentação e material de leitura suplementar.
EDIT: Para o contexto, estamos usando o Azure como nossa plataforma de nuvem subjacente.
fonte
Respostas:
Eu posso responder o segundo ponto:
O Docker é mais adequado em uma arquitetura baseada em microsserviço quando o aplicativo é executado dentro dos contêineres, mas o armazenamento ou qualquer outra sessão ativa é mantida na RAM compartilhada ou no banco de dados.
Basicamente, você não deve armazenar nada dentro do contêiner do docker. Existem muitas razões para isso:
Considere a atualização: alguém da sua equipe criou uma imagem mais nova do aplicativo e você precisa do contêiner em execução com a imagem mais recente. A janela de encaixe atual e a maneira popular de fazer isso é reduzir o contêiner existente e girar um novo contêiner com os mesmos parâmetros de tempo de execução que o contêiner mais antigo, mas com a imagem mais recente. Esse é um dos maiores motivos pelos quais os contêineres devem sempre ser sem estado e não conter nenhum dado. Você pode ter todos os seus dados montados em algum local e sessões mantidos em um banco de dados ou algo como memchached etc.
Um dos grandes casos de uso do docker é criar clusters. Se você começar a manter os dados dentro de seus contêineres, será uma sobrecarga manter esses dados em sincronia entre os contêineres do aplicativo.
A comunidade de estivadores em geral não recomenda manter nenhum dado em contêiner e, portanto, ninguém tentou correr esse risco na produção e ninguém quer ser o primeiro contador de histórias de como eles estragaram a produção :)
fonte