Sdílet prostřednictvím


Model spolehlivé webové aplikace pro Javu

Tento článek obsahuje pokyny k implementaci vzoru Reliable Web App. Tento model popisuje, jak znovu vytvořit webové aplikace pro migraci do cloudu. Poskytuje preskriptivní architekturu, kód a pokyny ke konfiguraci, které odpovídají principům architektury Azure Well-Architected Framework.

Proč používat model Reliable Web App pro Javu?

Model Reliable Web App je sada principů a technik implementace, které definují, jak přepracovat webové aplikace při jejich migraci na novou platformu v cloudu. Zdůrazňuje minimální aktualizace kódu, aby se zajistil úspěch v cloudu. Tyto pokyny používají referenční implementaci jako konzistentní příklad v celém prostředí. Následuje proces změny platformy fiktivní společnosti Contoso Fiber a poskytuje obchodní kontext pro vaši vlastní migraci. Než Contoso Fiber implementuje model Reliable Web App pro Javu, funguje monolitický místní systém pro správu účtů zákazníků (CAMS) vytvořený pomocí architektury Spring Boot.

Návod

Logo GitHubu Referenční implementace (ukázka) vzoru Reliable Web App představuje konečný stav dokončené implementace. Tato webová aplikace na podnikové úrovni zahrnuje všechny aktualizace kódu, architektury a konfigurace popsané v tomto článku. Nasaďte a použijte referenční implementaci, která vám pomůže provést vlastní implementaci modelu Reliable Web App.

Implementace vzoru Reliable Web App

Konkrétní pokyny, které potřebujete, najdete v následujících částech tohoto článku:

  • Obchodní kontext: Srovnejte tyto pokyny s obchodním kontextem a naučte se definovat okamžité a dlouhodobé cíle, které řídí replatforming rozhodnutí.

  • Pokyny k architektuře: Vyberte správné cloudové služby a navrhněte architekturu, která splňuje vaše obchodní požadavky.

  • Pokyny pro kód: Implementujte vzory návrhu opakování, jističe a Cache-Aside za účelem zlepšení spolehlivosti a efektivity výkonu webové aplikace v cloudu.

  • Pokyny ke konfiguraci: Konfigurace ověřování a autorizace, spravovaných identit, prostředí s právy, infrastruktury jako kódu (IaC) a monitorování

Obchodní kontext

Prvním krokem při opětovném vytvoření webové aplikace je definování obchodních cílů. Nastavte okamžité cíle, jako jsou cíle úrovně služeb (SLO) a cíle optimalizace nákladů spolu s budoucími cíli vaší webové aplikace. Tyto cíle ovlivňují vaši volbu cloudových služeb a architekturu vaší aplikace v cloudu. Definujte cílové SLO pro vaši webovou aplikaci, například 99.9% dobu provozu. Vypočítejte složenou smlouvu o úrovni služeb (SLA) pro všechny služby, které ovlivňují dostupnost vaší webové aplikace.

Společnost Contoso Fiber chce rozšířit svou místní webovou aplikaci CAMS tak, aby se dostala do jiných oblastí. Aby bylo možné splnit zvýšenou poptávku po webové aplikaci, společnost stanoví následující cíle:

  • Použijte změny kódu s nízkými náklady a vysokou hodnotou.
  • Dosáhnout SLO 99,9 %.
  • Osvojte si postupy DevOps.
  • Vytvořte prostředí optimalizovaná pro náklady.
  • Zvýšení spolehlivosti a zabezpečení

Společnost Contoso Fiber určuje, že její místní infrastruktura není nákladově efektivním řešením škálování aplikace. Společnost se rozhodne, že migrace webové aplikace CAMS do Azure je nákladově nejefektivnější způsob, jak dosáhnout svých okamžitých a budoucích cílů.

Pokyny pro architekturu

Model Reliable Web App má několik základních prvků architektury. Ke správě překladu koncových bodů, firewallu webových aplikací k blokování škodlivého provozu HTTP a nástroje pro vyrovnávání zatížení ke směrování a ochraně příchozích uživatelských požadavků potřebujete DNS (Domain Name System). Aplikační platforma hostuje kód webové aplikace a volá back-endové služby prostřednictvím privátních koncových bodů ve virtuální síti. Nástroj pro monitorování výkonu aplikace zaznamenává metriky a protokoly, které vám pomůžou porozumět vaší webové aplikaci.

Diagram znázorňující základní prvky architektury modelu Reliable Web App

Návrh architektury

Navrhněte infrastrukturu tak, aby podporovala metriky obnovení, jako je cíl doby obnovení (RTO) a cíl bodu obnovení (RPO). RTO má vliv na dostupnost a musí podporovat vaše SLO. Určete cíl bodu obnovení a nakonfigurujte redundanci dat tak, aby splňovala cíl bodu obnovení.

Výběr správných služeb Azure

Když webovou aplikaci přesunete do cloudu, zvolte služby Azure, které splňují vaše obchodní požadavky, a v souladu s funkcemi místní webové aplikace. Toto zarovnání pomáhá minimalizovat námahu při přechodu na jinou platformu. Použijte například služby, které umožňují zachovat stejný databázový stroj a podporovat stávající middleware a architektury.

Před migrací je webová aplikace CAMS společnosti Contoso Fiber nasazená na místě jako monolitická aplikace v jazyce Java. Jedná se o aplikaci Spring Boot s databází PostgreSQL. Webová aplikace je obchodní (LOB) aplikace pro podporu zaměstnanců. Používají ho ke správě případů zákaznické podpory. Aplikace má běžné problémy se škálovatelností a nasazením funkcí. Tento výchozí bod spolu s obchodními cíli a SLO ovlivňuje jejich volby služeb.

Následující seznam obsahuje pokyny k výběru správných služeb Azure pro vaši webovou aplikaci a popisuje, proč Společnost Contoso Fiber vybírá konkrétní služby:

  • Aplikační platforma: Jako aplikační platformu použijte Azure App Service . Contoso Fiber používá app Service z následujících důvodů:

    • Přirozený průběh: Společnost Contoso Fiber nasadí Spring Boot JAR soubor na místní server a chce minimalizovat přepracování architektury tohoto modelu nasazení. App Service poskytuje robustní podporu spouštění aplikací Spring Boot, díky čemuž je vhodná možnost. Azure Container Apps je také vhodná možnost pro tuto aplikaci. Další informace najdete v tématu Přehled container Apps a Java v Container Apps – přehled.

    • Vysoká smlouva SLA: App Service poskytuje vysokou smlouvu SLA, která splňuje produkční požadavky.

    • Nižší režijní náklady na správu: App Service je spravované hostitelské řešení.

    • Funkce kontejnerizace: App Service se integruje s privátními registry imagí kontejnerů, jako je Azure Container Registry. Společnost Contoso Fiber může tyto registry použít ke kontejnerizaci webové aplikace v budoucnu.

    • Automatické škálování: Webová aplikace může rychle vertikálně navýšit kapacitu, vertikálně snížit kapacitu, horizontálně zúžit kapacitu a horizontálně rozšířit kapacitu na základě uživatelského provozu.

  • Správa identit: Jako řešení pro správu identit a přístupu použijte Microsoft Entra ID . Společnost Contoso Fiber používá ID Microsoft Entra z následujících důvodů:

    • Ověřování a autorizace: Aplikace musí ověřovat a autorizovat zaměstnance call center.

    • Škálovatelnost: Microsoft Entra ID škáluje na podporu větších scénářů.

    • Řízení identit uživatelů: Zaměstnanci call centra můžou používat své stávající podnikové identity.

    • Podpora autorizačního protokolu: Microsoft Entra ID podporuje OAuth 2.0 pro spravované identity.

  • Databáze: Použijte službu, která umožňuje zachovat stejný databázový stroj. Výběr provedete pomocí rozhodovacího stromu úložiště dat . Contoso Fiber používá model nasazení flexibilního serveru Azure Database for PostgreSQL z následujících důvodů:

    • Spolehlivost: Model nasazení flexibilního serveru podporuje zónově redundantní vysokou dostupnost napříč několika zónami dostupnosti. Tato konfigurace udržuje záložní pohotovostní server v jiné zóně dostupnosti ve stejné oblasti Azure. Konfigurace replikuje data synchronně na pohotovostní server.

    • Replikace mezi oblastmi: Azure Database for PostgreSQL poskytuje funkci repliky pro čtení pro asynchronní replikaci dat do databáze repliky jen pro čtení v jiné oblasti.

    • Představení: Azure Database for PostgreSQL poskytuje předvídatelný výkon a inteligentní ladění, které zlepšuje výkon databáze pomocí skutečných dat o využití.

    • Nižší režijní náklady na správu: Tato spravovaná služba Azure snižuje povinnosti správy.

    • Podpora migrace: Podporuje migraci databází z místních databází PostgreSQL s jedním serverem. Společnost Contoso Fiber může pomocí nástroje pro migraci zjednodušit proces migrace.

    • Konzistence s místními konfiguracemi: Podporuje různé komunitní verze PostgreSQL, včetně verze, kterou Contoso Fiber aktuálně používá.

    • Odolnost: Flexibilní nasazení serveru automaticky vytvoří zálohy serveru a uloží je do zónově redundantního úložiště (ZRS) ve stejné oblasti. Společnost Contoso Fiber může databázi obnovit k libovolnému bodu v čase během doby uchovávání záloh. Funkce zálohování a obnovení nabízí lepší RPO v porovnání s lokálními prostředími.

  • Monitorování výkonu aplikací: Pomocí Application Insights můžete analyzovat telemetrii ve vaší aplikaci. Contoso Fiber používá Application Insights z následujících důvodů:

    • Integrace se službou Azure Monitor: Poskytuje nejlepší integraci se službou Azure Monitor.

    • Detekce anomálií: Automaticky detekuje anomálie výkonu.

    • Řešení problémů: Pomáhá diagnostikovat problémy ve spuštěné aplikaci.

    • Monitorování: Shromažďuje data o využití aplikace a sleduje vlastní události.

    • Mezera viditelnosti: Místní řešení nemá řešení pro monitorování výkonu aplikací. Application Insights poskytuje snadnou integraci s aplikační platformou a kódem.

  • Mezipaměť: Zvolte, jestli chcete do architektury webové aplikace přidat mezipaměť. Azure Managed Redis je primární řešení mezipaměti Azure. Jedná se o spravované úložiště dat v paměti založené na softwaru Redis. Contoso Fiber přidá Azure Managed Redis z následujících důvodů:

    • Rychlost a hlasitost: Poskytuje vysokou propustnost dat a čtení s nízkou latencí pro často přístupná a pomalá data.

    • Různorodá podpora: Jedná se o jednotné umístění mezipaměti, které můžou používat všechny instance webové aplikace.

    • Externí úložiště dat: Místní aplikační servery používají místní ukládání do mezipaměti virtuálního počítače. Toto nastavení nenačítá často přístupná data a nemůže zneplatnit zastaralá data.

    • Nepřilehlé relace: Mezipaměť umožňuje webové aplikaci provádění externalizace stavu relace a používání nepřilehlých relací. Většina java webových aplikací, které běží lokálně, závisí na ukládání do mezipaměti v paměti na straně klienta. Tento přístup není dobře škálovatelný a zvyšuje nároky na paměť na hostiteli. Azure Managed Redis poskytuje spravovanou škálovatelnou službu mezipaměti, která zlepšuje škálovatelnost a výkon aplikací. Společnost Contoso Fiber použila Spring Cache jako rámec pro abstrakci mezipaměti a potřebovala pouze minimální změny konfigurace pro přechod od poskytovatele Ehcache na Redis.

  • Nástroj pro vyrovnávání zatížení: Webové aplikace, které používají řešení PaaS (Platforma jako služba), by měly v závislosti na architektuře a požadavcích webové aplikace používat Azure Front Door, Azure Application Gateway nebo obojí. Pomocí rozhodovacího stromu nástroje pro vyrovnávání zatížení vyberte správný nástroj pro vyrovnávání zatížení. Společnost Contoso Fiber potřebuje nástroj pro vyrovnávání zatížení vrstvy 7, který může směrovat provoz napříč několika oblastmi a webovou aplikací s více oblastmi, aby splňoval cíl úrovně služby 99,9%. Společnost používá Azure Front Door z následujících důvodů:

    • Globální vyrovnávání zatížení: Tento nástroj pro vyrovnávání zatížení vrstvy 7 může směrovat provoz napříč několika oblastmi.

    • Firewall webových aplikací: Nativně se integruje se službou Azure Web Application Firewall.

    • Flexibilita směrování: Umožňuje týmu aplikace konfigurovat požadavky na ingress, aby podporovaly budoucí změny v aplikaci.

    • Zrychlení provozu: Používá směrování libovolného vysílání k dosažení nejbližšího bodu přítomnosti Azure a k vyhledání nejrychlejší trasy do webové aplikace.

    • Vlastní domény: Podporuje vlastní názvy domén s flexibilním ověřováním domény.

    • Zdravotní sondy: Aplikace potřebuje inteligentní zdravotní monitorování sond. Azure Front Door používá odpovědi z sondy k určení nejlepšího zdroje pro směrování požadavků klientů.

    • Podpora monitorování: Azure Front Door podporuje integrované sestavy s řídicím panelem typu all-in-one pro azure Front Door i vzory zabezpečení. Poskytuje výstrahy, které se integrují se službou Azure Monitor. Azure Front Door umožňuje aplikaci protokolovat jednotlivé požadavky a neúspěšné sondy stavu.

    • Distribuovaná ochrana proti odepření služby (DDoS): Má integrovanou ochranu před útoky DDoS na vrstvě 3 a vrstvě 4.

    • Síť pro doručování obsahu: Společnost Contoso Fiber je připravena k využití sítě pro doručování obsahu. Síť pro doručování dat poskytuje zrychlení webu.

  • Firewall webových aplikací: Použijte Azure Web Application Firewall k zajištění centralizované ochrany před běžnými webovými zneužitími a ohroženími zabezpečení. Contoso Fiber používá Azure Web Application Firewall z následujících důvodů:

    • Globální ochrana: Poskytuje vylepšenou globální ochranu webových aplikací při zachování výkonu.

    • Ochrana botnetu: Tým může monitorovat a konfigurovat nastavení pro řešení problémů zabezpečení souvisejících s botnety.

    • Parita s místním prostředím: Místní řešení běží za firewallem webových aplikací, který spravuje IT.

    • Snadné použití: Azure Web Application Firewall se integruje se službou Azure Front Door.

  • Správce tajných kódů: Azure Key Vault použijte, pokud máte tajné kódy pro správu v Azure. Contoso Fiber používá key Vault z následujících důvodů:

    • Šifrování: Podporuje šifrování neaktivních uložených a přenášených dat.

    • Podpora spravované identity: Aplikační služby můžou používat spravované identity pro přístup k úložišti tajných kódů.

    • Monitorování a protokolování: Key Vault usnadňuje přístup k auditu a generuje výstrahy při změně uložených tajných kódů.

    • Integrace: Key Vault poskytuje nativní integraci se službou Azure Configuration Store (Azure App Configuration) a platformou pro hostování webů (App Service).

  • Zabezpečení koncových bodů: Pomocí služby Azure Private Link můžete přistupovat k řešením PaaS přes privátní koncový bod ve vaší virtuální síti. Provoz mezi vaší virtuální sítí a službou prochází přes páteřní síť Microsoftu. Společnost Contoso Fiber používá službu Private Link z následujících důvodů:

    • Komunikace s rozšířeným zabezpečením: Umožňuje aplikaci privátní přístup ke službám na platformě Azure a snižuje síťové nároky úložišť dat, aby se chránila před únikem dat.

    • Minimální úsilí: Privátní koncové body podporují platformu webové aplikace a databázovou platformu, kterou webová aplikace používá. Obě platformy zrcadlí stávající místní konfigurace, takže se vyžaduje minimální změna.

  • Zabezpečení sítě: Azure Firewall slouží k řízení příchozího a odchozího provozu na úrovni sítě. Pomocí služby Azure Bastion se připojte k virtuálním počítačům s rozšířeným zabezpečením bez vystavení portů RDP/SSH (Remote Desktop Protocol/Secure Shell). Contoso Fiber přijímá hierarchickou síťovou topologii typu hub-and-spoke a umisťuje sdílené služby zabezpečení sítě do centrálního uzlu. Azure Firewall prověřuje odchozí provoz z přípojek, aby se zlepšilo zabezpečení sítě. Společnost používá Azure Bastion pro nasazení s rozšířeným zabezpečením z jump hostu v podsíti DevOps.

Pokyny pro kód

Pokud chcete úspěšně přesunout webovou aplikaci do cloudu, musíte aktualizovat kód webové aplikace pomocí vzorů Retry, Circuit Breaker a Cache-Aside.

Diagram znázorňující role vzorů návrhu v modelu Reliable Web App

Následující vzory návrhu poskytují výhody v oblasti zátěže, které odpovídají jednomu nebo více pilířům Well-Architected Framework.

  1. Vzor opakování zpracovává přechodné selhání opakováním operací, které můžou občas selhat. Tento model implementujte u všech odchozích volání do jiných služeb Azure.

  2. Vzorce Circuit Breaker zabraňuje aplikaci v opakování operací, které nejsou přechodné. Tento model implementujte ve všech odchozích voláních do jiných služeb Azure.

  3. Vzor Cache-Aside načítá data na vyžádání do mezipaměti z úložiště dat. Tento model implementujte u požadavků na databázi.

Návrhový vzor Spolehlivost (RE) Zabezpečení (SE) Optimalizace nákladů (CO) Efektivita provozu (OE) Efektivita výkonu (PE) Podpora principů WAF
Vzor opakování RE:07
Vzor návrhu jističe RE:03
RE:07
PE:07
PE:11
vzorCache-Aside RE:05
PE:08
PE:12

Implementace vzoru opakování

Přidejte do kódu aplikace vzor Opakování , který řeší dočasné přerušení služeb. Těmto přerušením se říká přechodné chyby. Přechodné chyby se obvykle řeší během několika sekund. Vzor opakování můžete použít k opětovnému odeslání neúspěšných požadavků. Umožňuje také nakonfigurovat zpoždění mezi jednotlivými pokusy o opakování a nastavit počet pokusů, které se mají uskutečnit před přijetím neúspěchu.

K implementaci vzoru Opakování v Javě použijte lehkou knihovnu pro toleranci chyb Resilience4j. Pokud chcete přidat vzorec opakování, referenční implementace označuje metodu kontroleru listServicePlans plánu služby pomocí poznámek retry. Kód opakuje volání seznamu plánů služeb z databáze, pokud se počáteční volání nezdaří. Zásady opakování pro referenční implementaci zahrnují maximální počet pokusů, dobu čekání a výjimky pro opakování. Nakonfigurujte politiku opakování v souboru application.properties.

    @GetMapping("/list")
    @PreAuthorize("hasAnyAuthority('APPROLE_AccountManager')")
    @CircuitBreaker(name = SERVICE_PLAN)
    @Retry(name = SERVICE_PLAN)
    public String listServicePlans(Model model) {
        List<serviceplandto> servicePlans = planService.getServicePlans();
        model.addAttribute("servicePlans", servicePlans);
        return "pages/plans/list";
    }

Implementace vzoru Jistič

Pomocí Circuit Breaker patternu můžete efektivně zvládat výpadky služeb, které nejsou přechodnými poruchami. Model Jistič brání aplikaci v nepřetržitém pokusu o přístup k nereagující službě. Uvolní aplikaci a pomáhá zabránit plýtvání cykly jednotek centrálního zpracování (CPU), aby aplikace zachovala integritu výkonu pro uživatele.

Pomocí Spring Cloud Circuit Breaker a Resilience4j implementujte schéma jističe. Referenční implementace aplikuje vzor Circuit Breaker ozdobením metod pomocí atributu Circuit Breaker.

Implementujte vzor Cache-Aside

Přidejte vzor Cache-Aside do vaší webové aplikace, abyste zlepšili správu dat v paměti. Vzor přiřazuje aplikaci odpovědnost za zpracování požadavků na data a zajištění konzistence mezi mezipamětí a trvalým úložištěm, jako je databáze. Zkracuje dobu odezvy, vylepšuje propustnost a snižuje potřebu většího škálování. Snižuje také zatížení primárního úložiště dat, což zlepšuje spolehlivost a optimalizaci nákladů. Pokud chcete implementovat vzor Cache-Aside, postupujte podle těchto doporučení:

  • Nakonfigurujte aplikaci tak, aby používala mezipaměť. Pokud chcete povolit ukládání do mezipaměti, přidejte balíček spring-boot-starter-cache jako závislost do souboru pom.xml . Tento balíček poskytuje výchozí konfigurace pro mezipaměť Redis.

  • Ukládání vysoce potřebných dat do mezipaměti Použijte vzor Cache-Aside na data s vysokou potřebou, aby se zlepšila jeho efektivita. Azure Monitor slouží ke sledování procesoru, paměti a úložiště databáze. Tyto metriky vám pomůžou určit, jestli můžete po použití vzoru Cache-Aside použít menší skladovou položku databáze. Pokud chcete do kódu ukládat konkrétní data do mezipaměti, přidejte poznámku @Cacheable . Tato anotace určuje Springu, které metody by měly mít své výsledky uložené v mezipaměti.

  • Udržujte data mezipaměti aktuální. Naplánujte pravidelné aktualizace mezipaměti pro synchronizaci s nejnovějšími změnami databáze. K určení optimální obnovovací frekvence použijte nestálost dat a uživatelské potřeby. Tento postup zajišťuje, že aplikace používá model Cache-Aside k zajištění rychlého přístupu a aktuálních informací. Výchozí nastavení mezipaměti nemusí vyhovovat vaší webové aplikaci. Tato nastavení můžete přizpůsobit v application.properties souboru nebo proměnných prostředí. Můžete například upravit spring.cache.redis.time-to-live hodnotu (vyjádřenou v milisekundách) a určit, jak dlouho mají data zůstat v mezipaměti před odebráním.

  • Zajistěte konzistenci dat. Implementujte mechanismy pro aktualizaci mezipaměti ihned po operacích zápisu databáze. K zajištění soudržnosti mezipaměti použijte aktualizace řízené událostmi nebo vyhrazené třídy správy dat. Konzistentní synchronizace mezipaměti s úpravami databáze je centrální pro Cache-Aside vzor.

Pokyny ke konfiguraci

Následující části obsahují pokyny k implementaci aktualizací konfigurace. Každý oddíl odpovídá jednomu nebo více pilířům architektury Well-Architected.

Konfigurace Spolehlivost (RE) Zabezpečení (SE) Optimalizace nákladů (CO) Efektivita provozu (OE) Efektivita výkonu (PE) Podpora principů WAF
Konfigurace ověřování a autorizace uživatelů SE:05 řekl:
OE:10
Implementace spravovaných identit SE:05 řekl:
OE:10
Nastavení práv k prostředím CO:05
CO:06
Implementace automatického škálování RE:06 řekl:
CO:12
PE:05
Automatizace nasazení prostředků OE:05
Implementace monitorování OE:07
PE:04

Konfigurace ověřování a autorizace uživatelů

Při migraci webových aplikací do Azure nakonfigurujte mechanismy ověřování a autorizace uživatelů. Postupujte podle těchto doporučení:

  • Použijte identitní platformu. K nastavení ověřování webových aplikací použijte platformu Microsoft Identity Platform. Tato platforma podporuje aplikace, které používají jeden adresář Microsoft Entra, více adresářů Microsoft Entra z různých organizací a identity Microsoftu nebo účty sociálních sítí.

    Startér Spring Boot pro Microsoft Entra ID](/azure/developer/java/spring-framework/spring-boot-starter-for-entra-developer-guide používá Spring Security a Spring Boot k zajištění snadné konfigurace a integrace. Poskytuje různé toky ověřování, automatickou správu tokenů, přizpůsobitelné zásady autorizace a možnosti integrace s komponentami Spring Cloud. Tento nástroj umožňuje jednoduchou integraci Microsoft Entra ID a OAuth 2.0 do aplikací Spring Boot bez ruční knihovny nebo konfigurace nastavení.

    Referenční implementace používá Microsoft Identity Platform (Microsoft Entra ID) jako zprostředkovatele identity pro webovou aplikaci. Používá autorizační kód OAuth 2.0 k přihlášení uživatele, který má účet Microsoft Entra. Následující fragment kódu XML definuje dvě požadované závislosti toku udělení autorizačního kódu OAuth 2.0. com.azure.spring: spring-cloud-azure-starter-active-directory Závislost umožňuje ověřování a autorizaci Microsoft Entra v aplikaci Spring Boot. org.springframework.boot: spring-boot-starter-oauth2-client Závislost umožňuje ověřování a autorizaci OAuth 2.0 v aplikaci Spring Boot.

    <dependency>
        <groupid>com.azure.spring</groupid>
        <artifactid>spring-cloud-azure-starter-active-directory</artifactid>
    </dependency>
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-oauth2-client</artifactid>
    </dependency>
    
  • Vytvořte registraci aplikace. Microsoft Entra ID vyžaduje registraci aplikace v primárním tenantu. Registrace aplikace pomáhá zajistit, aby uživatelé, kteří získají přístup k webové aplikaci, měli identity v hlavní instanci. Referenční implementace používá Terraform k vytvoření registrace aplikace Microsoft Entra ID společně s rolí správce účtů specifických pro aplikaci:

    resource "azuread_application" "app_registration" {
      display_name     = "${azurecaf_name.app_service.result}-app"
      owners           = [data.azuread_client_config.current.object_id]
      sign_in_audience = "AzureADMyOrg"  # single tenant
    
      app_role {
        allowed_member_types = ["User"]
        description          = "Account Managers"
        display_name         = "Account Manager"
        enabled              = true
        id                   = random_uuid.account_manager_role_id.result
        value                = "AccountManager"
      }
    }
    
  • Vynucujte autorizaci v aplikaci. Pomocí řízení přístupu na základě role (RBAC) přiřaďte k rolím aplikace nejnižší oprávnění. Definujte konkrétní role pro různé akce uživatelů, abyste se vyhnuli překrývání a zajistili srozumitelnost. Namapujte uživatele na příslušné role a ujistěte se, že mají přístup pouze k potřebným prostředkům a akcím. Nakonfigurujte Spring Security tak, aby používala úvodní sadu Spring Boot pro ID Microsoft Entra. Tato knihovna umožňuje integraci s ID Microsoft Entra a pomáhá zajistit bezpečné ověření uživatelů. Nakonfigurujte a povolte knihovnu MICROSOFT Authentication Library (MSAL), abyste získali přístup k dalším funkcím zabezpečení. Mezi tyto funkce patří ukládání tokenů do mezipaměti a automatická aktualizace tokenů.

    Referenční implementace vytvoří role aplikace, které odrážejí typy uživatelských rolí v systému správy účtů společnosti Contoso Fiber. Role se při autorizaci překládají na oprávnění. Mezi příklady rolí specifických pro aplikace v CAMS patří správce účtů, zástupce podpory úrovně 1 (L1) a zástupce služby Field Service. Role Správce účtů má oprávnění přidávat nové uživatele a zákazníky aplikací. Zástupce služby Field Service může vytvářet lístky podpory. Atribut PreAuthorize omezuje přístup ke konkrétním rolím.

        @GetMapping("/new")
        @PreAuthorize("hasAnyAuthority('APPROLE_AccountManager')")
        public String newAccount(Model model) {
            if (model.getAttribute("account") == null) {
                List<ServicePlan> servicePlans = accountService.findAllServicePlans();
                ServicePlan defaultServicePlan = servicePlans.stream().filter(sp -> sp.getIsDefault() == true).findFirst().orElse(null);
                NewAccountRequest accountFormData = new NewAccountRequest();
                accountFormData.setSelectedServicePlanId(defaultServicePlan.getId());
                model.addAttribute("account", accountFormData);
                model.addAttribute("servicePlans", servicePlans);
            }
            model.addAttribute("servicePlans", accountService.findAllServicePlans());
            return "pages/account/new";
        }
        ...
    

    K integraci s ID Microsoft Entra používá referenční implementace tok udělení autorizačního kódu OAuth 2.0 . Tento tok umožňuje uživateli přihlásit se pomocí účtu Microsoft. Následující úryvek kódu ukazuje, jak nakonfigurovat SecurityFilterChain k použití Microsoft Entra ID pro ověřování a autorizaci.

    @Configuration(proxyBeanMethods = false)
    @EnableWebSecurity
    @EnableMethodSecurity
    public class AadOAuth2LoginSecurityConfig {
        @Bean
        SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
                .and()
                    .authorizeHttpRequests()
                .requestMatchers(EndpointRequest.to("health")).permitAll()
                .anyRequest().authenticated()
                .and()
                    .logout(logout -> logout
                                .deleteCookies("JSESSIONID", "XSRF-TOKEN")
                                .clearAuthentication(true)
                                .invalidateHttpSession(true));
            return http.build();
        }
    }
    ...
    
  • Upřednostněte dočasný přístup k úložišti. Pomocí dočasných oprávnění můžete chránit před neoprávněným přístupem a porušením zabezpečení. Pomocí sdílených přístupových podpisů (SAS) můžete například omezit přístup k určitému časovému období. Uživatelské delegování SAS můžete použít k maximalizaci zabezpečení při udělení dočasného přístupu. Jedná se o jediný SAS, který používá přihlašovací údaje Microsoft Entra ID a nevyžaduje trvalý klíč účtu úložiště.

  • Vynucujte autorizaci v Azure. Pomocí Azure RBAC) přiřaďte identitám uživatelů nejnižší oprávnění. Azure RBAC definuje prostředky Azure, ke kterým mají identity přístup, co můžou s těmito prostředky dělat, a oblasti, ke kterým mají přístup.

  • Vyhněte se trvalým zvýšeným oprávněním. Pomocí Microsoft Entra Privileged Identity Management (PIM) udělte just-in-time (JIT) přístup k privilegovaným operacím. Vývojáři například často potřebují přístup na úrovni správce, aby mohli vytvářet a odstraňovat databáze, upravovat schémata tabulek a měnit uživatelská oprávnění. Při použití přístupu JIT obdrží identity uživatelů dočasná oprávnění k provádění privilegovaných úloh.

Implementace spravovaných identit

Používejte spravované identity pro všechny služby Azure, které je podporují. Spravovaná identita umožňuje prostředkům Azure, konkrétně identitám úloh, ověřování a interakci s ostatními službami Azure, aniž byste museli spravovat přihlašovací údaje. Pokud chcete migraci zjednodušit, můžete i nadále používat místní řešení ověřování pro hybridní a starší systémy, ale měli byste je co nejdříve převést na spravované identity. Pokud chcete implementovat spravované identity, postupujte podle těchto doporučení:

  • Vyberte správný typ spravované identity. Upřednostňujte spravované identity přiřazené uživatelem, pokud máte dva nebo více prostředků Azure, které potřebují stejnou sadu oprávnění. Tento přístup je efektivnější než vytváření spravovaných identit přiřazených systémem pro každý z těchto prostředků a přiřazování stejných oprávnění všem. Jinak použijte spravované identity přiřazené systémem.

  • Nakonfigurujte nejnižší oprávnění. Pomocí Azure RBAC udělte pouze oprávnění, která jsou zásadní pro operace, jako je vytvoření, čtení, aktualizace a odstranění (CRUD) v databázích, nebo přístup k tajemstvím. Oprávnění identit úloh jsou trvalá, takže identitám úloh nemůžete poskytnout oprávnění JIT ani krátkodobé oprávnění. Pokud Azure RBAC nepokrývá konkrétní scénář, doplňte Azure RBAC o zásady přístupu na úrovni služeb Azure.

  • Zajištění zabezpečení zbývajících tajných kódů Ukládejte všechny zbývající tajné kódy ve službě Key Vault. Načtěte tajné kódy ze služby Key Vault při spuštění aplikace místo během každého požadavku HTTP. Přístup s vysokou frekvencí v rámci požadavků HTTP může překročit limity transakcí služby Key Vault. Ukládání konfigurací aplikací v App Configuration

Nastavení práv k prostředím

Používejte úrovně výkonu (SKU) služeb Azure, které splňují potřeby jednotlivých prostředí, aniž by je překročily. Pokud chcete optimalizovat své prostředí, proveďte následující akce:

  • Odhad nákladů Pomocí cenové kalkulačky Azure můžete odhadnout náklady na každé prostředí.

  • Optimalizujte produkční prostředí. Produkční prostředí potřebují SKUs, které splňují SLA, funkce a škálování potřebné pro provoz. Nepřetržitě monitorujte využití prostředků a upravte skladové položky tak, aby odpovídaly skutečným požadavkům na výkon.

  • Optimalizujte předprodukční prostředí.Předprodukční prostředí by měla používat prostředky s nižšími náklady a využívat slevy, jako je plán Azure pro ceny za vývoj/testování. V těchto prostředích zakažte služby, které nejsou potřeba. Také se ujistěte, že předprodukční prostředí jsou dostatečně podobná produkčním prostředím, aby nedocházelo k rizikům. Udržujte tento zůstatek, abyste zajistili, že testování zůstane efektivní, aniž by se vám účtily zbytečné náklady.

  • K definování skladových položek použijte IaC. Implementujte IaC, abyste dynamicky vybrali a nasadily správné skladové položky na základě prostředí. Tento přístup zvyšuje konzistenci a zjednodušuje správu.

Například referenční implementace má volitelný parametr, který určuje skladovou položku k nasazení. Parametr prostředí určuje, že šablona Terraformu by měla nasadit vývojové skladové položky:

azd env set APP_ENVIRONMENT prod

Implementace automatického škálování

Automatické škálování pomáhá zajistit, aby webová aplikace zůstala odolná, responzivní a schopná efektivně zpracovávat dynamické úlohy. Pokud chcete implementovat automatické škálování, postupujte podle těchto doporučení:

  • Automatizujte horizontální navýšení kapacity. Použijte Azure autoscale pro automatizaci horizontálního škálování v produkčních prostředích. Nakonfigurujte pravidla automatického škálování, aby se škálování provádělo na základě klíčových metrik výkonu, čímž vaše aplikace zvládne různá zatížení.

  • Upřesněte triggery škálování. Pokud neznáte požadavky vaší aplikace na škálování, použijte jako trigger počátečního škálování využití procesoru. Zpřesněte triggery škálování tak, aby zahrnovaly další metriky, jako je ram, propustnost sítě a vstup/výstup disku (vstupně-výstupní operace). Cílem je shodovat chování webové aplikace za účelem lepšího výkonu.

  • Zadejte škálovatelnou vyrovnávací paměť. Nastavte prahové hodnoty škálování tak, aby se zahájilo škálování před dosažením maximální kapacity. Nakonfigurujte například škálování tak, aby probíhalo při 85% využití procesoru, a nečekejte, dokud nedosáhne 100%. Tento proaktivní přístup pomáhá udržovat výkon a vyhnout se potenciálním kritickým bodům.

Automatizace nasazení prostředků

Využijte automatizaci k nasazení a aktualizaci prostředků a kódu Azure napříč všemi prostředími. Postupujte podle těchto doporučení:

  • Použijte IaC. Nasaďte IaC pomocí kanálů kontinuální integrace a průběžného doručování (CI/CD). Azure poskytuje předem připravené šablony Bicep, json šablony Azure Resource Manageru (šablony ARM) a šablony Terraformu pro každý prostředek Azure.

  • Použijte kanál CI/CD. Pomocí kanálu CI/CD nasaďte kód ze správy zdrojového kódu do různých prostředí, jako je testování, příprava a produkce. Pokud pracujete s Azure DevOps, použijte Azure Pipelines. Použijte GitHub Actions pro projekty GitHubu.

  • Integrace testování jednotek Před nasazením do služby App Service určete prioritu spuštění a ověřování všech testů jednotek v rámci kanálu. Začleňte nástroje pro kvalitu kódu a testů, jako je SonarQube, abyste dosáhli komplexního pokrytí testů.

  • Osvojte si mockovací frameworky. K testování, které zahrnuje externí koncové body, použijte mockovací frameworky. Tyto architektury umožňují vytvářet simulované koncové body. Eliminují nutnost konfigurovat skutečné externí koncové body a zajistit jednotné testovací podmínky napříč prostředími.

  • Proveďte kontroly zabezpečení. Pomocí statického testování zabezpečení aplikací (SAST) můžete ve svém zdrojovém kódu najít chyby zabezpečení a chyby v kódu. Proveďte analýzu složení softwaru (SCA) a prozkoumejte rizika zabezpečení, která nejsou knihovnami a komponentami microsoftu. Integrujte nástroje pro tyto analýzy do GitHubu i Azure DevOps.

Konfigurace monitorování

Implementujte monitorování aplikací a platforem za účelem zvýšení efektivity provozu a efektivity výkonu vaší webové aplikace. Pokud chcete implementovat monitorování, postupujte podle těchto doporučení:

  • Shromážděte telemetrii aplikací. Pomocí automatického instrumentování v Application Insights můžete shromažďovat telemetrická data aplikací, jako je propustnost požadavků, průměrná doba trvání požadavků, chyby a monitorování závislostí. Abyste mohli tuto telemetrii používat, nemusíte měnit žádný kód. Spring Boot zaregistruje v Application Insights několik základních metrik, jako je java virtual machine (JVM), procesor a Tomcat. Application Insights automaticky shromažďuje z rozhraní protokolování, jako jsou Log4j a Logback.

    Referenční implementace umožňuje zapojení Application Insights pomocí Terraformu v konfiguraci služby App Service app_settings.

    app_settings = {
        APPLICATIONINSIGHTS_CONNECTION_STRING = var.app_insights_connection_string
        ApplicationInsightsAgent_EXTENSION_VERSION = "~3"
        ...
    }
    

    Další informace najdete v následujících článcích:

  • Vytvořte vlastní metriky aplikací. Implementujte instrumentaci založenou na kódu pro zachycení vlastní telemetrie aplikací přidáním sady Application Insights SDK a použitím jejího rozhraní API.

  • Monitorujte platformu. Povolte diagnostiku pro všechny podporované služby. Odešle diagnostiku do stejného cíle jako protokoly aplikace pro korelaci. Služby Azure vytvářejí protokoly platformy automaticky, ale ukládají je jenom při povolení diagnostiky. Povolte nastavení diagnostiky pro každou službu, která podporuje diagnostiku.

    Referenční implementace používá Terraform k povolení diagnostiky Azure na podporovaných službách. Následující kód Terraformu nakonfiguruje nastavení diagnostiky pro službu App Service:

    # Configure diagnostic settings for app service
    resource "azurerm_monitor_diagnostic_setting" "app_service_diagnostic" {
      name                           = "app-service-diagnostic-settings"
      target_resource_id             = azurerm_linux_web_app.application.id
      log_analytics_workspace_id     = var.log_analytics_workspace_id
      #log_analytics_destination_type = "AzureDiagnostics"
    
      enabled_log {
        category_group = "allLogs"
    
      }
    
      metric {
        category = "AllMetrics"
        enabled  = true
      }
    }
    

Nasazení referenční implementace

Referenční implementace vás provede simulovanou migrací místní aplikace Java do Azure ve společnosti Contoso Fiber. Upozorňuje také na požadované změny během počáteční fáze přijetí.

Následující architektura představuje konečný stav implementace modelu spolehlivé webové aplikace Contoso Fiber na základě jejich cílů.

Diagram znázorňující architekturu referenční implementace

Diagram znázorňující spolehlivou architekturu webových aplikací v Javě v Azure, která používá hvězdicovou síťovou topologii Uživatelé přistupují k aplikaci prostřednictvím služby Azure Front Door, která poskytuje globální vyrovnávání zatížení, firewall webových aplikací a ochranu před útoky DDoS. Azure Front Door směruje provoz do instancí služby App Service v primární oblasti a sekundární oblasti. Každá instance služby App Service hostuje webovou aplikaci Java Spring Boot a je integrovaná s Application Insights pro monitorování. Ověřování a autorizace spravuje Microsoft Entra ID. Aplikace používá flexibilní server Azure Database for PostgreSQL pro úložiště dat, nakonfigurovaný pro vysokou dostupnost a repliky pro čtení a Azure Managed Redis pro distribuované ukládání do mezipaměti. Key Vault ukládá tajné kódy, ke které se přistupuje prostřednictvím spravovaných identit. Private Link zabezpečuje připojení mezi aplikací, databází a dalšími prostředky PaaS. Architektura se nasadí do hvězdicové virtuální sítě. Centrum v primární oblasti obsahuje Azure Firewall a Azure Bastion pro zabezpečení a správu sítě a podsíť privátního koncového bodu Key Vault. Paprsky v primární a sekundární oblasti hostují aplikaci a databázi. Mezi podsítě patří další podsíť privátních koncových bodů, podsíť DevOps, podsíť integrace webové aplikace a podsíť privátního koncového bodu webové aplikace. Diagnostické protokoly a metriky se odesílají do služby Azure Monitor a Log Analytics. Ikona privátních zón DNS se nachází mezi primární a sekundární oblastí. Šipky označují tok dat a vztahy mezi komponentami a ilustrují model připravený pro produkční prostředí, škálovatelný a zabezpečený vzor pro migraci monolitické webové aplikace v Javě do Azure.

Stáhněte si soubor aplikace Visio s touto architekturou.

Další krok