Udostępnij za pośrednictwem


Omówienie języka Java w usłudze Azure Container Apps

Usługa Azure Container Apps może uruchamiać dowolną konteneryzowaną aplikację Java w chmurze, zapewniając elastyczne opcje wdrażania aplikacji.


Gdy używasz usługi Container Apps dla konteneryzowanych aplikacji Java, uzyskasz:

  • Ekonomiczne skalowanie: w przypadku korzystania z planu Zużycie aplikacje Java mogą być skalowane do zera. Skalowanie w miejscu, gdy nie ma większego zapotrzebowania na aplikację, automatycznie obniża koszty projektów.

  • Opcje wdrażania: usługa Azure Container Apps integruje się z pakietami Buildpack, co umożliwia wdrażanie bezpośrednio z kompilacji narzędzia Maven za pośrednictwem plików artefaktów lub z własnym plikiem Dockerfile.

    • Wdrożenie JAR (wersja zapoznawcza): aplikację kontenera można wdrożyć bezpośrednio z pliku JAR.

    • Wdrożenie WAR (wersja zapoznawcza): aplikację kontenera można wdrożyć bezpośrednio z pliku WAR.

    • Obsługa środowiska IDE: aplikację kontenera można wdrożyć bezpośrednio z poziomu środowiska IntelliJ.

  • Automatyczne dopasowywanie pamięci (wersja zapoznawcza): Usługa Container Apps optymalizuje sposób zarządzania pamięcią przez maszynę wirtualną Java (JVM), co umożliwia najbardziej dostępną pamięć aplikacjom Java.

  • Kompilowanie zmiennych środowiskowych (wersja zapoznawcza): możesz skonfigurować niestandardowe pary klucz-wartość w celu kontrolowania kompilacji obrazu Java na podstawie kodu źródłowego.

Ten artykuł zawiera szczegółowe informacje potrzebne do poznania podczas tworzenia aplikacji Java w usłudze Azure Container Apps.

Typy wdrożeń

Uruchamianie konteneryzowanych aplikacji zwykle oznacza, że musisz utworzyć plik Dockerfile dla aplikacji, ale uruchamianie aplikacji Java w usłudze Container Apps daje kilka opcji.

Type Opis Używa pakietu BuildPack Używa pliku Dockerfile
Kompilacja kodu źródłowego Możesz wdrożyć bezpośrednio w usłudze Container Apps z poziomu kodu źródłowego. Tak Nie.
Kompilacja artefaktu Możesz utworzyć kompilację narzędzia Maven w celu wdrożenia w usłudze Container Apps Tak Nie.
Dockerfile Plik Dockerfile można utworzyć ręcznie i przejąć pełną kontrolę nad wdrożeniem. Nie. Tak

Uwaga

Wdrożenia pakietu Buildpacks obsługują zestawy JDK w wersji 8, 11, 17 i 21.

Typy aplikacji

Różne typy aplikacji są implementowane jako pojedyncza aplikacja kontenera lub jako zadanie usługi Container Apps. Skorzystaj z poniższej tabeli, aby określić, który typ aplikacji jest najlepszy dla danego scenariusza.

Przykłady wymienione w tej tabeli nie są wyczerpujące, ale ułatwiają zrozumienie intencji różnych typów aplikacji.

Typ Przykłady Zaimplementuj jako...
Aplikacje internetowe i punkty końcowe interfejsu API Spring Boot, Quarkus, Apache Tomcat i Jetty Pojedyncza aplikacja kontenera
Aplikacje konsolowe, zaplanowane zadania, moduły uruchamiającego zadania podrzędne, zadania wsadowe Zadania SparkJobs, zadania ETL, zadanie spring batch, zadanie potoku jenkins Zadanie usługi Container Apps

Debugowanie

Podczas debugowania aplikacji Java w usłudze Container Apps upewnij się, że sprawdzasz agenta java w procesie pod kątem strumienia dzienników i komunikatów debugowania konsoli.

Rozwiązywanie problemów

Podczas tworzenia aplikacji Java należy pamiętać o następujących elementach:

  • Zasoby domyślne: domyślnie aplikacja ma pół procesora CPU i 1 GB dostępnego.

  • Procesy bezstanowe: w miarę skalowania i zwiększania skali aplikacji kontenera nowe procesy są tworzone i zamykane. Pamiętaj o zaplanowaniu z wyprzedzeniem, aby zapisywać dane w magazynie udostępnionym, takim jak bazy danych i udziały systemu plików. Nie należy oczekiwać, że żadne pliki zapisane bezpośrednio w systemie plików kontenera będą dostępne dla żadnego innego kontenera.

  • Skalowanie do zera jest wartością domyślną: jeśli musisz upewnić się, że co najmniej jedno wystąpienie aplikacji jest stale uruchomione, upewnij się, że zdefiniowano regułę skalowania, aby najlepiej spełnić twoje potrzeby.

  • Nieoczekiwane zachowanie: jeśli nie można skompilować, uruchomić lub uruchomić aplikacji kontenera, sprawdź, czy ścieżka artefaktu jest ustawiona poprawnie w kontenerze.

  • Problemy z obsługą pakietu BuildPack: jeśli pakiet Buildpack nie obsługuje zależności lub wymagana wersja języka Java, utwórz własny plik Dockerfile w celu wdrożenia aplikacji. Przykładowy plik Dockerfile można wyświetlić do celów referencyjnych.

  • Sygnały SIGTERM i SIGINT: domyślnie maszyny JVM obsługują SIGTERM i SIGINT sygnały i nie przekazują ich do aplikacji, chyba że przechwycisz te sygnały i odpowiednio obsłużysz je w aplikacji. Usługa Container Apps używa zarówno kontroli procesu, jak SIGTERM i SIGINT . Jeśli te sygnały nie zostaną przechwycone, a aplikacja zostanie nieoczekiwanie zakończona, może to spowodować utratę tych sygnałów, chyba że utrwalone zostaną one w magazynie.

  • Dostęp do obrazów kontenerów: jeśli używasz artefaktu lub wdrożenia kodu źródłowego w połączeniu z rejestrem domyślnym, nie masz bezpośredniego dostępu do obrazów kontenerów.

Monitorowanie

Wszystkie standardowe narzędzia do obserwacji współpracują z aplikacją Java. Podczas tworzenia aplikacji Java do uruchamiania w usłudze Container Apps należy pamiętać o następujących elementach:

  • Metryki: Metryki maszyny wirtualnej Java (JVM) mają kluczowe znaczenie dla monitorowania kondycji i wydajności aplikacji Java. Zebrane dane obejmują szczegółowe informacje na temat użycia pamięci, odzyskiwania pamięci, liczby wątków maszyny JVM. Możesz sprawdzić metryki , aby zapewnić kondycję i stabilność aplikacji.

  • Rejestrowanie: wysyłanie aplikacji i komunikatów o błędach do stdout lub stderror tak, aby mogły one być wyświetlane w strumieniu dziennika. Unikaj rejestrowania bezpośrednio w systemie plików kontenera, co jest typowe w przypadku korzystania z popularnych usług rejestrowania.

  • Konfiguracja monitorowania wydajności: Wdróż usługi monitorowania wydajności jako oddzielny kontener w środowisku usługi Container Apps, aby mógł uzyskiwać bezpośredni dostęp do aplikacji.

Diagnostyka

Usługa Azure Container Apps oferuje wbudowane narzędzia diagnostyczne wyłącznie dla deweloperów języka Java. Ta obsługa usprawnia debugowanie i rozwiązywanie problemów z aplikacjami Java uruchomionymi w usłudze Azure Container Apps w celu zwiększenia wydajności i łatwości.

  • Poziom dynamicznego rejestratora: umożliwia uzyskiwanie dostępu i sprawdzanie różnych poziomów szczegółów dziennika bez modyfikacji kodu lub wymuszanie ponownego uruchamiania aplikacji. Możesz wyświetlić opcję Ustaw dynamiczny poziom rejestratora w celu uzyskania informacji.

Skalowanie

Jeśli musisz upewnić się, że żądania z aplikacji frontonu docierają do tego samego serwera lub aplikacja frontonu jest podzielona między wiele kontenerów, upewnij się, że włączono sesje sticky.

Zabezpieczenia

Środowisko uruchomieniowe usługi Container Apps kończy protokół TLS/SSL dla Użytkownika w środowisku usługi Container Apps.

Zarządzanie pamięcią

Aby ułatwić optymalizowanie zarządzania pamięcią w aplikacji Java, możesz upewnić się, że dopasowanie pamięci JVM jest włączone w aplikacji.

Pamięć jest mierzona w gibibajtach (Gi) i parach rdzeni procesora CPU. W poniższej tabeli przedstawiono zakres zasobów dostępnych dla aplikacji kontenera.

Threshold Rdzenie procesora CPU Pamięć w gibibajtach (Gi)
Minimum 0.25 0.5
Maksymalnie 4 8

Rdzenie są dostępne w przyrostach 0,25 rdzeni z pamięcią dostępną przy współczynniku 2:1. Jeśli na przykład potrzebujesz 1,25 rdzeni, masz 2,5 Gi pamięci dostępnej dla aplikacji kontenera.

Uwaga

W przypadku aplikacji korzystających z zestawu JDK w wersji 9 i niższych należy zdefiniować niestandardowe ustawienia pamięci JVM w celu dopasowania ich do alokacji pamięci w usłudze Azure Container Apps.

Obsługa składników języka Java

Usługa Azure Container Apps oferuje obsługę następujących składników Java jako usług zarządzanych:

  • Serwer Eureka dla platformy Spring: Rejestracja i odnajdywanie usługi są kluczowymi wymaganiami dotyczącymi obsługi listy wystąpień aplikacji na żywo. Aplikacja używa tej listy do routingu i równoważenia obciążenia żądań przychodzących. Ręczne konfigurowanie każdego klienta wymaga czasu i wprowadzenie możliwości błędu ludzkiego. Serwer Eureka upraszcza zarządzanie odnajdywaniem usług, działając jako rejestr usług, w którym mikrousługi mogą się rejestrować i odnajdywać inne usługi w systemie.

  • Serwer konfiguracji spring: serwer konfiguracji zapewnia scentralizowane zewnętrzne zarządzanie konfiguracją dla systemów rozproszonych. Ten składnik zaprojektowany w celu sprostania wyzwaniom związanym z zarządzaniem ustawieniami konfiguracji w wielu mikrousługach w środowisku natywnym dla chmury .

  • Brama platformy Spring: usługa Gateway dla platformy Spring oferuje wydajny i zaawansowany sposób kierowania żądań interfejsu API oraz zarządzania nimi w ramach architektury mikrousług. Służy jako brama interfejsu API, która kieruje żądania zewnętrzne do różnych usług, dodając różne możliwości, takie jak filtrowanie, równoważenie obciążenia i inne.

  • Administrator platformy Spring: Składnik zarządzany przez administratora platformy Spring udostępnia interfejs administracyjny przeznaczony dla aplikacji internetowych Spring Boot, które mają punkty końcowe siłownika. Składnik zarządzany zapewnia integrację i zarządzanie aplikacją kontenera, umożliwiając powiązanie aplikacji kontenera ze składnikiem Admin for Spring.

Następne kroki