Schalen met end-to-end beveiliging, bewaking en automatisering
Tijdens het ontwerpen van toepassingen moeten we bepalen hoe we zich kunnen aanpassen aan wijzigingen in de workload, moeten we herstellen van onverwachte fouten, beveiligingsrisico's minimaliseren, enzovoort. Hoewel men zou kunnen beginnen met een evaluatie- en foutbenadering, die tijd kost van andere organisatiedoelstellingen en die onze reputatie nadelig kan beïnvloeden. Azure biedt architectuurrichtlijnen die nodig zijn om alles direct vanaf het begin op te halen. U hebt ook alles wat u nodig hebt om een schaalbare toepassing te bouwen, van geavanceerde beveiliging en automatisch schalen naar ondersteunende services voor gegevens, berichten, caching, prestatiebewaking en automatisering. Veel van deze ondersteunende services zijn ook gebaseerd op populaire opensource-software, zoals PostgreSQL, Redis, JMS en Kafka, zodat u niet wordt vergrendeld in bedrijfseigen oplossingen.
Laten we nu eens kijken naar enkele belangrijke Azure-services en -functies en hoe u ze kunt gebruiken om schaalbare Java-toepassingen te bouwen.
De mogelijkheden voor Java-toepassingen uitbreiden - databases en berichten
Naast het bieden van verschillende opties voor het uitvoeren van uw Java-code, biedt Azure een breed scala aan volledig beheerde services ter ondersteuning van uw databasebehoeften, waaronder Azure Database for PostgreSQL, Azure Database for MySQL, MongoDB Atlas, Azure Cosmos DB, Azure SQL Database en Azure SQL Managed Instance. Hetzelfde geldt voor berichten, met opties zoals Azure Service Bus, Azure Event Hubs en Apache Kafka voor Confluent Cloud.
De Azure Service Bus Premium-laag ondersteunt JMS, het Java Messaging Service-programmeermodel. Ongeacht of uw toepassingen worden uitgevoerd op VM's, in Kubernetes of op volledig beheerde PaaS-services, kunt u deze volledig beheerde gegevens- en berichtenservices snel inrichten en gebruiken met behulp van opensource-clients, Azure Java SDK's, Spring-starters en toepassingsserverintegraties. Ze bieden allemaal de garanties voor naleving, beschikbaarheid en betrouwbaarheid die u zou verwachten van Microsoft en Azure. Veel Java- en Spring-ontwikkelaars willen idiomatische bibliotheken gebruiken om verbindingen met hun favoriete cloudservices te vereenvoudigen. Microsoft onderhoudt een uitgebreide lijst met bibliotheken, stuurprogramma's en modules waarmee u eenvoudig kunt communiceren met Azure-services voor gegevens, berichten, cache, opslag, gebeurtenissen, directory- en geheimenbeheer. Zie de Ontwikkelaarshandleiding voor Spring Cloud Azure voor meer informatie.
Diagram met de functies van Spring Cloud Azure en de bijbehorende Azure-services.
Zero-Trust - Beveiligd netwerk
U kunt uw Java-toepassingen beveiligen door ze te implementeren in een virtueel Azure-netwerk: de fundamentele bouwsteen voor uw eigen privénetwerken in Azure. Met virtuele netwerken kunnen veel soorten Azure-resources veilig met elkaar communiceren, met internet en met uw on-premises netwerken en systemen. U kunt een virtueel netwerk gebruiken om uw toepassingen te isoleren en back-endservices van internet te ondersteunen en deze op uw privénetwerken te plaatsen. U kunt volledige controle over inkomend en uitgaand verkeer voor uw toepassingen en back-endsystemen aannemen.
Diagram van de Azure Container Apps Landing Zone Accelerator.
Zero-Trust - End-to-End-communicatie beveiligen
Het implementeren van beveiligde communicatie als onderdeel van een oplossingsarchitectuur kan lastig zijn. Veel bedrijven draaien hun certificaten handmatig of bouwen hun eigen oplossingen om het inrichten en configureren te automatiseren. Zelfs dan zijn er nog steeds risico's voor gegevensexfiltratie, zoals niet-geautoriseerd kopiëren of gegevensoverdracht.
Met Azure kunt u end-to-end communicatie beveiligen of beveiliging op transportniveau beëindigen op elk communicatiepunt. U kunt ook de inrichting en configuratie automatiseren voor alle Azure-resources die nodig zijn voor het beveiligen van communicatie.
Op basis van het principe 'nooit vertrouwen, altijd verifiëren en zonder referenties', helpt Zero Trust alle communicatie te beveiligen door onbekende en onbeheerde certificaten te elimineren en alleen certificaten te vertrouwen die worden gedeeld door identiteit te verifiëren voordat toegang tot deze certificaten wordt verleend. U kunt elk type TLS/SSL-certificaat gebruiken, inclusief certificaten die zijn uitgegeven door een certificeringsinstantie, uitgebreide validatiecertificaten, jokertekencertificaten met ondersteuning voor een willekeurig aantal subdomeinen of zelfondertekende certificaten voor ontwikkel- en testomgevingen.
Java- of Spring Boot-apps kunnen certificaten veilig laden vanuit Azure Key Vault (hierna besproken). Met Azure Key Vault bepaalt u de opslag en distributie van certificaten om onbedoelde lekkage te verminderen. Toepassingen en services hebben veilig toegang tot certificaten met behulp van beheerde identiteiten, op rollen gebaseerd toegangsbeheer en het principe van minimale bevoegdheden. Dit beveiligde laden wordt mogelijk gemaakt met behulp van de Azure Key Vault JCA-provider (Java Cryptography Architecture).
Diagram van de architectuur voor beveiligde end-to-end-communicatie voor Spring Boot-apps.
Zero-Trust - Geheimen beheren
Veel Java-toepassingen maken verbinding met ondersteunende services met behulp van URL's en referenties: informatie die, indien beschikbaar, kan worden gebruikt om onbevoegde toegang te krijgen tot gevoelige gegevens. Het insluiten van dergelijke informatie in een app zelf vormt om vele redenen een enorm beveiligingsrisico, waaronder detectie via een codeopslagplaats. Veel ontwikkelaars externaliseren dergelijke referenties met behulp van omgevingsvariabelen, zodat meerdere toepassingen ze kunnen laden, maar dit verschuift alleen het risico van de code zelf naar de uitvoeringsomgeving.
Azure Key Vault biedt een betere, veiligere en veiligere manier om geheimen te beveiligen. Het geeft u volledige controle over de opslag en distributie van toepassingsgeheimen, met behulp van op rollen gebaseerd toegangsbeheer (RBAC) en het principe van minimale bevoegdheden om de toegang te beperken. U behoudt de controle over uw toepassingsgeheimen. U hoeft alleen maar toestemming te verlenen voor uw toepassingen om ze zo nodig te gebruiken. Bij het opstarten van de toepassing, voordat toegang wordt verleend tot geheimen, wordt de toepassing geverifieerd met Microsoft Entra-id en Azure Key Vault autoriseert met behulp van Azure RBAC. Azure Key Vault bevat volledige controlemogelijkheden en heeft twee servicelagen: Standard, die wordt versleuteld met een softwaresleutel en een Premium-laag, waaronder met HSM beveiligde sleutels (Hardware Security Module).
Verificatie en autorisatie van eindgebruikers
De meeste Java-toepassingen voor ondernemingen vereisen gebruikersverificatie en -autorisatie, die u kunt implementeren met behulp van Microsoft Entra ID : een volledige oplossing voor identiteits- en toegangsbeheer met geïntegreerde beveiliging. Eindgebruikersaccounts kunnen organisatie-id's of sociale identiteiten zijn van Facebook, Twitter of Gmail met behulp van Microsoft Entra ID en Azure Active Directory B2C. U kunt op Microsoft Entra ID gebaseerde oplossingen implementeren met behulp van de Microsoft Authentication Library voor Java of Spring Boot Starter voor Microsoft Entra. U kunt ook elke id-provider van uw keuze gebruiken, zoals ForgeRock, Auth0, Ping of Okta.
End-to-end bewaken
Met Azure kunt u uw Java-toepassingen end-to-end bewaken met behulp van elk hulpprogramma en platform. U kunt ook volledig beheerde, systeemeigen bewaking implementeren, waaronder bewaking van toepassingsprestaties (APM), met behulp van Application Insights, een functie van Azure Monitor. Het biedt sterke ondersteuning voor Java-, Spring- en frameworks zoals Micrometer en Spring Boot, zodat u snel problemen kunt identificeren en oplossen. Functies omvatten streaming van live metrische gegevens, het bijhouden van aanvraagsnelheid en reactietijd, het traceren van gebeurtenissen en externe afhankelijkheidssnelheden: alles wat u nodig hebt om de beschikbaarheid, prestaties, betrouwbaarheid en het gebruik van uw Java-toepassingen die worden uitgevoerd in Azure of on-premises te bewaken.
U kunt end-to-end bewaken door logboeken en metrische gegevens te aggregeren in Log Analytics, een hulpprogramma in Azure Portal, dat kan worden gebruikt voor het bewerken en uitvoeren van query's op logboeken en metrische gegevens in Azure Monitor. U kunt een query schrijven die een set records retourneert en vervolgens Log Analytics gebruiken om ze te sorteren, filteren en analyseren. U kunt ook een geavanceerdere query schrijven om statistische analyses uit te voeren en de resultaten in een grafiek te visualiseren, zoals nodig is om een bepaalde trend te identificeren. Of u nu interactief met de resultaten van uw query's werkt of deze gebruikt met andere Azure Monitor-functies, zoals waarschuwingen voor logboekquery's of werkmappen, Log Analytics is een goed hulpmiddel voor het schrijven en testen van uw query's.
Dat gezegd hebbende, realiseren we ons dat klanten die hun Java-toepassingen naar Azure brengen, mogelijk dezelfde APM-hulpprogramma's willen blijven gebruiken die ze gebruiken om hun on-premises toepassingen te bewaken. Ter ondersteuning van dit gebruik hebben we samengewerkt met New Relic, AppDynamics, Dynatrace en Elastic om hun bewakingsoplossingen te integreren met Azure-app Service en Azure Container Apps. Bewakingsagents worden naast uw code uitgevoerd en we installeren en houden de agents voor u bijgewerkt. Wanneer u implementeert in Azure Container Apps, Azure Kubernetes Service of Virtual Machines, kunt u een van deze agents uitvoeren (waaronder New Relic, AppDynamics, Dynatrace, Elastic en Datadog) naast uw toepassingen, maar u moet ze zelf installeren en beheren. Op dezelfde manier kunt u end-to-end bewaken door logboeken en metrische gegevens samen te aggregatie in Elastic en Splunk.
We realiseren ons ook dat veel klanten Grafana willen blijven gebruiken om query's uit te voeren, te visualiseren, te waarschuwen en inzicht te geven in hun metrische gegevens. Daarom hebben we samengewerkt met Grafana Labs om Azure Managed Grafana te leveren, een volledig beheerde service waarmee klanten Grafana systeemeigen kunnen uitvoeren in Azure. De service maakt het eenvoudig om veilige en schaalbare Grafana-exemplaren te implementeren en deze te verbinden met opensource-, cloud- en externe gegevensbronnen voor visualisatie en analyse. De service is geoptimaliseerd voor systeemeigen Azure-gegevensbronnen, zoals Azure Monitor en Azure Data Explorer, en bevat APM-integraties (Application Performance Monitoring) met Azure Compute-services zoals Azure-app Service, Azure Container Apps, Azure Kubernetes Service, Splunk, Datadog en Azure Virtual Machines.
Java-toepassingen versnellen met caching
Naarmate de workloads voor uw Java-toepassingen toenemen, kunt u de prestaties verbeteren met behulp van Azure Cache voor Redis om een cachelaag in het geheugen te implementeren voor queryresultaten, sessiestatussen en statische inhoud. Het is een uitstekende manier om de doorvoer van toepassingen te verbeteren en latentie te verminderen zonder dat u de onderliggende database opnieuw hoeft te ontwerpen. Azure Cache voor Redis Enterprise-lagen, ontwikkeld in samenwerking met Redis en volledig beheerd door Microsoft, is de meest beschikbare en schaalbare implementatieoptie voor het uitvoeren van Redis in Azure, waaronder functies zoals actieve geo-replicatie, extern sessiebeheer en snelle zoek- en indexering.
Automatische schaalaanpassing
Alle Azure Compute-services voor het uitvoeren van Java-toepassingen ondersteunen automatisch schalen (automatisch schalen), waarmee u kostenefficiëntie kunt maximaliseren en zich kunt aanpassen aan veranderende workloads zonder dat u meer capaciteit hoeft te betalen dan u nodig hebt. Zodra deze functie is ingeschakeld, kunt u er zeker van zijn dat automatisch schalen zorgt voor uw onderliggende infrastructuur en uw toepassingsworkloads.
U kunt automatisch in- of uitschalen op basis van belasting of planning. In de belastingmodus (of op basis van metrische gegevens) worden uw toepassingen horizontaal uitgeschaald naar de resources die nodig zijn om de belasting te verwerken, tot de limieten die u hebt ingesteld. Wanneer de belasting afneemt, worden resources horizontaal ingeschaald en vallen ze nooit onder de minimumgrootten die u instelt.
In de planningsmodus worden uw toepassingen ingeschaald en uitgeschaald op basis van een gedefinieerd schema en limieten. De planningsmodus is handig voor workloads die een voorspelbaar patroon volgen en kunnen worden gebruikt om een basislijn te maken voor meer schaalaanpassing op basis van belasting.
Automatisering van idee tot productie
Wanneer u uw toepassingen naar de cloud verplaatst, wilt u alles automatiseren, indien nodig voor Java-ontwikkeling op ondernemingsniveau. U moet automatisch schalen overwegen om toepassingsworkloads aan te pakken, zoals eerder is besproken. Maar u moet uw cloudomgeving ook schalen en automatiseren, idealiter van idee tot productie, waaronder hoe u snel nieuwe omgevingen kunt inrichten voor testen, QA, productie, blauw/groen implementaties, geografische uitbreiding, enzovoort.
Met Azure kunt u van idee tot productie automatiseren met behulp van een breed scala aan hulpprogramma's en platforms. Op hoog niveau kunnen dergelijke automatiseringspijplijnen worden onderverdeeld in drie categorieën:
Pijplijnen inrichten: u kunt Azure-resources inrichten met behulp van Terraform-, Arm-sjablonen (Azure Resource Manager), Bicep-sjablonen of de Azure CLI, indien nodig om herhaalbare scripts te maken voor het consistent in- en uitlijnen van omgevingen.
Pijplijnen bouwen: op basis van hulpprogramma's zoals Maven of Gradle, zoals eerder in deze documentatie is besproken.
Implementatiepijplijnen: u kunt GitHub Actions, Azure Pipelines, Jenkins Pipelines, GitLab Pipelines of de Azure CLI gebruiken om code-implementaties te automatiseren, inclusief blauw/groen-implementaties die kritieke systemen in productie houden wanneer u code-updates implementeert.
Bestaande procedures en systemen blijven gebruiken
Wanneer u uw Java-toepassingen in Azure migreert of bouwt en vervolgens schaalt, kunt u uw bestaande investeringen in netwerken, bewaking, automatisering, id-providers, on-premises systemen, ontwikkel- en buildhulpprogramma's en app-bibliotheken gebruiken. De volgende tabel bevat enkele voorbeelden:
Categorie | Java-ecosysteemproducten en -services |
---|---|
Netwerken | F5, Palo Alto, Cloudflare, Checkpoint, Infoblox |
Controleren | New Relic, Dynatrace, AppDynamics, Elastic, Splunk |
Automation | GitHub Actions, Azure Pipelines, Jenkins, GitLab |
Id-providers | Microsoft Entra ID, ForgeRock, Auth0, Ping, Okta |
On-premises systeem | Databases (zoals Oracle DB of IBM DB2), berichten (zoals IBM MQ of TIBCO EMS), gebeurtenissen (zoals Kafka), directory's (zoals Microsoft Entra ID, OpenLDAP of IBM ID) |
Ontwikkelhulpprogramma’s | IntelliJ, Visual Studio Code, Eclipse, Spring Tool Suite, Maven, Gradle |
Referentiearchitecturen
Het Azure Architecture Center biedt richtlijnen voor het bouwen van oplossingen in Azure met behulp van vastgestelde patronen en procedures, waaronder het gebruik van deze mogelijkheden. Deze referentiearchitecturen zijn gebaseerd op wat we hebben geleerd van klantafspraken, rekening houdend met kostenoptimalisatie, operationele uitmuntendheid, prestatie-efficiëntie, betrouwbaarheid, schaalbaarheid, beveiliging, bewaking, betrouwbaarheid, betrouwbaarheid, betrouwbaarheid en meer. Ze hebben ook betrekking op ontwerponderdelen van oplossingen, zoals Azure-landingszones: omgevingen voor het hosten van uw workloads die vooraf zijn ingericht via infrastructuur als code, indien nodig om Migraties van Java-toepassingen en greenfield-ontwikkeling op ondernemingsniveau mogelijk te maken.
Hier volgt bijvoorbeeld een landingszoneversneller voor Azure Container Apps, waarin wordt getoond hoe u een hub-and-spoke-ontwerp implementeert waarin Azure Container Apps wordt geïmplementeerd in één spoke die afhankelijk is van gedeelde services die worden gehost in de hub. Dit project is gebouwd met onderdelen voor het bereiken van de tenets in het Microsoft Azure Well-Architected Framework. Als u een implementatie van deze architectuur wilt verkennen, raadpleegt u de Azure Container Apps Landing Zone Accelerator-opslagplaats op GitHub. U kunt dezelfde benadering toepassen op java-toepassingen die zijn geïmplementeerd op elke Azure-rekenbestemming, zoals Azure-app Service of Azure Kubernetes Service. Daarnaast hebben we een uitgebreide set migratiehandleidingen en aanbevolen strategieën als u kijkt naar het migreren van bestaande Java-toepassingen naar Azure.