Best practice che governano le architetture delle applicazioni.
Apri tutto Chiudi tutto
Panoramica
I linguaggi e i framework di programmazione che adotti per creare la tua applicazione svolgono un ruolo fondamentale nel processo di consegna e manutenzione dell'applicazione nel corso del tempo. Le scelte dei linguaggi e di framework hanno conseguenze a lungo termine su come scalare il tuo business, gestire le tue app e offrire ai tuoi clienti funzionalità di alta qualità. Le modifiche al linguaggio al framework sono in genere costose. Il supporto di ecosistemi multipli e paralleli di linguaggi e framework aggiunge complessità e riduce l'agilità.
La scelta del linguaggio e del framework ha un impatto su una serie di fattori, tra cui la velocità di consegna, la stabilità e la forza dell'ecosistema esistente, la disponibilità operativa e le performance di produzione. Utilizza piattaforme low-code quando possibile per concentrarti sulla risoluzione dei problemi aziendali invece di far fronte alle complicazioni dello sviluppo tradizionale. Se le esigenze della tua app sono più complesse, scegli linguaggi maturi e framework leggeri.
Dettagli chiave
Le piattaforme low-code ti consentono di creare, testare e implementare le applicazioni aziendali più rapidamente rispetto alla codifica manuale tradizionale. Queste piattaforme sono adatte per creare applicazioni opportunistiche in collaborazione con gli stakeholder aziendali, nonché applicazioni di reporting e analisi dei dati. Le piattaforme low-code ti consentono anche di estendere le applicazioni SaaS e modernizzare le applicazioni legacy. Questo approccio consente di evitare complicazioni quando desideri aggiungere nuove funzionalità, quali visualizzazione dei dati, raccolta dei dati, analytics dei dati, sicurezza, accessibilità, prestazioni e globalizzazione. Una piattaforma low-code riduce notevolmente queste complicazioni e riduce drasticamente la quantità di codice che gestisci.
Tuttavia, se la tua app ha requisiti più sofisticati, scegli un linguaggio di programmazione maturo associato a un framework leggero. Quando scegli un linguaggio di programmazione, selezionane uno che ti offra vantaggi chiave quali:
I linguaggi più recenti tendono ad avere un tasso più elevato di cambiamento nella progettazione del linguaggio e nell'ecosistema e nelle librerie corrispondenti. Un tasso di cambiamento più elevato implica che è più difficile valutare il rischio e più costoso apportare modifiche successive.
Quando scegli un framework, selezionane uno che sia open source. I framework open source sono sottoposti a una peer review continua. Ciò significa che le funzioni sono vicine a ciò che molti sviluppatori desiderano perché questi contribuiscono alla creazione e alla manutenzione dei framework. I bug vengono trovati e risolti rapidamente. Puoi inoltre selezionare un framework leggero che utilizza poche risorse, ad esempio CPU, memoria, larghezza di banda della rete o handle di file.
Utilizza framework applicativi che migliorano il focus sui task (logica aziendale boilerplate e scaffolding) con flessibilità (per supportare le esigenze di funzionalità attuali e future). Adotta un framework che offra valori predefiniti intuitivi e non controversi per funzioni comuni quali registrazione, telemetria, sicurezza, configurazione e pattern comuni, ad esempio la creazione di interfacce API REST.
Suggerimenti Oracle
Oracle APEX è una piattaforma low-code che offre componenti di alto livello, quali form, grafici e widget dell'interfaccia utente. APEX fornisce inoltre pattern di progettazione comuni attraverso un ambiente di sviluppo grafico intuitivo. Le applicazioni sviluppate mediante APEX possono accedere ai dati locali tramite SQL e integrarsi con i servizi esterni utilizzando le API REST. Inoltre, puoi pubblicare la funzionalità sviluppata in APEX come API REST per utilizzo esterno.
Se una piattaforma low-code è inappropriata per la tua applicazione, adotta Java come linguaggio di programmazione. Java offre un set di funzionalità ampio e stabile per la maggior parte dei casi d'uso delle applicazioni e dispone di un ecosistema sano di librerie e framework affidabili e stabili per lo sviluppo di applicazioni moderne. Il focus di Java sulla semplicità e sulla leggibilità, unito al supporto eccellente per gli strumenti di sviluppo, tra cui gli strumenti di analisi statica e i framework di test, riduce i costi di manutenzione del software e il rischio di bug nelle applicazioni di produzione.
Utilizza GraalVM per sviluppare ed eseguire la tua applicazione. GraalVM è un JDK distribution che mette insieme la stabilità di Java e le migliori performance grazie a un'ottimizzazione dinamica del runtime, come pure l'applicazione frequente e proattiva delle patch alle vulnerabilità della sicurezza e l'analisi e gli strumenti diagnostici a basso costo come Java Flight Recorder.
Crea le tue applicazioni con un approccio incentrato sulle API utilizzando Kit di sviluppo Graal per Micronaut o il framework Helidon. Entrambi gli approcci offrono uno scaffolding che riduce notevolmente il tempo di consegna delle tue applicazioni e pattern intuivi per casi d'uso comuni, come le API REST, in base a un set di scelte framework semplici e non controverse per attività comuni quali registrazione, telemetria e storage. Entrambi i framework supportano inoltre servizi ad alte prestazioni tramite il supporto di I/O non bloccanti con API reattive idiomatiche e bassa latenza attraverso il supporto per le librerie di rete ad alte prestazioni.
Sia Helidon sia GDK dispongono di un supporto integrato per le immagini native GraalVM, che consente di creare app compatte ed efficienti in termini di memoria.
Panoramica
Suddividi le funzioni e le attività dell'app in servizi a basso accoppiamento che funzionano insieme. Progetta ogni servizio con un ambito funzionale limitato che si focalizza su una caratteristica o capacità. Rispetto a un'architettura monolitica tradizionale, questo approccio migliora la manutenzione delle applicazioni, lo sviluppo di funzioni, i test, l'implementazione e la scalabilità.
Adotta un approccio di progettazione API REST orientato verso il contratto per offrire interfacce chiare e comprensibili per la comunicazione con e tra i servizi. Un contratto API fornisce il meccanismo necessario per consentire ai team di collaborare e utilizzare le funzionalità senza dipendere dai dettagli interni dell'implementazione di un servizio. Ad esempio, un servizio può essere interamente a carico di un team di sviluppo che può migliorare liberamente la sua implementazione senza dover coordinare le dipendenze di codice con altri team di sviluppo.
Dettagli chiave
Inizia con un approccio orientato verso il contratto specificando l'API REST di un servizio. Quindi crea un prototipo di un'implementazione dell'API per permettere agli stakeholder, come i team che la utilizzeranno, di provarla. Quando tutti saranno concordi sui dettagli dell'API, i team indipendenti potranno lavorare in parallelo per implementare il servizio e altri servizi che lo consumeranno.
Definire le applicazioni dei criteri per la sicurezza e i Service Level Agreement all'inizio del ciclo di vita del tuo prodotto per garantire che tutto sia chiaro riguardo agli aspetti del contratto di servizio.
Tratta la tua specifica API come codice e gestiscila in un sistema di controllo delle versioni insieme al codice sorgente e alle configurazioni delle policy.
Suggerimenti Oracle
Specifica la tua API utilizzando il formato implementation-agnostic OpenAPI e archiviala in un repository fornito da Oracle Cloud Infrastructure (OCI) DevOps Service.
Implementa i tuoi servizi utilizzando un approccio open source leggero, come Kit per lo sviluppo Graal per Micronaut o Helidon.
Implementa i tuoi servizi su piattaforme serverless come Oracle Container Engine for Kubernetes o Oracle Functions per una maggiore facilità di implementazione, scalabilità ed efficienza in termini di costi.
Utilizza Oracle Cloud Infrastructure API Gateway per creare endpoint privati o pubblici protetti e gestiti dalla specifica delle API.
Usa Oracle Cloud Infrastructure Service Mesh per semplificare e proteggere la comunicazione tra i servizi gestiti in hosting nel tuo cluster Oracle Container Engine for Kubernetes. OCI Service Mesh ti permette inoltre di osservare tutto il traffico di rete tra i servizi tramite i parametri e i log emessi dal suo componente proxy che viene eseguito come sidecar sui pod dell'applicazione.
Panoramica
Un container impacchetta il codice e le relative dipendenze come un'unica unità, in modo da garantire un'esecuzione rapida e affidabile delle app su più ambienti di computazione. Una container image è un file che, quando viene eseguito, creerà e avvierà un container in un ambiente di computazione.
Rispetto alle macchine virtuali tradizionali, i container sono più piccoli, richiedono meno risorse e tempi di avvio più rapidi. Sono inoltre indipendenti dalla piattaforma e possono eseguire le app ovunque. Per sfruttare questi vantaggi, scomponi le app in dei servizi che eseguono funzioni di business discrete e raggruppali in dei container. Per le applicazioni legacy, sostituisci gradualmente ogni funzione esistente nell'applicazione con un servizio containerizzato fino a quando non viene fatto il refactoring dell'intera app.
Dettagli chiave
Impacchettare il codice dell'applicazione e le dipendenze in un'unica unità eseguibile (una container image) significa che un containter è estremamente portatile. Grazie alla combinazione di questa portabilità con l'astrazione dell'infrastruttura, i container portano coerenza a livello operativo alle tue applicazioni. Sia che la tua applicazione sia in esecuzione on-premise su un server fisico o nel cloud su una macchina virtuale, essa produce gli stessi risultati ogni volta.
Grazie a questa riproducibilità e prevedibilità coerenti, i container semplificano i processi DevOps e consentono ai tuoi team di sviluppo di implementare le tue app in modo più rapido. Fornendo l'isolamento a livello di processo e poiché vengono spesso sostituiti, i container semplificano e velocizzano i processi associati alle correzioni delle vulnerabilità del software. La suddivisione delle applicazioni in servizi in container modulari li rende inoltre molto robusti. Un errore in un singolo servizio non arresta tutta la tua applicazione e puoi aggiornare o applicare patch a ogni servizio indipendentemente dal resto di quest'ultima.
A differenza di una macchina virtuale, un container non possiede un sistema operativo proprio, ma condivide il sistema operativo del proprio host. Per questo motivo, le dimensioni dei contenitori sono ridotte e il loro avvio è più rapido rispetto alle macchine virtuali. La maggior parte delle immagini dei container è composta da decine di megabyte rispetto alle macchine virtuali che possono essere di diversi gigabyte e il loro tempo di avvio è in secondi invece che in minuti.
Il modo migliore per eseguire e ridimensionare la tua applicazione con servizi modulari nei container è distribuire un solo servizio per container. Questo approccio isola i servizi l'uno dall'altro, eliminando i tempi di inattività e garantendo una scalabilità indipendente per ciascun servizio.
Sebbene sia possibile implementare i container manualmente, è preferibile utilizzare il software di gestione dei container integrato con gli strumenti di integrazione e implementazione continua.
Suggerimenti Oracle
Utilizza Oracle Cloud Infrastructure Registry (Container Registry) per la memorizzazione delle immagini dei container e Oracle Cloud Infrastructure Container Engine for Kubernetes (Container Engine) per l'esecuzione e la gestione dei container su larga scala. Questi servizi completamente gestiti sono strettamente integrati con funzionalità della piattaforma OCI, sono disponibili in tutte le region di Oracle Cloud e soddisfano gli standard normativi quali PCI, ISO, SOC, HIPAA e FedRAMP.
Oltre a memorizzare le immagini dei container in Container Registry, è possibile memorizzare le liste dei file manifest (a volte denominate immagini multi-architettura) per supportare più architetture, ad esempio ARM e AMD64. Per identificare e mitigare potenziali vulnerabilità della sicurezza, abilita la scansione delle immagini su tutte le immagini caricate in Container Registry. È inoltre necessario firmare le immagini dei container per assicurarsi che vengano distribuite solo immagini autorizzate e sicure in OKE.
Panoramica
La continuous integration (CI) e il continuous deployment (CD) sono un set di strumenti e procedure utilizzati dai team di sviluppo per apportare modifiche al codice in modo frequente e affidabile. Le best practice CI/CD includono revisioni del codice e linee guida per il test delle unità, il test dell'integrazione, i check-in del codice, i ticket di archiviazione e la distribuzione delle applicazioni negli ambienti di sviluppo e test.
Per continuous integration si intende una procedura in cui gli sviluppatori spesso integrano le modifiche al codice nel ramo principale di un repository condiviso. Le modifiche degli sviluppatori vengono convalidate mediante la creazione di una build e poi eseguendo test automatici sulla build. I test garantiscono che l'app non venga danneggiata ogni volta che vengono integrate nuove modifiche nel ramo principale.
Fra i vantaggi della continuous integration vi sono:
La continuous delivery rappresenta il passaggio dopo la continuous integration; dopo aver superato i test appropriati, una build viene automaticamente portata a un ambiente di test e/o produzione. L'obiettivo della continuous delivery è di avere sempre una base di codice pronta per l'implementazione in un ambiente di produzione dei clienti.
Fra gli ulteriori vantaggi della continuous delivery vi sono:
Il continuous deployment va un passo avanti rispetto alla continuous delivery; ogni modifica che supera tutti i test viene implementata automaticamente nell'ambiente di produzione del cliente. Non vi è nessun intervento umano: solo un test non riuscito può impedire l'implementazione di una nuova modifica alla produzione. Senza intervento umano, il continuous deployment si basa prevalentemente sull'automazione ben progettata dei test.
Fra gli altri vantaggi del continuous deployment vi sono:
CI/CD forniscono le best practice per memorizzare, integrare, distribuire e gestire il codice in modo da automatizzare la modalità con cui si creano le applicazioni. Fra le best practice vi sono le seguenti:
Suggerimenti di Oracle
Utilizza servizio DevOps per automatizzare la distribuzione delle applicazioni cloud native. Prima di tutto, memorizza il codice in un repository di codici DevOps e crea una diramazione di rilascio. Lavora con piccoli incrementi per apportare modifiche alla diramazione di rilascio e risolvere ogni giorno i problemi nella diramazione in modo da garantire la sua stabilità. Dopo di che utilizza la funzionalità di attivazione nel repository di codici per avviare automaticamente una pipeline di creazione DevOps.
Utilizza una singola pipeline di creazione DevOps per creare tutti gli artifact associati al repository di codici. Se la build non riesce, configurare la pipeline di build in modo che rimanga in attesa di approvazione prima del completamento. La richiesta di approvazione deve andare al commit che ha attivato la build e deve risolvere il problema con un nuovo commit di codice e quindi approvare il completamento della build. Per le build andate a buon fine, configurare la pipeline di build in modo da distribuire automaticamente gli artifact al servizio Oracle Cloud Infrastructure Artifacts Registry e attivare automaticamente una pipeline di distribuzione DevOps.
Aggiungi Application Dependency Management per rilevare le vulnerabilità alla sicurezza (CVE, security vulnerability) nelle dipendenze delle applicazioni durante una fase di build in una pipeline di build DevOps OCI. In questo modo, sarai in grado di rilevare e correggere le potenziali CVE non appena diventeranno note.
Utilizza Resource Manager per creare tutti gli ambienti dell'infrastruttura in una zona di sicurezza massima in modo da trarre beneficio dalla sicurezza dell'implementazione. Grazie a Resource Manager, puoi utilizzare infrastructure-as-code per automatizzare in modo coerente la creazione dell'infrastruttura in tutte le tue region. Successivamente, puoi configurare la pipeline di implementazione DevOps affinché venga sempre implementata nelle risorse create nella zona di sicurezza.
Crea una singola pipeline di distribuzione DevOps che distribuisca tutti gli artifact creati da una singola pipeline di build. Organizza gli ambienti di implementazione, come la region OCI, il dominio di disponibilità e il dominio di errore. Configura la pipeline con una strategia di implementazione canary, rolling o blue-green. Configuralo anche per attivare i test automaticamente. Abilita OCI Monitoring e Application Performance Monitoring nell'applicazione e nell'infrastruttura per rilevare i problemi.
Se non vengono rilevati problemi e i test vengono completati correttamente, configurare la pipeline di distribuzione per distribuire automaticamente gli artifact nell'ambiente successivo nella strategia di distribuzione fino a quando gli artifact non vengono distribuiti completamente in tutti gli ambienti di produzione. Quando si esegue la distribuzione nell'ambiente di produzione, configura la pipeline per la distribuzione a tutti i domini di errore in un solo dominio di disponibilità uno alla volta. Implementa su ogni dominio di disponibilità in una region alla volta e, poi, su ogni region, una alla volta. Continua a utilizzare OCI Monitoring e Application Performance Monitoring nell'applicazione e nell'infrastruttura per rilevare rapidamente i problemi. Imposta gli avvisi e, se eventuali metriche chiave vengono improvvisamente eliminate durante la distribuzione, la distribuzione viene interrotta automaticamente e viene attivato il rollback alla versione precedente.
Panoramica
Un servizio gestito fornisce funzionalità specifiche senza dover eseguire task di manutenzione correlati all'ottimizzazione di prestazioni, disponibilità, scalabilità, sicurezza o upgrade. Con un servizio gestito, puoi dedicarti all'offerta di funzionalità per i tuoi clienti invece di preoccuparti della complessità delle operations.
Un servizio gestito Oracle Cloud Infrastructure (OCI) fornisce un componente scalabile e sicuro per lo sviluppo nativo del cloud. Utilizza servizi gestiti per sviluppare ed eseguire la tua applicazione e memorizzarne i dati; ottieni soluzioni avanzate evitando di dover ricorrere a competenze in ogni dominio per creare e utilizzare l'applicazione.
Dettagli chiave
I servizi gestiti per creare applicazioni altamente disponibili, scalabili, agili e performanti con sicurezza, compliance e resilienza.
I servizi gestiti estraggono la complessità dei componenti sottostanti della tua app, facilitando l'archiviazione e il recupero dei dati o la creazione e l'esecuzione delle tue applicazioni. I servizi si integrano con i set di strumenti che forniscono la creazione, l'implementazione e i test automatizzati dell'applicazione. I servizi gestiti migliorano la produttività e riducono il time-to-market.
I servizi gestiti centralizzano e automatizzano varie attività di gestione dell'infrastruttura, eliminando gli errori umani e l'esigenza di competenze specialistiche. L'infrastruttura sottostante è messa in sicurezza e aggiornata costantemente, e i servizi ti consentono di monitorare e tracciare le modifiche o l'accesso, garantendo la riservatezza e l'integrità delle tue applicazioni e dei dati.
I servizi gestiti sono altamente disponibili e scalabili e soddisfano le esigenze della tua app; inoltre, paghi solo per ciò che utilizzi. Puoi iniziare in piccolo e poi calare senza compromettere le prestazioni o l'affidabilità.
Consigli Oracle
Ti consigliamo i seguenti servizi cloud:
Questi servizi sono ad alta disponibilità, altamente performanti ed elastici. L'infrastruttura sottostante viene gestita e patchata per garantire che la tua applicazione rimanga sicura.
Panoramica
Lo stato di un'applicazione può essere costituito da numerosi elementi, tra cui le cache di dati, le preferenze di un utente, la personalizzazione, i messaggi scambiati tra i servizi, la posizione in un flusso di lavoro a più passaggi, l'implementazione di applicazioni, la configurazione di runtime e la sessione di un utente (ad esempio la pagina visitata da un utente per l'ultima volta o la dimensione e gli elementi nel carrello di un utente). Se lo stato dell'applicazione viene perso, può causare la perdita di dati, un malfunzionamento nell'applicazione, un'esperienza utente non ottimale e, talvolta, un arresto completo dell'applicazione.
Se memorizzi lo stato della tua applicazione nei file system locali o nella memoria di un singolo host, potrebbe andare perso in caso di indisponibilità dell'applicazione, ad esempio in caso di riavvii o errori su disco localizzati. Piuttosto, salva lo stato nelle aree di memorizzazione di persistenza esterna. Usa il minor numero possibile di aree di memorizzazione di persistenza; idealmente, usane solo una per garantire la coerenza dei dati.
Dettagli chiave
Gli elementi dello stato di un'applicazione vengono tradizionalmente memorizzati come artifact multipli in vari formati, ad esempio oggetti serializzati, documenti JSON o XML o file di testo. Se questi elementi vengono archiviati in più aree di memorizzazione di persistenza, ad esempio file system esterni, aree di memorizzazione dei messaggi, aree di memorizzazione degli oggetti, più database o storage a blocchi elastico, è possibile che i vari data store escano dalla sincronizzazione e producano incoerenze di stato. Un'app deve inoltre implementare transazioni, join e idempotency per garantire la coerenza dei dati quando lo stato deve essere aggiornato come unità.
Diffondendo elementi dello stato di un'applicazione in più aree di memorizzazione, aumentano le potenziali vulnerabilità nella sicurezza. Operazioni relative al ciclo di vita, come l'aggiunta e la rimozione di nodi, l'applicazione di patch, il backup e il recupero e la replica per errori irreversibili e il recupero, sono estremamente complesse e richiedono un controllo speciale per mantenere la coerenza dello stato in varie aree di memorizzazione.
Per questo motivo, un approccio migliore consiste nel memorizzare tutti i dati dello stato e dell'applicazione in un unico database, se possibile. I dati rimangono coerenti in una singola area di memorizzazione ed è più facile da gestire. Con questo approccio, è possibile sostituire le istanze dell'applicazione. Ciò risulta particolarmente utile per le architetture applicative moderne, quali microservizi elastici o istanze effimere, in cui un'istanza esiste solo per servire una singola o poche richieste. L'aggiunta di un nodo è semplificata perché un nuovo nodo può ottenere la copia più recente dello stato e la rimozione di un nodo non comporta la perdita totale dello stato. Le patch possono essere applicate in sequenza solo sostituendo gli eseguibili. Un nodo può essere ripristinato dai backup e acquisire lo stato dal database. Lo stato può essere replicato in modo coerente come unità in aree diverse per il recupero da disaster recovery. La presenza di uno stato coerente in diverse aree può garantire che non ci saranno problemi funzionali nell'applicazione dopo un failover o lo switchover.
Suggerimenti Oracle
Se la tua applicazione utilizza un database, usa lo stesso database per memorizzarne lo stato. Un database garantisce maggiore disponibilità, integrità e sicurezza rispetto alle alternative, come file o rappresentazioni in-memory. Idealmente, utilizza un database multi-modello (che può memorizzare formati diversi) per memorizzare tutti gli elementi dello stato della tua applicazione. L'utilizzo di un database multi-modello anziché di più data store monouso consente inoltre di ottenere e mantenere la coerenza tra tutti gli elementi dell'applicazione in modo semplice. (Nota: sebbene sia consentito memorizzare lo stato inserito nella cache nell'app, l'app deve essere progettata per utilizzare il database come fonte di verità e per ricreare il suo stato dal database.) Oracle Database è la soluzione ideale per questo scopo. Memorizza formati diversi e offre prestazioni prevedibili, quindi memorizzarvi lo stato dell'applicazione non riduce le prestazioni dell'applicazione.
Se la tua app non utilizza un database, considera altre aree di memorizzazione di persistenza durature come Oracle Cloud Infrastructure Object Storage per memorizzare lo stato. Se lo stato dell'applicazione non può essere conservato in un singolo data store, progetta l'applicazione per memorizzare lo stato in più data store che possono essere mantenuti sincronizzati e recuperati come unità coerente dopo un errore.
Di seguito sono riportati alcuni suggerimenti per la memorizzazione dello stato in un Oracle Database.
Panoramica
L'applicazione potrebbe utilizzare i dati in vari formati, ad esempio in formato tabulare (relativo), non strutturato, XML, JSON, spaziale o grafico. Tradizionalmente, questa varietà richiedeva un tipo di database diverso 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 unico database multi-modello per memorizzare, indicizzare e cercare più tipi e formati di dati.
Sfrutta le funzionalità del database per semplificare la logica della tua app. Utilizza, ad esempio, SQL per query, join e analisi; utilizza le transazioni per garantire coerenza e isolamento; e utilizza algoritmi di Machine Learning integrati e funzionalità di analitica per evitare inutili trasferimenti di dati. Per proteggere i dati riservati, utilizza le funzioni di sicurezza del database e il controllo dell'accesso, nonché utilizza la replica per migliorare la disponibilità, la scalabilità e la resilienza delle applicazioni.
Dettagli chiave
Utilizza un database multi-modello e convergente per memorizzare diversi tipi di dati quali documenti JSON, grafici delle proprietà e dati relazionali. I database multi-modello avanzati offrono il supporto completo di qualsiasi tipo di dati memorizzati nel database. È possibile memorizzare un nuovo documento JSON, inserire righe relazionali e aggiornare un grafico delle proprietà all'interno della stessa transazione ACID. È possibile utilizzare le istruzioni SQL per unire, filtrare e aggregare questi diversi tipi di dati, garantendo maggiore coerenza e garanzie di concorrenza da parte dei database relazionali. Oltre a offrire questa ricca serie di funzioni, un database multi-modello può essere utilizzato anche come data store monouso a cui è si accede utilizzando API naturali diverse da SQL, come API REST, API dell'area di memorizzazione dei documenti e API grafiche.
Il vantaggio principale dell'utilizzo di un database multi-modello è la possibilità di riutilizzo. Sebbene i dati possano essere di tipi e forme diversi, la tecnologia di base per gestire tali dati non cambia. Ciò significa che non devi imparare ad usare diverse tecnologie di database e capire come usarle e sintonizzarle per ogni tipo di dati. E poiché la tecnologia rimane costante, non devi riscrivere il codice della tua applicazione. Inoltre, un database multi-modello migliora la resilienza della tua applicazione riducendo la frammentazione dei dati, semplificando così il backup e il ripristino.
Suggerimenti di Oracle
Utilizza Oracle Autonomous Database, un database convergente multi-modello, per memorizzare, gestire e analizzare tutti i tuoi dati. Semplifica la manutenzione dell'applicazione utilizzando le viste per esporre i dati nelle tabelle in modo che lo schema di base possa essere modificato senza influire sulle tue applicazioni esistenti. Utilizza la ridefinizione basata su edizioni per aggiornare l'applicazione senza tempi di inattività. Utilizza Oracle Data Safe per implementare e valutare i controlli di sicurezza, mascherare i dati riservati e gli accessi ai dati di audit. Utilizza Oracle Data Guard come cache di lettura altamente scalabile per i tuoi dati e per mantenere un backup coerente per il recupero da errori irreversibili.
Oracle Autonomous Database esegue attività operative senza alcun impatto o interruzione del suo carico di lavoro. Ciò significa che non è necessario aggiungere una logica di compensazione complessa all'applicazione per gestire gli scenari di ridimensionamento o di failover. Il database gestisce le risorse come la CPU e lo storage in modo indipendente e fornisce una scalabilità bidirezionale elastica..
Panoramica
Una singola richiesta utente può seguire un percorso complesso tra più servizi o microservizi che compongono un'applicazione moderna. Il tracing end-to-end segue il percorso di ogni richiesta dalla sua origine alla profondità dell'infrastruttura e ti aiuta a eseguire il debug della causa principale di un problema. Il monitoraggio viene generalmente utilizzato come strumento diagnostico e avvisa gli sviluppatori quando l'applicazione non funziona come previsto.
Gli sviluppatori, gli amministratori e i responsabili della sicurezza devono avere una comprensione autorevole e tempestiva dello stato di salute, delle prestazioni, dello stato operativo e dei possibili incidenti di sicurezza di un'applicazione. Tale comprensione garantisce che la funzione e le prestazioni di un'applicazione soddisfino le aspettative durante il suo ciclo di vita; inoltre semplifica la diagnosi degli incidenti e il ripristino delle applicazioni. Il monitoraggio e il tracing end-to-end completi devono essere semplici da implementare e gestire, senza aggiungere complessità alla tua app.
Dettagli chiave
L'applicazione non funziona come previsto in molti modi. Ad esempio, può funzionare male o non funzionare affatto. A differenza di un'applicazione monolitica tradizionale, un'applicazione creata da microservizi presenta ulteriori problemi diagnostici a causa delle molteplici interazioni tra i suoi componenti.
Il tracing è il modo migliore per comprendere rapidamente cosa accade a una richiesta utente durante il viaggio attraverso i microservizi e altri componenti,ad esempio l'infrastruttura, che compongono l'applicazione. Utilizza la funzione di tracing end-to-end per raccogliere i dati su ciascuna richiesta dell'utente, quindi esamina i dati per verificare la posizione in cui l'applicazione potrebbe stare sperimentando colli di bottiglia o latenze. Ad esempio, una richiesta può fare la spola attraverso più microservizi prima di essere soddisfatta. Senza un modo per tracciare l'intero percorso di una richiesta, non c'è modo di determinare la causa principale del suo fallimento.
Il monitoraggio è generalmente molto più diretto, migliorando la comprensione del comportamento dell'applicazione mediante lo strumento dell'applicazione e poi la raccolta, l'aggregazione e l'analisi dei parametri. Il monitoraggio end-to-end consente anche un'integrazione intelligente e automatizzata con strumenti per regolare dinamicamente la capacità delle risorse e coordinare le risposte agli eventi imprevisti.
Avere una comprensione chiara, accurata e tempestiva dello stato operativo e della storia di un'applicazione non significa solo misurare l'esperienza di un utente finale. Potrebbe inoltre essere necessario mantenere la compliance con le giurisdizioni regionali o nazionali, le quali potrebbero richiedere la possibilità di generare, su richiesta, report di attività dettagliati o attestati sulla gestione di specifici dati sensibili.
In generale, le soluzioni di monitoraggio devono essere compatibili con gli strumenti di terze parti e in linea con gli strumenti amministrativi dell'ambiente. È importante mantenere la flessibilità di progettazione ed evitare accordi lock-in con i fornitori.
Consigli Oracle
Crea funzionalità complete di monitoraggio e tracciabilità nella tua applicazione fin dall'inizio, mantenendole coerenti durante tutto il suo ciclo di vita. Le funzionalità non dovrebbero aggiungere complessità allo sviluppo, ai test e all'implementazione e dovrebbero essere facili da implementare e gestire. Ove possibile, adotta soluzioni che si estendono per soddisfare la diversità delle piattaforme attualmente utilizzate e che potrebbero essere implementate in futuro.
I servizi Oracle Cloud Infrastructure (OCI), come Monitoring, sono progettati per fornire supporto out-of-the-box per il monitoraggio. Inoltre, puoi estendere molti servizi OCI ai componenti della tua applicazione utilizzando un'esperienza di distribuzione e gestione coerente tramite API e SDK supportati. Ad esempio, puoi aggiungere la raccolta automatica delle metriche di monitoraggio o l'acquisizione dei log con lo storage centralizzato per tutte le tue macchine virtuali e applicazioni.
Durante lo sviluppo e il test, puoi configurare i servizi per raccogliere solo informazioni di base sul debug o sul test delle prestazioni. Quando la tua applicazione si avvicina alla distribuzione di produzione, aumenta l'ambito, la frequenza e la tracciabilità delle informazioni raccolte effettuando semplici aggiornamenti dei parametri di configurazione esistenti.
Oracle Cloud Infrastructure Service Mesh acquisisce automaticamente una vasta gamma di parametri e log di comunicazione per i servizi in esecuzione su Oracle Container Engine for Kubernetes. Puoi utilizzare questi dati per monitorare lo stato dei servizi nella rete e migliorare le prestazioni delle applicazioni.
Utilizza una raccolta dei dati solida e centralizzata per l'intero ambiente della tenancy cloud in modo da fornire una singola posizione per l'analisi, l'indagine coordinata e la generazione di alert. Service Connector Hub consente risposte flessibili, coerenti e personalizzabili agli eventi. OCI Logging Analytics consente l'analisi e l'indagine efficienti su tutti i sistemi di log degli eventi cloud (e quelli esterni). Inoltre, puoi utilizzare OCI Service Connector Hub, Functions e Notifications per trasformare i parametri e i log inclusi in alert da cui è possibile intraprendere azioni. Puoi anche trarre vantaggio dalle nostre integrazioni con prodotti e servizi di terze parti, come Splunk e Grafana.
I seguenti servizi OCI consentono di potenziare i log, il monitoraggio e il tracciamento negli ambienti che ospitano le applicazioni: Logging, Monitoring, Logging Analytics, Application Performance Monitoring, OS Management, Database Management e Java Management Service. Questi servizi completamente gestiti sono integrati con le risorse comuni dell'infrastruttura OCI e forniscono meccanismi supportati per l'integrazione delle risorse personalizzate dell'applicazione.
Panoramica
Un punto di errore è un componente di un'applicazione che, in caso di errore, rende l'intera applicazione non disponibile o inaffidabile. Quando si sviluppa un'applicazione ad alta disponibilità e affidabilità, utilizza la replica dei dati automatizzata per garantire che il guasto di un singolo componente non comporti la perdita dei dati.
La replica dei dati tra i vari computer e l'uso del networking ridondante proteggono dagli errori di routine dei computer e della rete. La replica dei dati nei data center (o "domini di disponibilità") in più aree geografiche ti protegge da disastri localizzati, come incendi, terremoti, inondazioni o uragani.
Dettagli chiave
Affinché la tua applicazione raggiunga l'alta disponibilità, è necessario assicurarsi che i dati da cui dipende l'applicazione rimangano disponibili quando si verificano errori. Il segreto per l'alta disponibilità dei dati è la ridondanza tramite la replica automatizzata dei dati.
La replica è il processo di copia e gestione degli oggetti di database, ad esempio le tabelle, in più database che costituiscono un sistema di database distribuito. Le modifiche applicate in un sito vengono acquisite e memorizzate localmente prima di essere inoltrate e applicate in ciascuna replica situata in luoghi in remoto.
I database replicati possono funzionare in due modalità diverse: attivo-passivo e attivo-attivo. In modalità attivo-passivo, è presente una singola replica primaria e una o più repliche secondarie; solo la replica primaria partecipa all'elaborazione dei dati dell'applicazione. In modalità attiva-attiva tutte le repliche partecipano all'elaborazione dei dati. La modalità attiva-attiva garantisce un migliore utilizzo delle risorse e una maggiore disponibilità in quanto non è necessario un failover primario-secondario.
La ridondanza garantisce che le repliche dei dati non funzionino in modo indipendente. Gli errori del computer o del disco sono in genere indipendenti, ma un guasto alla rete o all'alimentazione potrebbe causare il guasto simultaneo di un gruppo di computer. Per proteggersi da tali incidenti, l'infrastruttura di rete e l'infrastruttura di alimentazione devono anche essere ridondanti e le repliche dei dati devono essere posizionate attentamente tra macchine e luoghi diversi che non possono guastarsi insieme.
Consigli Oracle
I data center OCI sono progettati con attenzione per eliminare singoli punti di guasto irreversibile. Un data center tipico o dominio di disponibilità contengono più unità guasti indipendenti, note come domini di errore. Due domini di errore indipendenti non possono guastarsi insieme. In modo analogo, una singola area può disporre di più domini di disponibilità, separati geograficamente per impedire che due di essi possano guastarsi contemporaneamente.
Utilizza i servizi di storage OCI quali Block Volumes, Object Storage e File Storage, per replicare i dati tra i domini di errore e disponibilità, in modo che nessun singolo errore possa influire sulla disponibilità dei dati della tua applicazione. Sfrutta l'isolamento degli errori resiliente integrato in OCI utilizzando Container Engine for Kubernetes per implementare l'applicazione su più domini di errore e disponibilità. Oracle Autonomous Database, Data Guard e GoldenGate offrono la replica di hardware e software attiva-attiva per l'alta disponibilità e l'applicazione di patch e aggiornamenti senza tempi di inattività. Utilizza questi servizi gestiti per dati ad alta disponibilità evitando di dover creare e gestire la tua infrastruttura di storage.
Panoramica
La difesa avanzata è un approccio in cui più controlli di sicurezza indipendenti e ridondanti fungono da livelli di difesa per un'applicazione. I livelli sono progettati per garantire la sicurezza anche se uno di essi non fallisce, ad esempio, un firewall combinato con il rilevamento delle intrusioni.
Tuttavia, la gestione e la configurazione manuale dei controlli di sicurezza possono essere complesse, opache e soggette a errori, individuali e collettivi. Proteggi invece l'applicazione e i suoi dati mediante controlli di sicurezza automatizzati.
Dettagli chiave
La difesa approfondita gestisce i rischi utilizzando controlli diversi che coprono gli elementi fisici, tecnici, amministrativi, operativi, personale e procedurali della sicurezza. La loro indipendenza implica il fatto che forniscono una difesa profonda che gestisce i guasti, gli exploit o altre vulnerabilità della sicurezza. I controlli sono progettati per affrontare i rischi in modi diversi e fornire log, audit e altre funzioni per garantire che i tentativi di violazione della sicurezza vengano rilevati e segnalati agli stakeholder appropriati.
Anziché configurare manualmente un set complesso di controlli di sicurezza, utilizza i controlli automatizzati semplici e prescrittivi per proteggere l'applicazione. I controlli di sicurezza automatizzati eliminano l'errore umano (la causa principale di molti incidenti di sicurezza) e ti aiutano a proteggere le tue applicazioni e i tuoi dati senza dover diventare un esperto di sicurezza.
Consigli Oracle
Implementa controlli di sicurezza automatici facili da usare in tutte le fasi del ciclo di vita dell'applicazione, inclusi sviluppo, creazione, test, implementazione e runtime. Verifica gli utenti, le autorizzazioni e i criteri di accesso in ogni fase del ciclo di vita e garantisci che l'accesso venga concesso solo quando necessario. Rileva problemi di sicurezza introdotti all'inizio del ciclo di vita dello sviluppo software. Il rilevamento preventivo garantisce che la tua applicazione venga implementata in produzione con best practice dell'architettura di sicurezza e che vengano rilevati e attenuati i problemi di sicurezza operativa causati da configurazioni errate o vulnerabilità rilevate.
OCI offre diversi servizi di sicurezza automatizzati per proteggere le tue app e i suoi dati. Ecco alcuni suggerimenti per l'uso dei servizi OCI: