Het is lastig om goede moderne applicaties te verkrijgen. De tools, beperkingen en mogelijkheden veranderen namelijk zeer snel. Het framework van Oracle voor applicatieontwikkeling vereenvoudigt de besluitvorming op het gebied van architectuur zodat u applicaties kunt ontwikkelen en uitvoeren die optimaal beschikbaar, veerkrachtig, volledig veilig en compliant zijn door gebruik te maken van een set ontwerpprincipes en technologie-aanbevelingen.
Weet u al waar u naar op zoek bent? Ga direct naar onze architectuurbibliotheek. Bekijk de referentieapplicatie voor meer informatie over de principes en patronen voor het ontwikkelen van moderne apps.
Algemene vereisten die op elke moderne applicatie van toepassing zijn
Stem het beveiligingsbeleid af op de beste werkwijzen in de branche en dwing deze af in alle lagen van de applicatiestack. Waarborg de vertrouwelijkheid en integriteit van data. Gebruik toegangsrechtenbeheer om te bepalen en te beheren wie bepaalde taken mag uitvoeren. Maak het detecteren en diagnosticeren van beveiligingsvoorvallen eenvoudig.
Zorg ervoor dat applicaties het hele jaar door, dag en nacht beschikbaar zijn zonder downtime (al dan niet gepland).
Schaal op van tientallen naar duizenden naar zelfs miljoenen gebruikers en verwerk steeds grotere hoeveelheden data, zonder dat u de applicatie in de toekomst opnieuw hoeft te ontwerpen.
Zorg voor de laagste latentie en de hoogste doorvoer en lever zo de best mogelijke gebruikerservaring.
Vertrouw op moderne automatiseringstools en -methoden voor bouw- en implementatieprocessen. Vermijd knelpunten als gevolg van de noodzaak om handmatige taken uit te voeren.
Leg prestatiedata vast en monitor systeemprestaties op eventuele achteruitgang. Bied teams de mogelijkheid van automatische waarschuwingen wanneer deze meetwaarden buiten de verwachte grenzen vallen.
Wanneer er problemen optreden, moet u ervoor zorgen dat applicaties zich probleemloos herstellen, de verloren functionaliteit snel terugkeert, dataverlies wordt voorkomen en de gebruikerservaring niet negatief wordt beïnvloed.
Werk tegen zo laag mogelijke totale kosten en zorg voor een goede balans tussen alle andere vereisten.
Zorg ervoor dat de architectuur van applicaties voldoet aan open standaarden, zodat migratie van on-premises naar de cloud of van de ene leverancier naar de andere eenvoudiger wordt.
Best practices voor applicatiearchitecturen
Alles openen Alles sluiten
Overzicht
De programmeertalen en frameworks die u gebruikt om uw applicatie te bouwen, spelen een cruciale rol bij de succesvolle oplevering en het onderhoud van uw applicatie na verloop van tijd. De keuze die u maakt ten aanzien van de taal en het framework, heeft op lange termijn gevolgen voor de manier waarop u uw bedrijf schaalt, uw applicatie gebruikt en hoogwaardige functies levert aan uw klanten. Veranderingen in taal of framework zijn over het algemeen prijzig. Als u parallelle ecosystemen voor meerdere talen en frameworks ondersteunt, wordt de applicatie complexer en minder flexibel.
De keuze van de taal en het framework is van invloed op een reeks factoren, waaronder afleversnelheid, stabiliteit en kracht van het bestaande ecosysteem, operationele beschikbaarheid en productieprestaties. Gebruik waar mogelijk platforms met weinig code, zodat u zich kunt richten op het oplossen van uw bedrijfsproblemen en niet wordt geconfronteerd met de complicaties van traditionele ontwikkelmethoden. Als de vereisten voor uw applicatie complexer zijn, kies dan voor ontwikkelde talen en lichtgewicht frameworks.
Belangrijkste details
Als u platforms met weinig code gebruikt, kunt u zakelijke applicaties sneller bouwen, testen en implementeren dan wanneer u handmatig programmeert op de traditionele manier. Deze platforms zijn zeer geschikt voor het bouwen van opportunistische applicaties in samenwerking met zakelijke belanghebbenden en voor het bouwen van applicaties voor datarapportages en -analyses. Met low-code platforms kunt u ook SaaS-apps uitbreiden en verouderde apps moderniseren. Met deze aanpak vermijdt u complicaties wanneer u nieuwe mogelijkheden wilt toevoegen, zoals datavisualisatie, dataverzameling, data-analyse, beveiliging, toegankelijkheid, prestaties en globalisering. Een platform met weinig code vermindert deze complexiteit aanzienlijk en zorgt voor een drastische vermindering van de hoeveelheid code die u moet onderhouden.
Als u echter een applicatie wilt maken met geavanceerdere mogelijkheden, kies dan voor een volwassen programmeertaal in combinatie met een lichtgewicht framework. Kies een programmeertaal die u belangrijke voordelen biedt, zoals:
Nieuwere talen hebben doorgaans een hogere wijzigingssnelheid in het taalontwerp en het bijbehorende ecosysteem en de bibliotheken. Een hogere wijzigingssnelheid betekent dat het moeilijker is om risico's in te schatten en dat het duurder is om wijzigingen door te voeren.
Wanneer u een framework kiest, kies dan voor een open-sourceframework. Open-sourceframeworks worden voortdurend door collega's beoordeeld, wat inhoudt dat de functies nauw aansluiten bij de wensen van de meeste ontwikkelaars, omdat deze bijdragen aan het maken en onderhouden van frameworks. Bugs worden snel opgespoord en gerepareerd. U wilt uiteraard ook een lichtgewicht framework dat weinig resources (CPU, geheugen, netwerkbandbreedte of bestandsingangen) gebruikt.
Gebruik een applicatieframework dat een goede balans biedt tussen het verbeteren van de taakgerichtheid (bedrijfslogica vóór standaardtekst en scaffolding) en de flexibiliteit (zodat u huidige en toekomstige behoeften aan functies kunt ondersteunen). Kies voor een framework dat gebruiksvriendelijke, betrouwbare en niet-controversiële standaardwaarden biedt voor veelvoorkomende functies, zoals loggen, telemetrie, beveiliging, configuratie, en voor veelvoorkomende patronen, zoals het bouwen van REST-API's.
Aanbevelingen van Oracle
Oracle APEX is een platform met weinig code dat u hoogwaardige componenten biedt, zoals formulieren, grafieken en widgets voor de gebruikersinterface. APEX biedt ook gemeenschappelijke ontwerppatronen via een intuïtieve grafische ontwikkelomgeving. Applicaties die met APEX zijn ontwikkeld, hebben toegang tot lokale data via SQL en kunnen integreren met externe services via REST-API's. Bovendien kunt u de functionaliteit die u in APEX ontwikkelt, ook publiceren als REST-API's voor extern gebruik.
Als een platform met weinig code niet geschikt is voor uw app, kies dan Java als programmeertaal. Java biedt een stabiele en brede combinatie van mogelijkheden voor de meest voorkomende gebruiksscenario's van applicaties en heeft een gezond ecosysteem van betrouwbare en stabiele bibliotheken en frameworks voor het ontwikkelen van moderne applicaties. De nadruk bij Java ligt op eenvoud en leesbaarheid in combinatie met een uitstekende ondersteuning voor ontwikkelaarstools, waaronder statische analysetools en testframeworks. Hierdoor worden de kosten voor softwareonderhoud en het risico op bugs in productieapplicaties verlaagd.
Gebruik GraalVM om uw applicatie te ontwikkelen en uit te voeren. GraalVM is een JDK-distributie die de stabiliteit van Java koppelt aan de allerbeste prestaties door middel van dynamische runtimeoptimalisatie, frequente en proactieve patching van zwakke plekken in de beveiliging, en goedkope prestatieanalyses en diagnostische tools, zoals Java Flight Recorder.
Hanteer bij het bouwen van uw applicatie een 'API-first'-benadering met behulp van Graal Cloud Native of het Helidon-framework. Beide benaderingen bieden scaffolding, dat de tijd voor het opleveren van uw applicatie aanzienlijk verkort, evenals gebruiksvriendelijke patronen voor veel voorkomende gebruiksscenario's, zoals REST-API's, gebaseerd op een set van eenvoudige, niet-controversiële frameworkkeuzes voor veel voorkomende activiteiten zoals logging, telemetrie en opslag. Beide benaderingen ondersteunen daarnaast hoogwaardige services doordat ze niet-blokkerende I/O ondersteunen met idiomatische, reactieve API's, en lage latentie door ondersteuning van krachtige netwerkbibliotheken.
Helidon en GCN hebben beide ingebouwde ondersteuning voor native images van GraalVM, zodat u geheugenefficiënte en compacte applicaties kunt bouwen.
Overzicht
Splits de functies of taken van uw applicatie op in onafhankelijke losgekoppelde services die met elkaar samenwerken. Ontwerp elke service met een beperkt functioneel bereik dat is gericht op één functie of functionaliteit. In vergelijking met een traditionele monolithische architectuur resulteert deze aanpak in een verbetering van het onderhoud, de ontwikkeling, het testen, de implementatie en de schaalbaarheid van de app.
Kies voor een 'contract-first'-benadering van het REST-API-ontwerp om duidelijke en begrijpelijke interfaces te bieden voor communicatie met en tussen services. Een API-contract biedt het mechanisme dat teams nodig hebben om te kunnen samenwerken en functionaliteit te kunnen gebruiken zonder afhankelijk te zijn van de interne details van de implementatie van een service. Een service kan bijvoorbeeld volledig eigendom zijn van een ontwikkelteam dat de implementatie ervan naar eigen inzicht kan verbeteren zonder codeafhankelijkheden te hoeven coördineren met andere ontwikkelteams.
Belangrijkste details
Start met een 'contract-first'-benadering door de REST-API van een service te specificeren. Maak vervolgens een prototype van een implementatie van de API om uw belanghebbenden, zoals de teams die het gaan gebruiken, dit te laten uitproberen. Wanneer iedereen het eens is over de details van de API, kunnen onafhankelijke teams parallel gaan werken aan de implementatie van de service en andere services die de service gaan gebruiken.
Definieer uw beleidshandhaving met betrekking tot beveiliging en SLA's (Service Level Agreements) vroeg in de productlevenscyclus om er zeker van te zijn dat alle aspecten van het servicecontract voor iedereen duidelijk zijn.
Beschouw uw API-specificatie als code en beheer deze in een versiebeheersysteem, samen met uw broncode en beleidsconfiguraties.
Aanbevelingen van Oracle
Specificeer uw API met behulp van de implementatieonafhankelijke indeling OpenAPI en sla deze op in een repository die wordt geleverd door Oracle Cloud Infrastructure (OCI) DevOps.
Implementeer uw services met behulp van een lichtgewicht open-source benadering, zoals Graal Cloud Native of Helidon.
Implementeer uw services op een serverloos platform, zoals Oracle Container Engine for Kubernetes of Oracle Functions, met het oog op implementatiegemak, schaalbaarheid en kostenefficiëntie.
Gebruik Oracle Cloud Infrastructure API Gateway om beschermde en beheerde privé- of openbare eindpunten te maken op basis van de API-specificatie.
Gebruik Oracle Cloud Infrastructure Service Mesh voor het vereenvoudigen en beveiligen van de communicatie tussen services die in uw Oracle Container Engine for Kubernetes cluster worden gehost. Met OCI Service Mesh kunt u bovendien al het netwerkverkeer tussen uw services observeren aan de hand van metrics en logs die worden gegenereerd door de proxycomponent die naast de applicatiepods wordt uitgevoerd.
Overzicht
Met containers kunnen ontwikkelaars code en alle bijbehorende afhankelijkheden verpakken in één eenheid, zodat een applicatie snel en betrouwbaar draait op meerdere computingomgevingen. Een containerimage is een bestand dat, wanneer het wordt uitgevoerd, een container maakt en start in een computingomgeving.
Containers zijn in vergelijking met traditionele virtuele machines kleiner, vereisen minder resources en hebben een snellere starttijd. Ze zijn ook platformonafhankelijk en kunnen applicaties overal uitvoeren. Als u van deze voordelen wilt profiteren, moet u uw applicatie ontleden in services die elk een afzonderlijke bedrijfsfunctie uitvoeren en elke service in een container verpakken. Bij verouderde applicaties vervangt u geleidelijk alle bestaande functies in uw applicatie door een in een container geplaatste service, totdat de hele applicatie is geherstructureerd.
Belangrijkste details
Het verpakken van applicatiecode en afhankelijkheden in één uitvoerbare eenheid (een containerimage) betekent dat een container uiterst overdraagbaar is. Doordat containers deze overdraagbaarheid combineren met infrastructurele abstractie, zorgen ze voor operationele consistentie van uw app. Of uw applicatie nu on-premises op een fysieke server of in de cloud op een virtuele machine draait, hij geeft elke keer dezelfde resultaten.
Deze consistente reproduceerbaarheid en voorspelbaarheid helpen containers bij het vereenvoudigen van DevOps-processen, zodat uw ontwikkelteams uw applicaties sneller kunnen implementeren. Dankzij de isolatie op procesniveau en doordat ze vaak worden vervangen, vereenvoudigen en versnellen containers de processen die gepaard gaan met het verhelpen van zwakke plekken in de software. Het opsplitsen van applicaties in modulaire containerservices maakt ze ook zeer robuust. Wanneer er een fout of storing optreedt in een afzonderlijke service, gaat niet de hele applicatie plat, en u kunt elke service onafhankelijk van de rest van de applicatie updaten of patchen.
In tegenstelling tot een virtuele machine heeft een container geen eigen besturingssysteem; een container deelt het besturingssysteem met zijn host. Daardoor zijn containers kleiner in omvang en starten ze sneller op dan virtuele machines. De meeste containerimages zijn tientallen megabytes groot, terwijl virtuele machines meerdere gigabytes groot kunnen zijn. De opstarttijd van containerimages bedraagt enkele seconden, terwijl het opstarten van virtuele machines minuten duurt.
De beste manier om uw applicatie te draaien en te schalen met behulp van modulaire diensten in containers, is door één service per container te implementeren. Met deze aanpak worden services van elkaar geïsoleerd, wat downtime voorkomt en onafhankelijke schaling voor elke service mogelijk maakt.
Hoewel u containers handmatig kunt implementeren, is het beter om containerbeheersoftware te gebruiken die integreert met uw tools voor continue integratie (CI, Continuous Integration) en continue implementatie (CD, Continuous Deployment).
Aanbevelingen van Oracle
Gebruik Oracle Cloud Infrastructure Registry (Container Registry) voor het opslaan van uw containerimages en Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) voor het uitvoeren en beheren van uw containers. Deze volledig beheerde services zijn nauw geïntegreerd met de mogelijkheden van het OCI-platform, zijn beschikbaar in alle Oracle Cloud regio's en voldoen aan regelgevingsstandaarden zoals PCI, ISO, SOC, HIPAA en FedRAMP.
Naast het opslaan van containerimages in Container Registry, kunt u ook manifestlijsten (soms 'multi-architecture images' genoemd) opslaan om meerdere architecturen te ondersteunen, zoals ARM en AMD64. Schakel het scannen van images in voor alle images die naar Container Registry worden geüpload, om potentiële zwakke plekken in de beveiliging te identificeren en te verhelpen. U dient ook uw containerimages te ondertekenen om er zeker van te zijn dat er alleen geautoriseerde en betrouwbare images in OKE worden geïmplementeerd.
Overzicht
Continue integratie (CI, Continuous Integration) en continue implementatie (CD, Continuous Deployment) zijn sets met tools en procedures die door ontwikkelteams worden gebruikt om codewijzigingen frequent en betrouwbaar op te leveren. Best practices op het gebied van CI/CD omvatten beoordelingen van code, begeleiding bij het testen van eenheden, integratietests, het inchecken van code, het aanmaken van tickets en het implementeren van applicaties in ontwikkel- en testomgevingen.
Continue integratie (CI) verwijst naar een praktijk waarbij ontwikkelaars regelmatig hun codewijzigingen integreren in de hoofdvertakking van een gedeelde repository. De wijzigingen van de ontwikkelaars worden gevalideerd door een build te maken en vervolgens geautomatiseerde tests op die build uit te voeren. De tests zorgen ervoor dat uw applicatie niet defect raakt wanneer nieuwe wijzigingen in de hoofdvertakking worden geïntegreerd.
Enkele voordelen van continue integratie (CI) zijn:
Continue levering gaat een stap verder dan continue integratie: nadat een build de vereiste tests heeft doorstaan, wordt deze automatisch afgeleverd in een test- en/of productieomgeving. Het doel van continue levering is om altijd een codebase klaar te hebben voor implementatie naar een productieomgeving van de klant.
Continue levering biedt onder meer de volgende extra voordelen:
Continue implementatie (CD) gaat nog een stap verder dan continue levering. Elke wijziging die alle tests doorstaat, wordt automatisch geïmplementeerd in de productieomgeving van uw klant. Er komt geen mens aan te pas – alleen een mislukte test kan voorkomen dat een nieuwe wijziging wordt uitgerold naar de productieomgeving. Omdat er geen menselijke tussenkomst is, is continue implementatie sterk afhankelijk van goed ontworpen testautomatisering.
Continue implementatie biedt onder meer de volgende extra voordelen:
CI/CD biedt best practices voor het opslaan, integreren, implementeren en onderhouden van code om de manier waarop u uw applicaties bouwt te automatiseren. Deze best practices omvatten het volgende:
Aanbevelingen van Oracle
Gebruik de DevOps-service om de implementatie van uw cloud-native applicaties te automatiseren. Sla eerst de code op in een DevOps-coderepository en maak een releasevertakking. Breng in kleine stappen wijzigingen aan in de releasevertakking en los problemen in de vertakking dagelijks op om de stabiliteit ervan te garanderen. Gebruik vervolgens de triggerfunctionaliteit in de coderepository om automatisch een DevOps-buildpijplijn te starten.
Gebruik één DevOps-buildpijplijn om alle artefacten te bouwen die aan de coderepository zijn gekoppeld. Als de build mislukt, configureer de buildpijplijn dan zodanig dat op goedkeuring wordt gewacht voordat deze wordt voltooid. Het goedkeuringsverzoek moet naar de vastlegger gaan die de build heeft gestart. Deze moet het probleem oplossen met een nieuwe codevastlegging en vervolgens de voltooiing van de build goedkeuren. Om een build succesvol te laten verlopen, moet u de buildpijplijn zodanig configureren dat de artefacten automatisch worden afgeleverd bij de Oracle Cloud Infrastructure Artifacts Registry service en er automatisch een DevOps-implementatiepijplijn wordt geactiveerd.
Voeg Application Dependency Management toe om zwakke plekken in de beveiliging van applicatieafhankelijkheden te detecteren tijdens een buildfase in een OCI DevOps-buildpijplijn. Op deze manier kunt u potentiële beveiligingsproblemen detecteren en herstellen zodra ze bekend zijn.
Gebruik Resource Manager om al uw infrastructuuromgevingen in een maximaal beveiligde zone te maken en automatisch te profiteren van de implementatiebeveiliging. Met behulp van Resource Manager kunt u de infrastructuur als code gebruiken om het maken van infrastructuur in al uw regio's op een consistente manier te automatiseren. Vervolgens kunt u de DevOps-implementatiepijplijn zo configureren dat deze altijd wordt geïmplementeerd naar de resources die u in de beveiligingszone hebt gemaakt.
Maak één DevOps-implementatiepijplijn waarmee u alle artefacten kunt implementeren die zijn gemaakt op basis van één buildpijplijn. Rangschik implementatieomgevingen, zoals de OCI-regio, het beschikbaarheidsdomein en het foutdomein. Configureer de pijplijn middels een strategie voor een canary-, voortschrijdende of blue-green-implementatie. U kunt de pijplijn ook zodanig configureren dat tests automatisch worden geactiveerd. Schakel OCI Monitoring en Application Performance Monitoring in voor uw applicatie en infrastructuur om problemen op te sporen.
Als er geen problemen worden gedetecteerd en de tests succesvol worden afgerond, kunt u de implementatiepijplijn configureren zodat de artefacten automatisch naar de volgende omgeving in de implementatiestrategie worden geïmplementeerd totdat alle artefacten volledig zijn geïmplementeerd in alle productieomgevingen. Zorg er tijdens de implementatie naar de productieomgeving voor dat u de pijplijn zodanig configureert dat alle foutdomeinen één voor één worden geïmplementeerd in een beschikbaarheidsdomein. Voer één implementatie tegelijk uit naar elk beschikbaarheidsdomein per regio en doe dit vervolgens één voor één naar elke regio. Blijf gebruikmaken van OCI Monitoring en Application Performance Monitoring voor de applicatie en de infrastructuur om problemen sneller op te sporen. Stel waarschuwingen in zodat de implementatie automatisch mislukt als tijdens de implementatie belangrijke metrics plotseling dalen. Activeer in zo'n situatie een herstel naar de vorige versie.
Overzicht
Een beheerde service biedt specifieke functionaliteit zonder dat u onderhoudstaken hoeft uit te voeren met betrekking tot het optimaliseren van prestaties, beschikbaarheid, schaling, beveiliging of upgrades. Met een beheerde service kunt u zich concentreren op het leveren van functies voor uw klanten en hoeft u zich niet druk te maken over de complexiteit van de bewerkingen.
Een beheerde OCI-service biedt een schaalbare en veilige component voor cloud-native ontwikkeling. Gebruik beheerde services om uw applicatie te ontwikkelen en uit te voeren en de data ervan op te slaan. U profiteert van eersteklas oplossingen zonder dat u expertise in elk domein nodig hebt om uw applicatie te bouwen en uit te voeren.
Belangrijkste details
Met beheerde services kunt u zeer toegankelijke, schaalbare, flexibele en krachtige applicaties maken die voldoen aan beveiligings- en nalevingsvereisten en beschikken over herstelvermogen.
Beheerde services maken de onderliggende componenten van uw applicatie minder complex, waardoor het eenvoudig wordt om data op te slaan en op te halen of een applicatie te maken en deze uit te voeren. De services integreren met toolsets voor het geautomatiseerd bouwen, testen en implementeren van uw app. Beheerde services verbeteren de productiviteit en verkorten de marktintroductietijd.
Beheerde services centraliseren en automatiseren verschillende infrastructuurbeheertaken, waardoor menselijke fouten en de behoefte aan specialistische vaardigheden worden weggenomen. De onderliggende infrastructuur wordt up-to-date en veilig gehouden, en de services maken het mogelijk wijzigingen of toegang te monitoren en bij te houden, waardoor de vertrouwelijkheid en integriteit van uw applicatie en uw data wordt gewaarborgd.
Beheerde services zijn uitermate beschikbaar en schaalbaar en voldoen aan de behoeften van uw app. Bovendien betaalt u alleen voor wat u gebruikt. U kunt klein beginnen en opschalen zonder dat de prestaties of de betrouwbaarheid afnemen.
Aanbevelingen van Oracle
Wij raden de volgende cloudservices aan:
Deze services zijn zeer goed beschikbaar, leveren hoge prestaties en zijn flexibel. De onderliggende infrastructuur wordt beheerd en gepatcht om de voortdurende veiligheid van uw applicatie te waarborgen.
Overzicht
De status van een applicatie kan uit allerlei elementen bestaan, zoals datacaches, de voorkeuren van een gebruiker, gepersonaliseerde instellingen, berichten die tussen services worden uitgewisseld, de positie in een workflow die uit meerdere stappen bestaat, de implementatie van de applicatie, runtimeconfiguratie en de sessie van een gebruiker (bijvoorbeeld de pagina die een gebruiker het laatst heeft bezocht of de grootte van en de items in de winkelwagen van een gebruiker). Als de status van uw applicatie verloren gaat, kan dit leiden tot verlies van data, een storing in uw applicatie, een suboptimale gebruikerservaring en soms zelfs tot volledige uitval van uw applicatie.
Als u de status van uw applicatie opslaat op een lokaal bestandssysteem of in het geheugen van één host, dan kan deze verloren gaan als uw applicatie te maken krijgt met een storing, zoals een herstart of een lokale schijfstoring. Sla de status daarom liever op externe persistentieopslagplaatsen op. Gebruik echter zo weinig mogelijk persistentieopslagplaatsen; idealiter slechts één om dataconsistentie te bieden.
Belangrijkste details
De elementen van de status van een applicatie worden traditioneel opgeslagen als meerdere artefacten in verschillende indelingen, zoals geserialiseerde objecten, JSON- of XML-documenten of tekstbestanden. Als deze elementen worden opgeslagen op meerdere persistentieopslagplaatsen, zoals externe bestandssystemen, berichtenopslagplaatsen, objectopslagplaatsen, meerdere databases of flexibele blokopslag, dan kan het gebeuren dat de verschillende dataopslagplaatsen niet meer synchroon lopen met inconsistenties in de status tot gevolg. Een applicatie moet ook transacties, joins en idempotentie implementeren om dataconsistentie te garanderen wanneer de status als een eenheid moet worden bijgewerkt.
Door elementen van de status van een applicatie over meerdere opslagplaatsen te verspreiden, neemt de kans op zwakke plekken in de beveiliging toe. Levenscyclusbewerkingen – zoals het toevoegen en verwijderen van nodes, patchen, back-up en herstel en replicatie voor calamiteiten en herstel – worden hierdoor extreem complex en vereisen speciale aandacht, zodat de consistentie van de status in de verschillende opslagplaatsen behouden blijft.
Het is daarom beter om, indien mogelijk, de status en data van de applicatie in één database op te slaan. Data blijft consistent wanneer het in één opslag is opgeslagen en is bovendien eenvoudiger te beheren. Met deze aanpak is het mogelijk om applicatie-instances te vervangen. Dit is vooral nuttig bij moderne applicatie-architecturen, zoals flexibele microservices of vluchtige instances waarbij een instance alleen bestaat voor het uitvoeren van één of enkele aanvragen. Het toevoegen van een node wordt eenvoudiger omdat een nieuwe node de laatste kopie van de status kan krijgen. Het weghalen van een node leidt niet tot volledig verlies van de status. U kunt doorlopend patches aanbrengen door simpelweg de uitvoerbare bestanden te vervangen. Een node kan vanuit back-ups worden hersteld en krijgt een status vanuit de database. De status kan consequent als een eenheid worden gerepliceerd naar verschillende regio's voor herstel na een calamiteit. Met een consistente status in verschillende regio's voorkomt u dat er functionele problemen optreden in uw applicatie na een failover of overschakeling.
Aanbevelingen van Oracle
Als uw applicatie een database gebruikt, gebruik dan dezelfde database om de status op te slaan. Een database biedt betere beschikbaarheid, integriteit en beveiliging dan alternatieve opties, zoals bestanden of in-memory representaties. Gebruik idealiter een multi-model database (die verschillende indelingen kan opslaan) om alle elementen van de status van uw applicatie op te slaan. Door gebruik te maken van een multi-model database in plaats van meerdere single-purpose dataopslagplaatsen, kunt u ook eenvoudiger consistentie bereiken en behouden tussen alle elementen van uw applicatiestatus. (Opmerking: hoewel het toegestaan is om de status 'In cache' op te slaan in de app, moet de applicatie zo zijn ontworpen dat deze de database gebruikt als de centrale databron en in staat is om de status opnieuw te genereren vanuit de database.) Oracle Database is ideaal geschikt voor dit doel. Hierin worden verschillende indelingen opgeslagen en het levert voorspelbare prestaties, dus het opslaan van de positie van uw applicatie in de database doet geen afbreuk aan de prestaties van de app.
Als uw applicatie geen database gebruikt, gebruik dan andere duurzame persistentieopslagplaatsen, zoals Oracle Cloud Infrastructure Object Storage, om de status op te slaan. Als de status van de applicatie niet in één dataopslag kan worden opgeslagen, ontwerp uw applicatie dan zo dat de status wordt opgeslagen in meerdere dataopslagplaatsen die synchroon kunnen worden gehouden en die na een storing als een consistente eenheid kunnen worden hersteld.
Hieronder vindt u enkele aanbevelingen voor het opslaan van de status in een Oracle Database.
Overzicht
Uw applicatie gebruikt mogelijk data in verschillende indelingen, zoals in tabelvorm (relationeel), ongestructureerd, XML, JSON, ruimtelijk of grafisch. In het verleden was voor deze verscheidenheid voor elke data-indeling een ander soort database nodig. Bijvoorbeeld een relationele database voor relationele data, een documentopslag voor ongestructureerde data of een grafiekdatabase voor hiërarchisch gekoppelde data. Het gebruik van meerdere databases leidt echter vaak tot extra operationele complexiteit en inconsistentie van data. Gebruik in plaats daarvan één multi-model database voor het opslaan, indexeren en doorzoeken van meerdere datatypen en -indelingen.
Maak gebruik van de databasefunctionaliteit om de logica van uw applicatie te vereenvoudigen. Gebruik bijvoorbeeld SQL voor query's, joins en analyses; gebruik transacties om consistentie en isolatie te garanderen; en gebruik ingebouwde machine learning-algoritmen en analysemogelijkheden om onnodige dataoverdracht te voorkomen. Maak gebruik van de beveiligingsfuncties en toegangscontrole van de database om gevoelige data te beschermen, en gebruik replicatie om de beschikbaarheid, schaalbaarheid en het herstelvermogen van uw applicaties te verbeteren.
Belangrijkste details
Gebruik een multi-model database om verschillende soorten data op te slaan, zoals JSON-documenten, eigenschapsgrafieken en relationele data. Geavanceerde multi-model databases bieden volledige ondersteuning voor elk type data dat in de database is opgeslagen. U kunt een nieuw JSON-document opslaan, relationele rijen invoegen en een eigenschapsgrafiek bijwerken, allemaal binnen dezelfde ACID-transactie. U kunt SQL-statements gebruiken om deze verschillende typen data samen te voegen, te filteren en te aggregeren. Dit zorgt voor de sterke consistentie- en gelijktijdigheidsgaranties die u gewend bent van relationele databases. Naast deze uitgebreide set van functies, kan een multi-model database ook worden gebruikt als een single-purpose dataopslag, die toegankelijk is via andere API's dan SQL, zoals REST-API's, documentopslag-API's, en grafiek-API's.
Een belangrijk voordeel van het gebruik van een multi-model database is de herbruikbaarheid. Hoewel data verschillende typen en vormen kunnen hebben, blijft de onderliggende technologie voor het beheren van die data onveranderd. Dit betekent dat u geen kennis van meerdere databasetechnologieën hoeft te hebben en niet hoeft te weten hoe u elke technologie voor elk type data moet gebruiken en afstemmen. En doordat de technologie hetzelfde blijft, hoeft u de code van uw applicatie niet te herschrijven. Bovendien verbetert een multi-model database het herstelvermogen van uw applicatie door datafragmentatie te verminderen, waardoor back-up en herstel eenvoudiger worden.
Aanbevelingen van Oracle
Maak voor het opslaan, beheren en analyseren van al uw data gebruik van Oracle Autonomous Database, een geconvergeerde, multi-model database. Vereenvoudig het onderhoud van uw applicatie door weergaven te gebruiken om de data in tabellen weer te geven, zodat het onderliggende schema kan worden gewijzigd zonder dat dit gevolgen heeft voor uw bestaande applicaties. Gebruik Edition-Based Redefinition zodat u uw applicatie kunt upgraden zonder downtime. Gebruik Oracle Data Safe om beveiligingscontroles te implementeren en te evalueren, gevoelige data te maskeren en toegang tot data te controleren. Gebruik Oracle Data Guard als een zeer schaalbare leescache voor uw data en voor het beheren van een consistente back-up voor herstel na calamiteiten.
Oracle Autonomous Database voert operationele taken uit zonder dat de workload wordt beïnvloed of onderbroken. Dit betekent dat u geen complexe compensatielogica aan de applicatie hoeft toe te voegen om schalings- of failover-scenario's uit te voeren. De database beheert resources, zoals CPU en opslag, onafhankelijk en biedt flexibele schaalbaarheid in twee richtingen.
Overzicht
Een aanvraag van een gebruiker doorloopt soms een complex traject door de verschillende services of microservices waaruit een moderne applicatie bestaat. Bij end-to-end tracering wordt het traject van elk verzoek vanaf de bron tot diep in de infrastructuur gevolgd. Dit helpt u bij het opsporen van de hoofdoorzaak van een probleem. Monitoring wordt over het algemeen gebruikt als een diagnostisch hulpmiddel, waarbij uw ontwikkelaars worden gewaarschuwd wanneer uw applicatie niet werkt zoals verwacht.
Ontwikkelaars, beheerders en beveiligingsmedewerkers moeten een helder en tijdig inzicht hebben in de werking, de prestaties, de operationele status en mogelijke beveiligingsincidenten van uw app. Dit inzicht zorgt ervoor dat de werking en prestaties van uw applicatie gedurende de levenscyclus aan de verwachtingen voldoen; ook kan het de diagnose van incidenten en applicatieherstel stroomlijnen. Het implementeren en beheren van uitgebreide end-to-end monitoring en tracering moet eenvoudig zijn, zonder dat uw applicatie hierdoor complexer wordt.
Belangrijkste details
Uw app kan zich niet op verschillende manieren gedragen, zoals wel wordt verwacht. De app kan bijvoorbeeld slecht presteren of gewoon helemaal niet werken. In tegenstelling tot een traditionele monolithische applicatie, biedt een applicatie die is opgebouwd uit microservices extra diagnostische uitdagingen vanwege de vele interacties tussen de componenten.
Tracering is de beste manier om snel duidelijk te krijgen wat er gebeurt met een aanvraag van een gebruiker wanneer deze wordt geleid door de microservices en andere componenten, zoals de infrastructuur, die deel uitmaken van uw app. Gebruik end-to-end tracering om data te verzamelen over elke gebruikersaanvraag en bekijk vervolgens de data om te zien waar uw applicatie te maken kan krijgen met knelpunten en vertragingen. Een aanvraag kan bijvoorbeeld door meerdere microservices heen en weer worden gestuurd voordat deze wordt uitgevoerd. Het gehele traject van een aanvraag moet worden getraceerd om de hoofdoorzaak van de storing te kunnen vaststellen.
Monitoring is over het algemeen veel gerichter. Het geeft een beter inzicht in hoe uw applicatie presteert door de applicatie uit te rusten met instrumenten en vervolgens statistieken te verzamelen, te aggregeren en te analyseren. End-to-end monitoring maakt ook intelligente en geautomatiseerde integratie met tools mogelijk die de resourcecapaciteit dynamisch aanpassen en reacties op onverwachte gebeurtenissen coördineren.
Een duidelijk, nauwkeurig en tijdig inzicht in de operationele status en geschiedenis van een applicatie heeft niet alleen betrekking op het meten van de ervaring van de eindgebruiker. Het kan ook zijn dat u moet voldoen aan regionale of nationale regelgeving die bepaalt dat u on-demand gedetailleerde activiteitenrapporten of attesten moet kunnen genereren over de manier waarop wordt omgegaan met specifieke, gevoelige data-elementen.
In het algemeen moeten monitoringoplossingen compatibel zijn met tools van derden en in het bijzonder afgestemd zijn op de administratieve tools in uw omgeving. Het is belangrijk om de ontwerpflexibiliteit te behouden en te voorkomen dat u afhankelijk bent van één leverancier.
Aanbevelingen van Oracle
Bouw vanaf het begin uitgebreide monitoring- en traceringsfuncties in uw applicatie in en houd deze consistent gedurende de gehele levenscyclus. Deze functies mogen ontwikkeling, tests en implementatie niet complexer maken en moeten eenvoudig te implementeren en beheren zijn. Kies waar mogelijk oplossingen die geschikt zijn voor de diversiteit aan platforms die u momenteel gebruikt en in de toekomst mogelijk gaat gebruiken.
OCI-services, zoals Monitoring, zijn ontworpen om kant-en-klare ondersteuning te bieden voor bewaking. Ook kunt u veel OCI-services uitbreiden naar uw applicatiecomponenten door gebruik te maken van een consistente implementatie- en beheerervaring via ondersteunde API's en SDK's. Zo kunt u bijvoorbeeld geautomatiseerde verzameling van monitoringstatistieken of logboekregistratie met gecentraliseerde opslag toevoegen voor al uw virtuele machines en applicaties.
Tijdens het ontwikkelen en testen kunt u services zo configureren dat ze alleen basisinformatie over foutopsporing of prestatietests verzamelen. Naarmate uw applicatie dichter bij de productiefase komt, kunt u het bereik, de frequentie en de traceerbaarheid van de verzamelde informatie vergroten door eenvoudige updates van bestaande configuratieparameters uit te voeren.
Met Oracle Cloud Infrastructure Service Mesh worden automatisch verschillende communicatiemetrics en logbestanden vastgelegd voor services die worden uitgevoerd in Oracle Container Engine for Kubernetes. U kunt deze data gebruiken om de status van uw services in de mesh bij te houden en de applicatieprestaties te verbeteren.
U kunt voor uw gehele cloudtenancyomgeving gebruikmaken van krachtige, gecentraliseerde dataverzameling om één enkele locatie te bieden voor analyse, gecoördineerd onderzoek en het genereren van waarschuwingen. Service Connector Hub maakt flexibele, consistente en aanpasbare reacties op gebeurtenissen mogelijk. Met OCI Logging Analytics kunt u efficiënte analyse en efficiënt onderzoek uitvoeren van al uw eventregistratiesystemen, zowel in de cloud als extern. U kunt ook gebruikmaken van OCI Service Connector Hub, Functions en Notifications om opgenomen metrics en logbestanden om te zetten in bruikbare meldingen. En natuurlijk kunt u profiteren van onze integraties met producten en services van derden, zoals Splunk en Grafana.
De volgende OCI-services helpen u bij het consolideren van uw logboekregistratie, monitoring en tracering in alle omgevingen waarin uw applicatie wordt gehost: Logging, Monitoring, Logging Analytics, Application Performance Monitoring, OS Management, Database Management en Java Management Service. Deze volledig beheerde services zijn geïntegreerd met gemeenschappelijke OCI-infrastructuurbronnen en bieden ondersteunde mechanismen om uw aangepaste applicatieresources te integreren.
Overzicht
Een single point of failure is één onderdeel van een applicatie dat, wanneer het uitvalt, uw hele applicatie inactief of onbetrouwbaar maakt. Wanneer u een applicatie ontwikkelt die optimaal beschikbaar en betrouwbaar moet zijn, kunt u het beste geautomatiseerde datareplicatie gebruiken om te voorkomen dat het falen van één onderdeel tot dataverlies leidt.
Datareplicatie tussen machines en het gebruik van redundante netwerken bieden bescherming tegen regelmatig voorkomende machine- en netwerkstoringen. Door uw data te repliceren in datacenters (of 'beschikbaarheidsdomeinen') in meerdere geografische regio's, bent u beschermd tegen plaatselijke calamiteiten, zoals branden, aardbevingen, overstromingen of orkanen.
Belangrijkste details
Wilt u dat uw applicatie in hoge mate beschikbaar is, dan moet u ervoor zorgen dat de data waarvan uw applicatie afhankelijk is, beschikbaar blijven als er storingen optreden. De sleutel tot een goede beschikbaarheid van data is redundantie via geautomatiseerde datareplicatie.
Replicatie is het proces van het kopiëren en onderhouden van databaseobjecten, zoals tabellen, in meerdere databases die samen een gedistribueerd databasesysteem vormen. Wijzigingen die op één locatie worden aangebracht, worden vastgelegd en lokaal opgeslagen voordat ze worden doorgestuurd en toegepast op elk van de replica's die zich op externe locaties bevinden.
Gerepliceerde databases kennen twee verschillende modi: actief-passief en actief-actief. In de actief-passieve modus is er één primaire replica en één of meer secundaire replica's; alleen de primaire replica neemt deel aan de verwerking van applicatiedata. In de actief-actieve modus nemen alle replica's deel aan de dataverwerking. De actief-actieve modus biedt een beter gebruik van resources en een betere beschikbaarheid omdat er geen primaire-secundaire failover nodig is.
Redundantie zorgt ervoor dat een storing in een datareplica niet van invloed is op andere datareplica's. Machine- of schijfstoringen zijn meestal onafhankelijk, maar een netwerk- of stroomstoring kan ertoe leiden dat een groep machines tegelijkertijd uitvalt. Om tegen dergelijke incidenten te beschermen, moeten netwerk- en stroominfrastructuur ook bestand zijn, en moeten datareplica's zorgvuldig worden geplaatst op verschillende machines en locaties die niet samen kunnen uitvallen.
Aanbevelingen van Oracle
OCI-datacenters zijn zorgvuldig ontworpen zodat er geen enkel single point of failure is met catastrofale gevolgen. Een doorsnee datacenter of beschikbaarheidsdomein bevat meerdere onafhankelijke storingseenheden die foutdomeinen worden genoemd. Twee onafhankelijke foutdomeinen kunnen niet gezamenlijk uitvallen. Ook kan een regio meerdere beschikbaarheidsdomeinen hebben die geografisch gescheiden zijn, zodat er geen twee tegelijk kunnen uitvallen.
Gebruik OCI-opslagservices, zoals blokvolumes, objectopslag en bestandsopslag, om data te repliceren in fout- en beschikbaarheidsdomeinen, zodat geen enkel single point of failure de beschikbaarheid van de data van uw applicatie kan beïnvloeden. Profiteer van de veerkrachtige foutisolatie die in OCI is ingebouwd en gebruik Container Engine for Kubernetes om uw applicatie te implementeren in meerdere fout- en beschikbaarheidsdomeinen. Oracle Autonomous Database, Data Guard en GoldenGate bieden actieve-actieve hardware- en softwarereplicatie voor optimale beschikbaarheid, evenals patches en upgrades zonder downtime. Gebruik deze beheerde services om uw data in hoge mate toegankelijk te maken zonder dat u uw eigen opslaginfrastructuur hoeft te bouwen en te onderhouden.
Overzicht
Defense-in-depth is een benadering waarbij meerdere onafhankelijke, redundante beveiligingscontroles fungeren als verdedigingslagen voor een applicatie. De verschillende lagen zijn ontworpen om beveiliging te bieden, zelfs als een van de lagen niet goed werkt, bijvoorbeeld een firewall gecombineerd met inbraakdetectie.
Het handmatig beheren en configureren van beveiligingscontroles kan echter complex, ondoorzichtig en foutgevoelig zijn, zowel afzonderlijk als collectief. Beveilig in plaats daarvan uw applicatie en de bijbehorende data door gebruik te maken van geautomatiseerde beveiligingscontroles.
Belangrijkste details
Defense-in-depth beheerst risico's door gebruik te maken van diverse controles die de fysieke, technische, administratieve, operationele, personele en procedurele elementen van beveiliging bestrijken. Dankzij hun onafhankelijkheid bieden deze controles een grondige bescherming tegen storingen, exploits of andere zwakke plekken in de beveiliging. De controles benaderen risico's op verschillende manieren en bieden logboekregistratie, audits en andere functies om ervoor te zorgen dat pogingen tot inbreuk op de beveiliging worden gedetecteerd en gemeld aan de juiste belanghebbenden.
In plaats van handmatig een reeks complexe beveiligingscontroles te moeten configureren, kunt u eenvoudige en vooraf gedefinieerde geautomatiseerde controles gebruiken om uw applicatie te beveiligen. Geautomatiseerde beveiligingscontroles voorkomen menselijke fouten (een hoofdoorzaak van veel beveiligingsincidenten) en helpen u uw applicatie en de bijbehorende data te beveiligen zonder dat u een beveiligingsexpert hoeft te worden.
Aanbevelingen van Oracle
Implementeer eenvoudig te gebruiken geautomatiseerde beveiligingscontroles in alle fasen van de levenscyclus van uw applicatie, waaronder ontwikkeling, bouwen, testen, implementatie en runtime. Verifieer gebruikers, machtigingen en toegangsbeleidsregels in elke stap van de levenscyclus en zorg ervoor dat alleen toegang wordt verleend wanneer dat nodig is. Spoor al vroeg in de softwareontwikkelingscyclus beveiligingsproblemen op. Door vroegtijdige detectie van problemen kan uw applicatie in productie worden genomen met best practices op het gebied van beveiligingsarchitectuur en kunnen operationele beveiligingsproblemen die worden veroorzaakt door verkeerde configuraties of openbaar gemaakte kwetsbaarheden, worden opgespoord en beperkt.
OCI biedt meerdere geautomatiseerde beveiligingsservices om uw applicatie en de bijbehorende data te beveiligen. Hieronder volgen enkele aanbevelingen voor het gebruik van OCI-services:
Adviespatronen met aanbevolen technologiekeuzes
Internetapplicaties bestaan gewoonlijk uit een front-end (wat gebruikers zien) en een back-end (het deel dat de bedrijfslogica bevat). In reactie op een aanvraag van een gebruiker of API, communiceert een internetapplicatie met de API of met data die is opgeslagen in een bestandssysteem, objectopslag, blokopslag of database. De applicatie moet verschillende clients ondersteunen, zoals browsers en mobiele apparaten, en communiceren met andere systemen en applicaties door middel van API's.
Oplossingen voor het versturen van berichten verbinden applicatiecomponenten, inclusief bestaande on-premises systemen, met cloudoplossingen. Dit maakt dataoverdracht mogelijk als onderdeel van een goed gedefinieerde gedistribueerde verwerkingspijplijn, of voor de publicatie van berichten naar meerdere onafhankelijke downstreamsystemen die zich onafhankelijk van elkaar ontwikkelen.
In de cloud is een event elke significante gebeurtenis of verandering in een systeem. De kernprincipes van een eventgestuurde architectuur zijn het vastleggen, communiceren, verwerken en bewaren van events. Als u een eventgestuurde applicatie bouwt op OCI, kunt u zich abonneren op wijzigingen in uw cloudresources en op events die uw applicatie genereert. Hierdoor kunt u bijna in realtime op deze events reageren. De meeste moderne applicaties die zijn gebouwd met microservices zijn gebaseerd op een eventgestuurde architectuur.
Big data is een verzameling mogelijkheden en patronen waarmee u alle soorten data (ongestructureerd, semi-gestructureerd en gestructureerd) kunt beheren, verzamelen, opslaan, catalogiseren, voorbereiden, verwerken en analyseren. Het maakt daarbij niet uit van welke bron de data afkomstig zijn. Denk bijvoorbeeld aan databases, video's, formulieren, documenten, logbestanden, webpagina's of afbeeldingen. De mogelijkheden voor big data die Oracle biedt, omvatten verschillende services en tools, zodat u uw big data-traject kunt starten op basis van uw vaardigheden en voorkeuren.
Datawetenschappers en ML-engineers willen geen tijd verspillen aan het inrichten, upgraden, patchen en beveiligen van de infrastructuur. Ze willen modellen bouwen, trainen, implementeren en monitoren die het bedrijf verder helpen. Een machine-learning platform moet volledig worden beheerd en hen de mogelijkheid bieden om al deze stappen in de levenscyclus van de modelontwikkeling uit te voeren.
Oracle Fusion Cloud, het SaaS-aanbod (software as a service) voor bedrijven van Oracle, omvat oplossingen voor gebieden als HCM, ERP, SCM en CX. Het biedt uitgebreide functionaliteit, maar soms willen organisaties aangepaste gebruikersinterfaces en bedrijfsprocessen ontwikkelen ter uitbreiding van die functionaliteit. Deze uitbreidingsapplicaties integreren met informatie uit Oracle Fusion Cloud, gebruiken dezelfde beveiligingslaag en combineren vaak data uit andere systemen, waardoor een gebruikerservaring ontstaat die naadloos integreert met Oracle Cloud Apps.
Platforms met weinig code zijn zeer geschikt voor het bouwen van opportunistische applicaties in samenwerking met zakelijke belanghebbenden, het bouwen van applicaties voor datarapportages en -analyses, het uitbreiden van SaaS-applicaties en het moderniseren van verouderde applicaties. Elke regel code brengt kosten met zich mee: voor het schrijven, onderhouden, debuggen, upgraden en beveiligen ervan. Oracle Application Express (APEX) helpt ontwikkelaars deze kosten te besparen door hoogwaardige componenten en gemeenschappelijke ontwerppatronen te bieden via een intuïtieve en grafische ontwikkelervaring.
Een lijst met aanbevolen technologieën voor moderne applicaties, gevalideerd aan de hand van feedback van Oracle-klanten
Netwerken
Applicatieruntimes
Databeheer en analytics