Panoramica pattern

Crea la tua applicazione Web o mobile come un set di microservizi che possono essere testati, distribuiti e di proprietà di diversi team di applicazioni in modo indipendente. Esponi i servizi sotto forma di API REST e comunica con altri microservizi utilizzando le API.

I requisiti più importanti per un'applicazione Web o mobile sono:

  • Deve supportare una vasta gamma di client, come browser e dispositivi mobili.
  • Deve essere sicuro
  • Deve fornire la disponibilità 24/7/365
  • Deve essere scalabile per rispondere ai picchi della domanda
  • Deve gestire una bassa latenza di rete
  • Deve avere zero tempo di inattività quando viene aggiornato o modificato

Oracle Cloud Infrastructure (OCI) offre un'infrastruttura scalabile, sicura, affidabile e altamente performante per le applicazioni Web e mobile più esigenti. Questo documento presenta i principi di progettazione per progettare un'applicazione Web o mobile e le architetture di riferimento basate su tali principi.

Principi di progettazione

Utilizza framework open source leggeri e linguaggi di programmazione maturi

Utilizza Graal Development Kit per Micronaut, o Helidon, per creare la tua applicazione. Entrambi offrono funzioni come registrazione, telemetria, sicurezza e configurazione, nonché pattern comuni come la creazione di API REST.

Usa Java: un linguaggio portatile indipendente dalla piattaforma con un ricco set di librerie che viene utilizzato da milioni di sviluppatori per creare app scalabili, resilienti e sicure.

Crea app come servizi che comunicano utilizzando le API

Crea la tua applicazione come un set di microservizi che possono essere testati, distribuiti e di proprietà di diversi team di applicazioni. Esponi i servizi e le API REST ben definite e comunica con altri servizi utilizzando tali API. Utilizza OCI API Gateway come singolo punto di accesso per tutti i client, quindi instrada le richieste API al servizio appropriato.

Utilizza OCI Service Mesh per semplificare e proteggere la comunicazione tra i servizi ospitati nel tuo cluster Oracle Container Engine for Kubernetes (OKE). OCI Service Mesh ti consente inoltre di osservare tutto il traffico di rete tra i tuoi servizi tramite le metriche e i log emessi dal relativo componente proxy che viene eseguito come sidecar sui pod dell'applicazione.

Automatizza la creazione, il test e l'implementazione

Distribuisci frequentemente il codice e poi distribuisci l'applicazione in modo da ridurre al minimo i tempi di inattività. Utilizza OCI DevOps per stabilire un modo coerente e automatizzato per sviluppare, creare, raggruppare, testare e distribuire le tue applicazioni. Utilizza Oracle Cloud Infrastructure Resource Manager per eseguire il provisioning affidabile degli elementi dell'infrastruttura come il gateway API, i load balancer, i database, i cluster Kubernetes e altri servizi.

Utilizza servizi completamente gestiti per eliminare la complessità nello sviluppo di applicazioni, nei runtime e nella gestione dei dati

Utilizza servizi completamente gestiti come Oracle Container Engine for Kubernetes (OKE), Oracle Cloud Infrastructure Object Storage e Oracle Autonomous Database: questi servizi massimizzano la disponibilità e la scalabilità per rispondere alle mutevoli esigenze della tua applicazione. Un servizio completamente gestito garantisce la disponibilità dell'applicazione e la protegge in caso di guasto nel data center che ospita l'infrastruttura dell'applicazione.

Mantieni il livello dell'applicazione senza conservazione dello stato

Ove possibile, mantieni i componenti di livello intermedio della tua app senza conservazione dello stato. Se necessario, utilizza Oracle Autonomous Database per memorizzare lo stato dell'applicazione in modo da garantirne coerenza, durabilità e recuperabilità rapida.

Utilizza database convergenti con supporto completo e completo su tutti i dati

L'applicazione potrebbe utilizzare i dati in una vasta gamma di formati, ad esempio tabulare (relazionale), non strutturato, XML, JSON, spaziale o grafico. Tradizionalmente, questa varietà richiedeva un tipo diverso di database per ogni formato di dati, ad esempio un database relazionale per i dati relazionali, un'area di memorizzazione documenti per i dati non strutturati o un database grafico per i dati collegati gerarchici. Tuttavia, l'uso di più database spesso porta a una maggiore complessità operativa e all'incongruenza dei dati. Utilizza, invece, un singolo Oracle Autonomous Database multi-modello per memorizzare, indicizzare e cercare più tipi e formati di dati.

Monitoraggio e tracciamento end-to-end degli strumenti

È allettante per i team di sviluppo sviluppare i propri strumenti di osservabilità per ottenere visibilità sui servizi e sulle app di cui sono proprietari. La tua app potrebbe contenere centinaia di servizi, di proprietà di diverse app e team aziendali. Invece di creare i propri strumenti, centralizza la soluzione utilizzando Oracle Cloud Observability and Management Platform: monitora tutti i livelli dell'intero stack per trovare e risolvere i problemi nella tua applicazione.

Elimina il singolo punto di errore attraverso la replica automatizzata dei dati e il recupero degli errori

L'applicazione deve essere resiliente, recuperare dagli errori e ridurre al minimo i tempi di inattività e la perdita di dati. Elimina un singolo punto di errore implementando la ridondanza nei modi seguenti:

  • In OKE, impostare i pool di nodi con un minimo di tre nodi, ciascuno in un dominio di disponibilità separato, in un'area del dominio a più disponibilità.
  • In una singola area del dominio di disponibilità, impostare i pool di nodi in OKE con un minimo di tre nodi, ciascuno in un dominio di errore separato.
  • Utilizza un singolo load balancer pubblico e più load balancer privati con più controller in entrata per la ridondanza in OKE.
  • Progetta una topologia di disaster recovery pilota per riavviare le applicazioni e ripristinare rapidamente i carichi di lavoro in una standby region se si verifica un disastro nella region primaria in cui è ospitata l'applicazione.
  • Configura la pipeline CI/CD per distribuire l'applicazione in una standby region per il recupero dagli errori dell'area.
  • Replica i volumi di storage a blocchi tra le aree utilizzando la replica dei volumi di storage a blocchi e la replica dello storage degli oggetti.
  • Esegui il provisioning dell'infrastruttura necessaria nella standby region utilizzando Oracle Cloud Infrastructure Resource Manager se la region primaria non riesce.
  • Imposta Oracle Autonomous Database per la massima disponibilità utilizzando Autonomous Data Guard per ridurre al minimo i tempi di inattività operativi e la perdita di dati.

Inoltre, verifica la resilienza per vedere come si comporta l'app in condizioni anomale che si verificano in modo intermittente. Ad esempio, puoi adottare il framework Chaos Monkey per il test del caos. Utilizza anche limitazioni, interruttori di circuito e meccanismi di nuovo tentativo per implementare un'applicazione resiliente.

Implementa un approccio approfondito per la difesa per proteggere il ciclo di vita dell'applicazione

Dovresti progettare la tua app con una sicurezza sufficiente per proteggerti dagli attacchi di entità dannose. Esamina la tua app, il codice lato client e il codice di terze parti per verificare la presenza di comportamenti sospetti. Utilizzare le regole di filtro e impostare la protezione DDoS utilizzando Web Application Firewall (WAF) per proteggere l'applicazione dal traffico indesiderato.

Memorizza informazioni riservate come password e token di autenticazione/autorizzazione in Oracle Cloud Infrastructure Vault. Imposta la cifratura dei segreti Kubernetes in etcd. Ruota e imposta una vita breve sui certificati utilizzati dall'app per rendere più difficile per un hacker fingere di essere un'entità attendibile.

Attenersi al principio di privilegio minimo per accertarsi che gli utenti e gli account di servizio dispongano solo dei privilegi minimi necessari per eseguire le attività. Controlla chi ha accesso alla tua applicazione e ai suoi componenti utilizzando Oracle Cloud Infrastructure Identity and Access Management (IAM). Utilizza l'autenticazione a più fattori in IAM per applicare un'autenticazione complessa agli amministratori in modo da limitare l'accesso all'applicazione e ai relativi componenti.

Architettura

Questo pattern di architettura è consigliato per un'applicazione Web o mobile composta da microservizi distribuiti come container in un cluster Kubernetes in OKE. La persistenza dei dati viene ottenuta utilizzando Oracle Autonomous Database. I file multimediali e di immagine per l'applicazione vengono memorizzati nello storage degli oggetti.

Il seguente diagramma descrive questa architettura.



architettura-maf-web-mobile-oracle.zip

L'architettura presenta i seguenti componenti:

  • Web Application Firewall (WAF)

    WAF protegge le app dal traffico Internet dannoso e indesiderato. Può proteggere qualsiasi endpoint che si interfaccia con Internet, fornendo un'applicazione coerente delle regole in tutte le tue app.

  • Gateway API Oracle Cloud Infrastructure

    OCI API Gateway è un servizio gateway API regionale completamente gestito che fornisce endpoint API RESTful protetti per OKE e qualsiasi altro servizio o endpoint in esecuzione su Oracle Cloud Infrastructure. In questa architettura le richieste vengono instradate a un load balancer privato che inoltra le richieste a un servizio in esecuzione in OKE.

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

    OCI IAM offre una solida autenticazione multi-fattore, login social, autoregistrazione per gli utenti finali, gestione delle identità, Single Sign-On e governance delle identità per le applicazioni.

  • Load balancer

    Il servizio di bilanciamento del carico fornisce la distribuzione automatica del traffico da un singolo punto di accesso a più server raggiungibili dalla rete cloud virtuale, ad esempio i nodi OKE dei microservizi containerizzati nell'architettura

  • Oracle Autonomous Database

    Oracle Autonomous Database è un ambiente di database completamente gestito che si ridimensiona in modo elastico, offre prestazioni rapide per le query e non richiede l'amministrazione del database. Non è necessario configurare o gestire alcun componente hardware né installare software.

  • Object storage

    Lo storage degli oggetti offre un accesso rapido a grandi quantità di dati strutturati e non strutturati di qualsiasi tipo di contenuto, inclusi backup del database, dati analitici e contenuti avanzati come immagini e video. Utilizza lo storage standard per l'hot storage a cui è necessario accedere rapidamente, immediatamente e frequentemente. Utilizzare lo storage di archivio per lo storage a freddo che si conserva per lunghi periodi di tempo e a cui si accede raramente o raramente.

    In questa architettura, gli asset multimediali dell'applicazione vengono memorizzati nello storage degli oggetti in un bucket della classe di storage standard.

  • Container Engine for Kubernetes (OKE)

    OKE è un servizio completamente gestito, scalabile e ad alta disponibilità per distribuire le applicazioni containerizzate nel cloud. Puoi specificare le risorse di computazione richieste dalle tue applicazioni e OKE le esegue sul provisioning di OCI in una tenancy esistente. Container Engine utilizza Kubernetes per automatizzare l'implementazione, il ridimensionamento e la gestione delle applicazioni containerizzate tra cluster di host.

  • Service mesh

    Oracle Cloud Infrastructure (OCI) Service Mesh è un livello di infrastruttura applicativa gestito da OCI per la comunicazione service-to-service. Semplifica lo sviluppo e l'implementazione di applicazioni cloud native definendo standard per l'osservabilità, la sicurezza e la gestione del traffico. Service Mesh viene implementato come una serie di proxy leggeri che vengono implementati nei pod dei clienti insieme al codice dell'applicazione senza che l'applicazione ne sia a conoscenza.

Alternative

L'utilizzo dei microservizi non è l'unico modo per creare applicazioni mobile o web. Questo pattern di architettura alternativo mostra una topologia a tre livelli composta da un load balancer, un livello Web/applicazione di ridimensionamento automatico e un database ad alta disponibilità.

Tutte le risorse vengono distribuite in un singolo dominio di disponibilità in un'area OCI. I livelli sono isolati in subnet separate in una singola rete cloud virtuale (VCN). Le liste di sicurezza fungono da firewall per regolare il traffico di rete da e verso le risorse in ogni livello. Una tabella di instradamento collegata a ogni subnet contiene regole per indirizzare il traffico verso destinazioni esterne alla VCN.

Altre architetture alternative come Single-page Architecture, Progressive Web Applications (PWA) o JAMStack possono essere prese in considerazione, ma non vengono mostrate qui.

Il seguente diagramma illustra questa architettura alternativa.



architettura-maf-web-mobile-alternative-oracle.zip

Esempio di caso d'uso

Questo caso d'uso descrive un sistema di ordinazione cliente per un negozio che vende GPU online.

Il seguente diagramma mostra l'architettura per questo caso d'uso.



architettura-maf-web-mobile-esempio-oracle.zip

Il traffico proveniente dalla rete Internet pubblica viene instradato dal servizio DNS tramite un Web Application Firewall (WAF) a un gateway Internet, che inoltra le richieste in entrata a un microservizio Nginx (Ingress) tramite il load balancer. L'app è composta da un servizio front-end, un servizio di ordinazione, un servizio di messaggistica e un servizio di inventario. Tutti questi servizi sono in container e si trovano nel cluster OKE. Ognuno di questi servizi espone le proprie interfacce utilizzando le API REST. I dati vengono memorizzati in database autonomi.

Il cliente effettua un ordine per le GPU che utilizzano il servizio Front-End da un'applicazione Web o da un'applicazione su un dispositivo mobile. Il servizio Ordini e il servizio Magazzino comunicano tra loro utilizzando il servizio di messaggistica open source NATS. Il servizio Orders legge e scrive i dati degli ordini nel pluggable database (PDB). Il servizio Inventory legge e scrive i dati di inventario nel PDB di inventario. Il servizio Ordini invia una notifica utilizzando il servizio Notifiche in modo che il cliente possa essere informato dello stato dell'ordine tramite e-mail o Slack. Il cliente può recuperare lo stato dell'ordine dal frontend, che esegue la ricerca dell'ordine utilizzando l'API REST per il servizio Ordini.

Distribuire

Universal Health Organization (UHO) è un'applicazione di esempio che aderisce ai principi del Modern App Development Framework. In particolare, implementa elementi dei modelli di architettura Web o Mobile, Messaging ed Eventi ed è disponibile su GitHub.
  1. Passare a GitHub.
  2. Duplica o scarica il repository nel computer locale.
  3. Seguire le istruzioni riportate nel documento README.

Log delle modifiche

Questo log elenca le modifiche significative:

Conferme

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