Typer av programdistribution
Det finns flera olika sätt att distribuera Java-appar i molnet. Den här enheten undersöker de olika alternativen så att du kan förstå de tjänster som Azure tillhandahåller bättre i nästa enhet.
Virtuella datorer, containrar eller plattform som en tjänst?
Den viktigaste frågan är om du vill eller behöver distribuera din app på en virtuell dator (VM), inuti en container eller som en PaaS-lösning (plattform som en tjänst).
Med virtuella datorer är du i en värld som liknar en lokal eller klassisk datacentermiljö. Azure tillhandahåller en uppsättning förkonfigurerade virtuella datorer som kör huvudoperativsystemen (Windows och Linux) och du måste konfigurera och underhålla dessa datorer.
Vi rekommenderar att du inför den här lösningen först, eftersom den ligger närmast vad de flesta företag redan använder innan de övergår till molnet. De installerar vanligtvis sin egen programvara för konfigurationshantering, installerar sin favoritversion av Java och kan sedan köra sin Java-arbetsbelastning på ett liknande sätt som tidigare.
Lösningen med virtuella datorer fungerar bra om du har ett erfaret driftteam som konfigurerar och underhåller dem, och om du har specifika användningsfall. Du kan till exempel använda vissa interna bibliotek eller viss patentskyddad programvara som Oracle WebLogic Server eller IBM WebSphere Application Server.
Med containrar har du nästan samma kontroll som med virtuella datorer, men insatserna för driften är mindre. Du kan installera din egen Java Virtual Machine (JVM) eller någon specifik programvara, och dina containrar körs antingen lokalt eller på valfri molnleverantör.
Eftersom containrar ger stor frihet har de delvis samma problem som virtuella datorer. Om du anger en egen JVM måste du uppdatera och korrigera den efter behov. Därför kräver Docker-avbildningar en bra verktygskedja för kontinuerlig integrering och kontinuerlig leverans (CI/CD) för att behålla containrarna korrekt. Eftersom Docker-avbildningar kan köras lokalt och är enklare än virtuella datorer är de även en utmärkt utvecklingsmiljö.
Med en plattform som en tjänstlösning hanterar molnleverantören det mesta av underhålls- och driftbelastningen. Uppdateringar av operativsystem, Java-korrigeringar, säkerhet och efterlevnad sköts åt dig. Det här alternativet är därför oftast säkrare och billigare. Det innehåller också vissa skalbarhetsfunktioner som bör innebära att ditt program kan anpassa sig bättre efter kundernas behov. Det leder också till bättre prestanda under belastning och lägre kostnader när det finns mindre trafik.
Du kan uppnå mer med hjälp av en PaaS-lösning. Du kan ställa in automatisk konfiguration, hantera och läsa in hemligheter (till exempel med Azure Key Vault), övervaka din app, starta en session för liveprofilering aktivera avbrottsfri distribution.
Distribueringsalternativ
Oavsett om du använder virtuella datorer, containrar eller en PaaS-lösning kan du vanligtvis distribuera dina Java-program till molnet på något av två sätt:
- Källkodsdistribution: Du checkar in källkoden till en Git-lagringsplats och molnleverantören kör en process som kompilerar, bygger och paketerar programmet.
- JAR-, WAR- eller EAR-fildistribution: Du paketera ditt program, vanligtvis som en körbar JAR-fil (Java ARchive), men WAR (Web Application ARchive), EAR (Enterprise Application ARchive) och andra filformat är också möjliga. Molnleverantören kör sedan den körbara filen.
De här två distributionssätten är klassiska metoder för att köra Java-appar. Kompileringsprocessen är liknande i båda fallen och den viktigaste skillnaden gäller var processen körs. Det är enklare att låta molnleverantören göra bygget, och med den här metoden tillämpar molnleverantören sina egna säkerhetskontroller och korrigeringar. Genom att skapa programmet lokalt eller med hjälp av en CI/CD-plattform som GitHub Actions får du mer flexibilitet och kontroll.
Serverlösa funktioner
Serverlösa funktioner, eller mer specifikt Azure Functions, är en blandning av olika lösningar som vi har sett och erbjuder en mycket specifik funktion: serverlösa funktioner är avsedda att köras under korta tidsperioder. En funktion aktiveras normalt av en händelse, till exempel en HTTP-förfrågan, och den förblir ”aktiv” i några minuter tills den försätts i viloläge igen.
Funktioner delar funktioner med PaaS-lösningen som vi beskrev tidigare. Vår PaaS-lösning i Azure (Azure App Service) och vår lösning för serverlösa funktioner (Azure Functions) är tekniskt sett lika och har delvis samma kod och tjänster.
När det gäller distribution så används ofta JAR-filer i funktioner. Det finns även andra alternativ, till exempel Docker, men de är mindre populära och fungerar vanligtvis inte lika bra. Detta beror på att den underliggande plattformen inte kan optimera dem på samma sätt som den kan med JAR-filer.
Serverlösa funktioner är utformade så att de kräver specifik kodning. Deras funktioner beror på vilken molnleverantör de kör och deras korta livslängd gör det komplicerat att använda traditionella lösningar som cachelagring eller HTTP-sessionsreplikering.
Serverlösa funktioner kan skalas bra, och de erbjuder det bästa priset för miljöer med låg användning. Samtidigt kan de hantera de mest krävande trafikbelastningarna.