Typy wdrożenia aplikacji
Istnieje kilka sposobów wdrażania aplikacji Java w chmurze. W tej lekcji przedstawiono różne opcje, aby w następnej lekcji można było lepiej zrozumieć usługi udostępniane przez platformę Azure.
Maszyny wirtualne, kontenery czy platforma jako usługa?
Główne pytanie jest następujące: czy chcesz lub potrzebujesz wdrożyć aplikację na maszynie wirtualnej, wewnątrz kontenera czy w rozwiązaniu typu „platforma jako usługa” (PaaS).
Maszyny wirtualne są na świecie podobne do środowiska 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 ono najbliższe temu, czego już używa większość przedsiębiorstw 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 je skonfiguruje i będzie je utrzymywać, oraz jeśli masz konkretne przypadki użycia. Można na przykład korzystać z niektórych bibliotek natywnych lub oprogramowania zastrzeżonego, takiego jak Oracle WebLogic Server lub IBM WebSphere Application Server.
W przypadku kontenerów Twój zakres kontroli jest prawie taki sam jak w przypadku maszyn wirtualnych, ale zmniejsza się wysiłek operacyjny. 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ą wiele swobody, dotyczą ich niektóre z tych samych problemów, co w przypadku maszyn wirtualnych. Jeśli podasz własną maszynę wirtualną JVM, musisz ją zaktualizować i zastosować poprawki w razie potrzeby. W związku z tym obrazy platformy Docker wymagają dobrego łańcucha narzędzi ciągłej integracji i ciągłego dostarczania (CI/CD), aby prawidłowo obsługiwać kontenery. Ponieważ obrazy platformy Docker mogą działać lokalnie i są prostsze niż maszyny wirtualne, stanowią również doskonałe środowisko deweloperskie.
Dzięki rozwiązaniu typu platforma jako usługa dostawca usług obsługuje większość obciążeń związanych z konserwacją i operacją. Zapewnia on aktualizacje systemu operacyjnego, poprawki języka Java, zabezpieczenia i zgodność. W związku z tym ta opcja jest zazwyczaj bezpieczniejsza i tańsza. Udostępnia również pewne funkcje skalowalności, które powinny umożliwić aplikacji lepsze dostosowanie do potrzeb klientów. Zapewnia również lepszą wydajność w warunkach obciążenia i niższy koszt, gdy jest mniej ruchu.
Więcej informacji można uzyskać, korzystając z rozwiązania PaaS. Pozwala ono ustawić automatyczną konfigurację, zarządzać wpisami tajnymi i je ładować (na przykład za pomocą usługi Azure Key Vault), monitorować aplikację, uruchamiać sesję profilowania na żywo i przeprowadzać wdrożenie 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: kod źródłowy jest zatwierdzany w repozytorium Git, a dostawca usług w chmurze uruchamia proces kompilujący, kompilujący i pakujący aplikację.
- Wdrożenie plików JAR, WAR lub EAR: Pakujesz aplikację, zazwyczaj jako plik wykonywalny JAR (Java ARchive), ale możliwe są również war (aplikacja internetowa 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 zwykle podobny, a główna różnica to miejsce uruchomienia procesu. 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ń, które widzieliśmy i oferujemy bardzo określoną funkcję: funkcje bezserwerowe są przeznaczone do uruchamiania przez krótki czas. Zwykle funkcja jest wybudzana przez zdarzenie, takie jak żądanie HTTP, i pozostaje aktywna przez kilka minut, aż do momentu powrotu do trybu uśpienia.
Funkcje udostępniają funkcje rozwiązaniu PaaS, które opisano wcześniej. Na platformie Azure nasze rozwiązanie PaaS (Azure App Service) i nasze rozwiązanie bezserwerowe (Azure Functions) są technicznie podobne oraz współużytkują część typowego kodu i usług.
W przypadku opcji wdrażania usługa Functions zwykle działa z plikami JAR. Dostępne są inne opcje, takie jak platforma Docker, ale są one mniej popularne i zwykle nie działają równie dobrze. Wynika to z faktu, że platforma bazowa nie może zoptymalizować ich tak samo jak w przypadku plików JAR.
Funkcje bezserwerowe z racji ich charakteru muszą być specjalnie kodowane. Ich funkcje zależą od dostawcy usług w chmurze, od którego są uruchamiane, a ich krótki czas użytkowania sprawia, że korzystanie z tradycyjnych rozwiązań, takich jak buforowanie lub replikacja sesji HTTP.
Funkcje bezserwerowe można łatwo skalować i zapewniają najlepszą cenę dla środowisk cechujących się niskim zużyciem. Jednocześnie mogą reagować na najbardziej wymagające obciążenia spowodowane ruchem.