Soorten toepassingsimplementaties
Er zijn verschillende manieren om Java-toepassingen te implementeren in de cloud. In deze les worden de verschillende opties beschreven, zodat u in de volgende les de services die Azure levert beter kunt begrijpen.
Virtuele machines, containers of platform as a service?
De belangrijkste vraag is of u de toepassing wilt of moet implementeren op een virtuele machine (VM), in een container of binnen een PaaS-oplossing (platform as a service).
Met virtuele machines bent u in een wereld die lijkt op 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.
Het is raadzaam deze oplossing in eerste instantie aan te nemen, omdat deze het dichtst in de buurt komt van wat de meeste bedrijven al gebruiken voordat ze naar de cloud overgaan. 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 beschikt over een ervaren operationsteam dat deze configureert en onderhoudt en als u specifieke gebruiksvoorbeelden hebt. U kunt bijvoorbeeld gebruikmaken van enkele systeemeigen bibliotheken of eigen software, zoals Oracle WebLogic Server of IBM WebSphere Application Server.
Met containers hebt u nog steeds bijna net zoveel controle als met VM's, maar met minder operationele taken. 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-installatiekopieën een goede ci/CD-hulpprogrammaketen (continue integratie en continue levering) om containers correct te onderhouden. Aangezien Docker-installatiekopieën lokaal kunnen worden uitgevoerd en lichter zijn dan VM's, bieden ze ook een fantastische ervaring voor ontwikkelaars.
Met een platform as a service-oplossing verwerkt de cloudprovider de meeste onderhouds- en operationele lasten. Updates van het besturingssysteem, Java-patches, beveiliging en naleving worden allemaal voor u geregeld. Als gevolg hiervan is deze optie meestal veiliger en goedkoper. De software wordt ook geleverd met een aantal schaalbaarheidsfuncties, waardoor uw toepassing zich beter zou moeten kunnen aanpassen aan de behoeften van uw klanten. Het resulteert bovendien in betere prestaties onder belasting en lagere kosten wanneer er minder verkeer is.
U kunt meer bereiken door gebruik te maken van een PaaS-oplossing. Zo kunt u automatische configuratie instellen, geheimen beheren en laden (bijvoorbeeld met behulp van Azure Key Vault), uw toepassing bewaken, een live profileringssessie starten en implementatie zonder uitval uitvoeren.
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 worden algemeen gebruikt voor Java-toepassingen. In beide gevallen is het compilatieproces meestal vergelijkbaar. Het belangrijkste verschil is waar het proces wordt uitgevoerd. Het bouwen van 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. Normaal gesproken wordt een functie geactiveerd door een gebeurtenis, zoals een HTTP-aanvraag, en blijft deze enkele minuten 'hot' totdat de functie weer in de ruststand wordt gezet.
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 gezien vergelijkbaar en delen gemeenschappelijke code en services.
Voor de implementatieopties werken de functies meestal met JAR-bestanden. Andere opties zoals Docker zijn beschikbaar, maar ze zijn minder populair en presteren meestal minder goed. Dit komt omdat het onderliggende platform deze niet op dezelfde manier kan optimaliseren als voor JAR-bestanden.
Door 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.
De serverloze functies kunnen goed worden geschaald en ze bieden de beste prijs voor omgevingen met weinig gebruik. Tegelijkertijd kunnen ze inspelen op de meest veeleisende verkeersbelastingen.