Typen toepassingsimplementatie
Er zijn verschillende manieren om Java-toepassingen in de cloud te implementeren. In deze les worden de verschillende opties verkend, zodat u in de volgende les beter inzicht krijgt in de services die Azure biedt.
Virtuele machines, containers, of Platform as a Service?
De belangrijkste vraag is of u uw toepassing wilt implementeren op een virtuele machine (VM), in een container of als een PaaS-oplossing (Platform as a Service).
Met virtuele machines, bevindt u zich in een wereld die vergelijkbaar is met een on-premises of een klassieke datacenteromgeving. Azure biedt een set vooraf geconfigureerde VM's waarop de belangrijkste besturingssystemen (Windows en Linux) worden uitgevoerd. U moet deze machines configureren en onderhouden.
We raden u aan deze oplossing in eerste instantie te gebruiken, omdat deze het dichtst bij wat de meeste ondernemingen al gebruiken voordat ze overstappen naar de cloud. Ze installeren meestal hun eigen software voor configuratiebeheer, installeren hun favoriete versie van Java en kunnen vervolgens hun Java-workload uitvoeren op een manier die vergelijkbaar is met hoe ze het in het verleden hebben gedaan.
De VM-oplossing werkt goed als u een ervaren operations-team hebt dat deze configureert en onderhoudt, en als u specifieke use cases hebt. U kunt bijvoorbeeld enkele systeemeigen bibliotheken of eigen software gebruiken, zoals Oracle WebLogic Server of IBM WebSphere Application Server.
Met containershebt u nog steeds de meeste controle zoals bij VM's, maar met minder operationele inspanning. U kunt uw eigen Java Virtual Machine (JVM) of bepaalde specifieke software installeren en uw containers worden lokaal of in elke cloudprovider uitgevoerd.
Omdat containers veel vrijheid bieden, hebben ze last van een aantal van dezelfde problemen als VM's. Als u uw eigen JVM opgeeft, moet u deze indien nodig bijwerken en patchen. Als gevolg hiervan vereisen Docker-afbeeldingen een goede CI/CD-hulpprogrammaketen (continue integratie en continue levering) om containers op de juiste manier te beheren. Omdat Docker-installatiekopieën lokaal kunnen worden uitgevoerd en lichter zijn dan VM's, bieden ze ook een geweldige ontwikkelaarservaring.
Met een platform als een service- oplossing verwerkt de cloudprovider de meeste onderhouds- en operationele lasten. Updates van besturingssystemen, Java-patches, beveiliging en naleving zijn allemaal beschikbaar. Als gevolg hiervan is deze optie meestal veiliger en goedkoper. Het wordt ook geleverd met enkele schaalbaarheidsfuncties, waardoor uw toepassing zich beter kan aanpassen aan de behoeften van uw klanten. Het resulteert ook in betere prestaties onder belasting en lagere kosten wanneer er minder verkeer is.
U kunt meer bereiken met behulp van een PaaS-oplossing. U kunt automatische configuratie instellen, geheimen beheren en laden (bijvoorbeeld met behulp van Azure Key Vault), uw toepassing bewaken, een live profileringssessie starten en implementatie zonder downtime inschakelen.
Implementatieopties
Of u nu VM's, containers of een PaaS-oplossing gebruikt, u kunt uw Java-toepassingen meestal op twee manieren implementeren in de cloud:
- broncode-implementatie: u voert uw broncode door naar een Git-opslagplaats en de cloudprovider voert een proces uit waarmee de toepassing wordt gecompileerd, gebouwd en verpakt.
- JAR-, WAR- of EAR-bestandsimplementatie: u verpakt uw toepassing, meestal als een uitvoerbaar JAR-bestand (Java ARchive), maar WAR (Web Application ARchive), EAR (Enterprise Application ARchive) en andere bestandsindelingen zijn ook mogelijk. De cloudprovider voert vervolgens het uitvoerbare bestand uit.
Deze twee implementatieopties zijn klassieke manieren om Java-toepassingen uit te voeren. Voor beide opties is het buildproces meestal vergelijkbaar en het belangrijkste verschil is waar dat proces wordt uitgevoerd. Het overlaten van de bouw aan de cloudprovider is eenvoudiger, en met deze benadering past de cloudprovider zijn eigen beveiligingscontroles en patches toe. Door de toepassing lokaal te bouwen of door een CI/CD-platform zoals GitHub Actions te gebruiken, krijgt u meer flexibiliteit en controle.
Serverloze functies
Serverloze functies, of meer specifiek Azure Functions, zijn een combinatie van verschillende oplossingen die we hebben gezien en bieden een zeer specifieke functie: serverloze functies zijn bedoeld om korte tijd te worden uitgevoerd. Meestal wordt een functie geactiveerd door een gebeurtenis, zoals een HTTP-aanvraag, en blijft deze een paar minuten 'hot' totdat deze weer in de slaapstand komt.
Functies delen functies met de PaaS-oplossing die we eerder hebben beschreven. In Azure zijn onze PaaS-oplossing (Azure App Service) en onze serverloze oplossing (Azure Functions) technisch vergelijkbaar en delen we enkele algemene code en services.
Voor implementatieopties werken functies meestal met JAR-bestanden. Andere opties zoals Docker zijn beschikbaar, maar ze zijn minder populair en presteren meestal niet zo goed. Dit komt doordat het onderliggende platform ze niet op dezelfde manier kan optimaliseren als voor JAR-bestanden.
Op hun aard moeten serverloze functies specifiek worden gecodeerd. Hun functies zijn afhankelijk van de cloudprovider waarop ze worden uitgevoerd en hun korte levensduur maakt het ingewikkeld om traditionele oplossingen te gebruiken, zoals caching of HTTP-sessiereplicatie.
Serverloze functies kunnen goed worden geschaald en ze bieden de beste prijs voor omgevingen met een laag gebruik. Tegelijkertijd kunnen ze reageren op de meest veeleisende verkeersbelastingen.