Visão Geral do Padrão

Crie seu aplicativo web ou móvel como um conjunto de microsserviços que podem ser testados, implantados e de propriedade independente de diferentes equipes de aplicativos. Exponha serviços como APIs REST e comunique-se com outros microsserviços usando APIs.

Os requisitos mais importantes para um aplicativo web ou móvel são:

  • Ele deve suportar uma variedade de clientes, como navegadores e dispositivos móveis
  • Deve ser seguro
  • Ele deve oferecer disponibilidade 24/7/365
  • Ele deve ser dimensionado para responder aos picos de demanda
  • Ele deve lidar com baixa latência de rede
  • Ele deve ter tempo de inatividade zero quando atualizado ou modificado

A Oracle Cloud Infrastructure (OCI) fornece infraestrutura escalável, segura, confiável e de alto desempenho para os aplicativos web e móveis mais exigentes. Este documento apresenta os princípios de design para arquitetar um aplicativo web ou móvel e arquiteturas de referência com base nesses princípios.

Princípios de design

Use estruturas leves de código aberto e linguagens de programação maduras

Use o Kit de Desenvolvimento Graal para Micronaut, ou Helidon, para criar seu aplicativo. Ambos fornecem recursos como registro em log, telemetria, segurança e configuração, bem como padrões comuns, como a criação de APIs REST.

Use o Java: uma linguagem portátil independente de plataforma com um rico conjunto de bibliotecas que é usado por milhões de desenvolvedores para criar aplicativos escaláveis, resilientes e seguros.

Crie aplicativos como serviços que se comunicam usando APIs

Crie seu aplicativo como um conjunto de microsserviços que podem ser testados, implantados e de propriedade independente de diferentes equipes de aplicativos. Exponha serviços como APIs REST bem definidas e comunique-se com outros serviços usando essas APIs. Use o OCI API Gateway como o único ponto de entrada para todos os clientes e, em seguida, roteie as solicitações de API para o serviço apropriado.

Use o OCI Service Mesh para simplificar e proteger a comunicação entre serviços hospedados no cluster do Oracle Container Engine for Kubernetes (OKE). O OCI Service Mesh também permite observar todo o tráfego de rede entre seus serviços por meio das métricas e logs emitidos por seu componente proxy que é executado como sidecar nos pods de aplicativos.

Automatize a criação, o teste e a implantação

Forneça código com frequência e, em seguida, implemente seu aplicativo de forma a minimizar o tempo de inatividade. Use o OCI DevOps para estabelecer uma maneira consistente e automatizada de desenvolver, criar, empacotar, testar e implantar seus aplicativos. Use o Oracle Cloud Infrastructure Resource Manager para provisionar de forma confiável seus elementos de infraestrutura, como Gateway de API, balanceadores de carga, bancos de dados, clusters do Kubernetes e outros serviços.

Use serviços totalmente gerenciados para eliminar a complexidade no desenvolvimento de aplicativos, tempos de execução e gerenciamento de dados

Use serviços totalmente gerenciados, como Oracle Container Engine for Kubernetes (OKE), Oracle Cloud Infrastructure Object Storage e Oracle Autonomous Database: esses serviços maximizam a disponibilidade e a escalabilidade para responder às demandas em constante mudança do seu aplicativo. Um serviço totalmente gerenciado garante a disponibilidade do aplicativo e o protege se ocorrer uma falha no data center que hospeda a infraestrutura do aplicativo.

Manter a camada do aplicativo sem monitoramento de estado

Sempre que possível, mantenha os componentes de camada intermediária do seu aplicativo sem monitoramento de estado. Se necessário, use o Oracle Autonomous Database para armazenar o estado do aplicativo para consistência, durabilidade e recuperação rápida.

Use bancos de dados convergentes com suporte completo em todos os dados

Seu aplicativo pode usar dados em uma variedade de formatos, como tabular (relacional), não estruturado, XML, JSON, espacial ou gráfico. Tradicionalmente, essa variedade exigia um tipo diferente de banco de dados para cada formato de dados, por exemplo, um banco de dados relacional para dados relacionais, um armazenamento de documentos para dados não estruturados ou um banco de dados gráfico para dados vinculados hierárquicos. No entanto, o uso de vários bancos de dados geralmente leva a complexidade operacional adicional e inconsistência de dados. Em vez disso, use um único Oracle Autonomous Database de vários modelos para armazenar, indexar e pesquisar vários tipos e formatos de dados.

Monitoramento e rastreamento ponta a ponta do instrumento

É tentador que as equipes de desenvolvimento desenvolvam suas próprias ferramentas de observabilidade para obter visibilidade dos serviços e aplicativos que possuem. Seu aplicativo pode conter centenas de serviços, de propriedade de diferentes equipes de aplicativos e negócios. Em vez de cada equipe criar suas próprias ferramentas, centralize a solução usando a Oracle Cloud Observability and Management Platform: ela monitora todas as camadas de toda a pilha para encontrar e corrigir problemas em seu aplicativo.

Elimine um único ponto de falha por meio de replicação automatizada de dados e recuperação de falhas

Seu aplicativo deve ser resiliente, recuperar-se de falhas e minimizar o tempo de inatividade e a perda de dados. Elimine um único ponto de falha implementando a redundância das seguintes maneiras:

  • No OKE, configure pools de nós com um mínimo de três nós, com cada nó em um domínio de disponibilidade separado, em uma região de domínio de disponibilidade múltipla.
  • Em uma única região de domínio de disponibilidade, configure pools de nós no OKE com um mínimo de três nós, com cada nó em um domínio de falha separado.
  • Use um único balanceador de carga público e vários balanceadores de carga privados com vários controladores de entrada para redundância no OKE.
  • Projete uma topologia piloto de recuperação de desastres para reiniciar aplicativos e restaurar cargas de trabalho rapidamente em uma região stand-by se um desastre atingir a região principal em que seu aplicativo está hospedado.
  • Configure seu pipeline de CI/CD para implantar seu aplicativo em uma região stand-by para se recuperar de falhas de região.
  • Replique seus volumes de armazenamento em blocos entre regiões usando replicação de volume de armazenamento em blocos e replicação de armazenamento de objetos.
  • Provisione a infraestrutura necessária na região stand-by usando o Oracle Cloud Infrastructure Resource Manager se a região principal falhar.
  • Configure o Oracle Autonomous Database para obter disponibilidade máxima usando o Autonomous Data Guard para minimizar o tempo de inatividade operacional e a perda de dados.

Além disso, teste a resiliência para ver como seu aplicativo se comporta em condições anormais que ocorrem de forma intermitente. Por exemplo, você pode adotar a estrutura do Chaos Monkey para testes de caos. Use também aceleradores, disjuntores e mecanismos de repetição para implementar um aplicativo resiliente.

Implemente uma abordagem de defesa aprofundada para proteger o ciclo de vida do aplicativo

Você deve projetar seu aplicativo com segurança suficiente para se proteger contra ataques de entidades maliciosas. Revise seu aplicativo, código do lado do cliente e código de terceiros para verificar se há comportamento suspeito. Use regras de filtragem e configure a proteção DDoS usando o WAF (Web Application Firewall) para proteger seu aplicativo do tráfego indesejado.

Armazene informações confidenciais, como senhas e tokens de autenticação/autorização no Oracle Cloud Infrastructure Vault. Configure a criptografia de segredos do Kubernetes no etcd. Gire e defina vidas curtas nos certificados que seu aplicativo usa para tornar mais difícil para um invasor se passar por uma entidade confiável.

Siga o princípio do privilégio mínimo para garantir que os usuários e as contas de serviço tenham apenas o privilégio mínimo necessário para executar suas tarefas. Controle quem tem acesso ao seu aplicativo e seus componentes usando o Oracle Cloud Infrastructure Identity and Access Management (IAM). Use a autenticação multifator no IAM para impor uma autenticação forte para que os administradores restrinjam o acesso ao seu aplicativo e seus componentes.

Arquitetura

Este padrão de arquitetura é recomendado para um aplicativo web ou móvel composto de microsserviços implantados como contêineres em um cluster do Kubernetes no OKE. A persistência de dados é obtida usando o Oracle Autonomous Database. Os arquivos de mídia e imagem do aplicativo são armazenados no Object Storage.

O diagrama a seguir ilustra essa arquitetura.



arquitetura-maf-web-mobile-oracle.zip

A arquitetura tem os seguintes componentes:

  • Web Application Firewall (WAF)

    O WAF protege aplicativos contra tráfego malicioso e indesejado na internet. Ele pode proteger qualquer ponto final voltado para a Internet, fornecendo aplicação de regras consistente em todos os seus aplicativos.

  • Gateway de API do Oracle Cloud Infrastructure

    O OCI API Gateway é um serviço de gateway de API regional totalmente gerenciado que fornece pontos finais de API RESTful protegidos para o OKE e qualquer outro serviço ou ponto final em execução no Oracle Cloud Infrastructure. Nesta arquitetura, as solicitações são roteadas para um balanceador de carga privado que encaminha as solicitações a um serviço em execução no OKE.

  • SERVIÇO Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)

    O OCI IAM fornece autenticação multifator robusta, login social, autorregistro para usuários finais, gerenciamento de identidade, sign-on único e governança de identidade para aplicativos.

  • Load balancer

    O serviço de Balanceamento de Carga fornece distribuição automatizada de tráfego de um único ponto de entrada para vários servidores acessíveis na sua rede virtual na nuvem, como os nós OKE de microsserviços em contêiner na arquitetura

  • Oracle Autonomous Database

    O Oracle Autonomous Database é um ambiente de banco de dados totalmente gerenciado que é dimensionado elasticamente, oferece rápido desempenho para consultas e não exige administração de banco de dados. Não é necessário configurar ou gerenciar nenhum hardware ou instalar qualquer software.

  • Object Storage

    O serviço Object Storage oferece acesso rápido a grandes quantidades de dados estruturados e não estruturados de qualquer tipo de conteúdo, incluindo backups de bancos de dados, dados de análise e conteúdo avançado, como imagens e vídeos. Use o armazenamento padrão para armazenamento a quente que você precisa para acessar de forma rápida, imediata e com frequência. Use o armazenamento de arquivos compactados para armazenamento a frio que você mantém por longos períodos de tempo e raramente acessa.

    Nesta arquitetura, os ativos de mídia do aplicativo são armazenados no Object Storage em um bucket da classe de armazenamento padrão.

  • Container Engine for Kubernetes (OKE)

    O OKE é um serviço totalmente gerenciado, escalável e altamente disponível para implantar seus aplicativos em contêineres na nuvem. Você especifica os recursos de computação necessários aos seus aplicativos e o OKE os provisiona no OCI em uma tenancy existente. O Container Engine usa o Kubernetes para automatizar a implantação, o dimensionamento e o gerenciamento de aplicativos em contêineres em clusters de hosts.

  • Service mesh

    O Oracle Cloud Infrastructure (OCI) Service Mesh é uma camada de infraestrutura de aplicativos gerenciada pelo OCI para comunicação entre serviços. Ele simplifica o desenvolvimento e a implementação de aplicativos nativos da nuvem definindo padrões de observabilidade, segurança e gerenciamento de tráfego. O Service Mesh é implementado como uma matriz de proxies leves que são implantados nos pods dos clientes juntamente com o código do aplicativo sem exigir que o aplicativo esteja ciente deles.

Alternativas

Usar microsserviços não é a única maneira de criar aplicativos móveis ou aplicativos web. Esse padrão de arquitetura alternativo mostra uma topologia de três camadas que consiste em um balanceador de carga, uma camada web/aplicativo de dimensionamento automático e um banco de dados altamente disponível.

Todos os recursos são implantados em um único domínio de disponibilidade em uma região do OCI. As camadas são isoladas em sub-redes separadas em uma única rede virtual na nuvem (VCN). As Listas de Segurança servem como firewalls para regular o tráfego de rede de e para os recursos de cada camada. Uma tabela de roteamento anexada a cada sub-rede contém regras para direcionar o tráfego para destinos fora da VCN.

Outras arquiteturas alternativas, como Arquitetura de página única, Aplicativos Web Progressivos (PWA) ou JAMStack, podem ser consideradas, mas não são mostradas aqui.

O diagrama a seguir ilustra essa arquitetura alternativa.



arquitetura-maf-web-mobile-alternativa-oracle.zip

Exemplo de Caso de Uso

Este caso de uso descreve um sistema de pedidos de clientes para uma loja que vende GPUs on-line.

O diagrama a seguir mostra a arquitetura desse caso de uso.



arquitetura-maf-web-mobile-exemplo-oracle.zip

O tráfego da internet pública é roteado pelo serviço DNS por meio de um Firewall de Aplicativo Web (WAF) para um Gateway de Internet, que encaminha as solicitações de entrada para um microsserviço de Entrada (Nginx) por meio do balanceador de carga. O aplicativo é composto por um serviço front-end, um serviço de pedidos, um serviço de mensagens e um serviço de estoque. Todos esses serviços são conteinerizados e estão no cluster do OKE. Cada um desses serviços expõe suas interfaces usando APIs REST. Os dados são armazenados em Autonomous Databases.

O cliente faz um pedido de GPUs usando o serviço Front-End de um aplicativo da Web ou de um aplicativo em um dispositivo móvel. O serviço de Pedidos e o Serviço de Inventário se comunicam entre si usando o serviço de mensagens de código aberto NATS. O serviço Prescrições lê e grava os dados da prescrição no banco de dados plugável Prescrições (PDB). O serviço Inventory lê e grava dados de inventário no PDB do Inventory. O serviço de Pedidos envia uma notificação usando o serviço de Notificações para que o cliente possa ser informado do status do pedido por e-mail ou Slack. O cliente pode recuperar o status do pedido no front-end, que procura o pedido usando a API REST para o serviço de Pedidos.

Implante

Universal Health Organization (UHO) é um aplicativo de amostra que adere aos princípios da Modern App Development Framework. Em particular, implementa elementos dos padrões de arquitetura orientados a Web ou Dispositivos Móveis, Mensagens e Eventos e está disponível em GitHub.
  1. Vá para GitHub.
  2. Clone ou faça download do repositório no seu computador local.
  3. Siga as instruções no documento README.

Alterar Log

Este log lista alterações significativas:

Reconhecimentos

  • Autores: Raghavendra Prasad, Sajan Parihar
  • Colaboradores: Hassan Ajan, Matthias Brantner, James Emerson, Harshad Kasture, Parvez Syed Mohamed, Jeff Schering, Joshua Stanley