Szerkesztés

Megosztás a következőn keresztül:


Megbízható webalkalmazás-minta a .NET-hez – A minta alkalmazása

Azure App Service
Azure Front Door
Azure Cache for Redis
.

Ez a cikk bemutatja, hogyan alkalmazhatja a Reliable Web App mintát. A Reliable Web App minta olyan alapelvek és megvalósítási technikák készlete, amelyek meghatározzák, hogyan kell módosítani a webalkalmazásokat (replatform) a felhőbe való migráláskor. A felhőben való sikerességhez szükséges minimális kódfrissítésekre összpontosít.

Az útmutató alkalmazásának megkönnyítése érdekében az üzembe helyezhető Reliable Web App-minta egy referenciaalkalmazással rendelkezik.

A referencia-megvalósítás architektúráját bemutató ábra.A referencia-megvalósítás architektúrája. Töltse le az architektúra Visio-fájlját .

Az alábbi útmutató végig példaként használja a referencia-megvalósítást. A Reliable Web App minta alkalmazásához kövesse a well-architected keretrendszer alappilléreihez igazított javaslatokat:

Megbízhatóság

A megbízhatóság biztosítja, hogy az alkalmazás megfeleljen az ügyfelek felé vállalt kötelezettségeknek. További információkért tekintse meg a Megbízhatósági terv felülvizsgálati ellenőrzőlistát. A Reliable Web App minta két kulcsfontosságú tervezési mintát vezet be a kód szintjén a megbízhatóság növelése érdekében: az Újrapróbálkozási minta és a Megszakító minta.

Az Újrapróbálkozási minta használata

Az újrapróbálkozási minta az ideiglenes szolgáltatáskimaradásokat, azaz átmeneti hibákat kezeli, amelyek általában másodperceken belül megoldódnak. Ezek a hibák gyakran a felhőkörnyezetek szolgáltatásszabályozásából, dinamikus terheléselosztásából és hálózati problémáiból erednek. Az újrapróbálkozási minta megvalósítása magában foglalja a sikertelen kérések újraküldését, lehetővé téve a konfigurálható késéseket és kísérleteket a sikertelenség engedélyezése előtt.

Az Újrapróbálkozási mintát használó alkalmazásoknak integrálniuk kell az Azure ügyfélszoftver-fejlesztői készleteit (SDK-jait) és a szolgáltatásspecifikus újrapróbálkozási mechanizmusokat a jobb hatékonyság érdekében. Az ilyen mintát nem tartalmazó alkalmazásoknak az alábbi útmutatással kell alkalmazniuk.

Először próbálja ki az Azure-szolgáltatást és az ügyféloldali SDK-t

A legtöbb Azure-szolgáltatás és ügyféloldali SDK beépített újrapróbálkozési mechanizmussal rendelkezik. A megvalósítás felgyorsításához az Azure-szolgáltatások beépített újrapróbálkozási mechanizmusát kell használnia.

Példa: A referencia-implementáció az Entity Framework Core kapcsolati rugalmasságával alkalmazza az Újrapróbálkozási mintát az Azure SQL Database-re irányuló kérelmekben (lásd a következő kódot).

services.AddDbContextPool<ConcertDataContext>(options => options.UseSqlServer(sqlDatabaseConnectionString,
    sqlServerOptionsAction: sqlOptions =>
    {
        sqlOptions.EnableRetryOnFailure(
        maxRetryCount: 5,
        maxRetryDelay: TimeSpan.FromSeconds(3),
        errorNumbersToAdd: null);
    }));

A Polly-kódtár használata, ha az ügyfélkódtár nem támogatja az újrapróbálkozásokat

Előfordulhat, hogy olyan függőséghez kell hívást kezdeményeznie, amely nem Azure-szolgáltatás, vagy nem támogatja natív módon az újrapróbálkozási mintát. Ebben az esetben a Polly-kódtárat kell használnia az Újrapróbálkozási minta implementálásához. A Polly egy .NET-rugalmassági és átmeneti hibakezelési kódtár. Ezzel folyékony API-kat használhat a viselkedés leírására az alkalmazás központi helyén.

Példa: A referencia-implementáció Polly használatával állítja be a ASP.NET Core függőséginjektálást. A Polly minden alkalommal kényszeríti az újrapróbálkozási mintát, amikor a kód létrehoz egy objektumot, amely meghívja az IConcertSearchService objektumot. A Polly-keretrendszerben ezt a viselkedést szabályzatnak nevezzük. A kód kinyeri ezt a szabályzatot a GetRetryPolicy metódusban, és a GetRetryPolicy metódus minden alkalommal alkalmazza az Újrapróbálkozási mintát, amikor az előtér-webalkalmazás meghívja a webes API koncertkeresési szolgáltatásait (lásd az alábbi kódot).

private void AddConcertSearchService(IServiceCollection services)
{
    var baseUri = Configuration["App:RelecloudApi:BaseUri"];
    if (string.IsNullOrWhiteSpace(baseUri))
    {
        services.AddScoped<IConcertSearchService, MockConcertSearchService>();
    }
    else
    {
        services.AddHttpClient<IConcertSearchService, RelecloudApiConcertSearchService>(httpClient =>
        {
            httpClient.BaseAddress = new Uri(baseUri);
            httpClient.DefaultRequestHeaders.Add(HeaderNames.Accept, "application/json");
            httpClient.DefaultRequestHeaders.Add(HeaderNames.UserAgent, "Relecloud.Web");
        })
        .AddPolicyHandler(GetRetryPolicy())
        .AddPolicyHandler(GetCircuitBreakerPolicy());
    }
}

private static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
    var delay = Backoff.DecorrelatedJitterBackoffV2(TimeSpan.FromMilliseconds(500), retryCount: 3);
    return HttpPolicyExtensions
      .HandleTransientHttpError()
      .OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound)
      .WaitAndRetryAsync(delay);
}

A példány szabályzatkezelője az RelecloudApiConcertSearchService ÚJRApróbálkozási mintát alkalmazza az API-ra irányuló összes kérelemre. A logikával észleli azokat a HandleTransientHttpError HTTP-kéréseket, amelyeket biztonságosan újrapróbálkozott, majd a konfiguráció alapján újrapróbálkozott. Némi véletlenszerűséget tartalmaz az API felé történő forgalom esetleges kipukkadásainak kisimítására, ha hiba történik.

A megszakító minta használata

Az újrapróbálkozási és megszakítóminták párosításával az alkalmazás képes kezelni az átmeneti hibákhoz nem kapcsolódó szolgáltatáskimaradásokat. Az áramkör-megszakító minta megakadályozza, hogy egy alkalmazás folyamatosan megkíséreljen hozzáférni egy nem válaszoló szolgáltatáshoz. Az áramkör-megszakító minta felszabadítja az alkalmazást, és elkerüli a processzorciklusok elsiklását, így az alkalmazás megőrzi a végfelhasználók teljesítményintegritását.

Példa: A referencia-implementáció hozzáadja a kapcsolatcsoport-megszakító mintát a GetCircuitBreakerPolicy metódushoz (lásd a következő kódot).

private static IAsyncPolicy<HttpResponseMessage> GetCircuitBreakerPolicy()
{
    return HttpPolicyExtensions
        .HandleTransientHttpError()
        .OrResult(msg => msg.StatusCode == System.Net.HttpStatusCode.NotFound)
        .CircuitBreakerAsync(5, TimeSpan.FromSeconds(30));
}

A kódban a példány szabályzatkezelője RelecloudApiConcertSearchService alkalmazza az áramkör-megszakító mintát az API-ra irányuló összes kérésre. A logikával észleli azokat a HandleTransientHttpError HTTP-kéréseket, amelyeket biztonságosan újrapróbálkozott, de korlátozza az összesített hibák számát egy adott időszakban.

Biztonság

A biztonság biztosítékokat nyújt a szándékos támadások és az értékes adatokkal és rendszerekkel való visszaélés ellen. További információkért lásd a Biztonsági terv felülvizsgálati ellenőrzőlistát. A Reliable Web App minta felügyelt identitásokat használ az identitásközpontú biztonság implementálásához. A privát végpontok, a webalkalmazás tűzfala és a webalkalmazáshoz való korlátozott hozzáférés biztonságos bejövő forgalmat biztosítanak.

Minimális jogosultságok kikényszerítése

A biztonság és a hatékonyság biztosítása érdekében csak a felhasználók (felhasználói identitások) és az Azure-szolgáltatások (számítási feladatok identitásai) számára adja meg a szükséges engedélyeket.

Engedélyek hozzárendelése felhasználói identitásokhoz

Az alkalmazás igényeinek felmérése olyan szerepkörök definiálásához, amelyek átfedés nélkül lefedik az összes felhasználói műveletet. Az egyes felhasználók leképezése a legmegfelelőbb szerepkörre. Győződjön meg arról, hogy csak a feladataikhoz szükséges hozzáféréshez kapnak hozzáférést.

Engedélyek hozzárendelése számítási feladatok identitásaihoz

Csak azokat az engedélyeket adja meg, amelyek kritikus fontosságúak a műveletekhez, például a CRUD-műveletekhez az adatbázisokban vagy a titkos kulcsokhoz való hozzáféréshez. A számítási feladatok identitásengedélyei állandóak, így nem adhat meg igény szerint vagy rövid távú engedélyeket a számítási feladatok identitásaihoz.

  • Előnyben részesítse a szerepköralapú hozzáférés-vezérlést (RBAC). Mindig az Azure RBAC-vel kezdje az engedélyek hozzárendelését. Pontos vezérlést biztosít, így a hozzáférés naplózásra és részletességre is alkalmas. Az Azure RBAC használatával csak a szolgáltatás számára szükséges engedélyeket adja meg a kívánt funkciók elvégzéséhez.

  • Kiegészítés az Azure szolgáltatásszintű hozzáférés-vezérlőivel. Ha az Azure RBAC nem fed le egy adott forgatókönyvet, egészítse ki az Azure-szolgáltatási szintű hozzáférési szabályzatokat.

Felhasználói hitelesítés és engedélyezés konfigurálása

A hitelesítés és az engedélyezés a webalkalmazások biztonságának kritikus szempontjai. A hitelesítés a felhasználó identitásának ellenőrzésére vonatkozó folyamat. Az engedélyezés megadja, hogy a felhasználó milyen műveleteket hajthat végre az alkalmazásban. A cél a hitelesítés és az engedélyezés megvalósítása a biztonsági helyzet gyengülése nélkül. A cél eléréséhez az Azure-alkalmazásplatform (Azure-alkalmazás szolgáltatás) és az identitásszolgáltató (Microsoft Entra ID) funkcióit kell használnia.

Felhasználói hitelesítés konfigurálása

A webalkalmazás biztonságossá tételéhez engedélyezze a felhasználói hitelesítést a platform funkcióin keresztül. Azure-alkalmazás szolgáltatás támogatja az olyan identitásszolgáltatókkal való hitelesítést, mint a Microsoft Entra ID, a hitelesítési számítási feladat kiszervezése a kódból.

Szolgáltatáshitelesítés és -engedélyezés konfigurálása

Konfigurálja a szolgáltatáshitelesítést és -engedélyezést, hogy a környezet szolgáltatásai rendelkezzenek a szükséges funkciók végrehajtásához szükséges engedélyekkel. A Felügyelt identitások használata a Microsoft Entra ID-ban a szolgáltatásidentitások létrehozásának és kezelésének automatizálásához, a manuális hitelesítő adatok kezelésének kiküszöbölése érdekében. A felügyelt identitással a webalkalmazás biztonságosan hozzáférhet az Azure-szolgáltatásokhoz, például az Azure Key Vaulthoz és az adatbázisokhoz. Emellett megkönnyíti a CI-/CD-folyamatok integrációját a Azure-alkalmazás szolgáltatásba történő üzembe helyezéshez. Az olyan helyzetekben, mint a hibrid telepítések vagy az örökölt rendszerek, a migrálás egyszerűsítése érdekében továbbra is használja a helyszíni hitelesítési megoldásokat. Váltás felügyelt identitásokra, ha a rendszer készen áll a modern identitáskezelési megközelítésre. További információ: Felügyelt identitások figyelése.

Kód beállítása a DefaultAzureCredential használatával

A felhőbeli helyi fejlesztési és felügyelt identitások hitelesítő adatainak megadására szolgál DefaultAzureCredential . DefaultAzureCredential OAuth-jogkivonat-beszerzést TokenCredential hoz létre. A legtöbb Azure SDK-forgatókönyvet és Microsoft-ügyfélkódtárat kezeli. Észleli az alkalmazás környezetét, hogy a megfelelő identitást használja, és szükség szerint hozzáférési jogkivonatokat kér. DefaultAzureCredential Egyszerűsíti az Azure-ban üzembe helyezett alkalmazások hitelesítését. További információ: DefaultAzureCredential.

Példa: A referencia-implementáció az osztályt használja az DefaultAzureCredential indítás során a felügyelt identitás webes API és Key Vault közötti használatának engedélyezéséhez (lásd a következő kódot).

builder.Configuration.AddAzureAppConfiguration(options =>
{
     options
        .Connect(new Uri(builder.Configuration["Api:AppConfig:Uri"]), new DefaultAzureCredential())
        .ConfigureKeyVault(kv =>
        {
            // Some of the values coming from Azure App Configuration are stored Key Vault. Use
            // the managed identity of this host for the authentication.
            kv.SetCredential(new DefaultAzureCredential());
        });
});

Infrastruktúra használata kódként felügyelt identitások létrehozásához

Bicep-sablonokkal hozhatja létre és konfigurálhatja az Azure-infrastruktúrát a felügyelt identitások támogatásához. A felügyelt identitások nem használnak titkos kulcsokat vagy jelszavakat, ezért az integritás biztosításához nincs szükség Key Vaultra vagy titkos kulcsforgatási stratégiára. A kapcsolati sztring az App Configuration Service-ben tárolhatja.

Példa: A referencia-implementáció Bicep-sablonokkal hozza létre (1) a felügyelt identitást, (2) társítja az identitást a webalkalmazással, és (3) megadja az identitásengedélyt az SQL-adatbázis eléréséhez. A Authentication kapcsolati sztring argumentum arra utasítja a Microsoft ügyfélkódtárat, hogy csatlakozzon egy felügyelt identitáshoz (lásd a következő kódot).

    Server=tcp:my-sql-server.database.windows.net,1433;Initial Catalog=my-sql-database;Authentication=Active Directory Default

További információ: Csatlakozás SQL-adatbázishoz a .NET App Service-ből.

Titkos kulcsok kezelése központi titkos kulcstár használatával

Amikor az alkalmazást a felhőbe helyezi át, az Azure Key Vault használatával biztonságosan tárolhatja ezeket a titkos kulcsokat. Ez a központosított adattár biztonságos tárolást, kulcsforgatást, hozzáférés-naplózást és figyelést biztosít a felügyelt identitásokat nem támogató szolgáltatások számára. Alkalmazáskonfigurációk esetén ajánlott Azure-alkalmazás konfiguráció.

Példa: A referencia-implementáció a következő titkos kulcsokat tárolja a Key Vaultban: (1) PostgreSQL-adatbázis felhasználóneve és jelszava, (2) Redis Cache-jelszó és (3) a Microsoft Authentication Library (MSAL) implementációhoz társított Microsoft Entra-azonosító ügyféltitkára.

Ne helyezze a Key Vaultot a HTTP-kérelem folyamatába

Titkos kulcsok betöltése a Key Vaultból az alkalmazás indításakor az egyes HTTP-kérések helyett. A Key Vault a bizalmas adatok biztonságos tárolására és lekérésére szolgál az üzembe helyezés során. A HTTP-kérelmeken belüli nagy gyakoriságú hozzáférés meghaladhatja a Key Vault átviteli sebességét, ami a kérelmek korlátozásához és a HTTP-állapotkód 429-höz hasonló hibákhoz vezethet. További információkért lásd a Key Vault tranzakciós korlátait.

Titkos kulcsok elérése egy metódus használatával a Key Vaultban

Ha egy webalkalmazást úgy konfigurál, hogy titkos kulcsokat érhessen el a Key Vaultban, két elsődleges lehetőség közül választhat:

  • App Service-alkalmazásbeállítás: Az App Service alkalmazásbeállításával közvetlenül környezeti változóként injektálhatja a titkos kódot.

  • Közvetlen titkos referenciák: Közvetlenül hivatkozzon a titkos kódra az alkalmazáskódban. Adjon hozzá egy konkrét hivatkozást az alkalmazás tulajdonságfájljához, például application.properties Java-alkalmazásokhoz, hogy az alkalmazás kommunikáljon a Key Vaulttal.

Fontos, hogy válasszon egyet ezek közül a módszerek közül, és ragaszkodjon hozzá az egyszerűség és a szükségtelen összetettség elkerülése érdekében.

Az ideiglenes hozzáférési módszerek előnyben részesítésében

Használjon ideiglenes engedélyeket a jogosulatlan hozzáférés és a jogosulatlan behatolások elleni védelemhez. Használjon közös hozzáférésű jogosultságkódokat (SAS-eket) az ideiglenes hozzáféréshez. A felhasználói delegálási SAS használatával maximalizálhatja a biztonságot az ideiglenes hozzáférés biztosításakor. Ez az egyetlen SAS, amely a Microsoft Entra hitelesítő adatait használja, és nem igényel tárfiókkulcsot.

Privát végpontok használata

Az összes támogatott Azure-szolgáltatáshoz használjon privát végpontokat minden éles környezetben. A privát végpontok privát kapcsolatokat biztosítanak egy Azure-beli virtuális hálózat erőforrásai és az Azure-szolgáltatások között. Alapértelmezés szerint a legtöbb Azure-szolgáltatással való kommunikáció a nyilvános interneten keresztül zajlik. A privát végpontok nem igényelnek kódmódosítást, alkalmazáskonfigurációt vagy kapcsolati sztring. További információ: Privát végpont létrehozása és ajánlott eljárások a végpontbiztonsághoz.

Például: Azure-alkalmazás konfiguráció, az Azure SQL Database, az Azure Cache for Redis, az Azure Storage, a Azure-alkalmazás szolgáltatás és a Key Vault privát végpontot használnak.

Webalkalmazási tűzfal használata és a bejövő internetes forgalom korlátozása

A webalkalmazásba irányuló összes bejövő internetes forgalomnak át kell haladnia egy webalkalmazás tűzfalán a gyakori webes biztonsági rések elleni védelem érdekében. Kényszerítse az összes bejövő internetes forgalmat, hogy áthaladjanak a nyilvános terheléselosztón, ha van ilyen, és a webalkalmazás tűzfalán.

Példa: A referencia-implementáció az összes bejövő internetes forgalmat a Front Dooron és az Azure Web Application Firewallon keresztül kényszeríti ki. Éles környezetben őrizze meg az eredeti HTTP-állomásnevet.

Adatbázis biztonságának konfigurálása

Az adatbázis rendszergazdai szintű hozzáférése engedélyeket biztosít a kiemelt műveletek végrehajtásához. A kiemelt műveletek közé tartozik az adatbázisok létrehozása és törlése, a táblaséma módosítása vagy a felhasználói engedélyek módosítása. A fejlesztőknek gyakran rendszergazdai szintű hozzáférésre van szükségük az adatbázis karbantartásához vagy a problémák elhárításához.

  • Kerülje az állandó emelt szintű engedélyeket. A fejlesztőknek csak igény szerint szabad hozzáférést biztosítani a kiemelt műveletek végrehajtásához. Az igény szerint történő hozzáféréssel a felhasználók ideiglenes engedélyeket kapnak a kiemelt feladatok végrehajtásához

  • Ne adjon az alkalmazásnak emelt szintű engedélyeket. Nem szabad rendszergazdai szintű hozzáférést biztosítani az alkalmazás identitásához. A legkevésbé kiemelt hozzáférést kell konfigurálnia az alkalmazás számára az adatbázishoz. Korlátozza a hibák és biztonsági incidensek robbanási sugarát.

Költségoptimalizálás

A költségoptimalizálás a felesleges költségek és a felügyeleti többletköltségek csökkentésének módjairól szól. További információt a Költségoptimalizálás tervezési felülvizsgálati ellenőrzőlistájában talál. A Reliable Web App minta rightsizing technikákat, automatikus skálázást és hatékony erőforrás-használatot valósít meg egy költségoptimalizáltabb webalkalmazáshoz.

Erőforrások rightsize for each environment

Ismerje meg az Azure-szolgáltatások különböző teljesítményszintjét, és csak az egyes környezetek igényeinek megfelelő termékváltozatot használja. Az éles környezetekben olyan termékváltozatokra van szükség, amelyek megfelelnek a szolgáltatásiszint-szerződéseknek (SLA), a szolgáltatásoknak és az éles környezethez szükséges méretezésnek. A nem gyártási környezeteknek általában nincs szükségük ugyanazokra a képességekre. További megtakarítások érdekében fontolja meg az Azure Dev/Test díjszabási lehetőségeit, az Azure Reservationst és az Azure-megtakarítási csomagokat a számításhoz.

Példa: A referencia-implementáció Bicep-paraméterekkel aktiválja az erőforrás-üzembehelyezési konfigurációkat. Az egyik paraméter az üzembe helyezendő erőforrásszinteket (SKU-kat) jelzi. A webalkalmazás a teljesítményesebb és drágább termékváltozatokat használja az éles környezetekhez, az olcsóbb termékváltozatokat pedig a nem termelési környezethez (lásd a következő kódot).

var redisCacheSkuName = isProd ? 'Standard' : 'Basic'
var redisCacheFamilyName = isProd ? 'C' : 'C'
var redisCacheCapacity = isProd ? 1 : 0

Automatikus méretezés használata

Az automatikus skálázás automatizálja az éles környezetek horizontális méretezését. Automatikus skálázás teljesítménymetrikák alapján. A cpu-kihasználtság teljesítmény-eseményindítói jó kiindulási pontnak számítanak, ha nem ismeri az alkalmazás méretezési feltételeit. A skálázási eseményindítókat (CPU, RAM, hálózat és lemez) a webalkalmazás viselkedésének megfelelően kell konfigurálni és átalakítani. Ne vertikálisan skálázza a skálázást, hogy megfeleljen az igények gyakori változásainak. Kevésbé költséghatékony. További információ: Skálázás Azure-alkalmazás szolgáltatásban és automatikus skálázás a Microsoft Azure-ban.

Példa: A referencia-implementáció a Bicep-sablonban a következő konfigurációt használja. Automatikus skálázási szabályt hoz létre a Azure-alkalmazás szolgáltatáshoz. A szabály legfeljebb 10 példányt és alapértelmezettet skáláz egy példányra. A processzorhasználatot használja a ki- és beskálázás eseményindítójaként. A platformot üzemeltető webalkalmazás 85%-os processzorhasználatot és 60%-os skálázást végez. A 85%-os vertikális felskálázási beállítás a 100%-hoz közelebbi százalék helyett puffert biztosít a ragadós munkamenetek által okozott halmozott felhasználói forgalom ellen. Emellett védelmet nyújt a nagy adatforgalommal szemben azáltal, hogy korai skálázással elkerüli a maximális processzorhasználatot. Ezek az automatikus méretezési szabályok nem univerzálisak (lásd a következő kódot).

resource autoScaleRule 'Microsoft.Insights/autoscalesettings@2022-10-01' = if (autoScaleSettings != null) { 
  name: '${name}-autoscale' 
  location: location 
  tags: tags 
  properties: { 
    targetResourceUri: appServicePlan.id 
    enabled: true 
    profiles: [ 
      { 
        name: 'Auto created scale condition' 
        capacity: { 
          minimum: string(zoneRedundant ? 3 : autoScaleSettings!.minCapacity) 
          maximum: string(autoScaleSettings!.maxCapacity) 
          default: string(zoneRedundant ? 3 : autoScaleSettings!.minCapacity) 
        } 
        rules: [ 
          ... 
        ] 
      } 
    ] 
  } 
}

Erőforrások hatékony használata

  • Megosztott szolgáltatások használata. Bizonyos erőforrások központosítása és megosztása költségoptimalizálást és alacsonyabb felügyeleti többletterhelést biztosít. Helyezze a megosztott hálózati erőforrásokat a központi virtuális hálózatba.

    Példa: A referencia-implementáció az Azure Firewall, az Azure Bastion és a Key Vault szolgáltatást helyezi el a központi virtuális hálózaton.

  • Törölje a nem használt környezeteket. A költségek optimalizálása érdekében törölje a nem gyártási környezeteket órák után vagy ünnepek alatt. Az infrastruktúrát kódként használhatja az Azure-erőforrások és a teljes környezetek törléséhez. Távolítsa el a törölni kívánt erőforrás deklarációját a Bicep-sablonból. A what-if művelettel megtekintheti a módosításokat a módosítások érvénybe lépése előtt. Később biztonsági másolatot készít a szükséges adatokról. Ismerje meg a törölni kívánt erőforrás függőségeit. Ha vannak függőségek, előfordulhat, hogy ezeket az erőforrásokat is frissítenie vagy el kell távolítania. További információ: Bicep deployment what-if művelet.

  • A funkciók áthelyezése. Ahol van szabad kapacitás, helyezze el az alkalmazás erőforrásait és funkcióit egyetlen Azure-erőforráson. Például több webalkalmazás is használhat egyetlen kiszolgálót (App Service-csomag), vagy egyetlen gyorsítótár több adattípust is támogathat.

    Példa: A referencia-implementáció egyetlen Azure Cache for Redis-példányt használ a munkamenet-kezeléshez az előtérbeli (kosár- és MSAL-jogkivonatok tárolása) és a háttéralkalmazásokban (közelgő koncertek adatainak tárolására). A legkisebb Redis termékváltozatot választja, amely a szükségesnél több kapacitást kínál, és több adattípus használatával hatékonyan kihasználja a költségeket.

Működés eredményessége

Az üzemeltetési kiválóság azokat az üzemeltetési folyamatokat fedi le, amelyek üzembe helyeznek egy alkalmazást, és éles környezetben tartják azt. További információkért tekintse meg az Operatív kiválóságra vonatkozó tervezési felülvizsgálati ellenőrzőlistát. A Reliable Web App minta az infrastruktúrát kódként implementálja az infrastruktúra üzembe helyezéséhez és a megfigyelhetőség monitorozásához.

Üzembe helyezés automatizálása

Ci/CD-folyamat használatával telepíthet módosításokat a forrásvezérlőből az éles környezetbe. Az Azure DevOps használata esetén az Azure Pipelinest kell használnia. Ha GitHubot használ, használja a GitHub-műveleteket. Azure-támogatás ARM-sablont (JSON), Bicep-et és Terraformot, és sablonokat tartalmaz minden Azure-erőforráshoz. További információ:Bicep, Azure Resource Manager és Terraform-sablonok és megismételhető infrastruktúra.

Példa: A referencia-implementáció az Azure Dev CLI-t és az infrastruktúrát használja kódként (Bicep-sablonok) az Azure-erőforrások létrehozásához, a konfiguráció beállításához és a szükséges erőforrások üzembe helyezéséhez.

Figyelés konfigurálása

A webalkalmazás monitorozásához gyűjtse össze és elemezze a metrikákat és naplókat az alkalmazáskódból, az infrastruktúrából (futtatókörnyezetből) és a platformról (Azure-erőforrások). Adjon hozzá diagnosztikai beállítást az architektúra minden Azure-erőforrásához. Minden Azure-szolgáltatás különböző naplókkal és metrikákkal rendelkezik, amelyet rögzíthet. További információ: A platform monitorozása és az App Service monitorozása.

Alapkonfiguráció metrikáinak monitorozása

A Azure-alkalmazás Insights használatával nyomon követheti az alapkonfigurációs metrikákat, például a kérések átviteli sebességét, a kérelmek átlagos időtartamát, a hibákat és a függőségfigyelést. Használja AddApplicationInsightsTelemetry a NuGet-csomagból Microsoft.ApplicationInsights.AspNetCore a telemetriai gyűjtemény engedélyezéséhez. További információ: Application Insights-telemetriai és függőséginjektálás engedélyezése a .NET-ben.

Példa: A referencia-implementáció kóddal konfigurálja az alapmetrikákat az Application Insightsban (lásd a következő kódot).

public void ConfigureServices(IServiceCollection services)
{
   ...
   services.AddApplicationInsightsTelemetry(Configuration["App:Api:ApplicationInsights:ConnectionString"]);
   ...
}

Egyéni telemetria létrehozása igény szerint

Az Application Insights használatával egyéni telemetriát gyűjthet a webalkalmazás felhasználóinak jobb megértéséhez. Hozza létre az TelemetryClient osztály egy példányát, és használja a TelemetryClient metódusokat a megfelelő metrikák létrehozásához. A lekérdezés átalakítása Azure Dashboard-vezérlővé.

Példa: A referencia-implementáció olyan metrikákat ad hozzá, amelyek segítenek az operatív csapatnak azonosítani, hogy a webalkalmazás sikeresen végrehajtotta-e a tranzakciókat. Ellenőrzi, hogy a webalkalmazás online állapotban van-e, és nem a kérések számának vagy a processzorhasználatnak a mérésével ellenőrzi, hogy az ügyfelek leadhatnak-e rendeléseket. A referencia-implementáció függőséginjektálással és a TrackEvent kosártevékenységgel kapcsolatos események telemetriai adatainak gyűjtésére szolgálTelemetryClient. A telemetriai adatok nyomon követik a felhasználók által hozzáadott, eltávolítható és megvásárolt jegyeket (lásd a következő kódot).

  • AddToCart megszámolja, hogy a felhasználók hányszor adnak hozzá egy bizonyos jegyet (ConcertID) a kosárhoz.
  • RemoveFromCart rögzíti azokat a jegyeket, amelyeket a felhasználók eltávolítanak a kosárból.
  • CheckoutCart minden alkalommal rögzít egy eseményt, amikor egy felhasználó jegyet vásárol.

this.telemetryClient.TrackEvent megszámolja a kosárba helyezett jegyeket. Megadja az esemény nevét (AddToCart) és megadja a szótárt, amely rendelkezik az concertId és count (lásd a következő kódot).

this.telemetryClient.TrackEvent("AddToCart", new Dictionary<string, string> {
    { "ConcertId", concertId.ToString() },
    { "Count", count.ToString() }
});

További információk:

Naplóalapú metrikák összegyűjtése

Naplóalapú metrikák nyomon követése az alapvető alkalmazásállapotok és metrikák jobb láthatósága érdekében. Az Application Insightsban Kusto lekérdezésnyelv (KQL) lekérdezésekkel kereshet és rendszerezhet adatokat. További információ: Azure-alkalmazás Insights naplóalapú metrikák és naplóalapú és előre összesített metrikák az Application Insightsban.

Platformdiagnosztika engedélyezése

Az Azure diagnosztikai beállításai lehetővé teszik az összegyűjtendő platformnaplók és metrikák megadását, valamint azok tárolásának helyét. A platformnaplók olyan beépített naplók, amelyek diagnosztikai és naplózási információkat nyújtanak. A legtöbb Azure-szolgáltatáshoz engedélyezheti a platformdiagnosztikát, de mindegyik szolgáltatás saját naplókategóriákat határoz meg. A különböző Azure-szolgáltatások naplókategóriákat választhatnak.

  • Az összes támogatott szolgáltatás diagnosztikának engedélyezése. Az Azure-szolgáltatások automatikusan létrehoznak platformnaplókat, de a szolgáltatás nem tárolja őket automatikusan. Minden szolgáltatáshoz engedélyeznie kell a diagnosztikai beállítást, és minden olyan Azure-szolgáltatás esetében engedélyeznie kell, amely támogatja a diagnosztikát.

  • Diagnosztikát küldhet az alkalmazásnaplókkal megegyező helyre. A diagnosztika engedélyezésekor kiválaszthatja a gyűjtendő naplókat, és hogy hová küldje őket. A platformnaplókat az alkalmazásnaplókkal megegyező helyre kell küldenie, hogy korrelálni tudja a két adathalmazt.

Teljesítmény hatékonysága

A teljesítménybeli hatékonyság lehetővé teszi, hogy a számítási feladatok hatékonyan méretezhetők legyenek a felhasználók igényei szerint. További információt a Teljesítményhatékonyság tervezési felülvizsgálati ellenőrzőlistájában talál. A Reliable Web App minta a gyorsítótár-feltöltési mintát használja a magasan kért adatok késésének minimalizálására.

A gyorsítótár-feltöltési minta használata

A gyorsítótár-feltöltési minta egy gyorsítótárazási stratégia, amely javítja a memóriabeli adatkezelést. A minta az alkalmazáshoz rendeli az adatkérések kezelésének, valamint a gyorsítótár és az állandó tár, például egy adatbázis közötti konzisztenciának biztosítását. Amikor a webalkalmazás adatkérést kap, először a gyorsítótárban keres. Ha az adatok hiányoznak, lekéri az adatbázisból, válaszol a kérésre, és ennek megfelelően frissíti a gyorsítótárat. Ez a megközelítés lerövidíti a válaszidőket, javítja az átviteli sebességet, és csökkenti a nagyobb skálázás szükségességét. Emellett a szolgáltatás rendelkezésre állását is növeli az elsődleges adattár terhelésének csökkentésével és a kimaradás kockázatának minimalizálásával.

Példa: A referencia-implementáció a kritikus adatok gyorsítótárazásával javítja az alkalmazások hatékonyságát, például a jegyértékesítés szempontjából fontos közelgő koncertekre vonatkozó információkat. A ASP.NET Core elosztott memória-gyorsítótárát használja a memóriaelem-tárolóhoz. Az alkalmazás automatikusan az Azure Cache for Redist használja, amikor egy adott kapcsolati sztring talál. Emellett támogatja a helyi fejlesztési környezeteket a Redis nélkül a beállítás egyszerűsítése és a költségek és az összetettség csökkentése érdekében. A metódus (AddAzureCacheForRedis) konfigurálja az alkalmazást az Azure Cache for Redis használatára (lásd a következő kódot).

private void AddAzureCacheForRedis(IServiceCollection services)
{
    if (!string.IsNullOrWhiteSpace(Configuration["App:RedisCache:ConnectionString"]))
    {
        services.AddStackExchangeRedisCache(options =>
        {
            options.Configuration = Configuration["App:RedisCache:ConnectionString"];
        });
    }
    else
    {
        services.AddDistributedMemoryCache();
    }
}

További információ: Elosztott gyorsítótárazás ASP.NET Core és AddDistributedMemoryCache metódusban.

Nagy szükségű adatok gyorsítótárazásához

A leggyakrabban használt adatok gyorsítótárazásának rangsorolása. A felhasználói előjegyzést és a rendszerteljesítményt növelő főbb adatpontok azonosítása. Kifejezetten ezekre a területekre vonatkozó gyorsítótárazási stratégiák implementálása a gyorsítótár-feltöltési minta hatékonyságának optimalizálása érdekében, jelentősen csökkentve a késést és az adatbázis terhelését. Az Azure Monitor használatával nyomon követheti az adatbázis processzorát, memóriáját és tárterületét. Ezek a metrikák segítenek meghatározni, hogy használhat-e kisebb adatbázis-termékváltozatot.

Példa: A referencia-implementáció gyorsítótárazza a közelgő koncerteket támogató adatokat. A Közelgő koncertek oldal hozza létre a legtöbb lekérdezést az SQL Database-hez, és konzisztens kimenetet hoz létre minden egyes látogatáshoz. A gyorsítótár-feltöltési minta gyorsítótárazza az adatokat a lap első kérése után az adatbázis terhelésének csökkentése érdekében. Az alábbi kód a GetUpcomingConcertsAsync metódussal adatokat kér le a Redis-gyorsítótárba az SQL Database-ből. A metódus feltölti a gyorsítótárat a legújabb koncertekkel. A metódus idő szerint szűr, rendezi az adatokat, és visszaadja az adatokat a vezérlőnek az eredmények megjelenítéséhez (lásd a következő kódot).

public async Task<ICollection<Concert>> GetUpcomingConcertsAsync(int count)
{
    IList<Concert>? concerts;
    var concertsJson = await this.cache.GetStringAsync(CacheKeys.UpcomingConcerts);
    if (concertsJson != null)
    {
        // There is cached data. Deserialize the JSON data.
        concerts = JsonSerializer.Deserialize<IList<Concert>>(concertsJson);
    }
    else
    {
        // There's nothing in the cache. Retrieve data from the repository and cache it for one hour.
        concerts = await this.database.Concerts.AsNoTracking()
            .Where(c => c.StartTime > DateTimeOffset.UtcNow && c.IsVisible)
            .OrderBy(c => c.StartTime)
            .Take(count)
            .ToListAsync();
        concertsJson = JsonSerializer.Serialize(concerts);
        var cacheOptions = new DistributedCacheEntryOptions {
            AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(1)
        };
        await this.cache.SetStringAsync(CacheKeys.UpcomingConcerts, concertsJson, cacheOptions);
    }
    return concerts ?? new List<Concert>();
}

Gyorsítótáradatok naprakészen tartása

Rendszeres gyorsítótár-frissítések ütemezése a legújabb adatbázis-módosításokkal való szinkronizáláshoz. Határozza meg az optimális frissítési sebességet az adatingadozás és a felhasználói igények alapján. Ez a gyakorlat biztosítja, hogy az alkalmazás gyorsítótár-feltöltési mintát használva gyors hozzáférést és aktuális információkat biztosítson.

Példa: A referencia-implementáció csak egy órán keresztül gyorsítótárazza az adatokat. Az adatváltozások során a gyorsítótárkulcs törlésére szolgáló folyamat. A CreateConcertAsync metódus törli a gyorsítótárkulcsot (lásd a következő kódot).

public async Task<CreateResult> CreateConcertAsync(Concert newConcert)
{
    database.Add(newConcert);
    await this.database.SaveChangesAsync();
    this.cache.Remove(CacheKeys.UpcomingConcerts);
    return CreateResult.SuccessResult(newConcert.Id);
}

Adatkonzisztenciának biztosítása

Implementáljon mechanizmusokat a gyorsítótár azonnali frissítésére az adatbázis írási művelete után. A gyorsítótár koherenciájának biztosításához használjon eseményvezérelt frissítéseket vagy dedikált adatkezelési osztályokat. A gyorsítótár adatbázis-módosításokkal való következetes szinkronizálása központi fontosságú a gyorsítótár-feltöltési minta számára.

Példa: A referencia-implementáció a UpdateConcertAsync módszerrel konzisztensen tartja az adatokat a gyorsítótárban (lásd a következő kódot).

public async Task<UpdateResult> UpdateConcertAsync(Concert existingConcert), 
{
   database.Update(existingConcert);
   await database.SaveChangesAsync();
   this.cache.Remove(CacheKeys.UpcomingConcerts);
   return UpdateResult.SuccessResult();
}

Adatbázis teljesítményének tesztelése

Az adatbázis teljesítménye befolyásolhatja az alkalmazások teljesítményét és méretezhetőségét. Fontos, hogy tesztelje az adatbázis teljesítményét annak optimalizálása érdekében. Néhány fontos szempont a megfelelő felhőrégió kiválasztása, a kapcsolatkészletezés, a gyorsítótár-feltöltési minta és a lekérdezések optimalizálása.

  • Hálózati ugrások tesztelése. Az alkalmazások felhőbe való áthelyezése további hálózati ugrásokat és késést okozhat az adatbázis számára. Tesztelje az új felhőkörnyezet által bevezetett extra ugrásokat.

  • Az alapteljesítmény meghatározása. A helyszíni teljesítménymetrikákat kell használnia a kezdeti alapkonfigurációként az alkalmazások felhőbeli teljesítményének összehasonlításához.

Következő lépések

Telepítse a referencia-implementációt a GitHub-adattár utasításainak követésével. Az alábbi forrásokból többet tudhat meg a .NET-alkalmazásokról, a webalkalmazásokról, a felhő ajánlott eljárásairól és a migrálásról.

.NET-keretrendszer-alkalmazások frissítése

A referencia-implementáció egy Windowst futtató App Service-ben üzemel, de Linuxon is futtatható. Az App Service Windows platform lehetővé teszi .NET-keretrendszer webalkalmazások Azure-ba való áthelyezését anélkül, hogy újabb keretrendszerverziókra frissítenek. A Linux App Service-csomagokról, illetve a .NET legújabb verzióihoz hozzáadott új funkciókról és teljesítménybeli fejlesztésekről az alábbi útmutatóban olvashat.

Bevezetés az Azure-ból elérhető webalkalmazások használatába

A .NET-webalkalmazások Azure-beli gyakorlati bevezetéséhez tekintse meg ezt az útmutatót egy alapszintű .NET-webalkalmazás üzembe helyezéséhez.

Ajánlott felhőbeli eljárások

Az Azure bevezetéséről és az architekturális útmutatásról lásd:

  • felhőadaptálási keretrendszer. Segíthet a szervezetnek egy olyan stratégia előkészítésében és végrehajtásában, amely megoldásokat hoz létre az Azure-ban.
  • Jól felépítésű keretrendszer. A számítási feladatok minőségének javítására használható vezérelvek készlete.

A Reliable Web App-mintánál magasabb SLO-t igénylő alkalmazások esetében tekintse meg a kritikus fontosságú számítási feladatokat.

Útmutató az áttelepítéshez

Az alábbi eszközök és erőforrások segítségével helyszíni erőforrásokat migrálhat az Azure-ba.