Programdistribusjonstyper
Det finnes flere måter å distribuere Java-programmer til skyen på. Denne enheten utforsker de ulike alternativene, slik at du i neste enhet bedre kan forstå tjenestene som Azure tilbyr.
Virtuelle maskiner, beholdere eller plattformer som en tjeneste?
Hovedspørsmålet er om du vil eller trenger å distribuere programmet på en virtuell maskin (VM), i en beholder eller som en plattform som en tjenesteløsning (PaaS).
Med virtuelle maskinerer du i en verden som ligner på et lokalt eller klassisk datasentermiljø. Azure tilbyr et sett med forhåndskonfigurerte virtuelle maskiner som kjører de viktigste operativsystemene (Windows og Linux), og du må konfigurere og vedlikeholde disse maskinene.
Vi foreslår at du tar i bruk denne løsningen i utgangspunktet, fordi den er nærmest det de fleste virksomheter allerede bruker før de flytter til skyen. De installerer vanligvis sin egen programvare for konfigurasjonsadministrasjon, installerer favorittversjonen av Java, og kan deretter kjøre Java-arbeidsbelastningen på en måte som ligner på hvordan de har gjort det tidligere.
VM-løsningen fungerer bra hvis du har et erfarent operasjonsteam som konfigurerer og vedlikeholder dem, og hvis du har bestemte brukstilfeller. Du kan for eksempel bruke noen opprinnelige biblioteker eller en rettighetsbeskyttet programvare, for eksempel Oracle WebLogic Server eller IBM WebSphere Application Server.
Med beholderehar du fortsatt mesteparten av kontrollen du har med virtuelle maskiner, men med mindre driftsinnsats. Du kan installere din egen Java Virtual Machine (JVM) eller en bestemt programvare, og beholderne kjører enten lokalt eller på en hvilken som helst skyleverandør.
Fordi beholdere tilbyr mye frihet, lider de av noen av de samme problemene som virtuelle maskiner. Hvis du oppgir din egen JVM, må du oppdatere og oppdatere den etter behov. Som et resultat krever Docker-bilder en god kontinuerlig integrering og kontinuerlig levering (CI/CD) verktøykjede for å vedlikeholde beholdere på riktig måte. Ettersom Docker-bilder kan kjøre lokalt og er lettere enn virtuelle maskiner, gir de også en flott utvikleropplevelse.
Med en plattform som en tjeneste løsning, håndterer skyleverandøren det meste av vedlikeholds- og driftsbyrden. Operativsystemoppdateringer ( OS), Java-oppdateringer, sikkerhet og samsvar er alle angitt. Som et resultat er dette alternativet vanligvis sikrere og mindre kostbart. Den leveres også med noen skalerbarhetsfunksjoner, som skal gjøre det mulig for programmet å tilpasse seg kundenes behov bedre. Det resulterer også i bedre ytelse under belastning og lavere kostnader når det er mindre trafikk.
Du kan oppnå mer ved hjelp av en PaaS-løsning. Du kan konfigurere automatisk konfigurasjon, administrere og laste inn hemmeligheter (for eksempel ved hjelp av Azure Key Vault), overvåke programmet, starte en live profileringsøkt og aktivere null-nedetidsdistribusjon.
Distribusjonsalternativer
Enten du bruker virtuelle maskiner, beholdere eller en PaaS-løsning, kan du vanligvis distribuere Java-programmene til skyen på to måter:
- kildekodedistribusjon: Du overfører kildekoden til et Git-repositorium, og skyleverandøren kjører en prosess som kompilerer, bygger og pakker programmet.
- JAR-, WAR- eller EAR-fildistribusjon: Du pakker programmet, vanligvis som en kjørbar JAR-fil (Java ARchive), men WAR (Web Application ARchive), EAR (Enterprise Application ARchive) og andre filformater er også mulig. Skyleverandøren kjører deretter den kjørbare filen.
Disse to distribusjonsalternativene er klassiske måter å kjøre Java-programmer på. For begge alternativene er byggeprosessen vanligvis lik, og hovedforskjellen er hvor denne prosessen kjøres. Det er enklere å la skyleverandøren gjøre bygget, og med denne tilnærmingen bruker skyleverandøren sine egne sikkerhetskontroller og oppdateringer. Ved å bygge programmet lokalt eller ved hjelp av en CI/CD-plattform, for eksempel GitHub Actions, får du mer fleksibilitet og kontroll.
Serverløse funksjoner
Serverløse funksjoner, eller mer spesifikt Azure Functions, er en blanding av ulike løsninger vi har sett og tilbyr en svært spesifikk funksjon: serverløse funksjoner er ment å kjøre i korte perioder. Vanligvis vekkes en funksjon av en hendelse, for eksempel en HTTP-forespørsel, og den forblir "varm" i noen minutter til den går tilbake til hvilemodus.
Funksjoner deler funksjoner med PaaS-løsningen vi beskrev tidligere. I Azure er PaaS-løsningen vår (Azure App Service) og vår serverløse løsning (Azure Functions) teknisk lik og deler noen vanlige koder og tjenester.
For distribusjonsalternativer fungerer funksjoner vanligvis med JAR-filer. Andre alternativer som Docker er tilgjengelige, men de er mindre populære og fungerer vanligvis ikke så bra. Dette er fordi den underliggende plattformen ikke kan optimalisere dem på samme måte som den kan for JAR-filer.
Av sin natur må serverløse funksjoner kodes spesifikt. Funksjonene avhenger av skyleverandøren de kjører på, og deres korte liv gjør det komplisert å bruke tradisjonelle løsninger som hurtigbufring eller HTTP-øktreplikering.
Serverløse funksjoner kan skaleres godt, og de tilbyr den beste prisen for miljøer med lav bruk. Samtidig kan de svare på de mest krevende trafikkbelastningene.