Skalowanie przy użyciu kompleksowego zabezpieczeń, monitorowania i automatyzacji

Podczas projektowania aplikacji musimy określić, jak dostosować się do zmian obciążenia, odzyskać dane po nieoczekiwanych awariach, zminimalizować zagrożenia bezpieczeństwa itd. Chociaż można zacząć od podejścia próbnego i błędu, to zajmuje trochę czasu od innych celów organizacyjnych i może negatywnie wpłynąć na naszą reputację. Platforma Azure udostępnia wskazówki dotyczące architektury potrzebne do uzyskania rzeczy od samego początku. Masz również wszystko, czego potrzebujesz, aby utworzyć skalowalną aplikację — od najnowocześniejszego zabezpieczeń i automatycznego skalowania do usług pomocniczych dla danych, komunikatów, buforowania, monitorowania wydajności i automatyzacji. Wiele z tych usług pomocniczych opiera się również na popularnym oprogramowaniu typu open source — takim jak PostgreSQL, Redis, JMS i Kafka — dzięki czemu nie masz dostępu do zastrzeżonych rozwiązań.

Diagram z nagłówkiem

Teraz przyjrzyjmy się niektórym kluczowym usługom i funkcjom platformy Azure oraz sposobom ich używania do tworzenia skalowalnych aplikacji Java.

Rozszerzanie możliwości aplikacji Java — baz danych i obsługi komunikatów

Oprócz zapewniania kilku opcji uruchamiania kodu Java platforma Azure oferuje szeroką gamę w pełni zarządzanych usług do obsługi potrzeb bazy danych — w tym usług Azure Database for PostgreSQL, Azure Database for MySQL, MongoDB Atlas, Azure Cosmos DB, Azure SQL Database i Azure SQL Managed Instance. To samo dotyczy obsługi komunikatów z opcjami obejmującymi usługę Azure Service Bus, usługę Azure Event Hubs i platformę Apache Kafka dla platformy Confluent Cloud.

Warstwa Premium usługi Azure Service Bus obsługuje program JMS , model programowania usługi Java Messaging Service. Niezależnie od tego, czy aplikacje są uruchomione na maszynach wirtualnych, w rozwiązaniu Kubernetes, czy w pełni zarządzanych usługach PaaS, możesz szybko aprowizować i używać tych w pełni zarządzanych usług danych i obsługi komunikatów przy użyciu klientów typu open source, zestawów SDK języka Java platformy Azure, startów Spring i integracji serwera aplikacji. Wszystkie te elementy zapewniają gwarancje zgodności, dostępności i niezawodności, których można oczekiwać od firmy Microsoft i platformy Azure. Wielu deweloperów języka Java i platformy Spring chce używać bibliotek idiomatycznych, aby uprościć połączenia z preferowanymi usługami w chmurze. Firma Microsoft utrzymuje kompleksową listę bibliotek, sterowników i modułów , które umożliwiają łatwą interakcję z usługami platformy Azure między danymi, komunikatami, pamięcią podręczną, magazynem, zdarzeniami, katalogiem i wpisami tajnymi. Aby uzyskać więcej informacji, zobacz Przewodnik dla deweloperów platformy Azure spring Cloud.

Diagram przedstawiający funkcje platformy Spring Cloud na platformie Azure i skojarzone usługi platformy Azure.

Diagram przedstawiający kategorie funkcji i skojarzone usługi platformy Azure obsługiwane przez różne biblioteki, sterowniki i moduły Spring języka Java.

Zero-Trust — bezpieczna sieć

Aplikacje Java można zabezpieczyć, wdrażając je w usłudze Azure Virtual Network — podstawowy blok konstrukcyjny dla własnych sieci prywatnych na platformie Azure. Sieci wirtualne umożliwiają wielu typom zasobów platformy Azure bezpieczne komunikowanie się ze sobą, z Internetem oraz z lokalnymi sieciami i systemami. Możesz użyć sieci wirtualnej, aby odizolować aplikacje i obsługiwać usługi zaplecza z Internetu i umieścić je w sieciach prywatnych. Możesz przejąć pełną kontrolę nad przychodzącymi i wychodzącymi dla aplikacji i systemów zaplecza.

Diagram architektury referencyjnej usługi Azure Spring Apps.

Zero-Trust — kompleksowa bezpieczna komunikacja

Implementowanie bezpiecznej komunikacji w ramach architektury rozwiązania może być trudne. Wiele firm ręcznie wymienia certyfikaty lub tworzy własne rozwiązania w celu zautomatyzowania aprowizacji i konfiguracji. Nawet wtedy nadal istnieją zagrożenia eksfiltracji danych, takie jak nieautoryzowane kopiowanie lub transfer danych.

Za pomocą platformy Azure możesz zabezpieczyć kompleksową komunikację lub zakończyć zabezpieczenia na poziomie transportu w dowolnym punkcie komunikacji. Możesz również zautomatyzować aprowizowanie i konfigurację dla wszystkich zasobów platformy Azure potrzebnych do zabezpieczania komunikacji. Aby zobaczyć, jak działa w usłudze Azure Spring Apps, zobacz Kompleksowa komunikacja dla aplikacji Spring Boot — w środowisku Zero Trust. Proces jest podobny dla innych usług obliczeniowych platformy Azure, których można użyć do uruchamiania aplikacji Java.

W oparciu o zasadę "nigdy nie ufaj, zawsze weryfikuj i bez poświadczeń" , zero trust pomaga zabezpieczyć całą komunikację poprzez wyeliminowanie nieznanych i niezarządzanych certyfikatów, a także poprzez zaufanie tylko certyfikatów, które są współużytkowane przez weryfikację tożsamości przed udzieleniem dostępu do tych certyfikatów. Można użyć dowolnego typu certyfikatu TLS/SSL, w tym certyfikatów wystawionych przez urząd certyfikacji, certyfikatów rozszerzonej weryfikacji, certyfikatów wieloznacznych z obsługą dowolnej liczby domen podrzędnych lub certyfikatów z podpisem własnym dla środowisk deweloperskich i testowych.

Aplikacje Java lub Spring Boot mogą bezpiecznie ładować certyfikaty z usługi Azure Key Vault (omówione w dalszej części). Usługa Azure Key Vault kontroluje magazyn i dystrybucję certyfikatów w celu zmniejszenia przypadkowego wycieku. Aplikacje i usługi mogą bezpiecznie uzyskiwać dostęp do certyfikatów przy użyciu tożsamości zarządzanych, kontroli dostępu opartej na rolach i zasady najniższych uprawnień. To bezpieczne ładowanie jest obsługiwane przy użyciu dostawcy JCA (Java Cryptography Architecture) usługi Azure Key Vault.

Diagram architektury bezpiecznej komunikacji kompleksowej dla aplikacji Spring Boot.

Zero-Trust — zarządzanie wpisami tajnymi

Wiele aplikacji Java łączy się z usługami pomocniczymi przy użyciu adresów URL i poświadczeń — informacje, które, jeśli zostaną ujawnione, mogą służyć do uzyskania nieautoryzowanego dostępu do poufnych danych. Osadzanie takich informacji w samej aplikacji stanowi ogromne zagrożenie bezpieczeństwa z wielu powodów, w tym odnajdywanie za pośrednictwem repozytorium kodu. Wielu deweloperów zewnętrznych takich poświadczeń przy użyciu zmiennych środowiskowych, dzięki czemu wiele aplikacji może je załadować, ale zmienia to tylko ryzyko z samego kodu na środowisko wykonawcze.

Diagram z nagłówkiem

Usługa Azure Key Vault zapewnia lepszy, bezpieczniejszy i bardziej bezpieczny sposób ochrony wpisów tajnych. Zapewnia pełną kontrolę nad magazynem i dystrybucją wpisów tajnych aplikacji przy użyciu kontroli dostępu opartej na rolach (RBAC) i zasady najniższych uprawnień w celu ograniczenia dostępu. Zachowaj kontrolę nad wpisami tajnymi aplikacji — po prostu przyznaj aplikacjom uprawnienia do korzystania z nich zgodnie z potrzebami. Po uruchomieniu aplikacji przed udzieleniem dostępu do wpisów tajnych aplikacja uwierzytelnia się przy użyciu identyfikatora Microsoft Entra i autoryzowania usługi Azure Key Vault przy użyciu kontroli dostępu opartej na rolach platformy Azure. Usługa Azure Key Vault obejmuje pełne możliwości inspekcji i ma dwie warstwy usług: Standardowa, która szyfruje przy użyciu klucza oprogramowania i warstwę Premium, która obejmuje sprzętowe klucze chronione przez moduł zabezpieczeń (HSM).

Uwierzytelnianie i autoryzacja użytkownika końcowego

Większość aplikacji Java dla przedsiębiorstw wymaga uwierzytelniania i autoryzacji użytkownika, które można zaimplementować przy użyciu identyfikatora Entra firmy Microsoft — kompletnego rozwiązania do zarządzania tożsamościami i dostępem ze zintegrowanymi zabezpieczeniami. Konta użytkowników końcowych mogą być tożsamościami organizacyjnymi lub tożsamościami społecznościowymi z serwisu Facebook, Twitter lub Gmail przy użyciu identyfikatora Microsoft Entra i usługi Azure Active Directory B2C. Rozwiązania oparte na identyfikatorach Entra firmy Microsoft można zaimplementować przy użyciu biblioteki Microsoft Authentication Library for Java lub Spring Boot Starter dla firmy Microsoft Entra. Możesz również użyć dowolnego wybranego dostawcy tożsamości — takiego jak ForgeRock, Auth0, Ping lub Okta.

Monitorowanie kompleksowego monitorowania

Za pomocą platformy Azure możesz monitorować kompleksowe aplikacje Java przy użyciu dowolnego narzędzia i platformy. Alternatywnie można zaimplementować w pełni zarządzane, natywne monitorowanie — w tym monitorowanie wydajności aplikacji (APM) — przy użyciu Szczegółowe informacje aplikacji, funkcji usługi Azure Monitor. Zapewnia ona silną obsługę środowisk Java, Spring i, takich jak Micrometer i Spring Boot, umożliwiając szybkie identyfikowanie i rozwiązywanie problemów. Funkcje obejmują przesyłanie strumieniowe metryk na żywo, śledzenie żądań i czas odpowiedzi, śledzenie zdarzeń i zewnętrzne współczynniki zależności — wszystko, czego potrzebujesz, aby monitorować dostępność, wydajność, niezawodność i użycie aplikacji Java działających na platformie Azure lub lokalnie.

Kompleksowe monitorowanie można monitorować, agregując dzienniki i metryki w usłudze Log Analytics, narzędzie w witrynie Azure Portal, które może służyć do edytowania i uruchamiania zapytań dotyczących dzienników i danych metryk w usłudze Azure Monitor. Możesz napisać zapytanie zwracające zestaw rekordów, a następnie użyć usługi Log Analytics do sortowania, filtrowania i analizowania ich. Możesz też napisać bardziej zaawansowane zapytanie, aby przeprowadzić analizę statystyczną i zwizualizować wyniki na wykresie, ponieważ może być konieczne zidentyfikowanie określonego trendu. Niezależnie od tego, czy pracujesz z wynikami zapytań interaktywnie, czy używasz ich z innymi funkcjami usługi Azure Monitor, takimi jak alerty zapytań dzienników lub skoroszyty, usługa Log Analytics jest dobrym narzędziem do pisania i testowania zapytań.

Zdajemy sobie sprawę, że klienci, którzy przenoszą swoje aplikacje Java na platformę Azure, mogą nadal korzystać z tych samych narzędzi APM, których używają do monitorowania aplikacji lokalnych. Aby zapewnić obsługę tego użycia, nawiązaliśmy współpracowaliśmy z usługą New Relic, AppDynamics, Dynatrace i Elastic, aby zintegrować swoje rozwiązania do monitorowania z usługami aplikacja systemu Azure Service i Azure Spring Apps. Monitorowanie agentów jest uruchamiane obok kodu, a my instalujemy i aktualizujemy agentów. Podczas wdrażania w usłudze Azure Container Apps, Azure Kubernetes Service lub Virtual Machines można uruchomić dowolnego z tych agentów (w tym nowych agentów, AppDynamics, Dynatrace, Elastic i Datadog), ale musisz zainstalować je samodzielnie i zarządzać nimi. Podobnie można monitorować kompleksowe funkcje, agregując dzienniki i metryki w rozwiązaniu Elastic and Splunk.

Diagram z nagłówkiem

Zdajemy sobie również sprawę, że wielu klientów chce nadal używać narzędzia Grafana do wykonywania zapytań, wizualizowania, zgłaszania alertów i zrozumienia metryk. Z tego powodu współpracujemy z usługą Grafana Labs w celu dostarczania usługi Azure Managed Grafana, w pełni zarządzanej usługi, która umożliwia klientom natywne uruchamianie narzędzia Grafana na platformie Azure. Usługa ułatwia wdrażanie bezpiecznych i skalowalnych wystąpień narzędzia Grafana oraz łączenie ich z źródłami danych typu open source, chmury i innych firm na potrzeby wizualizacji i analizy. Usługa jest zoptymalizowana pod kątem źródeł danych natywnych dla platformy Azure, takich jak Azure Monitor i Azure Data Explorer, i obejmuje integrację monitorowania wydajności aplikacji (APM) z usługami obliczeniowymi platformy Azure, takimi jak aplikacja systemu Azure Service, Azure Spring Apps, Azure Kubernetes Service, Splunk, Datadog i Azure Virtual Machines.

Przyspieszanie aplikacji Java przy użyciu buforowania

Wraz ze wzrostem obciążeń aplikacji Java można zwiększyć wydajność przy użyciu usługi Azure Cache for Redis w celu zaimplementowania warstwy buforowania w pamięci na potrzeby wyników zapytań, stanów sesji i zawartości statycznej. Jest to doskonały sposób na zwiększenie przepływności aplikacji i zmniejszenie opóźnienia bez konieczności zmieniania architektury bazowej bazy danych. Warstwy przedsiębiorstwa usługi Azure Cache for Redis opracowane we współpracy z usługą Redis i w pełni zarządzane przez firmę Microsoft to najbardziej dostępna i skalowalna opcja wdrażania do uruchamiania usługi Redis na platformie Azure , w tym funkcje, takie jak aktywna replikacja geograficzna, zarządzanie sesjami zewnętrznymi oraz szybkie wyszukiwanie i indeksowanie.

Diagram z nagłówkiem

Automatyczne skalowanie

Wszystkie usługi "obliczeniowe" platformy Azure do uruchamiania aplikacji Java obsługują automatyczne skalowanie (skalowanie automatyczne), które mogą pomóc zmaksymalizować wydajność kosztową i dostosować się do zmieniających się obciążeń bez płacenia za większą pojemność niż potrzebujesz. Po włączeniu możesz mieć pewność, że skalowanie automatyczne zajmuje się podstawową infrastrukturą i obciążeniami aplikacji.

Diagram z nagłówkiem

Możesz automatycznie skalować w poziomie lub na podstawie obciążenia lub harmonogramu. W trybie opartym na obciążeniach (lub opartym na metrykach) aplikacje są skalowane w poziomie do zasobów potrzebnych do obsługi obciążenia do ustawionych limitów. Podobnie, gdy obciążenie zmniejsza się, zasoby są skalowane w poziomie, nigdy nie spadają poniżej ustawionych minimalnych wartości.

W trybie opartym na harmonogramie aplikacje są skalowane w poziomie i skalowane w poziomie na podstawie zdefiniowanego harmonogramu i limitów. Tryb oparty na harmonogramie jest przydatny w przypadku obciążeń, które są zgodne z przewidywalnym wzorcem i mogą służyć do ustanowienia punktu odniesienia w celu uzyskania większego skalowania opartego na obciążeniu.

Automatyzacja od pomysłu do środowiska produkcyjnego

W miarę przenoszenia aplikacji do chmury chcesz zautomatyzować wszystko — zgodnie z potrzebami w przypadku programowania w języku Java w skali przedsiębiorstwa. Należy rozważyć automatyczne skalowanie w celu rozwiązania problemów z obciążeniami aplikacji, jak opisano wcześniej. Należy jednak również skalować i automatyzować całe środowisko chmury — najlepiej od pomysłu do środowiska produkcyjnego — w tym jak szybko aprowizować nowe środowiska na potrzeby testowania, kontroli jakości, produkcji, wdrożeń niebieskich/zielonych, rozszerzania geograficznego itd.

Diagram przedstawiający pola dla kategorii Aprowizuj, Kompiluj i Wdróż ze skojarzonymi logo narzędzi opisanych w tej sekcji.

Platforma Azure umożliwia automatyzację od pomysłu do środowiska produkcyjnego przy użyciu szerokiej gamy narzędzi i platform. Na wysokim poziomie takie potoki automatyzacji można podzielić na trzy kategorie:

  • Potoki aprowizacji — możesz aprowizować zasoby platformy Azure przy użyciu szablonów terraform, szablonów usługi Azure Resource Manager (ARM), szablonów Bicep lub interfejsu wiersza polecenia platformy Azure, zgodnie z potrzebami, aby tworzyć powtarzalne skrypty w celu spójnego wirowania i uruchamiania środowisk.

  • Potoki kompilacji — na podstawie narzędzi, takich jak Maven lub Gradle, zgodnie z opisem we wcześniejszej części tej dokumentacji.

  • Potoki wdrażania — możesz użyć funkcji GitHub Actions, azure Pipelines, Jenkins Pipelines, GitLab Pipelines lub interfejsu wiersza polecenia platformy Azure, aby zautomatyzować wdrożenia kodu, w tym wdrożenia niebieskie/zielone, które zachowują krytyczne systemy w środowisku produkcyjnym podczas wdrażania aktualizacji kodu.

Kontynuuj korzystanie z istniejących rozwiązań i systemów

Podczas migracji lub kompilowania, a następnie skalowania aplikacji Java na platformie Azure, możesz użyć istniejących inwestycji w sieć, monitorowanie, automatyzację, dostawców tożsamości, systemy lokalne, narzędzie programistyczne i kompilowanie oraz biblioteki aplikacji. Poniższa tabela zawiera kilka przykładów:

Kategoria Produkty i usługi ekosystemu Java
Sieć F5, Palo Alto, Cloudflare, Checkpoint, Infoblox
Monitorowanie New Relic, Dynatrace, AppDynamics, Elastic, Splunk
Automation GitHub Actions, Azure Pipelines, Jenkins, GitLab
Dostawcy tożsamości Microsoft Entra ID, ForgeRock, Auth0, Ping, Okta
System lokalny Bazy danych (takie jak Oracle DB lub IBM DB2), komunikaty (takie jak IBM MQ lub TIBCO EMS), zdarzenia (takie jak Kafka), katalogi (takie jak Microsoft Entra ID, OpenLDAP lub IBM ID)
Narzędzia programistyczne IntelliJ, Visual Studio Code, Eclipse, Spring Tool Suite, Maven, Gradle

Architektury odwołań

Centrum architektury platformy Azure zawiera wskazówki dotyczące tworzenia rozwiązań na platformie Azure przy użyciu ustalonych wzorców i praktyk, w tym sposobu stosowania tych funkcji. Te architektury referencyjne są oparte na tym, czego dowiedzieliśmy się z zaangażowania klientów, biorąc pod uwagę optymalizację kosztów, doskonałość operacyjną, wydajność wydajności, niezawodność, skalowalność, bezpieczeństwo, monitorowanie, testowanie weryfikacyjne kompilacji i nie tylko. Dotyczą one również składników projektowania rozwiązań, takich jak strefy docelowe platformy Azure — środowiska do hostowania obciążeń, które są wstępnie aprowizowania za pośrednictwem infrastruktury jako kodu, zgodnie z potrzebami, aby umożliwić migracje aplikacji Java i opracowywanie aplikacji w skali przedsiębiorstwa.

Oto na przykład akcelerator strefy docelowej dla usługi Azure Spring Apps pokazujący, jak zaimplementować projekt piasty i szprych, w którym usługa Azure Spring Apps jest wdrażana w jednej szprychy, która jest zależna od usług udostępnionych hostowanych w centrum. Ten projekt został skompilowany za pomocą składników w celu osiągnięcia zestawów w witrynie Microsoft Azure Well-Architected Framework. Aby zapoznać się z implementacją tej architektury, zobacz repozytorium Akcelerator strefy docelowej usługi Azure Spring Apps w witrynie GitHub. To samo podejście można zastosować do dowolnych aplikacji Java wdrożonych w dowolnym miejscu docelowym "obliczeniowym" platformy Azure — takim jak aplikacja systemu Azure Service, Azure Container Apps lub Azure Kubernetes Service. Ponadto w przypadku migrowania istniejących aplikacji Java na platformę Azure mamy kompleksowy zestaw przewodników migracji i zalecanych strategii.

Diagram z nagłówkiem

Następny krok

Wybieranie odpowiednich usług platformy Azure dla aplikacji Java