Distribueringstyper för applikationer

Slutförd

Det finns flera sätt att distribuera Java-program till molnet. I den här lektionen går vi igenom de olika alternativen så att du i nästa lektion bättre kan förstå de tjänster som Azure tillhandahåller.

Virtuella datorer, containrar eller plattform som en tjänst?

Huvudfrågan är om du vill eller behöver distribuera ditt program på en virtuell dator (VM), i 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 föreslår att du antar den här lösningen från början, eftersom den är närmast vad de flesta företag redan använder innan de flyttar 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.

    Den virtuella datorlösningen fungerar bra om du har ett erfaret driftsteam som konfigurerar och underhåller dem, och om du har specifika användningsfall. Du kan till exempel använda vissa inbyggda bibliotek eller någon egenutvecklad programvara, till exempel Oracle WebLogic Server eller IBM WebSphere Application Server.

  • Med containrarhar du fortfarande större delen av den kontroll du har med virtuella datorer, men med mindre driftsinsats. 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 erbjuder mycket frihet, lider de av några av 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-bilder en bra verktygskedja för kontinuerlig integrering och kontinuerlig leverans (CI/CD) för att hantera containrarna korrekt. Eftersom Docker-avbildningar kan köras lokalt och är lättare än virtuella datorer ger de också en bra utvecklarupplevelse.

  • Med en plattform som en tjänst lösning hanterar molnleverantören det mesta av underhålls- och driftbelastningen. Operativsystemuppdateringar (OS), Java-korrigeringar, säkerhet och efterlevnad tillhandahålls. Därför är det här alternativet vanligtvis säkrare och billigare. Det levereras också med vissa skalbarhetsfunktioner, vilket bör göra det möjligt för ditt program att anpassa sig bättre till dina kunders behov. Det ger också bättre prestanda under belastning och lägre kostnad när det är mindre trafik.

    Du kan uppnå mer med hjälp av en PaaS-lösning. Du kan konfigurera automatisk konfiguration, hantera och läsa in hemligheter (till exempel genom att använda Azure Key Vault), övervaka ditt program, starta en liveprofileringssession och aktivera distribution utan avbrott.

Implementeringsalternativ

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:

  • Distribution av källkod: Du checkar in källkoden på 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.

Dessa två distributionsalternativ är klassiska sätt att köra Java-program. För båda alternativen är byggprocessen vanligtvis liknande, och den största skillnaden är var den 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. Vanligtvis aktiveras en funktion av en händelse, till exempel en HTTP-begäran, och den förblir "varm" i några minuter tills den försätts i viloläge igen.

Funktioner delar funktioner med PaaS-lösningen som vi beskrev tidigare. I Azure är vår PaaS-lösning (Azure App Service) och vår serverlösa lösning (Azure Functions) tekniskt lika och delar vissa vanliga kod och tjänster.

För distributionsalternativ fungerar funktioner vanligtvis med JAR-filer. Andra alternativ som Docker är tillgängliga, men de är mindre populära och fungerar vanligtvis inte lika bra. Det beror på att den underliggande plattformen inte kan optimera dem på samma sätt som den kan för JAR-filer.

Serverlösa funktioner måste till sin natur kodas specifikt. 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 svara på de mest krävande trafikbelastningarna.