BLOG | NGINX

Uma nova arquitetura de referência de aplicativos modernos de código aberto

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Damian Curry Miniatura
Damian Curry
Publicado em 24 de agosto de 2021

Na NGINX, temos falado nos últimos anos sobre a necessidade de tornar os aplicativos verdadeiramente modernos e adaptáveis – portáteis, nativos da nuvem, resilientes, escaláveis e fáceis de atualizar. Mais recentemente, dois conceitos surgiram para facilitar a criação e a entrega de aplicativos modernos. O primeiro é o Platform Ops , onde uma equipe de plataforma de nível corporativo seleciona, mantém, conecta e protege todas as ferramentas que as equipes de desenvolvimento e DevOps precisam para fazer seu trabalho. A segunda é a mudança para a esquerda , o que significa integrar segurança de nível de produção, rede e monitoramento em aplicativos durante os estágios iniciais do ciclo de vida de desenvolvimento. Os desenvolvedores acabam tendo mais responsabilidade por funções que costumavam pertencer aos ITOps, mas ao mesmo tempo têm mais opções e mais independência sobre como exatamente implementam essas funções.

Embora isso pareça bom, na realidade é desafiador implementar o Platform Ops e “mudar para a esquerda” a infraestrutura e as ferramentas de operações. Por um lado, cada vez mais aplicativos estão sendo implantados de maneiras altamente distribuídas, em ambientes conteinerizados e usando um dos crescentes mecanismos de orquestração do Kubernetes. As empresas também querem implantar seus aplicativos em vários ambientes sem se preocupar com as diferenças entre nuvens e entre nuvens e ambientes locais.

Uma “Imagem de Ouro” para Aplicativos Modernos

Como deveriam, nossos clientes e a comunidade continuam solicitando nossa ajuda para os desafios que enfrentam. Eles querem todas as vantagens, mas juntar todas as peças – segurança, rede, observabilidade e monitoramento de desempenho, dimensionamento – requer trabalho de verdade. Tornar a plataforma resultante robusta o suficiente para ambientes de produção exige ainda mais trabalho. Eles se perguntam: “Por que não existe uma ‘imagem de ouro’ para aplicativos modernos que podemos lançar a partir de um único repositório?”

Essa é uma boa pergunta, e nós a encaramos como um desafio para encontrar uma boa resposta. Primeiro, reformulamos a questão em termos mais concretos. Acreditamos que nossos clientes e a comunidade estão se perguntando isso: “Você pode nos ajudar a integrar diferentes produtos de software em um todo mais coeso, ajustar a pilha para definir as configurações e definições corretas e nos poupar trabalho e problemas? E você pode facilitar a execução do aplicativo em diferentes nuvens sem precisar fazer grandes alterações de configuração devido a diferenças nos serviços e funcionalidades subjacentes?”

Vemos uma solução que realmente aborda essas questões como benéfica para toda a comunidade — não apenas para nossos parceiros em centenas de empresas e todos os principais fornecedores de nuvem — realmente uma vitória sem soma zero . O ideal é que a solução não seja um “brinquedo”, mas um código sólido, testado e pronto para ser implantado em aplicativos de produção ao vivo em ambientes Kubernetes. E, francamente, queremos que qualquer um possa roubar nosso trabalho diretamente do GitHub.

Para ir direto ao ponto, hoje no NGINX Sprint 2.0 estamos anunciando o lançamento da nossa solução: a primeira iteração da Modern Apps Reference Architecture (MARA), uma arquitetura de código aberto e modelo de implantação para aplicativos modernos. Esperamos que você goste, use, roube e, melhor ainda, modifique ou bifurque para melhorar ou personalizar. Esta postagem aborda o que construímos e como funciona.

Diagrama mostrando a topologia da arquitetura de referência de aplicativos modernos do NGINX
Arquitetura de referência de aplicativos modernos do NGINX

Definindo aplicações adaptativas modernas

Primeiro, vamos definir o aplicativo moderno e adaptável ideal. Ele pode ser composto de microsserviços, ser conteinerizado e aderir aos princípios de design nativo da nuvem (pouco acoplado, fácil de escalar, não vinculado à infraestrutura) – mas não precisa ser. Parte do espírito dos aplicativos modernos é arquitetar especificamente para aproveitar a abstração da infraestrutura. Esta definição é direta, mas importante porque estabelece o modelo básico para todas as arquiteturas de referência.

Os principais pilares de uma arquitetura de aplicativo moderna incluem portabilidade, escalabilidade, resiliência e agilidade.

  • Portabilidade – É fácil implantar o aplicativo em vários tipos de dispositivos e infraestruturas, em nuvens públicas e no local.
  • Escalabilidade – O aplicativo pode ser ampliado ou reduzido de forma rápida e contínua para acomodar picos ou reduções na demanda, em qualquer lugar do mundo.
  • Resiliência – O aplicativo pode fazer failover facilmente para clusters ou ambientes virtuais recém-criados em diferentes regiões de disponibilidade, nuvens ou data centers.
  • Agilidade – O aplicativo pode ser atualizado rapidamente por meio de pipelines de CI/CD automatizados; no mundo dos aplicativos modernos, isso também implica em maior velocidade de código e envios de código mais frequentes.

Projetando nossa arquitetura de referência

Queríamos criar uma plataforma que atendesse aos requisitos básicos de definição e padrão de implantação de nossos aplicativos modernos. Além dos objetivos técnicos, queríamos ilustrar os princípios modernos de design de aplicativos e incentivar nossa comunidade a implantar no Kubernetes. E sim, queríamos oferecer código “roubável” com o qual desenvolvedores, DevOps e equipes de Platform Ops pudessem brincar, modificar e melhorar. Em suma, queríamos oferecer:

  • Uma arquitetura Kubernetes pronta para produção e de fácil implantação que não é um brinquedo
  • Uma plataforma que destaca como os produtos parceiros funcionam no Kubernetes
  • Um botão de pressão para fácil construção e implantação de um controlador Kubernetes Ingress
  • Um ambiente de teste para futuras integrações de produtos e alianças
  • Uma estrutura de implantação plugável
  • Um único repositório de código-fonte aberto para simplificar a descoberta e a adoção

Aqui estão as escolhas de design e parceria que fizemos para a primeira versão da plataforma (para nossos planos para a próxima versão, veja Muito mais integrações e mais flexibilidade na versão 2 ). Acreditamos firmemente que tornar nosso aplicativo de referência inclusivo para parceiros é essencial para impulsionar o engajamento de parceiros e da comunidade.

Como o código é implantado

Para instalar e implantar o aplicativo de exemplo, você emite um único comando para invocar o script de inicialização, e os seguintes projetos Pulumi são executados na ordem indicada. Cada nome de projeto é mapeado para um nome de diretório relativo ao diretório raiz do repositório . Para mais detalhes, consulte o README .

vpc - Define e instala VPC e sub-redes para usar com EKS └─eks - Implanta EKS
└─ecr - Configura ECR para uso em cluster EKS
└─kic-image-build - Cria nova imagem do NGINX Ingress Controller
└─kic-image-push - Envia a imagem criada na etapa anterior para ECR
└─kic-helm-chart - Implanta o NGINX Ingress Controller no cluster EKS
└─logstore - Implanta o Elastic log store no cluster EKS
└─logagent - Implanta o agente de registro Elastic (filebeat) no cluster EKS
└─certmgr - Implanta o gráfico cert-manager.io Helm no cluster EKS
└─anthos - Implanta o aplicativo Bank of Anthos no Cluster EKS

Muitas mais integrações e mais flexibilidade na versão 2

Reconhecemos que nosso esforço inicial pode não fornecer todas as integrações necessárias para seu ambiente Kubernetes. Platform Ops é sobre escolha inteligente, mas não ilimitada. Para facilitar que as equipes de operações de plataforma, DevOps e desenvolvedores testem e potencialmente adotem nossa nova plataforma de referência, planejamos muitas melhorias no curto prazo, incluindo:

  • Crie ambientes Digital Ocean, OpenShift, Rancher, vSphere e outros Kubernetes
  • Integrar com o NGINX Controller> para gerenciar e monitorar o NGINX Plus Ingress Controller

    [ Editor – O NGINX Controller agora é o F5 NGINX Management Suite .]

  • Forneça configuração pronta para uso para o NGINX App Protect
  • Integre-se com produtos e serviços F5 como BIG‑IP , Cloud Services e Volterra
  • Integrar com NGINX Service Mesh e Aspen Mesh baseado em Istio
  • Integre nativamente com o Terraform e outras ferramentas de automação
  • Suporte a outras opções de CI/CD
  • Implante clusters separados ou múltiplos para serviços de infraestrutura e aplicativos

Esperamos que nosso trabalho possa se tornar uma estrutura para outras plataformas de referência e um ponto de partida “roubável” para a construção de todos os tipos de aplicativos modernos diferenciados. Como o Kubernetes é um mecanismo tão poderoso tanto para a criação de aplicativos modernos quanto para o fortalecimento das operações de plataforma e da cultura shift-left, quanto mais expansiva e conectável for nossa arquitetura de referência, melhor. Estamos ansiosos para ver o que vocês, a comunidade, pensam sobre nosso trabalho e, mais importante, o que vocês construirão com ele.

Comece com a Arquitetura de Referência

Baixe nossa plataforma de referência e experimente. Diga-nos o que você pensa e o que você quer que construamos em seguida. Solicitações de pull são mais que bem-vindas. Estamos ansiosos para fazer parceria com você na próxima geração de aplicativos modernos, adaptáveis e "roubáveis" que retribuem à comunidade e a todos os desenvolvedores.

Postagens relacionadas

Esta postagem faz parte de uma série. À medida que adicionamos recursos ao MARA ao longo do tempo, publicamos os detalhes no blog:


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."