Översikt över Java i Azure Container Apps

Azure Container Apps kan köra alla containerbaserade Java-program i molnet samtidigt som du ger flexibla alternativ för hur du distribuerar dina program.

När du använder Container Apps för dina containerbaserade Java-program får du:

  • Kostnadseffektiv skalning: När du använder förbrukningsplanen kan dina Java-appar skalas till noll. Om du skalar in när det finns liten efterfrågan på din app minskar kostnaderna automatiskt för dina projekt.

  • Distributionsalternativ: Azure Container Apps integreras med Buildpacks, vilket gör att du kan distribuera direkt från en Maven-version, via artefaktfiler eller med din egen Dockerfile.

    • JAR-distribution (förhandsversion): Du kan distribuera containerappen direkt från en JAR-fil.

    • WAR-distribution (förhandsversion): Du kan distribuera containerappen direkt från en WAR-fil.

    • IDE-stöd: Du kan distribuera din containerapp direkt från IntelliJ.

  • Automatisk minnesanpassning (förhandsversion): Container Apps optimerar hur den virtuella Java-datorn (JVM) hanterar minne, vilket gör det mesta möjliga minnet tillgängligt för dina Java-program.

  • Skapa miljövariabler (förhandsversion): Du kan konfigurera anpassade nyckel/värde-par för att styra Java-avbildningsversionen från källkoden.

Den här artikeln beskriver den information du behöver veta när du skapar Java-program i Azure Container Apps.

Distributionstyper

Att köra containerbaserade program innebär vanligtvis att du måste skapa en Dockerfile för ditt program, men om du kör Java-program i Container Apps får du några alternativ.

Typ Beskrivning Använder Buildpacks Använder en Dockerfile
Källkodsversion Du kan distribuera direkt till Container Apps från källkoden. Ja Nej
Artefaktversion Du kan skapa en Maven-version för att distribuera till Container Apps Ja Nej
Dockerfile Du kan skapa Dockerfile manuellt och ta fullständig kontroll över distributionen. Nej Ja

Kommentar

Buildpacks-distributionerna stöder JDK-versionerna 8, 11, 17 och 21.

Programtyper

Olika programtyper implementeras antingen som en enskild containerapp eller som ett Container Apps-jobb. Använd följande tabell för att avgöra vilken programtyp som passar bäst för ditt scenario.

Exempel som anges i den här tabellen är inte avsedda att vara uttömmande, utan för att hjälpa dig att förstå avsikten med olika programtyper.

Typ Exempel Implementera som...
Webbprogram och API-slutpunkter Spring Boot, Quarkus, Apache Tomcat och Jetty En enskild containerapp
Konsolprogram, schemalagda uppgifter, aktivitetslöpare, batchjobb SparkJobs, ETL-uppgifter, Spring Batch-jobb, Jenkins-pipelinejobb Ett Container Apps-jobb

Felsökning

När du felsöker Java-programmet i Container Apps bör du kontrollera att Java-in-processagenten har loggström och konsolfelsökningsmeddelanden.

Felsökning

Tänk på följande när du utvecklar dina Java-program:

  • Standardresurser: Som standard har en app en halv PROCESSOR och 1 GB tillgängligt.

  • Tillståndslösa processer: När containerappen skalar in och ut skapas och stängs nya processer av. Se till att planera framåt så att du skriver data till delad lagring, till exempel databaser och filsystemresurser. Förvänta dig inte att filer som skrivs direkt till containerfilsystemet ska vara tillgängliga för någon annan container.

  • Skala till noll är standard: Om du behöver se till att en eller flera instanser av programmet körs kontinuerligt måste du definiera en skalningsregel som bäst uppfyller dina behov.

  • Oväntat beteende: Om containerappen inte kan skapa, starta eller köra kontrollerar du att artefaktsökvägen har angetts korrekt i containern.

  • Supportproblem med Buildpack: Om ditt Buildpack inte stöder beroenden eller vilken version av Java du behöver skapar du en egen Dockerfile för att distribuera din app. Du kan visa en Dockerfile-exempelfil som referens.

  • SIGTERM- och SIGINT-signaler: Som standard hanterar SIGTERM JVM och SIGINT signaler och skickar dem inte till programmet om du inte fångar upp dessa signaler och hanterar dem i ditt program i enlighet med detta. Container Apps använder både SIGTERM och SIGINT för processkontroll. Om du inte avbildar dessa signaler och programmet avslutas oväntat kan du förlora dessa signaler om du inte bevarar dem till lagring.

  • Åtkomst till containeravbildningar: Om du använder artefakt- eller källkodsdistribution i kombination med standardregistret har du inte direkt åtkomst till dina containeravbildningar.

Övervakning

Alla standardverktyg för observerbarhet fungerar med ditt Java-program. Tänk på följande när du skapar dina Java-program för att köras i Container Apps:

  • Mått: JVM-mått (Java Virtual Machine) är viktiga för övervakning av hälsotillstånd och prestanda för dina Java-program. De data som samlas in innehåller insikter om minnesanvändning, skräpinsamling, trådantal för din JVM. Du kan kontrollera måtten för att säkerställa hälsotillståndet och stabiliteten i dina program.

  • Loggning: Skicka program och felmeddelanden till stdout eller stderror så att de kan visas i loggströmmen. Undvik att logga direkt till containerns filsystem, vilket är vanligt när du använder populära loggningstjänster.

  • Konfiguration av prestandaövervakning: Distribuera prestandaövervakningstjänster som en separat container i containerappmiljön så att den kan komma åt programmet direkt.

Diagnostik

Azure Container Apps erbjuder inbyggda diagnostikverktyg exklusivt för Java-utvecklare. Det här stödet effektiviserar felsökning och felsökning av Java-program som körs i Azure Container Apps för bättre effektivitet och enkelhet.

  • Dynamisk loggningsnivå: Gör att du kan komma åt och kontrollera olika logginformationsnivå utan kodändringar eller tvinga dig att starta om appen. Du kan visa Ange dynamisk loggningsnivå som referens.

Skalning

Om du behöver kontrollera att begäranden från dina klientdelsprogram når samma server, eller om klientdelsappen är uppdelad mellan flera containrar, måste du aktivera klibbiga sessioner.

Säkerhet

Container Apps-körningen avslutar SSL åt dig i containerappsmiljön.

Minneshantering

För att optimera minneshanteringen i Java-programmet kan du se till att JVM-minnesanpassning är aktiverat i din app.

Minnet mäts i gibibyte (Gi) och cpu-kärnpar. I följande tabell visas det antal resurser som är tillgängliga för din containerapp.

Threshold Processorkärnor Minne i Gibibytes (Gi)
Minimal 0.25 0,5
Högsta 4 8

Kärnor är tillgängliga i steg om 0,25 kärnor, med tillgängligt minne med förhållandet 2:1. Om du till exempel behöver 1,25 kärnor har du 2,5 Gi minne tillgängligt för containerappen.

Kommentar

För appar som använder JDK version 9 och lägre måste du definiera anpassade JVM-minnesinställningar som matchar minnesallokeringen i Azure Container Apps.

Stöd för Spring-komponenter

Azure Container Apps har stöd för följande Spring-komponenter som hanterade tjänster:

  • Eureka Server for Spring: Tjänstregistrering och identifiering är viktiga krav för att upprätthålla en lista över aktiva programinstanser. Ditt program använder den här listan för routning och belastningsutjämning av inkommande begäranden. Att konfigurera varje klient manuellt tar tid och medför risken för mänskliga fel. Eureka Server förenklar hanteringen av tjänstidentifiering genom att fungera som ett tjänstregister där mikrotjänster kan registrera sig själva och identifiera andra tjänster i systemet.

  • Config Server for Spring: Config Server tillhandahåller centraliserad extern konfigurationshantering för distribuerade system. Den här komponenten är utformad för att hantera utmaningarna med att hantera konfigurationsinställningar för flera mikrotjänster i en molnbaserad miljö.

  • Administratör för Spring: Administratören för springhanterad komponent tillhandahåller ett administrativt gränssnitt som är utformat för Spring Boot-webbprogram som har aktuatorslutpunkter. En hanterad komponent tillhandahåller integrering och hantering av din containerapp genom att du kan binda din containerapp till komponenten Admin för Spring.

Nästa steg