Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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życia, aplikacje Java mogą skalować się 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.
| Typ | 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, programy uruchamiające zadania, prace wsadowe | Zadania SparkJobs, zadania ETL, Zadanie Spring Batch, zadanie potoku Jenkins | Zadanie usługi Container Apps |
Debugowanie
Podczas debugowania aplikacji Java w Container Apps, upewnij się, że sprawdzasz agenta in-process w Java 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, aby wcześniej zaplanować zapisywanie danych w współdzielonym magazynie, takim jak bazy danych i zasoby 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 aplikacja kontenera nie może zostać zbudowana, uruchomiona lub działać poprawnie, sprawdź, czy ścieżka artefaktu jest właściwie ustawiona w kontenerze.
Problemy z obsługą pakietu Buildpack: jeśli pakiet Buildpack nie obsługuje zależności lub wymaganą przez ciebie wersję 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: JVM domyślnie obsługuje sygnały
SIGTERMiSIGINT, i nie przekazuje ich do aplikacji, chyba że przechwycisz te sygnały i obsłużysz je w aplikacji zgodnie z potrzebami. Usługa Container Apps używa zarównoSIGTERMiSIGINTdo kontroli procesów. 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
stdoutlubstderrortak, 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.
- Dynamiczny poziom rejestratora: umożliwia uzyskiwanie dostępu i sprawdzanie różnych poziomów szczegółów dziennika bez modyfikacji kodu lub wymuszenia ponownego uruchamiania aplikacji. Możesz wyświetlić Ustaw dynamiczny poziom rejestratora w celach informacyjnych.
Skalowanie
Jeśli musisz upewnić się, że żądania z aplikacji front-end docierają do tego samego serwera lub jeśli twoja aplikacja front-end jest podzielona między wiele kontenerów, upewnij się, że włączono sticky sessions.
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 dostosowanie 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 CPU | Pamięć w gibibajtach (Gi) |
|---|---|---|
| Minimum | 0.25 | 0.5 |
| Maksimum | 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 usług i ich odnajdywanie są kluczowymi wymaganiami dotyczącymi utrzymania listy aktywnych instancji aplikacji. 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 wprowadza możliwość błędu popełnionego przez człowieka. 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 .
Gateway for Spring: Gateway for Spring oferuje wydajny i zaawansowany sposób kierowania, zarządzania i obsługiwania żądań API jako część 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.