.NET için güvenilir web uygulaması deseni - Deseni uygulama

Azure App Service
Azure Front Door
Azure Cache for Redis
.NET

Bu makalede Reliable Web App deseninin nasıl uygulanacağı gösterilmektedir. Reliable Web App düzeni, buluta geçiş yaparken web uygulamalarını nasıl değiştirmeniz gerektiğini (yeniden platform) tanımlayan bir dizi ilke ve uygulama tekniğidir . Bulutta başarılı olmak için yapmanız gereken en düşük kod güncelleştirmelerine odaklanır.

Bu kılavuzun uygulanmasını kolaylaştırmak için, dağıtabileceğiniz Reliable Web App deseninin bir başvuru uygulaması vardır.

Başvuru uygulamasının mimarisini gösteren diyagram.Başvuru uygulamasının mimarisi. Bu mimarinin Visio dosyasını indirin.

Aşağıdaki kılavuz, başvuru uygulamasını örnek olarak tüm aşamalarda kullanır. Reliable Web App desenini uygulamak için, İyi Tasarlanmış Çerçeve'nin yapı taşlarına hizalanmış şu önerileri izleyin:

Güvenilirlik

Güvenilirlik, uygulamanızın müşterilerinize sağladığınız taahhütleri karşılayabilmesini sağlar. Daha fazla bilgi için Güvenilirlik için Tasarım gözden geçirmesi denetim listesine bakın. Reliable Web App deseni, güvenilirliği artırmak için kod düzeyinde iki temel tasarım deseni sunar: Yeniden deneme düzeni ve Devre Kesici düzeni.

Yeniden Deneme desenini kullanma

Yeniden deneme düzeni, geçici hizmet kesintilerini, genellikle saniyeler içinde çözülen geçici hataları giderir. Bu hatalar genellikle bulut ortamlarındaki hizmet azaltma, dinamik yük dağıtımı ve ağ sorunlarından kaynaklanır. Yeniden Deneme deseninin uygulanması başarısız isteklerin yeniden gönderilmesini içerir ve başarısızlığı kaldırmadan önce yapılandırılabilir gecikmelere ve girişimlere izin verir.

Yeniden Deneme desenini kullanan uygulamalar, gelişmiş verimlilik için Azure'ın istemci yazılım geliştirme setlerini (SDK' lar) ve hizmete özgü yeniden deneme mekanizmalarını tümleştirmelidir. Bu desene sahip olmayan uygulamalar aşağıdaki yönergeleri kullanarak bunu benimsemelidir.

Önce Azure hizmetini ve istemci SDK'larını deneyin

Çoğu Azure hizmeti ve istemci SDK'sı yerleşik bir yeniden deneme mekanizmasına sahiptir. Uygulamayı hızlandırmak için Azure hizmetleri için yerleşik yeniden deneme mekanizmasını kullanmanız gerekir.

Örnek: Başvuru uygulaması, Azure SQL Veritabanı isteklerde Yeniden Deneme desenini uygulamak için Entity Framework Core'daki bağlantı dayanıklılığını kullanır (aşağıdaki koda bakın).

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

İstemci kitaplığı yeniden denemeleri desteklemediğinde Polly kitaplığını kullanma

Azure hizmeti olmayan veya Yerel olarak Yeniden Deneme düzenini desteklemeyen bir bağımlılık için çağrı yapmanız gerekebilir. Bu durumda, Yeniden Deneme desenini uygulamak için Polly kitaplığını kullanmanız gerekir. Polly bir .NET dayanıklılığı ve geçici hata işleme kitaplığıdır. Bununla, uygulamanın merkezi bir konumundaki davranışı açıklamak için akıcı API'leri kullanabilirsiniz.

Örnek: Başvuru uygulaması, ASP.NET Core bağımlılık eklemeyi ayarlamak için Polly kullanır. Polly, kod nesneyi çağıran IConcertSearchService bir nesne oluşturduğunuzda Yeniden Deneme düzenini zorlar. Polly çerçevesinde bu davranış bir ilke olarak bilinir. Kod bu ilkeyi yönteminde GetRetryPolicy ayıklar ve GetRetryPolicy yöntem, ön uç web uygulaması web API konser arama hizmetlerini her çağırışında Yeniden Deneme desenini uygular (aşağıdaki koda bakın).

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);
}

Örneğin ilke işleyicisi, API'ye RelecloudApiConcertSearchService yapılan tüm isteklerde Yeniden Deneme desenini uygular. Güvenli bir şekilde yeniden deneyebileceği HTTP isteklerini algılamak ve ardından yapılandırmaya göre isteği yeniden denemek için mantığını kullanır HandleTransientHttpError . Bir hata oluştuğunda API'ye giden trafikteki olası artışları düzeltmek için bazı rastgelelik içerir.

Devre Kesici düzenini kullanma

Yeniden Deneme ve Devre Kesici desenlerinin eşlenmesi, bir uygulamanın geçici hatalarla ilgili olmayan hizmet kesintilerini işleme özelliğini genişletir. Devre Kesici düzeni , bir uygulamanın yanıt vermeyen bir hizmete sürekli olarak erişmeye çalışmasını engeller. Devre Kesici düzeni uygulamayı serbest bırakır ve cpu döngülerinin boşa harcanmasını önler, böylece uygulama son kullanıcılar için performans bütünlüğünü korur.

Örnek: Başvuru uygulaması yöntemine Devre Kesici desenini GetCircuitBreakerPolicy ekler (aşağıdaki koda bakın).

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

Kodda, örneğin ilke işleyicisi API'ye RelecloudApiConcertSearchService yapılan tüm isteklere Devre Kesici düzenini uygular. Güvenli bir şekilde yeniden deneyebileceği HTTP isteklerini algılamak için mantığını kullanır HandleTransientHttpError , ancak belirtilen süre boyunca toplam hata sayısını sınırlar.

Güvenlik

Güvenlik, kasıtlı saldırılara ve değerli verilerinizin ve sistemlerinizin kötüye kullanılmasına karşı güvence sağlar. Daha fazla bilgi için bkz . Güvenlik için tasarım gözden geçirme denetim listesi. Reliable Web App düzeni, kimlik merkezli güvenlik uygulamak için yönetilen kimlikleri kullanır. Özel uç noktalar, web uygulaması güvenlik duvarı ve web uygulamasına kısıtlı erişim güvenli bir giriş sağlar.

En düşük ayrıcalıkları zorunlu kılma

Güvenlik ve verimlilik sağlamak için yalnızca kullanıcılara (kullanıcı kimlikleri) ve Azure hizmetlerine (iş yükü kimlikleri) ihtiyaç duydukları izinleri verin.

Kullanıcı kimliklerine izin atama

Uygulamanızın gereksinimlerini değerlendirerek çakışma olmadan tüm kullanıcı eylemlerini kapsayan bir rol kümesi tanımlayın. Her kullanıcıyı en uygun role eşleyin. Yalnızca görevleri için gerekli olan erişime sahip olduklarından emin olun.

İş yükü kimliklerine izin atama

Yalnızca veritabanlarındaki CRUD eylemleri veya gizli dizilere erişme gibi işlemler için kritik olan izinleri verin. İş yükü kimliği izinleri kalıcıdır, bu nedenle iş yükü kimliklerine tam zamanında veya kısa vadeli izinler sağlayamazsınız.

  • Rol tabanlı erişim denetimini (RBAC) tercih edin. İzinleri atamak için her zaman Azure RBAC ile başlayın. Hassas denetim sunar ve erişimin hem denetlenebilir hem de ayrıntılı olmasını sağlar. Azure RBAC'yi yalnızca hizmetin hedeflenen işlevlerini gerçekleştirmesi için gerekli izinleri vermek için kullanın.

  • Azure hizmet düzeyi erişim denetimleriyle destek. Azure RBAC belirli bir senaryoya uymuyorsa Azure hizmet düzeyi erişim ilkeleriyle destekleyin.

Kullanıcı kimlik doğrulama ve yetkilendirmeyi yapılandırma

Kimlik doğrulaması ve yetkilendirme, web uygulaması güvenliğinin kritik yönleridir. Kimlik doğrulaması , bir kullanıcının kimliğini doğrulama işlemidir. Yetkilendirme , kullanıcının uygulama içinde gerçekleştirmesine izin verilen eylemleri belirtir. Amaç, güvenlik duruşunuzu zayıflatmadan kimlik doğrulaması ve yetkilendirme uygulamaktır. Bu hedefi karşılamak için Azure uygulama platformunun (Azure Uygulaması Hizmeti) ve kimlik sağlayıcısının (Microsoft Entra Id) özelliklerini kullanmanız gerekir.

Kullanıcı kimlik doğrulamasını yapılandırma

Platformunuzun özellikleri aracılığıyla kullanıcı kimlik doğrulamasını etkinleştirerek web uygulamanızın güvenliğini sağlayın. Azure Uygulaması Hizmeti, Microsoft Entra Id gibi kimlik sağlayıcılarıyla kimlik doğrulamasını destekler ve kimlik doğrulama iş yükünü kodunuzdan boşaltılır.

Hizmet kimlik doğrulama ve yetkilendirmeyi yapılandırma

Ortamınızdaki hizmetlerin gerekli işlevleri gerçekleştirme izinlerine sahip olması için hizmet kimlik doğrulamasını ve yetkilendirmesini yapılandırın. Hizmet kimliklerinin oluşturulmasını ve yönetimini otomatikleştirmek ve el ile kimlik bilgisi yönetimini ortadan kaldırmak için Microsoft Entra Id'de Yönetilen Kimlikler'i kullanın. Yönetilen kimlik, web uygulamanızın Azure Key Vault ve veritabanları gibi Azure hizmetlerine güvenli bir şekilde erişmesini sağlar. Ayrıca Azure Uygulaması Hizmetine yapılan dağıtımlar için CI/CD işlem hattı tümleştirmelerini kolaylaştırır. Ancak, karma dağıtımlar veya eski sistemler gibi senaryolarda, geçişi basitleştirmek için şirket içi kimlik doğrulama çözümlerinizi kullanmaya devam edin. Sisteminiz modern bir kimlik yönetimi yaklaşımına hazır olduğunda yönetilen kimliklere geçiş. Daha fazla bilgi için bkz . Yönetilen kimlikleri izleme.

Kod ayarlamak için DefaultAzureCredential kullanma

Bulutta yerel geliştirme ve yönetilen kimlikler için kimlik bilgileri sağlamak için kullanın DefaultAzureCredential . DefaultAzureCredential , OAuth belirteci alımı için bir TokenCredential oluşturur. Çoğu Azure SDK senaryolarını ve Microsoft istemci kitaplıklarını işler. Uygulamanın ortamını doğru kimliği kullanacak şekilde algılar ve gerektiğinde erişim belirteçleri istemektedir. DefaultAzureCredential Azure tarafından dağıtılan uygulamalar için kimlik doğrulamasını kolaylaştırır Daha fazla bilgi için bkz . DefaultAzureCredential.

Örnek: Başvuru uygulaması, web API'si DefaultAzureCredential ile Key Vault arasında yönetilen kimlik kullanımını etkinleştirmek için başlangıç sırasında sınıfını kullanır (aşağıdaki koda bakın).

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());
        });
});

Yönetilen kimlikler oluşturmak için kod olarak altyapı kullanma

Azure altyapısını yönetilen kimlikleri destekleyecek şekilde oluşturmak ve yapılandırmak için Bicep şablonlarını kullanmanız gerekir. Yönetilen kimlikler gizli dizileri veya parolaları kullanmaz, bu nedenle bütünlüğü sağlamak için Key Vault'a veya gizli dizi döndürme stratejisine ihtiyacınız yoktur. bağlantı dizesi Uygulama Yapılandırması Hizmeti'nde depolayabilirsiniz.

Örnek: Başvuru uygulaması, (1) yönetilen kimliği oluşturmak, (2) kimliği web uygulamasıyla ilişkilendirmek ve (3) kimliğe SQL veritabanına erişim izni vermek için Bicep şablonlarını kullanır. Authentication bağlantı dizesi bağımsız değişkeni, Microsoft istemci kitaplığına yönetilen bir kimlikle bağlanmasını söyler (aşağıdaki koda bakın).

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

Daha fazla bilgi için bkz. .NET App Service'ten SQL veritabanına Bağlan.

Gizli dizileri yönetmek için merkezi gizli dizi deposu kullanma

Uygulamanızı buluta taşıdığınızda, bu tür gizli dizileri güvenli bir şekilde depolamak için Azure Key Vault'ı kullanın. Bu merkezi depo, yönetilen kimlikleri desteklemeyen hizmetler için güvenli depolama, anahtar döndürme, erişim denetimi ve izleme sunar. Uygulama yapılandırmaları için Azure Uygulaması Yapılandırması önerilir.

Örnek: Başvuru uygulaması Aşağıdaki gizli dizileri Key Vault'ta depolar: (1) PostgreSQL veritabanı kullanıcı adı ve parolası, (2) Redis Cache parolası ve (3) Microsoft Authentication Library (MSAL) uygulamasıyla ilişkili Microsoft Entra Id için istemci gizli dizisi.

Key Vault'un HTTP isteği akışına yerleştirmeyin

Her HTTP isteği yerine uygulama başlangıcında Key Vault'tan gizli dizileri yükleyin. Key Vault, dağıtım sırasında hassas verileri güvenli bir şekilde depolamak ve almak için tasarlanmıştır. HTTP isteklerinde yüksek frekanslı erişim Key Vault'un aktarım hızı özelliklerini aşarak istek sınırlamalarına ve HTTP durum kodu 429 hatalarına yol açabilir. Daha fazla bilgi için bkz . Key Vault işlem sınırları.

Key Vault'ta gizli dizilere erişmek için tek bir yöntem kullanma

Key Vault'ta gizli dizilere erişmek için bir web uygulaması yapılandırırken iki birincil seçeneğiniz vardır:

  • App Service Uygulama ayarı: Gizli diziyi doğrudan bir ortam değişkeni olarak eklemek için App Service'te bir uygulama ayarı kullanın.

  • Doğrudan gizli dizi başvurusu: Uygulama kodunuz içindeki gizli diziye doğrudan başvurun. Uygulamanızın Key Vault ile iletişim kurabilmesi için uygulamanızın özellikler dosyasına Java uygulamaları gibi application.properties belirli bir başvuru ekleyin.

Basitlik ve gereksiz karmaşıklığı önlemek için bu yöntemlerden birini seçmek ve bu yönteme bağlı kalmak önemlidir.

Geçici erişim yöntemlerini tercih edin

Yetkisiz erişim ve ihlallere karşı koruma sağlamak için geçici izinleri kullanın. Geçici erişim için paylaşılan erişim imzalarını (SAS) kullanın. Geçici erişim verirken güvenliği en üst düzeye çıkarmak için Kullanıcı Temsilcisi SAS'sini kullanın. Bu, Microsoft Entra kimlik bilgilerini kullanan ve depolama hesabı anahtarı gerektirmeyen tek SAS'tir.

Özel uç noktaları kullanma

Desteklenen tüm Azure hizmetleri için tüm üretim ortamlarında özel uç noktaları kullanın. Özel uç noktalar, Bir Azure sanal ağındaki kaynaklar ile Azure hizmetleri arasında özel bağlantılar sağlar. Varsayılan olarak, çoğu Azure hizmetiyle iletişim genel İnternet üzerinden geçer. Özel uç noktalar kod değişikliği, uygulama yapılandırmaları veya bağlantı dizesi gerektirmez. Daha fazla bilgi için bkz. Özel uç nokta oluşturma ve Uç nokta güvenliği için en iyi yöntemler.

Örnek: Azure Uygulaması Yapılandırması, Azure SQL Veritabanı, Redis için Azure Cache, Azure Depolama, Azure Uygulaması Hizmeti ve Key Vault özel uç nokta kullanır.

Web uygulaması güvenlik duvarını kullanma ve gelen İnternet trafiğini kısıtlama

Web uygulamasına gelen tüm İnternet trafiği, yaygın web açıklarına karşı koruma sağlamak için bir web uygulaması güvenlik duvarından geçmelidir. Varsa, tüm gelen İnternet trafiğini genel yük dengeleyiciden geçmeye zorlar ve varsa web uygulaması güvenlik duvarı.

Örnek: Başvuru uygulaması, Front Door ve Azure Web Uygulaması Güvenlik Duvarı aracılığıyla tüm gelen İnternet trafiğini zorlar. Üretimde özgün HTTP ana bilgisayar adını koruyun.

Veritabanı güvenliğini yapılandırma

veritabanına Yönetici istrator düzeyinde erişim ayrıcalıklı işlemler gerçekleştirmek için izinler verir. Ayrıcalıklı işlemler arasında veritabanları oluşturma ve silme, tablo şemalarını değiştirme veya kullanıcı izinlerini değiştirme sayılabilir. Geliştiricilerin veritabanını korumak veya sorunları gidermek için genellikle yönetici düzeyinde erişime ihtiyacı vardır.

  • Kalıcı yükseltilmiş izinlerden kaçının. Ayrıcalıklı işlemleri gerçekleştirmek için geliştiricilere yalnızca tam zamanında erişim vermelisiniz. Tam zamanında erişim sayesinde kullanıcılar ayrıcalıklı görevleri gerçekleştirmek için geçici izinler alır

  • Uygulamaya yükseltilmiş izinler vermeyin. Uygulama kimliğine yönetici düzeyinde erişim vermemelisiniz. Uygulamaya veritabanına en az ayrıcalıklı erişimi yapılandırmanız gerekir. Hataların patlama yarıçapını ve güvenlik ihlallerini sınırlar.

Maliyet iyileştirme

Maliyet iyileştirmesi, gereksiz giderleri ve yönetim ek yükünü azaltmanın yollarını aramakla ilgilidir. Daha fazla bilgi için Bkz . Maliyet İyileştirme için Tasarım gözden geçirmesi denetim listesi. Reliable Web App deseni, daha uygun maliyetli bir web uygulaması için hak belirleme teknikleri, otomatik ölçeklendirme ve verimli kaynak kullanımı uygular.

Her ortam için kaynakları haklarına ayırma

Azure hizmetlerinin farklı performans katmanlarını anlayın ve yalnızca her ortamın gereksinimleri için uygun SKU'yu kullanın. Üretim ortamlarında, üretim için gereken hizmet düzeyi sözleşmelerini (SLA), özellikleri ve ölçeği karşılayan SKU'lar gerekir. Üretim dışı ortamlar genellikle aynı özelliklere ihtiyaç duymaz. Ek tasarruf için Azure Geliştirme/Test fiyatlandırma seçenekleri, Azure Rezervasyonları ve işlem için Azure tasarruf planlarını göz önünde bulundurun.

Örnek: Başvuru uygulaması, kaynak dağıtım yapılandırmalarını tetikleme amacıyla Bicep parametrelerini kullanır. Bu parametrelerden biri, dağıtılacak kaynak katmanlarını (SKU) gösterir. Web uygulaması üretim ortamları için daha yüksek performanslı ve pahalı SKU'ları ve üretim dışı ortam için daha ucuz SKU'ları kullanır (aşağıdaki koda bakın).

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

Otomatik ölçeklendirmeyi kullanma

Otomatik ölçeklendirme, üretim ortamları için yatay ölçeklendirmeyi otomatikleştirir. Performans ölçümlerine göre otomatik ölçeklendirme. Uygulamanızın ölçeklendirme ölçütlerini anlamıyorsanız CPU kullanım performansı tetikleyicileri iyi bir başlangıç noktasıdır. Ölçeklendirme tetikleyicilerini (CPU, RAM, ağ ve disk) web uygulamanızın davranışına karşılık gelen şekilde yapılandırmanız ve uyarlamanız gerekir. Talepteki sık değişiklikleri karşılamak için dikey ölçeklendirme yapmayın. Daha az maliyetlidir. Daha fazla bilgi için bkz. Azure Uygulaması Hizmetinde Ölçeklendirme ve Microsoft Azure'da Otomatik Ölçeklendirme.

Örnek: Başvuru uygulaması, Bicep şablonunda aşağıdaki yapılandırmayı kullanır. Azure Uygulaması Hizmeti için bir otomatik ölçeklendirme kuralı oluşturur. Kural, 10 örneğe kadar ölçeklendirilir ve varsayılan olarak bir örneğe göre ölçeklendirilir. Ölçeği daraltma ve genişletme için tetikleyici olarak CPU kullanımını kullanır. Web uygulaması barındırma platformu %85 CPU kullanımıyla ölçeklendirilir ve %60 oranında ölçeklendirilir. %100'e yakın bir yüzde yerine %85 ölçeği genişletme ayarı, yapışkan oturumların neden olduğu birikmiş kullanıcı trafiğine karşı koruma sağlamak için bir arabellek sağlar. Ayrıca maksimum CPU kullanımını önlemek için erken ölçeklendirilerek yüksek trafik artışlarına karşı koruma sağlar. Bu otomatik ölçeklendirme kuralları evrensel değildir (aşağıdaki koda bakın).

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: [ 
          ... 
        ] 
      } 
    ] 
  } 
}

Kaynakları verimli bir şekilde kullanma

  • Paylaşılan hizmetleri kullanın. Belirli kaynakların merkezileştirilmesi ve paylaşılması, maliyet iyileştirmesi ve daha düşük yönetim yükü sağlar. Paylaşılan ağ kaynaklarını hub sanal ağına yerleştirin.

    Örnek: Başvuru uygulaması Azure Güvenlik Duvarı, Azure Bastion ve Key Vault'ı merkez sanal ağına yerleştirir.

  • Kullanılmayan ortamları silin. Maliyeti iyileştirmek için üretim dışı ortamları saatler veya tatillerde silin. Azure kaynaklarını ve ortamların tamamını silmek için kod olarak altyapıyı kullanabilirsiniz. Bicep şablonundan silmek istediğiniz kaynağın bildirimini kaldırın. Değişikliklerin etkili olmadan önce önizlemesini görüntülemek için durum işlemini kullanın. Daha sonra ihtiyacınız olan verileri yedekleyin. Sildiğiniz kaynak üzerindeki bağımlılıkları anlayın. Bağımlılıklar varsa, bu kaynakları da güncelleştirmeniz veya kaldırmanız gerekebilir. Daha fazla bilgi için bkz . Bicep dağıtımı durum işlemi.

  • Colocate işlevselliği. Yedek kapasite olduğunda, uygulama kaynaklarını ve işlevselliğini tek bir Azure kaynağında birlikte kullanın. Örneğin, birden çok web uygulaması tek bir sunucu (App Service Planı) kullanabilir veya tek bir önbellek birden çok veri türünü destekleyebilir.

    Örnek: Başvuru uygulaması, hem ön uç (sepet hem de MSAL belirteçlerini depolama) ve arka uç (Yaklaşan Konserler verilerini tutma) web uygulamalarında oturum yönetimi için tek bir Redis için Azure Cache örneği kullanır. En küçük Redis SKU'yu tercih eder ve maliyetleri denetlemek için birden çok veri türü kullanarak verimli bir şekilde kullanılan, gerekenden daha fazla kapasite sunar.

Operasyonel mükemmellik

Operasyonel mükemmellik, bir uygulamayı dağıtan ve üretimde çalışır durumda tutan operasyon süreçlerini kapsar. Daha fazla bilgi için operasyonel mükemmellik için tasarım gözden geçirme denetim listesine bakın. Reliable Web App düzeni, altyapı dağıtımları için kod olarak altyapıyı uygular ve gözlemlenebilirliği izler.

Dağıtımı otomatikleştirme

Kaynak denetiminden üretime değişiklikleri dağıtmak için CI/CD işlem hattı kullanın. Azure DevOps kullanıyorsanız Azure Pipelines kullanmanız gerekir. GitHub kullanıyorsanız GitHub eylemlerini kullanın. Azure desteği ARM şablonu (JSON), Bicep ve Terraform'un her Azure kaynağı için şablonları vardır. Daha fazla bilgi için bkz.Bicep, Azure Resource Manager ve Terraform şablonları ve Yinelenebilir altyapı.

Örnek: Başvuru uygulamasında Azure kaynakları oluşturmak, yapılandırmayı ayarlamak ve gerekli kaynakları dağıtmak için Azure Dev CLI ve kod olarak altyapı (Bicep şablonları) kullanılır.

İzlemeyi yapılandırma

Web uygulamanızı izlemek için uygulama kodunuz, altyapınız (çalışma zamanı) ve platformdan (Azure kaynakları) ölçümleri ve günlükleri toplayın ve analiz edin. Mimarinizdeki her Azure kaynağı için bir tanılama ayarı ekleyin. Her Azure hizmetinin yakalayabileceğiniz farklı bir günlük ve ölçüm kümesi vardır. Daha fazla bilgi için bkz . Platformu izleme ve App Service'i izleme.

Temel ölçümleri izleme

İstek aktarım hızı, ortalama istek süresi, hatalar ve bağımlılık izleme gibi temel ölçümleri izlemek için Azure Uygulaması Analizler kullanın. Telemetri koleksiyonunu etkinleştirmek için NuGet paketinden Microsoft.ApplicationInsights.AspNetCore kullanınAddApplicationInsightsTelemetry. Daha fazla bilgi için bkz. .NET'te Uygulama Analizler telemetrisini ve Bağımlılık eklemeyi etkinleştirme.

Örnek: Başvuru uygulaması, Uygulama Analizler temel ölçümlerini yapılandırmak için kodu kullanır (aşağıdaki koda bakın).

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

Gerektiğinde özel telemetri oluşturma

Web uygulaması kullanıcılarınızı daha iyi anlamak için özel telemetri toplamak için Uygulama Analizler kullanın. Sınıfının bir örneğini TelemetryClient oluşturun ve doğru ölçümü oluşturmak için yöntemlerini kullanın TelemetryClient . Sorguyu Azure Panosu pencere öğesine dönüştürün.

Örnek: Başvuru uygulaması, operasyon ekibinin web uygulamasının işlemleri başarıyla tamamladığını belirlemesine yardımcı olan ölçümler ekler. İstek sayısını veya CPU kullanımını ölçerek değil müşterilerin sipariş verip veremeyeceğini izleyerek web uygulamasının çevrimiçi olduğunu doğrular. Başvuru uygulaması, sepet etkinliğiyle ilgili olaylar üzerinde telemetri toplamak için bağımlılık ekleme ve TrackEvent yöntemi aracılığıyla kullanırTelemetryClient. Telemetri, kullanıcıların ekleyip kaldırıp satın aldığı biletleri izler (aşağıdaki koda bakın).

  • AddToCart kullanıcıların sepete kaç kez belirli bir bilet (ConcertID) ekleyebileceği sayar.
  • RemoveFromCart , kullanıcıların sepetten kaldırılma biletlerini kaydeder.
  • CheckoutCart bir kullanıcı her bilet satın alışında bir olayı kaydeder.

this.telemetryClient.TrackEvent sepete eklenen biletleri sayar. Olay adını (AddToCart) sağlar ve ve count içeren bir sözlük concertId belirtir (aşağıdaki koda bakın).

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

Daha fazla bilgi için bkz.

Günlük tabanlı ölçümleri toplama

Temel uygulama durumu ve ölçümleri hakkında daha fazla görünürlük elde etmek için günlük tabanlı ölçümleri izleyin. Verileri bulmak ve düzenlemek için Uygulama Analizler'nde Kusto Sorgu Dili (KQL) sorgularını kullanabilirsiniz. Daha fazla bilgi için bkz. Azure Uygulaması Analizler günlük tabanlı ölçümler ve Uygulama Analizler günlük tabanlı ve önceden toplanmış ölçümler.

Platform tanılamasını etkinleştirme

Azure'daki tanılama ayarı, toplamak istediğiniz platform günlüklerini ve ölçümlerini ve bunların nerede depoleneceğini belirtmenize olanak tanır. Platform günlükleri, tanılama ve denetim bilgileri sağlayan yerleşik günlüklerdir. Çoğu Azure hizmeti için platform tanılamasını etkinleştirebilirsiniz, ancak her hizmet kendi günlük kategorilerini tanımlar. Farklı Azure hizmetlerinin seçebileceğiniz günlük kategorileri vardır.

  • Desteklenen tüm hizmetler için tanılamayı etkinleştirin. Azure hizmetleri platform günlüklerini otomatik olarak oluşturur, ancak hizmet bunları otomatik olarak depolamaz. Her hizmet için tanılama ayarını etkinleştirmeniz ve tanılamayı destekleyen her Azure hizmeti için etkinleştirmeniz gerekir.

  • Tanılamaları uygulama günlükleriyle aynı hedefe gönderin. Tanılamayı etkinleştirdiğinizde, toplamak istediğiniz günlükleri ve bunları nereye gönderebileceğinizi seçersiniz. İki veri kümesini ilişkilendirmek için platform günlüklerini uygulama günlükleriyle aynı hedefe göndermeniz gerekir.

Performans verimliliği

Performans verimliliği, kullanıcılar tarafından anlamlı bir şekilde yerleştirilen talepleri karşılamak amacıyla iş yükünüzü ölçeklendirme becerisidir. Daha fazla bilgi için Bkz . Performans Verimliliği için Tasarım gözden geçirmesi denetim listesi. Reliable Web App deseni, yüksek oranda istenen verilerin gecikme süresini en aza indirmek için Cache-Aside desenini kullanır.

Edilgen Önbellek düzenini kullanma

Edilgen Önbellek düzeni, bellek içi veri yönetimini geliştiren bir önbelleğe alma stratejisidir. Desen, uygulamaya veri isteklerini işleme ve önbellek ile veritabanı gibi kalıcı bir depolama alanı arasında tutarlılık sağlama sorumluluğunu atar. Web uygulaması bir veri isteği aldığında önce önbelleği arar. Veriler eksikse, veritabanından alır, isteğe yanıt verir ve önbelleği uygun şekilde güncelleştirir. Bu yaklaşım yanıt sürelerini kısaltır ve aktarım hızını artırır ve daha fazla ölçeklendirme gereksinimini azaltır. Ayrıca birincil veri deposundaki yükü azaltarak ve kesinti risklerini en aza indirerek hizmet kullanılabilirliğini artırır.

Örnek: Başvuru uygulaması, bilet satışları için kritik önem taşıyan yaklaşan konserlere ilişkin bilgiler gibi kritik verileri önbelleğe alarak uygulama verimliliğini artırır. Bellek içi öğe depolaması için ASP.NET Core'un dağıtılmış bellek önbelleğini kullanır. Uygulama, belirli bir bağlantı dizesi bulduğunda otomatik olarak Redis için Azure Cache kullanır. Ayrıca kurulumu basitleştirmek ve maliyetleri ve karmaşıklığı azaltmak için Redis olmadan yerel geliştirme ortamlarını destekler. yöntemi (AddAzureCacheForRedis), uygulamayı Redis için Azure Cache kullanacak şekilde yapılandırıyor (aşağıdaki koda bakın).

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

Daha fazla bilgi için bkz . ASP.NET Core ve AddDistributedMemoryCache yönteminde dağıtılmış önbelleğe alma.

Yüksek ihtiyaç duyulan verileri önbelleğe alma

En sık erişilen veriler için önbelleğe alma önceliğini belirleme. Kullanıcı katılımını ve sistem performansını yönlendiren önemli veri noktalarını belirleyin. Edilgen Önbellek düzeninin verimliliğini iyileştirmek ve gecikme süresini ve veritabanı yükünü önemli ölçüde azaltmak için bu alanlara özel önbelleğe alma stratejileri uygulayın. Veritabanının CPU'sunu, belleğini ve depolama alanını izlemek için Azure İzleyici'yi kullanın. Bu ölçümler, daha küçük bir veritabanı SKU'su kullanıp kullanamayacağınızı belirlemenize yardımcı olur.

Örnek: Başvuru uygulaması, Yaklaşan Konserleri destekleyen verileri önbelleğe alır. Yaklaşan Konserler sayfası, SQL Veritabanı için en çok sorgu oluşturur ve her ziyaret için tutarlı bir çıkış oluşturur. Edilgen Önbellek düzeni, veritabanındaki yükü azaltmak için bu sayfaya yönelik ilk istekten sonra verileri önbelleğe alır. Aşağıdaki kod, GetUpcomingConcertsAsync SQL Veritabanı redis önbelleğine veri çekmek için yöntemini kullanır. yöntemi önbelleği en son konserlerle doldurur. yöntemi zamana göre filtre uygular, verileri sıralar ve sonuçları görüntülemek için verileri denetleyiciye döndürür (aşağıdaki koda bakın).

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>();
}

Önbellek verilerini güncel tutma

En son veritabanı değişiklikleriyle eşitlemek için düzenli önbellek güncelleştirmeleri zamanlayın. Veri dalgalanmasına ve kullanıcı gereksinimlerine göre en uygun yenileme hızını belirleyin. Bu uygulama, uygulamanın hem hızlı erişim hem de geçerli bilgileri sağlamak için Cache-Aside desenini kullanmasını sağlar.

Örnek: Başvuru uygulaması verileri yalnızca bir saat boyunca önbelleğe alır. Veriler değiştiğinde önbellek anahtarını temizleme işlemi vardır. CreateConcertAsync yöntemi önbellek anahtarını temizler (aşağıdaki koda bakın).

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

Veri tutarlılığını sağlama

Herhangi bir veritabanı yazma işleminden hemen sonra önbelleği güncelleştirmek için mekanizmalar uygulayın. Önbellek tutarlılığını sağlamak için olay temelli güncelleştirmeleri veya ayrılmış veri yönetimi sınıflarını kullanın. Önbelleği veritabanı değişiklikleriyle tutarlı bir şekilde eşitlemek, Cache-Aside deseninin merkezinde yer alır.

Örnek: Başvuru uygulaması, önbellekteki verileri tutarlı tutmak için yöntemini kullanır UpdateConcertAsync (aşağıdaki koda bakın).

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

Veritabanı performansını test edin

Veritabanı performansı, bir uygulamanın performansını ve ölçeklenebilirliğini etkileyebilir. İyileştirilmiş olduğundan emin olmak için veritabanınızın performansını test etmek önemlidir. Dikkat edilmesi gereken bazı önemli noktalar arasında doğru bulut bölgesini seçme, bağlantı havuzu oluşturma, edilgen önbellek düzeni ve sorguları iyileştirme sayılabilir.

  • Ağ atlamalarını test edin. Bir uygulamayı buluta taşımak, veritabanınızda ek ağ atlamaları ve gecikme süresine neden olabilir. Yeni bulut ortamının tanıttığını ek atlamalar için test etmeniz gerekir.

  • Bir performans taban çizgisi oluşturun. Buluttaki uygulama performansını karşılaştırmak için ilk temel olarak şirket içi performans ölçümlerini kullanmanız gerekir.

Sonraki adımlar

GitHub deposundaki yönergeleri izleyerek başvuru uygulamasını dağıtın. .NET uygulamaları, web uygulamaları, bulut en iyi yöntemleri ve geçiş hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları kullanın.

.NET Framework uygulamalarını yükseltme

Başvuru uygulaması, Windows çalıştıran bir App Service'e dağıtılır, ancak Linux üzerinde çalıştırılabilir. App Service Windows platformu, .NET Framework web uygulamalarını daha yeni çerçeve sürümlerine yükseltmeden Azure'a taşımanızı sağlar. Linux App Service planları veya .NET'in en son sürümlerine eklenen yeni özellikler ve performans geliştirmeleri hakkında bilgi için aşağıdaki kılavuza bakın.

  • .NET Framework'ten .NET'e taşımaya genel bakış. Belirli bir .NET uygulaması türüne göre rehberlik alın.
  • .NET Yükseltme Yardımcısı'na genel bakış. .NET Framework projelerini yükseltmeyle ilişkili görevlerin çoğunu otomatikleştirmenize yardımcı olabilecek bir konsol aracı hakkında bilgi edinin.
  • Visual Studio'da ASP.NET'den ASP.NET Core'a geçiş. Web uygulamalarının artımlı geçişlerinde size yardımcı olabilecek bir Visual Studio uzantısı hakkında bilgi edinin.

Azure'da web uygulamalarına giriş

Azure'da .NET web uygulamalarına uygulamalı giriş için, temel bir .NET web uygulaması dağıtmak için bu kılavuza bakın.

En iyi bulut uygulamaları

Azure benimseme ve mimari rehberliği için bkz:

  • Bulut Benimseme Çerçevesi. Kuruluşunuzun Azure'da çözüm oluşturmak için bir strateji hazırlamasına ve yürütmesine yardımcı olabilir.
  • İyi Tasarlanmış Çerçeve. bir iş yükünün kalitesini artırmak için kullanılabilecek bir kılavuz ilke kümesi.

Reliable Web App deseninden daha yüksek bir SLO gerektiren uygulamalar için bkz . görev açısından kritik iş yükleri.

Geçiş kılavuzu

Aşağıdaki araçlar ve kaynaklar, şirket içi kaynakları Azure'a geçirmenize yardımcı olabilir.