Como arquitetar aplicativos baseados em contêineres e em microsserviços

Dica

Esse conteúdo é um trecho do eBook da Arquitetura de Microsserviços do .NET para os Aplicativos .NET em Contêineres, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.

Imagem em miniatura da capa do eBook da Arquitetura de Microsserviços do .NET para os Aplicativos .NET em Contêineres.

Os microsserviços oferecem grandes benefícios, mas também geram novos grandes desafios. Os padrões da arquitetura de microsserviços são pilares fundamentais durante a criação de um aplicativo baseado em microsserviço.

Antes neste guia, você aprendeu os conceitos básicos sobre contêineres e sobre o Docker. Essa informação era o mínimo que você precisava para a introdução aos contêineres. Embora os contêineres sejam habilitadores e um ótimo ajuste para os microsserviços, eles não são obrigatórios para uma arquitetura de microsserviço. Muitos conceitos de arquitetura nesta seção de arquitetura podem ser aplicados sem contêineres. No entanto, este guia concentra-se na interseção de ambos devido a importância dos contêineres que já foi apresentada.

Os aplicativos corporativos podem ser complexos e geralmente são compostos de vários serviços e não em um único serviço. Para esses casos, você precisa entender outras abordagens arquitetura adicionais, como os microsserviços e certos padrões de DDD (design controlado por domínio) além de conceitos de orquestração de contêiner. Observe que este capítulo não descreve apenas microsserviços em contêineres, mas também qualquer aplicativo em contêiner.

Princípios de design de contêiner

No modelo de contêiner, uma instância de imagem de contêiner representa um único processo. Definindo uma imagem de contêiner como um limite de processo, você pode criar primitivas que podem ser usadas para escalar ou lotear o processo.

Ao criar uma imagem de contêiner, você verá uma definição ENTRYPOINT no Dockerfile. Essa definição determina o processo cujo tempo de vida controla o tempo de vida do contêiner. Quando o processo for concluído, o ciclo de vida do contêiner será encerrado. Os contêineres podem representar processos de longa execução como servidores Web, mas também podem representar processos de curta duração, como trabalhos em lotes, que anteriormente talvez eram implementados como Azure WebJobs.

Se o processo falhar, o contêiner é encerrado e o orquestrador assume. Se o orquestrador foi configurado para manter cinco instâncias em execução e uma falhar, ele criará outra instância de contêiner para substituir o processo com falha. Em um trabalho em lotes, o processo é iniciado com parâmetros. Quando o processo é concluído, o trabalho é concluído. Mais tarde, este guia faz drill-down em orquestradores.

Você pode encontrar um cenário em que deseje vários processos em execução em um único contêiner. Para esse cenário, como pode haver apenas um ponto de entrada por contêiner, você poderá executar um script dentro do contêiner para iniciar quantos programas forem necessários. Por exemplo, você pode usar o Supervisor ou uma ferramenta semelhante para cuidar da inicialização de vários processos dentro de um único contêiner. No entanto, mesmo que seja possível encontrar arquiteturas com vários processos por contêiner, essa abordagem não é muito comum.