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á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:
- Application Insights API egyéni eseményekhez és metrikákhoz
- TelemetryClient osztály
- Telemetriai ügyfélmódszerek
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.
- A .NET-keretrendszer és a .NET közötti portolás áttekintése. Útmutatást kaphat a .NET-alkalmazás adott típusától függően.
- A .NET frissítési segéd áttekintése. Megismerhet egy konzoleszközt, amely segíthet automatizálni a .NET-keretrendszer-projektek frissítésével kapcsolatos számos feladatot.
- Migrálás ASP.NET-ról ASP.NET Core-ba a Visual Studióban. Ismerje meg a Visual Studio-bővítményt, amely segíthet a webalkalmazások növekményes migrálásában.
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.
- Az Azure Migrate egyszerűsített migrálási, modernizációs és optimalizálási szolgáltatást nyújt az Azure-hoz, amely webalkalmazások, SQL Server és virtuális gépek értékelését és migrálását kezeli.
- Az Azure Database Migration Guides különböző adatbázistípusokhoz és a migrálási forgatókönyvhöz tervezett különböző eszközökhöz biztosít erőforrásokat.
- Azure-alkalmazás Szolgáltatás kezdőzónájának gyorsítója útmutatást nyújt az App Service-üzemelő példányok megerősítéséhez és méretezéséhez.
- Azure Migrate-alkalmazás és kódértékelés