Overzicht van Java in Azure Container Apps
Azure Container Apps kan elke java-toepassing in een container uitvoeren in de cloud terwijl u flexibele opties biedt voor de manier waarop u uw toepassingen implementeert.
Wanneer u Container Apps gebruikt voor uw java-toepassingen in containers, krijgt u het volgende:
Rendabel schalen: wanneer u het Verbruiksabonnement gebruikt, kunnen uw Java-apps worden geschaald naar nul. Wanneer er weinig vraag is naar uw app, worden de kosten voor uw projecten automatisch lager.
Implementatieopties: Azure Container Apps kan worden geïntegreerd met Buildpacks, waarmee u rechtstreeks vanuit een Maven-build, via artefactbestanden of met uw eigen Dockerfile kunt implementeren.
JAR-implementatie (preview): u kunt uw container-app rechtstreeks vanuit een JAR-bestand implementeren.
WAR-implementatie (preview): u kunt uw container-app rechtstreeks vanuit een WAR-bestand implementeren.
IDE-ondersteuning: U kunt uw container-app rechtstreeks vanuit IntelliJ implementeren.
Automatische geheugenfitting (preview): Container Apps optimaliseert de wijze waarop de Java Virtual Machine (JVM) geheugen beheert, waardoor het meest beschikbare geheugen beschikbaar is voor uw Java-toepassingen.
Omgevingsvariabelen bouwen (preview): u kunt aangepaste sleutel-waardeparen configureren om de Build van java-installatiekopieën te beheren op basis van broncode.
In dit artikel vindt u meer informatie over het bouwen van Java-toepassingen in Azure Container Apps.
Implementatietypen
Het uitvoeren van toepassingen in containers betekent meestal dat u een Dockerfile moet maken voor uw toepassing, maar het uitvoeren van Java-toepassingen in Container Apps biedt u een aantal opties.
Type | Description | Maakt gebruik van Buildpacks | Maakt gebruik van een Dockerfile |
---|---|---|---|
Broncode bouwen | U kunt rechtstreeks vanuit uw broncode implementeren naar Container Apps. | Ja | Nr. |
Artefact-build | U kunt een Maven-build maken om te implementeren in Container Apps | Ja | Nr. |
Dockerfile | U kunt uw Dockerfile handmatig maken en de volledige controle over uw implementatie overnemen. | Nr. | Ja |
Notitie
De Buildpacks-implementaties ondersteunen JDK-versies 8, 11, 17 en 21.
Toepassingstypen
Verschillende typen toepassingen worden geïmplementeerd als een afzonderlijke container-app of als een Container Apps-taak. Gebruik de volgende tabel om te bepalen welk toepassingstype het meest geschikt is voor uw scenario.
Voorbeelden in deze tabel zijn niet volledig bedoeld, maar om de intentie van verschillende toepassingstypen beter te begrijpen.
Type | Voorbeelden | Implementeren als... |
---|---|---|
Webtoepassingen en API-eindpunten | Spring Boot, Quarkus, Apache Tomcat en Jetty | Een afzonderlijke container-app |
Consoletoepassingen, geplande taken, taaklopers, batchtaken | SparkJobs, ETL-taken, Spring Batch-taak, Jenkins-pijplijntaak | Een Container Apps-taak |
Foutopsporing
Als u fouten in uw Java-toepassing in Container Apps opspoort, controleert u de Java-in-process agent voor logboekstream- en console-foutopsporingsberichten.
Probleemoplossing
Houd rekening met de volgende items bij het ontwikkelen van uw Java-toepassingen:
Standaardbronnen: een app heeft standaard een halve CPU en 1 GB beschikbaar.
Staatloze processen: naarmate uw container-app in- en uitschaalt, worden er nieuwe processen gemaakt en afgesloten. Zorg ervoor dat u vooruit plant, zodat u gegevens naar gedeelde opslag schrijft, zoals databases en bestandssysteemshares. Verwacht niet dat bestanden die rechtstreeks naar het containerbestandssysteem zijn geschreven, beschikbaar zijn voor een andere container.
Schalen naar nul is de standaardinstelling: als u ervoor wilt zorgen dat een of meer exemplaren van uw toepassing continu worden uitgevoerd, moet u ervoor zorgen dat u een schaalregel definieert die het beste aan uw behoeften voldoet.
Onverwacht gedrag: als uw container-app niet kan worden gebouwd, gestart of uitgevoerd, controleert u of het artefactpad juist is ingesteld in uw container.
Buildpack-ondersteuningsproblemen: als uw Buildpack geen ondersteuning biedt voor afhankelijkheden of de versie van Java die u nodig hebt, maakt u uw eigen Dockerfile om uw app te implementeren. U kunt een Dockerfile-voorbeeld bekijken voor naslaginformatie.
SIGTERM- en SIGINT-signalen: de JVM verwerkt en signalen worden
SIGINT
SIGTERM
standaard niet doorgegeven aan de toepassing, tenzij u deze signalen onderschept en verwerkt in uw toepassing dienovereenkomstig. Container Apps gebruikt zowelSIGTERM
alsSIGINT
voor procesbeheer. Als u deze signalen niet vastlegt en uw toepassing onverwacht wordt beëindigd, verliest u deze signalen mogelijk, tenzij u ze op de opslag houdt.Toegang tot containerinstallatiekopieën: als u artefact- of broncode-implementatie gebruikt in combinatie met het standaardregister, hebt u geen directe toegang tot uw containerinstallatiekopieën.
Controleren
Alle standaardhulpprogramma's voor waarneembaarheid werken met uw Java-toepassing. Houd rekening met de volgende items wanneer u uw Java-toepassingen bouwt om te worden uitgevoerd in Container Apps:
Metrische gegevens: JVM-metrische gegevens (Java Virtual Machine) zijn essentieel voor het bewaken van de status en prestaties van uw Java-toepassingen. De verzamelde gegevens bevatten inzicht in het geheugengebruik, garbagecollection, het aantal threads van uw JVM. U kunt metrische gegevens controleren om de status en stabiliteit van uw toepassingen te waarborgen.
Logboekregistratie: Toepassings- en foutberichten verzenden naar
stdout
ofstderror
zodat ze in de logboekstroom kunnen worden weergegeven. Vermijd logboekregistratie rechtstreeks naar het bestandssysteem van de container, zoals gebruikelijk is bij het gebruik van populaire logboekregistratieservices.Configuratie voor prestatiebewaking: Implementeer services voor prestatiebewaking als een afzonderlijke container in uw Container Apps-omgeving, zodat deze rechtstreeks toegang heeft tot uw toepassing.
Diagnostiek
Azure Container Apps biedt ingebouwde diagnostische hulpprogramma's uitsluitend voor Java-ontwikkelaars. Deze ondersteuning stroomlijnt de foutopsporing en probleemoplossing van Java-toepassingen die worden uitgevoerd in Azure Container Apps voor verbeterde efficiëntie en gemak.
- Dynamisch logboekregistratieniveau: Hiermee kunt u verschillende logboekdetails openen en controleren zonder codewijzigingen of moet u de app opnieuw opstarten. U kunt het dynamische logboekregistratieniveau instellen voor referentie weergeven.
Schalen
Als u ervoor wilt zorgen dat aanvragen van uw front-endtoepassingen dezelfde server bereiken of als uw front-end-app wordt gesplitst tussen meerdere containers, moet u plaksessies inschakelen.
Beveiliging
De Container Apps-runtime beëindigt TLS/SSL voor u in uw Container Apps-omgeving.
Geheugenbeheer
Om geheugenbeheer in uw Java-toepassing te optimaliseren, kunt u ervoor zorgen dat de JVM-geheugenfitting is ingeschakeld in uw app.
Het geheugen wordt gemeten in gibibytes (Gi) en CPU-kernparen. In de volgende tabel ziet u het bereik van resources dat beschikbaar is voor uw container-app.
Threshold | CPU-kernen | Geheugen in Gibibytes (Gi) |
---|---|---|
Minimum | 0.25 | 0,5 |
Maximum | 4 | 8 |
Kernen zijn beschikbaar in stappen van 0,25 kernen, waarbij geheugen beschikbaar is met een verhouding van 2:1. Als u bijvoorbeeld 1.25 kernen nodig hebt, hebt u 2,5 Gi geheugen beschikbaar voor uw container-app.
Notitie
Voor apps met JDK-versies 9 en lager moet u aangepaste JVM-geheugeninstellingen definiëren die overeenkomen met de geheugentoewijzing in Azure Container Apps.
Ondersteuning voor Java-onderdelen
Azure Container Apps biedt ondersteuning voor de volgende Java-onderdelen als beheerde services:
Eureka Server voor Spring: Serviceregistratie en detectie zijn belangrijke vereisten voor het onderhouden van een lijst met livetoepassingsexemplaren. Uw toepassing gebruikt deze lijst om binnenkomende aanvragen te routeren en te verdelen. Het handmatig configureren van elke client kost tijd en introduceert de mogelijkheid van menselijke fouten. Eureka Server vereenvoudigt het beheer van servicedetectie door te functioneren als een serviceregister waar microservices zichzelf kunnen registreren en andere services binnen het systeem kunnen detecteren.
Configuratieserver voor Spring: Config Server biedt gecentraliseerd extern configuratiebeheer voor gedistribueerde systemen. Dit onderdeel is ontworpen om de uitdagingen aan te pakken voor het beheren van configuratie-instellingen voor meerdere microservices in een cloudeigen omgeving.
Gateway voor Spring: Gateway voor Spring biedt een efficiënte en krachtige manier om API-aanvragen te routeren, beheren en verwerken als onderdeel van een microservicesarchitectuur. Het fungeert als een API-gateway die externe aanvragen naar verschillende services routeert, verschillende mogelijkheden toevoegt, zoals filteren, taakverdeling en meer.
Beheerder voor Spring: Het onderdeel Beheerder voor Spring managed biedt een beheerinterface die is ontworpen voor Spring Boot-webtoepassingen met actuatoreindpunten. Een beheerd onderdeel biedt integratie en beheer voor uw container-app door u in staat te stellen uw container-app te binden aan het onderdeel Admin for Spring.