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
iSIGINT
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, jakSIGTERM
iSIGINT
. 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
lubstderror
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.