Spolehlivý vzor webové aplikace pro Javu – Použití vzoru

Azure App Service
Azure Front Door
Azure Cache for Redis
Microsoft Authentication Library for Java

V tomto článku se dozvíte, jak použít model Reliable Web App. Model Reliable Web App je sada principů a technik implementace, které definují, jak byste při migraci do cloudu měli upravovat webové aplikace (replatformovat). Zaměřuje se na minimální aktualizace kódu, které je potřeba udělat, aby byly úspěšné v cloudu.

Pro usnadnění použití těchto pokynů existuje referenční implementace modelu Reliable Web App, který můžete nasadit.

Diagram znázorňující architekturu referenční implementaceArchitektura referenční architektury implementace Stáhněte si soubor Visia této architektury.

Následující doprovodné materiály používají referenční implementaci jako příklad v celém příkladu. Pokud chcete použít model Spolehlivé webové aplikace, postupujte podle těchto doporučení, která odpovídají pilířům dobře navržená architektura:

Spolehlivost

Spolehlivost zajišťuje, že vaše aplikace může splňovat závazky, které uděláte pro vaše zákazníky. Další informace najdete v kontrolním seznamu pro kontrolu návrhu pro spolehlivost. Model Reliable Web App zavádí na úrovni kódu dva klíčové vzory návrhu, které zvyšují spolehlivost: vzor opakování a model Jistič.

Použití vzoru Opakování

Vzor opakování řeší dočasné přerušení služeb, označované jako přechodné chyby, které se obvykle řeší během několika sekund. Tyto chyby často vyplývají z omezování služeb, dynamické distribuce zatížení a problémů se sítí v cloudových prostředích. Implementace modelu opakování zahrnuje opětovné odeslání neúspěšných požadavků, což umožňuje konfigurovatelná zpoždění a pokusy před vyvolání výjimky.

Pomocí odolnosti 4j implementujte vzor opakování v Javě. Resilience4j je jednoduchá knihovna odolnosti proti chybám. Poskytuje funkce vyššího pořadí (dekorátory) pro vylepšení funkčních rozhraní, výrazů lambda a odkazů na metody pomocí jističe, limiteru rychlosti, opakování nebo vzoru návrhu bulkhead.

Příklad: Referenční implementace přidá model Opakování dekódováním metody listServicePlans kontroleru plánu služby s poznámkami Retry. Kód opakuje volání seznamu plánů služeb z databáze, pokud se počáteční volání nezdaří.

    @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";
    }

Referenční implementace konfiguruje zásady opakování, včetně maximálních pokusů, doby čekání a výjimek, které by se měly opakovat. Zásada opakování je nakonfigurovaná v application.propertiessouboru .

Použití modelu Jistič

Spárování vzorů opakování a jističe rozšiřuje schopnost aplikace zpracovávat přerušení služeb, které nesouvisí s přechodnými chybami. Model Jistič brání aplikaci v nepřetržitém pokusu o přístup k nereagující službě. Model Jistič uvolní aplikaci a zabraňuje plýtvání cykly procesoru, aby aplikace zachovala integritu výkonu pro koncové uživatele. Další informace naleznete v dokumentaci Spring Circuit Breaker a Resilience4j.

Příklad: Referenční implementace implementuje model Jistič dekódováním metod atributem Circuit Breaker.

Zabezpečení

Zabezpečení poskytuje záruky proti záměrným útokům a zneužití cenných dat a systémů. Další informace najdete v kontrolním seznamu pro kontrolu návrhu zabezpečení. Model Reliable Web App používá spravované identity k implementaci zabezpečení zaměřeného na identitu. Privátní koncové body, firewall webových aplikací a omezený přístup k webové aplikaci poskytují zabezpečený příchozí přenos dat.

Vynucení nejnižších oprávnění

Pokud chcete zajistit zabezpečení a efektivitu, udělte uživatelům (identitám uživatelů) a službám Azure (identitám úloh) oprávnění, která potřebují.

Přiřazení oprávnění identitám uživatelů

Vyhodnoťte, že aplikace potřebuje definovat sadu rolí, které pokrývají všechny akce uživatelů bez překrývání. Namapujte každého uživatele na nejvhodnější roli. Zajistěte, aby získali přístup pouze k tomu, co je nezbytné pro své povinnosti.

Přiřazení oprávnění identitám úloh

Udělte pouze oprávnění, která jsou důležitá pro operace, jako jsou akce CRUD v databázích nebo přístup k tajným kódům. Oprávnění identit úloh jsou trvalá, takže identitám úloh nemůžete poskytnout oprávnění za běhu ani krátkodobé oprávnění.

  • Upřednostněte řízení přístupu na základě role (RBAC). Vždy začněte s Azure RBAC a přiřaďte oprávnění. Nabízí přesnou kontrolu a zajišťuje, aby byl přístup auditovatelný i podrobný. Pomocí Azure RBAC udělte pouze oprávnění potřebná ke službě k provádění zamýšlených funkcí.

  • Dodatek k řízení přístupu na úrovni služby Azure Pokud Azure RBAC nepokrývá konkrétní scénář, doplňte zásady přístupu na úrovni služeb Azure.

Další informace naleznete v tématu:

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

Ověřování a autorizace jsou důležité aspekty zabezpečení webových aplikací. Ověřování je proces ověření identity uživatele. Autorizace určuje akce, které může uživatel provádět v rámci aplikace. Cílem je implementovat ověřování a autorizaci bez oslabování stavu zabezpečení. K splnění tohoto cíle musíte použít funkce aplikační platformy Azure (Aplikace Azure Service) a zprostředkovatele identity (Microsoft Entra ID).

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

Zabezpečte webovou aplikaci povolením ověřování uživatelů prostřednictvím funkcí vaší platformy. Aplikace Azure Služba podporuje ověřování pomocí zprostředkovatelů identity, jako je ID Microsoft Entra, a tím přesměrovává úlohu ověřování z vašeho kódu.

Příklad: Referenční implementace používá jako platformu identity ID Microsoft Entra. ID Microsoft Entra vyžaduje registraci aplikace v primárním tenantovi. Registrace aplikace zajišťuje uživatelům, kteří získají přístup k webové aplikaci, identity v primárním tenantovi. Následující kód Terraformu vytvoří registraci aplikace Entra ID spolu s rolí správce účtů specifickou 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"
  }
}

Key Vault bezpečně ukládá konfigurační data klienta a platformu App Service zpřístupňuje informace naší aplikaci jako proměnné prostředí.

Integrace se zprostředkovatelem identity

Integrujte webovou aplikaci s Microsoft Entra ID pro zabezpečené ověřování a autorizaci. Úvodní sada Spring Boot pro Microsoft Entra ID zjednodušuje tento proces s využitím Spring Security a Spring Boot pro snadné nastavení. Nabízí různé toky ověřování, automatickou správu tokenů a přizpůsobitelné zásady autorizace spolu s možnostmi integrace s komponentami Spring Cloudu. To umožňuje jednoduchou integraci Microsoft Entra ID a OAuth 2.0 do aplikací Spring Boot bez ruční knihovny nebo konfigurace nastavení.

Příklad: Referenční implementace používá platformu Microsoft Identity Platform (Microsoft Entra ID) jako zprostředkovatele identity pro webovou aplikaci. K přihlášení uživatele pomocí účtu Microsoft Entra používá autorizační kód OAuth 2.0. 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 podporuje 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>

Další informace najdete v tématu Spring Cloud podpora Azure for Spring Security.

Implementace obchodních pravidel ověřování a autorizace

Implementace obchodních pravidel ověřování a autorizace zahrnuje definování zásad řízení přístupu a oprávnění pro různé funkce a prostředky aplikace. Musíte nakonfigurovat 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, aby se uživatelé bezpečně ověřili. Konfigurace a povolení knihovny MSAL (Microsoft Authentication Library) poskytuje přístup k dalším funkcím zabezpečení. Mezi tyto funkce patří ukládání tokenů do mezipaměti a automatická aktualizace tokenů.

Příklad: Referenční implementace vytvoří role aplikace odrážející 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 vytvořit 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í fragment kódu ukazuje, jak nakonfigurovat SecurityFilterChain 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();
    }
}
...

Další informace naleznete v tématu:

Konfigurace ověřování a autorizace služby

Nakonfigurujte ověřování a autorizaci služby, aby služby ve vašem prostředí měly oprávnění k provádění nezbytných funkcí. Použití spravovaných identit v Microsoft Entra ID k automatizaci vytváření a správy identit služeb, odstranění ruční správy přihlašovacích údajů. Spravovaná identita umožňuje webové aplikaci bezpečně přistupovat ke službám Azure, jako je Azure Key Vault a databáze. Také usnadňuje integraci kanálů CI/CD pro nasazení do služby Aplikace Azure Service. Ve scénářích, jako jsou hybridní nasazení nebo starší systémy, ale k zjednodušení migrace pokračujte v používání místních řešení ověřování. Přechod na spravované identity, když je váš systém připravený na moderní přístup správy identit. Další informace najdete v tématu Monitorování spravovaných identit.

Příklad: Referenční implementace uchovává mechanismus místního ověřování pro databázi (uživatelské jméno a heslo). V důsledku toho referenční implementace ukládá tajný klíč databáze ve službě Key Vault. Webová aplikace používá spravovanou identitu (přiřazenou systémem) k načtení tajných kódů ze služby Key Vault.

Použití centrálního úložiště tajných kódů ke správě tajných kódů

Když přesunete aplikaci do cloudu, použijte Azure Key Vault k bezpečnému ukládání všech těchto tajných kódů. Toto centralizované úložiště nabízí zabezpečené úložiště, obměnu klíčů, auditování přístupu a monitorování služeb, které nepodporují spravované identity. Pro konfigurace aplikací se doporučuje Aplikace Azure Konfigurace.

Příklad: Referenční implementace ukládá následující tajné kódy ve službě Key Vault: (1) Uživatelské jméno a heslo databáze PostgreSQL, (2) heslo služby Redis Cache a (3) tajný klíč klienta pro Microsoft Entra ID přidružené k implementaci MSAL.

Neumisťujte službu Key Vault do toku požadavku HTTP

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. Key Vault je určený k bezpečnému ukládání a načítání citlivých dat během nasazování. Vysoká frekvence přístupu v rámci požadavků HTTP může překročit možnosti propustnosti služby Key Vault, což vede k omezením požadavků a chybám stavového kódu HTTP 429. Další informace najdete v tématu Omezení transakcí služby Key Vault.

Použití jedné metody pro přístup k tajným kódům ve službě Key Vault

Při konfiguraci webové aplikace pro přístup k tajným kódům ve službě Key Vault máte dvě primární možnosti:

  • Nastavení aplikace služby App Service: Pomocí nastavení aplikace ve službě App Service můžete tajný kód vložit přímo jako proměnnou prostředí.

  • Přímý odkaz na tajný kód: Přímo odkazujte na tajný kód v kódu vaší aplikace. Přidejte do souboru vlastností aplikace konkrétní odkaz, například application.properties pro aplikace v Javě, aby aplikace komunikuje se službou Key Vault.

Je důležité zvolit jednu z těchto metod a držet se s ní kvůli jednoduchosti a vyhnout se zbytečné složitosti. Tento proces zahrnuje integraci služby Key Vault s aplikací Spring:

  1. Do souboru pom.xml přidejte počáteční sadu Azure Spring Boot pro závislost tajných kódů služby Azure Key Vault.
  2. Nakonfigurujte koncový bod služby Key Vault ve vaší aplikaci. Můžete to provést buď prostřednictvím souboru application.properties, nebo jako proměnné prostředí.

Příklad: Referenční implementace používá nastavení aplikace ve službě App Service a vloží tajné kódy.

Použití privátních koncových bodů

Pro všechny podporované služby Azure používejte privátní koncové body ve všech produkčních prostředích. Privátní koncové body poskytují privátní připojení mezi prostředky ve virtuální síti Azure a službami Azure. Ve výchozím nastavení komunikace s většinou služeb Azure překračuje veřejný internet. Privátní koncové body nevyžadují žádné změny kódu, konfigurace aplikací ani připojovací řetězec. Další informace najdete v tématu Vytvoření privátního koncového bodu a osvědčených postupů pro zabezpečení koncových bodů.

Příklad: Referenční implementace používá privátní koncové body pro Key Vault, Azure Cache for Redis a Azure Database for PostgreSQL.

Použití firewallu webových aplikací

Veškerý příchozí internetový provoz do webové aplikace musí projít bránou firewall webových aplikací, aby se chránil před běžnými webovými zneužitími. Vynutit průchod veškerého příchozího internetového provozu přes veřejný nástroj pro vyrovnávání zatížení, pokud ho máte, a bránu firewall webových aplikací. Můžete (1) použít privátní koncový bod služby Azure Front Door, nebo (2) můžete filtrovat požadavky podle hodnoty hlavičky X-Azure-FDID .

Platforma App Service a Java Spring můžou filtrovat podle hodnoty hlavičky. Jako první možnost byste měli použít službu App Service. Filtrování na úrovni platformy brání nežádoucím požadavkům v dosažení kódu. Musíte nakonfigurovat, jaký provoz chcete projít bránou firewall webových aplikací. Můžete filtrovat podle názvu hostitele, IP adresy klienta a dalších hodnot. Další informace naleznete v tématu Zachování původního názvu hostitele HTTP.

Příklad: Referenční implementace používá privátní koncový bod v produkčním prostředí a X-Azure-FDID hodnotu hlavičky ve vývojovém prostředí.

Konfigurace zabezpečení databáze

Správa istrator-level přístup k databázi uděluje oprávnění k provádění privilegovaných operací. Mezi privilegované operace patří vytváření a odstraňování databází, úpravy schémat tabulek nebo změna uživatelských oprávnění. Vývojáři často potřebují přístup na úrovni správce, aby mohli udržovat databázi nebo řešit problémy.

  • Vyhněte se trvalým zvýšeným oprávněním. Udělte vývojářům přístup za běhu k provádění privilegovaných operací. S přístupem za běhu dostanou uživatelé dočasná oprávnění k provádění privilegovaných úloh.

  • Neudělujte aplikaci zvýšená oprávnění. Neudělujte identitě aplikace přístup na úrovni správce. Nakonfigurujte nejméně privilegovaný přístup pro aplikaci do databáze. Omezuje poloměr výbuchu chyb a porušení zabezpečení. Pro přístup k databázi Azure PostgreSQL máte dvě primární metody. Můžete použít ověřování Microsoft Entra nebo Ověřování PostgreSQL. Další informace najdete v tématu JDBC s Azure PostgreSQL.

Optimalizace nákladů

Optimalizace nákladů se zabývá způsoby, jak snížit zbytečné výdaje a režijní náklady na správu. Další informace najdete v kontrolním seznamu pro kontrolu návrhu pro optimalizaci nákladů. Model Reliable Web App implementuje techniky, automatické škálování a efektivní využití prostředků pro cenově optimalizovanou webovou aplikaci.

Rightsize resources for each environment

Seznamte se s různými úrovněmi výkonu služeb Azure a používejte pouze odpovídající skladovou položku pro potřeby každého prostředí. Produkční prostředí potřebují skladové položky, které splňují smlouvy o úrovni služeb (SLA), funkce a škálování potřebné pro produkční prostředí. Neprodukční prostředí obvykle nepotřebují stejné funkce. Pokud potřebujete další úspory, zvažte cenové možnosti azure pro vývoj/testování, rezervace Azure a plány úspor Azure pro výpočetní prostředky.

Příklad: Referenční implementace nepoužívá ceny azure pro vývoj/testování, protože ceny azure pro vývoj/testování nepokrývají žádné komponenty. Azure Database for PostgreSQL je hlavním kandidátem na rezervovanou instanci založenou na plánu držet se tohoto databázového stroje alespoň jeden rok po této počáteční konvergenci v cloudové fázi. Referenční implementace má volitelný parametr, který nasazuje různé skladové položky. Parametr prostředí dává šabloně Terraformu pokyn, aby vybral vývojové skladové položky. Následující kód ukazuje tento parametr prostředí.

azd env set APP_ENVIRONMENT prod

Contoso Fiber používá šablony infrastruktury jako kódu (IaC) pro vývojová a produkční nasazení. Vývojové prostředí je nákladově optimalizované s využitím nejméně nákladných skladových položek nezbytných pro vývoj aplikací. Produkční prostředí používá skladové položky, které splňují požadavky na úroveň provozní služby aplikace.

Použití automatického škálování

Automatické škálování automatizuje horizontální škálování pro produkční prostředí. Automatické škálování na základě metrik výkonu Triggery výkonu využití procesoru jsou dobrým výchozím bodem, pokud nerozumíte kritériím škálování vaší aplikace. Musíte nakonfigurovat a přizpůsobit triggery škálování (procesor, paměť RAM, síť a disk), aby odpovídaly chování vaší webové aplikace. Neškusujte vertikálně tak, aby splňovaly časté změny v poptávce. Je méně nákladově efektivní. Další informace najdete v tématu Škálování ve službě Aplikace Azure Service a automatickém škálování v Microsoft Azure.

Efektivní používání prostředků

Efektivní využití prostředků zahrnuje strategickou správu a přidělování cloudových prostředků tak, aby vyhovovalo potřebám organizace bez plýtvání. Minimalizuje zbytečné výdaje na zdroje a režijní náklady na správu. Pokud chcete zvýšit efektivitu prostředků, postupujte podle těchto doporučení:

  • Používejte sdílené služby. Centralizace a sdílení určitých prostředků poskytuje optimalizaci nákladů a nižší režii na správu. Například umístěte sdílené síťové prostředky do virtuální sítě centra.

  • Odstraňte nepoužívané prostředí. Pokud chcete optimalizovat náklady, odstraňte neprodukční prostředí po hodinách nebo během svátků. Infrastrukturu můžete použít jako kód k odstranění prostředků Azure a celých prostředí. Odeberte deklaraci prostředku, který chcete odstranit ze šablony infrastruktury jako kódu. Zálohujte data, která budete potřebovat později. Seznamte se se závislostmi prostředku, který odstraňujete. Pokud existují závislosti, budete možná muset tyto prostředky aktualizovat nebo odebrat.

  • Společné přidělení funkcí Pokud máte volnou kapacitu, společně přidělte prostředky a funkce aplikace v jednom prostředku Azure. Například více webových aplikací může používat jeden server (plán služby App Service) nebo jednu mezipaměť může podporovat více datových typů.

Provozní dokonalost

Efektivita provozu zahrnuje provozní procesy, které nasazují aplikaci a udržují ji spuštěnou v produkčním prostředí. Další informace najdete v kontrolním seznamu pro kontrolu návrhu pro efektivitu provozu. Model Reliable Web App implementuje infrastrukturu jako kód pro nasazení infrastruktury a monitorování pozorovatelnosti.

Konfigurace sledování

Pro trasování a ladění byste měli povolit protokolování, abyste mohli diagnostikovat, kdy jakýkoli požadavek selže. Telemetrie, kterou z aplikace shromažďujete, by měla odpovídat jejím provozním potřebám. Minimálně musíte shromažďovat telemetrická data o standardních metrikách. Měli byste shromáždit informace o chování uživatelů, které vám můžou pomoct s použitím cílených vylepšení.

Monitorování standardních metrik

Úloha by měla monitorovat základní metriky. Mezi důležité metriky, které se mají měřit, patří propustnost požadavků, průměrná doba trvání požadavku, chyby a závislosti monitorování. K shromáždění této telemetrie doporučujeme použít Přehledy aplikace.

Příklad: Referenční implementace používá Přehledy aplikace. Přehledy aplikace je povolená prostřednictvím Terraformu v rámci konfigurace app_settings služby App Service.

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

Spring Boot registruje v aplikačních Přehledy několik základních metrik, jako je java virtual machine (JVM), CPU, Tomcat a další. Aplikační Přehledy automaticky shromažďuje z rozhraní protokolování, jako jsou Log4j a Logback. Další informace naleznete v tématu:

Podle potřeby vytvořte vlastní telemetrii a metriky.

Kromě standardních metrik v aplikačních Přehledy byste měli vytvořit vlastní telemetrii, abyste lépe porozuměli uživatelům a jejich interakcím s vaší aplikací. Aplikační Přehledy umožňuje shromažďovat vlastní telemetrii a můžete také shromažďovat vlastní metriky prostřednictvím mikrometrů. Cílem je získat hlubší přehled o výkonu vaší aplikace a chování uživatelů, abyste mohli provádět informovanější rozhodnutí a vylepšení.

Shromažďování metrik založených na protokolech

Sledujte metriky založené na protokolech, abyste získali lepší přehled o základním stavu a metrikách aplikace. K vyhledání a uspořádání dat můžete použít dotazy dotazovací jazyk Kusto (KQL) v Přehledy aplikace. Další informace najdete v tématu Aplikace Azure Přehledy metriky založené na protokolech a metriky založené na protokolech a předem agregované metriky v Přehledy aplikace.

Povolení diagnostiky platformy

Nastavení diagnostiky v Azure umožňuje zadat protokoly platformy a metriky, které chcete shromažďovat a kam je ukládat. Protokoly platformy jsou integrované protokoly, které poskytují informace o diagnostice a auditování. Pro většinu služeb Azure můžete povolit diagnostiku platformy, ale každá služba definuje vlastní kategorie protokolů. Různé služby Azure mají různé kategorie protokolů, které si můžete vybrat.

  • Povolte diagnostiku pro všechny podporované služby. Služby Azure vytvářejí protokoly platformy automaticky, ale služba je automaticky neukládá. Pro každou službu musíte povolit nastavení diagnostiky a měli byste ho povolit pro každou službu Azure, která podporuje diagnostiku.

  • Odešlete diagnostiku do stejného cíle jako protokoly aplikace. Když povolíte diagnostiku, vyberete protokoly, které chcete shromáždit, a kam je chcete odeslat. Protokoly platformy byste měli odeslat do stejného cíle jako protokoly aplikace, abyste mohli obě datové sady korelovat.

Příklad: Referenční implementace používá Terraform k povolení diagnostiky Azure pro všechny podporované služby. 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
  }
}

Použití kanálu CI/CD

Pokud chcete automatizovat nasazení, integrujte kanál kontinuální integrace/průběžného nasazování (CI/CD). Tato automatizace by se měla rozšířit přímo ze správy zdrojového kódu do různých prostředí služby App Service, včetně testování, přípravy a produkce. Pokud pracujete s Azure DevOps nebo GitHub Actions pro projekty GitHub, využijte Azure Pipelines.

  • Integrace testování jednotek Před nasazením do App Services určete prioritu provádění a předávání všech testů jednotek (pomocí JUnit) v rámci kanálu. Začleňte nástroje pro kvalitu kódu a pokrytí, jako jsou SonarQube a JaCoCo, abyste dosáhli komplexního pokrytí testování.

  • Osvojte si architekturu napodobování v Javě. K testování externích koncových bodů využijte architektury napodobování Java (Mockito, EasyMock). 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í testování zabezpečení statických aplikací (SAST) můžete ve zdrojovém kódu najít chyby zabezpečení a kódovat chyby. Kromě toho proveďte analýzu složení softwaru (SCA) za účelem prozkoumání knihoven a komponent třetích stran z hlediska bezpečnostních rizik. Nástroje pro tyto analýzy jsou snadno integrované do GitHubu i Azure DevOps.

Řízení produkčních nasazení

Musíte vytvořit pokyny pro nasazení kódu do produkčního prostředí a vytvořit schvalovací proces pro všechna produkční nasazení.

Efektivita výkonu

Efektivita výkonu je schopnost úlohy škálovat se tak, aby efektivním způsobem splňovala požadavky, které na ni kladou uživatelé. Další informace najdete v kontrolním seznamu pro kontrolu návrhu týkajícího se efektivity výkonu. Model Reliable Web App používá model doplňování mezipaměti k minimalizaci latence vysoce požadovaných dat.

Použití vzoru doplňování mezipaměti

Model doplňování mezipaměti je strategie ukládání do mezipaměti, která zlepšuje 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. Když webová aplikace obdrží žádost o data, nejprve prohledá mezipaměť. Pokud data chybí, načte je z databáze, odpoví na žádost a odpovídajícím způsobem aktualizuje mezipaměť. Tento přístup zkracuje dobu odezvy a zvyšuje propustnost a snižuje potřebu většího škálování. Také posiluje dostupnost služby snížením zatížení primárního úložiště dat a minimalizací rizik výpadků.

Povolení ukládání do mezipaměti

Pokud chcete povolit ukládání do mezipaměti, přidejte balíček spring-boot-starter-cache jako závislost do souboru pom.xml . Balíček spring-boot-starter-cache nakonfiguruje mezipaměť Redis s výchozími hodnotami. Tyto hodnoty byste měli aktualizovat v application.properties souboru nebo proměnných prostředí tak, aby vyhovovaly potřebám vaší webové aplikace. Například spring.cache.redis.time-to-live hodnota (reprezentovaná v milisekundách) určuje dobu, po kterou data zůstanou v mezipaměti před vyřazením. Potřebujete zadat hodnotu, která vyhovuje potřebám vaší webové aplikace. Nakonec je nutné ukládat požadovaná data do mezipaměti v kódu pomocí poznámky @Cacheable .

Ukládání dat do mezipaměti s vysokou potřebou

Upřednostnit ukládání do mezipaměti pro nejčastěji přístupná data. Identifikujte klíčové datové body, které řídí zapojení uživatelů a výkon systému. Implementujte strategie ukládání do mezipaměti speciálně pro tyto oblasti, abyste optimalizovali efektivitu modelu doplňování mezipaměti, což výrazně snižuje latenci a zatížení databáze. 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 použít menší skladovou položku databáze.

Zachování aktuálnost dat mezipaměti

Naplánujte pravidelné aktualizace mezipaměti pro synchronizaci s nejnovějšími změnami databáze. Určete optimální frekvenci aktualizace na základě nestálosti dat a potřeb uživatelů. Tento postup zajišťuje, že aplikace používá model doplňování mezipaměti k zajištění rychlého přístupu i aktuálních informací.

Zajištění konzistence dat

Implementujte mechanismy pro aktualizaci mezipaměti ihned po jakékoli operaci 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 ústředním principem doplňování mezipaměti.

Příklad: Následující kód přidá spring-boot-starter-cache balíček jako závislost do pom.xml souboru, který povolí ukládání do mezipaměti.

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-cache</artifactid>
</dependency>

Referenční implementace umožňuje Redis v application.properties souboru.

# Redis
spring.data.redis.ssl.enabled=true
spring.session.redis.namespace=spring:session

Následující kód definuje metodu s názvem getAccountDetail. Metoda načte uživatelská nastavení přidružená k danému uživatelskému jménu. Anotuje @Cacheable(value="account-details", key="#id") metodu getAccountDetaila řekne webové aplikaci, aby do mezipaměti ukážela uživatelská nastavení.

    @Cacheable(value="account-details", key="#id")
    public AccountDetail getAccountDetail(Long id) {
        Optional<Account> optionalAccount = accountRepository.findById(id);
        if (optionalAccount.isEmpty()) {
            throw new IllegalArgumentException("Account ID " + id + " does not exist");
        }

        Account account = optionalAccount.get();
        AccountDetail accountDetail = mapToAccountDetail(account);

        return accountDetail;
    }

Výkon databáze

Výkon databáze může ovlivnit výkon a škálovatelnost aplikace. Je důležité otestovat výkon databáze, aby byla optimalizovaná. Mezi klíčové aspekty patří výběr správné oblasti cloudu, sdružování připojení, vzor doplňování do mezipaměti a optimalizace dotazů.

  • Otestujte segmenty směrování sítě. Přesunutí aplikace do cloudu může do databáze zavést další segmenty směrování sítě a latenci. Měli byste otestovat další segmenty směrování, které nové cloudové prostředí zavádí.

  • Stanovení základní úrovně výkonu Jako počáteční směrný plán byste měli použít místní metriky výkonu pro porovnání výkonu aplikace v cloudu.

  • Použijte Přehledy aplikace. Aplikační Přehledy poskytuje podrobné metriky databázových dotazů a všech rozhraní JDBC. Měli byste ji použít k zajištění, že portovaná databáze splňuje její smlouvy SLA, nebo k vyhledání dotazů, které potřebujete vyladit. Dynamické SQL byste nikdy neměli používat, protože vytváří problémy se zabezpečením a výkonem.

  • Použijte fondy připojení. Měli byste použít fondy připojení JDBC a doladit je na základě metrik transakcí za sekundu (TPS) a smluv SLA. K otestování a vyhodnocení výkonu databáze při zatížení byste měli použít nástroje pro monitorování výkonu databáze.

Další kroky

Nasaďte referenční implementaci podle pokynů v úložišti GitHub. Další informace o osvědčených postupech a migraci v cloudu najdete v následujících zdrojích informací.

Osvědčené postupy pro cloud Pokyny k přechodu na Azure a architekturu najdete tady:

U aplikací, které vyžadují vyšší cíl úrovně služeb (SLO), najdete v důležitých úlohách.

Pokyny k migraci Následující nástroje a prostředky vám můžou pomoct s migrací místních prostředků do Azure:

  • Azure Migrate poskytuje zjednodušenou službu migrace, modernizace a optimalizace pro Azure, která zpracovává posouzení a migraci webových aplikací, SQL Serveru a virtuálních počítačů.
  • Průvodce migrací databází azure poskytuje prostředky pro různé typy databází a nástroje navržené pro váš scénář migrace.
  • Aplikace Azure akcelerátor cílové zóny služby poskytuje pokyny pro posílení a škálování nasazení služby App Service.