Typy wdrożeń aplikacji
Istnieje kilka sposobów wdrażania aplikacji Java w chmurze. W tej lekcji zapoznasz się z różnymi opcjami, aby w następnej lekcji lepiej zrozumieć usługi zapewniane przez platformę Azure.
Maszyny wirtualne, kontenery lub platforma jako usługa?
Głównym pytaniem jest to, czy chcesz lub potrzebujesz wdrożyć swoją aplikację na maszynie wirtualnej, wewnątrz kontenera, czy jako rozwiązanie typu platforma jako usługa (PaaS).
W przypadku maszyn wirtualnychznajdujesz się w środowisku podobnym do lokalnego lub klasycznego centrum danych. Platforma Azure udostępnia zestaw wstępnie skonfigurowanych maszyn wirtualnych z głównymi systemami operacyjnymi (Windows i Linux) i musisz skonfigurować i obsługiwać te maszyny.
Zalecamy, aby początkowo wdrożyć to rozwiązanie, ponieważ jest to najbliżej tego, co większość przedsiębiorstw już używa przed przejściem do chmury. Zwykle instalują własne oprogramowanie do zarządzania konfiguracją, instalują swoją ulubioną wersję języka Java, a następnie mogą uruchamiać obciążenia Java w sposób podobny do tego, w jaki zrobili to w przeszłości.
Rozwiązanie maszyny wirtualnej działa dobrze, jeśli masz doświadczony zespół operacyjny, który skonfiguruje je i zachowa, a jeśli masz określone przypadki użycia. Na przykład możesz używać niektórych bibliotek natywnych lub oprogramowania zastrzeżonego, takiego jak Oracle WebLogic Server lub IBM WebSphere Application Server.
W przypadku kontenerów wciąż masz większość kontroli, jaką posiadasz przy maszynach wirtualnych, ale z mniejszym nakładem pracy operacyjnej. Możesz zainstalować własną maszynę wirtualną Java (JVM) lub określone oprogramowanie, a kontenery będą uruchamiane lokalnie lub u dowolnego dostawcy usług w chmurze.
Ponieważ kontenery oferują dużą swobodę, cierpią one na niektóre z tych samych problemów co maszyny wirtualne. Jeśli podasz własną maszynę wirtualną JVM, musisz ją zaktualizować i zastosować poprawki w razie potrzeby. W związku z tym obrazy Docker wymagają dobrego łańcucha narzędzi ciągłej integracji i dostarczania (CI/CD), aby prawidłowo zarządzać kontenerami. Ponieważ obrazy Docker mogą działać lokalnie i są lżejsze niż maszyny wirtualne, zapewniają również doskonałe środowisko deweloperskie.
Dzięki rozwiązaniu platformy jako usługi , dostawca usług w chmurze zajmuje się większością obciążenia związanego z konserwacją i eksploatacją. Dostępne są wszystkie aktualizacje systemu operacyjnego, poprawki języka Java, zabezpieczenia i zgodność. W rezultacie ta opcja jest zwykle bezpieczniejsza i mniej kosztowna. Oferuje ona również pewne funkcje skalowalności, które powinny umożliwić aplikacji lepsze dostosowanie się do potrzeb klientów. Skutkuje to również lepszą wydajnością pod obciążeniem i niższym kosztem, gdy jest mniejszy ruch.
Możesz osiągnąć więcej, korzystając z rozwiązania PaaS. Możesz ustawić automatyczną konfigurację, zarządzać i ładować tajne informacje (na przykład przy użyciu usługi Azure Key Vault), monitorować aplikację, uruchamiać sesję profilowania na żywo i włączać wdrażanie bez przestojów.
Opcje wdrażania
Niezależnie od tego, czy używasz maszyn wirtualnych, kontenerów, czy rozwiązania PaaS, zwykle możesz wdrożyć aplikacje Java w chmurze na jeden z dwóch sposobów:
- Wdrożenie kodu źródłowego: Zatwierdzasz swój kod źródłowy do repozytorium Git, a dostawca usług w chmurze uruchamia proces, który kompiluje, buduje i pakuje aplikację.
- Wdrożenie pliku JAR, WAR lub EAR: Pakujesz aplikację, zazwyczaj jako plik wykonywalny JAR (Java ARchive), ale także jako plik WAR (Web Application ARchive), EAR (Enterprise Application ARchive) i inne formaty plików. Następnie dostawca usług w chmurze uruchamia plik wykonywalny.
Te dwie opcje wdrażania to klasyczne sposoby uruchamiania aplikacji Java. W przypadku obu opcji proces kompilacji jest zazwyczaj podobny, a główna różnica polega na tym, gdzie ten proces jest realizowany. Umożliwienie dostawcy usług w chmurze wykonywania kompilacji jest prostsze, a dzięki temu dostawca usług w chmurze stosuje własne kontrole zabezpieczeń i poprawki. Tworzenie aplikacji lokalnie lub przy użyciu platformy ciągłej integracji/ciągłego wdrażania, takiej jak GitHub Actions, zapewnia większą elastyczność i kontrolę.
Funkcje bezserwerowe
Funkcje bezserwerowe, a w szczególności Azure Functions, to połączenie różnych rozwiązań, z którymi się spotkaliśmy, i oferują bardzo określoną cechę: funkcje bezserwerowe są przeznaczone do uruchamiania przez krótki czas. Zazwyczaj funkcja jest obudzona przez zdarzenie, takie jak żądanie HTTP, i pozostaje "gorąca" przez kilka minut, aż wróci do uśpienia.
Funkcje dzielą cechy z rozwiązaniem PaaS, które opisaliśmy wcześniej. Na platformie Azure nasze rozwiązanie PaaS (Azure App Service) i nasze rozwiązanie bezserwerowe (Azure Functions) są technicznie podobne i współdzielą niektóre typowe kody i usługi.
W przypadku opcji wdrażania funkcje zwykle działają z plikami JAR. Dostępne są inne opcje, takie jak platforma Docker, ale są mniej popularne i zwykle nie działają. Dzieje się tak, ponieważ platforma bazowa nie może zoptymalizować ich w taki sam sposób, jak w przypadku plików JAR.
Ze względu na ich charakter funkcje bezserwerowe muszą być specjalnie zakodowane. Ich funkcje zależą od dostawcy usług w chmurze, na którym są uruchamiane, a ich krótkotrwałość komplikuje korzystanie z tradycyjnych rozwiązań, takich jak buforowanie lub replikacja sesji HTTP.
Funkcje bezserwerowe mogą być skalowane dobrze i oferują najlepszą cenę dla środowisk o niskim użyciu. Jednocześnie mogą reagować na najbardziej wymagające obciążenia ruchem.